snapshot of https://github.com/tldraw/tldraw.git (main, 2026-09-23; blobs > 131072B omitted)
Some checks failed
Deploy analytics worker / Deploy analytics worker to ${{ (github.ref == 'refs/heads/production' && 'production') || (github.ref == 'refs/heads/main' && 'staging') || 'preview' }} (push) Failing after 1s
i18n upload strings / Upload latest strings (push) Failing after 1s
Deploy bemo / Deploy bemo to ${{ (github.ref == 'refs/heads/bemo-production' && 'production') || (github.ref == 'refs/heads/main' && 'staging') || 'preview' }} (push) Failing after 1s
Deploy grafana resources / ${{ github.event_name == 'push' && 'Deploy grafana resources' || 'Validate grafana resources (dry run)' }} (push) Failing after 0s
End to end tests (dotcom) / Check for relevant changes (push) Failing after 0s
End to end tests (examples) / Check for relevant changes (push) Failing after 0s
End to end tests (mermaid readability) / Check for relevant changes (push) Failing after 1s
End to end tests (perf) / Check for relevant changes (push) Failing after 0s
Publish editor extensions / Publish editor extensions (push) Failing after 1s
Publish SDK packages / Remove the publish-packages label (push) Has been skipped
Checks / Tests & checks (push) Has been cancelled
Checks / Build all projects (push) Has been cancelled
Deploy templates / Deploy templates (push) Has been cancelled
End to end tests (dotcom) / End to end tests (dotcom) (push) Has been cancelled
End to end tests (mermaid readability) / End to end tests (mermaid readability) (push) Has been cancelled
End to end tests (perf) / End to end tests (perf) (push) Has been cancelled
Deploy .com / Deploy dotcom to ${{ (github.ref == 'refs/heads/production' && 'production') || (github.ref == 'refs/heads/main' && 'staging') || 'preview' }} (push) Has been cancelled
End to end tests (examples) / End to end tests (examples) (push) Has been cancelled
Publish SDK packages / Publish SDK packages (push) Has been cancelled
Publish SDK packages / Tell user released version (push) Has been cancelled
Publish SDK packages / Publishes code templates to separate repositories (push) Has been cancelled
Publish SDK packages / Deploys the template demos with the new SDK version (push) Has been cancelled
Some checks failed
Deploy analytics worker / Deploy analytics worker to ${{ (github.ref == 'refs/heads/production' && 'production') || (github.ref == 'refs/heads/main' && 'staging') || 'preview' }} (push) Failing after 1s
i18n upload strings / Upload latest strings (push) Failing after 1s
Deploy bemo / Deploy bemo to ${{ (github.ref == 'refs/heads/bemo-production' && 'production') || (github.ref == 'refs/heads/main' && 'staging') || 'preview' }} (push) Failing after 1s
Deploy grafana resources / ${{ github.event_name == 'push' && 'Deploy grafana resources' || 'Validate grafana resources (dry run)' }} (push) Failing after 0s
End to end tests (dotcom) / Check for relevant changes (push) Failing after 0s
End to end tests (examples) / Check for relevant changes (push) Failing after 0s
End to end tests (mermaid readability) / Check for relevant changes (push) Failing after 1s
End to end tests (perf) / Check for relevant changes (push) Failing after 0s
Publish editor extensions / Publish editor extensions (push) Failing after 1s
Publish SDK packages / Remove the publish-packages label (push) Has been skipped
Checks / Tests & checks (push) Has been cancelled
Checks / Build all projects (push) Has been cancelled
Deploy templates / Deploy templates (push) Has been cancelled
End to end tests (dotcom) / End to end tests (dotcom) (push) Has been cancelled
End to end tests (mermaid readability) / End to end tests (mermaid readability) (push) Has been cancelled
End to end tests (perf) / End to end tests (perf) (push) Has been cancelled
Deploy .com / Deploy dotcom to ${{ (github.ref == 'refs/heads/production' && 'production') || (github.ref == 'refs/heads/main' && 'staging') || 'preview' }} (push) Has been cancelled
End to end tests (examples) / End to end tests (examples) (push) Has been cancelled
Publish SDK packages / Publish SDK packages (push) Has been cancelled
Publish SDK packages / Tell user released version (push) Has been cancelled
Publish SDK packages / Publishes code templates to separate repositories (push) Has been cancelled
Publish SDK packages / Deploys the template demos with the new SDK version (push) Has been cancelled
This commit is contained in:
99
templates/agent/client/App.tsx
Normal file
99
templates/agent/client/App.tsx
Normal file
@@ -0,0 +1,99 @@
|
||||
import { useCallback, useMemo, useState } from 'react'
|
||||
import {
|
||||
DefaultSizeStyle,
|
||||
ErrorBoundary,
|
||||
TLComponents,
|
||||
Tldraw,
|
||||
TldrawUiToastsProvider,
|
||||
TLUiOverrides,
|
||||
} from 'tldraw'
|
||||
import { TldrawAgentApp } from './agent/TldrawAgentApp'
|
||||
import {
|
||||
TldrawAgentAppContextProvider,
|
||||
TldrawAgentAppProvider,
|
||||
} from './agent/TldrawAgentAppProvider'
|
||||
import { ChatPanel } from './components/ChatPanel'
|
||||
import { ChatPanelFallback } from './components/ChatPanelFallback'
|
||||
import { CustomHelperButtons } from './components/CustomHelperButtons'
|
||||
import { AgentHighlightOverlayUtil } from './overlays/AgentHighlightOverlayUtil'
|
||||
import { TargetAreaTool } from './tools/TargetAreaTool'
|
||||
import { TargetShapeTool } from './tools/TargetShapeTool'
|
||||
|
||||
// Customize tldraw's styles to play to the agent's strengths
|
||||
DefaultSizeStyle.setDefaultValue('s')
|
||||
|
||||
// Custom tools for picking context items
|
||||
const tools = [TargetShapeTool, TargetAreaTool]
|
||||
const overlayUtils = [AgentHighlightOverlayUtil]
|
||||
const overrides: TLUiOverrides = {
|
||||
tools: (editor, tools) => {
|
||||
return {
|
||||
...tools,
|
||||
'target-area': {
|
||||
id: 'target-area',
|
||||
label: 'Pick Area',
|
||||
kbd: 'c',
|
||||
icon: 'tool-frame',
|
||||
onSelect() {
|
||||
editor.setCurrentTool('target-area')
|
||||
},
|
||||
},
|
||||
'target-shape': {
|
||||
id: 'target-shape',
|
||||
label: 'Pick Shape',
|
||||
kbd: 's',
|
||||
icon: 'tool-frame',
|
||||
onSelect() {
|
||||
editor.setCurrentTool('target-shape')
|
||||
},
|
||||
},
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
function App() {
|
||||
const [app, setApp] = useState<TldrawAgentApp | null>(null)
|
||||
|
||||
const handleUnmount = useCallback(() => {
|
||||
setApp(null)
|
||||
}, [])
|
||||
|
||||
// Custom components that need the agent app's React context
|
||||
const components: TLComponents = useMemo(() => {
|
||||
return {
|
||||
HelperButtons: () =>
|
||||
app && (
|
||||
<TldrawAgentAppContextProvider app={app}>
|
||||
<CustomHelperButtons />
|
||||
</TldrawAgentAppContextProvider>
|
||||
),
|
||||
}
|
||||
}, [app])
|
||||
|
||||
return (
|
||||
<TldrawUiToastsProvider>
|
||||
<div className="tldraw-agent-container">
|
||||
<div className="tldraw-canvas">
|
||||
<Tldraw
|
||||
persistenceKey="tldraw-agent-demo"
|
||||
tools={tools}
|
||||
overlayUtils={overlayUtils}
|
||||
overrides={overrides}
|
||||
components={components}
|
||||
>
|
||||
<TldrawAgentAppProvider onMount={setApp} onUnmount={handleUnmount} />
|
||||
</Tldraw>
|
||||
</div>
|
||||
<ErrorBoundary fallback={ChatPanelFallback}>
|
||||
{app && (
|
||||
<TldrawAgentAppContextProvider app={app}>
|
||||
<ChatPanel />
|
||||
</TldrawAgentAppContextProvider>
|
||||
)}
|
||||
</ErrorBoundary>
|
||||
</div>
|
||||
</TldrawUiToastsProvider>
|
||||
)
|
||||
}
|
||||
|
||||
export default App
|
||||
Reference in New Issue
Block a user