@schlessera/brain-ui-react 0.34.1 → 0.36.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +89 -4
- package/dist/components/activity/activity-page.d.ts +17 -5
- package/dist/components/activity/activity-page.d.ts.map +1 -1
- package/dist/components/activity/activity-page.js +144 -50
- package/dist/components/activity/activity-page.js.map +1 -1
- package/dist/components/activity/activity-run-detail.d.ts +16 -1
- package/dist/components/activity/activity-run-detail.d.ts.map +1 -1
- package/dist/components/activity/activity-run-detail.js +47 -4
- package/dist/components/activity/activity-run-detail.js.map +1 -1
- package/dist/components/activity/activity-run-list.d.ts +7 -1
- package/dist/components/activity/activity-run-list.d.ts.map +1 -1
- package/dist/components/activity/activity-run-list.js +16 -8
- package/dist/components/activity/activity-run-list.js.map +1 -1
- package/dist/components/activity/activity-views.d.ts +63 -0
- package/dist/components/activity/activity-views.d.ts.map +1 -0
- package/dist/components/activity/activity-views.js +52 -0
- package/dist/components/activity/activity-views.js.map +1 -0
- package/dist/components/activity/approval-card.d.ts +11 -0
- package/dist/components/activity/approval-card.d.ts.map +1 -0
- package/dist/components/activity/approval-card.js +46 -0
- package/dist/components/activity/approval-card.js.map +1 -0
- package/dist/components/activity/digest-card.d.ts +3 -0
- package/dist/components/activity/digest-card.d.ts.map +1 -1
- package/dist/components/activity/digest-card.js +20 -16
- package/dist/components/activity/digest-card.js.map +1 -1
- package/dist/components/activity/digest-summary.d.ts +19 -0
- package/dist/components/activity/digest-summary.d.ts.map +1 -0
- package/dist/components/activity/digest-summary.js +20 -0
- package/dist/components/activity/digest-summary.js.map +1 -0
- package/dist/components/activity/push-switch.d.ts +25 -0
- package/dist/components/activity/push-switch.d.ts.map +1 -0
- package/dist/components/activity/push-switch.js +14 -0
- package/dist/components/activity/push-switch.js.map +1 -0
- package/dist/components/activity/push-toggle.d.ts +7 -0
- package/dist/components/activity/push-toggle.d.ts.map +1 -1
- package/dist/components/activity/push-toggle.js +72 -47
- package/dist/components/activity/push-toggle.js.map +1 -1
- package/dist/components/activity/span-bits.d.ts.map +1 -1
- package/dist/components/activity/span-bits.js +9 -7
- package/dist/components/activity/span-bits.js.map +1 -1
- package/dist/components/chat/ask-user-card.d.ts +76 -3
- package/dist/components/chat/ask-user-card.d.ts.map +1 -1
- package/dist/components/chat/ask-user-card.js +208 -149
- package/dist/components/chat/ask-user-card.js.map +1 -1
- package/dist/components/chat/ask-user-typed.d.ts +42 -0
- package/dist/components/chat/ask-user-typed.d.ts.map +1 -0
- package/dist/components/chat/ask-user-typed.js +60 -0
- package/dist/components/chat/ask-user-typed.js.map +1 -0
- package/dist/components/chat/brain-markdown-links.d.ts +2 -1
- package/dist/components/chat/brain-markdown-links.d.ts.map +1 -1
- package/dist/components/chat/brain-markdown-links.js +3 -4
- package/dist/components/chat/brain-markdown-links.js.map +1 -1
- package/dist/components/chat/brain-markdown.d.ts.map +1 -1
- package/dist/components/chat/brain-markdown.js +4 -2
- package/dist/components/chat/brain-markdown.js.map +1 -1
- package/dist/components/chat/chat-page.d.ts.map +1 -1
- package/dist/components/chat/chat-page.js +24 -9
- package/dist/components/chat/chat-page.js.map +1 -1
- package/dist/components/chat/composer-view.d.ts +75 -0
- package/dist/components/chat/composer-view.d.ts.map +1 -0
- package/dist/components/chat/composer-view.js +31 -0
- package/dist/components/chat/composer-view.js.map +1 -0
- package/dist/components/chat/composer.d.ts +4 -0
- package/dist/components/chat/composer.d.ts.map +1 -1
- package/dist/components/chat/composer.js +76 -59
- package/dist/components/chat/composer.js.map +1 -1
- package/dist/components/chat/markdown-content.d.ts +16 -1
- package/dist/components/chat/markdown-content.d.ts.map +1 -1
- package/dist/components/chat/markdown-content.js +47 -3
- package/dist/components/chat/markdown-content.js.map +1 -1
- package/dist/components/chat/mermaid-block.d.ts +4 -0
- package/dist/components/chat/mermaid-block.d.ts.map +1 -1
- package/dist/components/chat/mermaid-block.js +13 -5
- package/dist/components/chat/mermaid-block.js.map +1 -1
- package/dist/components/chat/mermaid-share.d.ts +2 -1
- package/dist/components/chat/mermaid-share.d.ts.map +1 -1
- package/dist/components/chat/mermaid-share.js +7 -8
- package/dist/components/chat/mermaid-share.js.map +1 -1
- package/dist/components/chat/mermaid-viewer.d.ts.map +1 -1
- package/dist/components/chat/mermaid-viewer.js +3 -1
- package/dist/components/chat/mermaid-viewer.js.map +1 -1
- package/dist/components/chat/message-bubble.d.ts +8 -1
- package/dist/components/chat/message-bubble.d.ts.map +1 -1
- package/dist/components/chat/message-bubble.js +53 -24
- package/dist/components/chat/message-bubble.js.map +1 -1
- package/dist/components/chat/message-share.d.ts +2 -1
- package/dist/components/chat/message-share.d.ts.map +1 -1
- package/dist/components/chat/message-share.js +6 -7
- package/dist/components/chat/message-share.js.map +1 -1
- package/dist/components/chat/renderers/bind.d.ts +39 -0
- package/dist/components/chat/renderers/bind.d.ts.map +1 -0
- package/dist/components/chat/renderers/bind.js +43 -0
- package/dist/components/chat/renderers/bind.js.map +1 -0
- package/dist/components/chat/renderers/brain-ui-tools.d.ts +3 -0
- package/dist/components/chat/renderers/brain-ui-tools.d.ts.map +1 -0
- package/dist/components/chat/renderers/brain-ui-tools.js +41 -0
- package/dist/components/chat/renderers/brain-ui-tools.js.map +1 -0
- package/dist/components/chat/renderers/claude-tools.d.ts.map +1 -1
- package/dist/components/chat/renderers/claude-tools.js +3 -2
- package/dist/components/chat/renderers/claude-tools.js.map +1 -1
- package/dist/components/chat/renderers/index.d.ts +10 -2
- package/dist/components/chat/renderers/index.d.ts.map +1 -1
- package/dist/components/chat/renderers/index.js +15 -10
- package/dist/components/chat/renderers/index.js.map +1 -1
- package/dist/components/chat/session-drawer.d.ts +4 -0
- package/dist/components/chat/session-drawer.d.ts.map +1 -1
- package/dist/components/chat/session-drawer.js +55 -40
- package/dist/components/chat/session-drawer.js.map +1 -1
- package/dist/components/chat/session-list.d.ts +41 -0
- package/dist/components/chat/session-list.d.ts.map +1 -0
- package/dist/components/chat/session-list.js +10 -0
- package/dist/components/chat/session-list.js.map +1 -0
- package/dist/components/chat/share-block.d.ts.map +1 -1
- package/dist/components/chat/share-block.js +12 -11
- package/dist/components/chat/share-block.js.map +1 -1
- package/dist/components/chat/share-card.js +2 -2
- package/dist/components/chat/share-card.js.map +1 -1
- package/dist/components/chat/subagent-view.js +1 -1
- package/dist/components/chat/subagent-view.js.map +1 -1
- package/dist/components/chat/tool-call-timeline.d.ts.map +1 -1
- package/dist/components/chat/tool-call-timeline.js +37 -12
- package/dist/components/chat/tool-call-timeline.js.map +1 -1
- package/dist/components/chat/tool-cards/block-card.d.ts +28 -0
- package/dist/components/chat/tool-cards/block-card.d.ts.map +1 -0
- package/dist/components/chat/tool-cards/block-card.js +103 -0
- package/dist/components/chat/tool-cards/block-card.js.map +1 -0
- package/dist/components/chat/tool-cards/image-mask-card.d.ts +70 -0
- package/dist/components/chat/tool-cards/image-mask-card.d.ts.map +1 -0
- package/dist/components/chat/tool-cards/image-mask-card.js +142 -0
- package/dist/components/chat/tool-cards/image-mask-card.js.map +1 -0
- package/dist/components/chat/tool-cards/location-card.d.ts +45 -0
- package/dist/components/chat/tool-cards/location-card.d.ts.map +1 -0
- package/dist/components/chat/tool-cards/location-card.js +128 -0
- package/dist/components/chat/tool-cards/location-card.js.map +1 -0
- package/dist/components/chat/tool-views.d.ts +15 -4
- package/dist/components/chat/tool-views.d.ts.map +1 -1
- package/dist/components/chat/tool-views.js +22 -38
- package/dist/components/chat/tool-views.js.map +1 -1
- package/dist/components/chat/transcript-turn.d.ts +45 -0
- package/dist/components/chat/transcript-turn.d.ts.map +1 -0
- package/dist/components/chat/transcript-turn.js +25 -0
- package/dist/components/chat/transcript-turn.js.map +1 -0
- package/dist/components/chat/use-chat-commands.d.ts.map +1 -1
- package/dist/components/chat/use-chat-commands.js +13 -16
- package/dist/components/chat/use-chat-commands.js.map +1 -1
- package/dist/components/chat/welcome-state.d.ts +7 -0
- package/dist/components/chat/welcome-state.d.ts.map +1 -1
- package/dist/components/chat/welcome-state.js +13 -5
- package/dist/components/chat/welcome-state.js.map +1 -1
- package/dist/components/connectivity/connection-gate.d.ts.map +1 -1
- package/dist/components/connectivity/connection-gate.js +64 -6
- package/dist/components/connectivity/connection-gate.js.map +1 -1
- package/dist/components/connectivity/login-form.d.ts +31 -0
- package/dist/components/connectivity/login-form.d.ts.map +1 -0
- package/dist/components/connectivity/login-form.js +19 -0
- package/dist/components/connectivity/login-form.js.map +1 -0
- package/dist/components/connectivity/login-screen.d.ts +5 -2
- package/dist/components/connectivity/login-screen.d.ts.map +1 -1
- package/dist/components/connectivity/login-screen.js +41 -31
- package/dist/components/connectivity/login-screen.js.map +1 -1
- package/dist/components/dev/share-harness.js +1 -1
- package/dist/components/dev/share-harness.js.map +1 -1
- package/dist/components/files/file-panel.d.ts +1 -1
- package/dist/components/files/file-panel.d.ts.map +1 -1
- package/dist/components/files/file-panel.js +74 -0
- package/dist/components/files/file-panel.js.map +1 -1
- package/dist/components/files/file-tree-view.d.ts +45 -0
- package/dist/components/files/file-tree-view.d.ts.map +1 -0
- package/dist/components/files/file-tree-view.js +51 -0
- package/dist/components/files/file-tree-view.js.map +1 -0
- package/dist/components/files/file-tree.d.ts +6 -0
- package/dist/components/files/file-tree.d.ts.map +1 -1
- package/dist/components/files/file-tree.js +39 -43
- package/dist/components/files/file-tree.js.map +1 -1
- package/dist/components/files/file-viewer-binary.d.ts.map +1 -1
- package/dist/components/files/file-viewer-binary.js +3 -2
- package/dist/components/files/file-viewer-binary.js.map +1 -1
- package/dist/components/files/file-viewer-frame.d.ts +36 -0
- package/dist/components/files/file-viewer-frame.d.ts.map +1 -0
- package/dist/components/files/file-viewer-frame.js +26 -0
- package/dist/components/files/file-viewer-frame.js.map +1 -0
- package/dist/components/files/file-viewer.d.ts +5 -0
- package/dist/components/files/file-viewer.d.ts.map +1 -1
- package/dist/components/files/file-viewer.js +26 -32
- package/dist/components/files/file-viewer.js.map +1 -1
- package/dist/components/files/frontmatter-chips.d.ts +18 -0
- package/dist/components/files/frontmatter-chips.d.ts.map +1 -0
- package/dist/components/files/frontmatter-chips.js +11 -0
- package/dist/components/files/frontmatter-chips.js.map +1 -0
- package/dist/components/files/frontmatter-panel.d.ts +5 -1
- package/dist/components/files/frontmatter-panel.d.ts.map +1 -1
- package/dist/components/files/frontmatter-panel.js +7 -6
- package/dist/components/files/frontmatter-panel.js.map +1 -1
- package/dist/components/files/staleness.d.ts +18 -0
- package/dist/components/files/staleness.d.ts.map +1 -0
- package/dist/components/files/staleness.js +27 -0
- package/dist/components/files/staleness.js.map +1 -0
- package/dist/components/graph/graph-canvas.d.ts.map +1 -1
- package/dist/components/graph/graph-canvas.js +24 -1
- package/dist/components/graph/graph-canvas.js.map +1 -1
- package/dist/components/graph/graph-controls-column.d.ts +14 -0
- package/dist/components/graph/graph-controls-column.d.ts.map +1 -0
- package/dist/components/graph/graph-controls-column.js +44 -0
- package/dist/components/graph/graph-controls-column.js.map +1 -0
- package/dist/components/graph/graph-controls.d.ts +20 -5
- package/dist/components/graph/graph-controls.d.ts.map +1 -1
- package/dist/components/graph/graph-controls.js +58 -37
- package/dist/components/graph/graph-controls.js.map +1 -1
- package/dist/components/graph/graph-form.d.ts +82 -0
- package/dist/components/graph/graph-form.d.ts.map +1 -0
- package/dist/components/graph/graph-form.js +69 -0
- package/dist/components/graph/graph-form.js.map +1 -0
- package/dist/components/graph/graph-maintenance.d.ts.map +1 -1
- package/dist/components/graph/graph-maintenance.js +6 -10
- package/dist/components/graph/graph-maintenance.js.map +1 -1
- package/dist/components/graph/graph-node-rail.d.ts +13 -0
- package/dist/components/graph/graph-node-rail.d.ts.map +1 -0
- package/dist/components/graph/graph-node-rail.js +92 -0
- package/dist/components/graph/graph-node-rail.js.map +1 -0
- package/dist/components/graph/graph-page.d.ts +7 -0
- package/dist/components/graph/graph-page.d.ts.map +1 -1
- package/dist/components/graph/graph-page.js +102 -12
- package/dist/components/graph/graph-page.js.map +1 -1
- package/dist/components/graph/graph-scene.d.ts.map +1 -1
- package/dist/components/graph/graph-scene.js +100 -24
- package/dist/components/graph/graph-scene.js.map +1 -1
- package/dist/components/graph/lib/graph-helpers.d.ts +42 -12
- package/dist/components/graph/lib/graph-helpers.d.ts.map +1 -1
- package/dist/components/graph/lib/graph-helpers.js +33 -41
- package/dist/components/graph/lib/graph-helpers.js.map +1 -1
- package/dist/components/graph/node-card.d.ts +28 -0
- package/dist/components/graph/node-card.d.ts.map +1 -0
- package/dist/components/graph/node-card.js +7 -0
- package/dist/components/graph/node-card.js.map +1 -0
- package/dist/components/graph/node-popover.d.ts +6 -2
- package/dist/components/graph/node-popover.d.ts.map +1 -1
- package/dist/components/graph/node-popover.js +13 -31
- package/dist/components/graph/node-popover.js.map +1 -1
- package/dist/components/graph/use-graph-theme.d.ts +32 -4
- package/dist/components/graph/use-graph-theme.d.ts.map +1 -1
- package/dist/components/graph/use-graph-theme.js +44 -32
- package/dist/components/graph/use-graph-theme.js.map +1 -1
- package/dist/components/graph/use-node-actions.d.ts +26 -0
- package/dist/components/graph/use-node-actions.d.ts.map +1 -0
- package/dist/components/graph/use-node-actions.js +54 -0
- package/dist/components/graph/use-node-actions.js.map +1 -0
- package/dist/components/images/image-share.d.ts +2 -1
- package/dist/components/images/image-share.d.ts.map +1 -1
- package/dist/components/images/image-share.js +3 -3
- package/dist/components/images/image-share.js.map +1 -1
- package/dist/components/images/image-viewer.d.ts.map +1 -1
- package/dist/components/images/image-viewer.js +3 -1
- package/dist/components/images/image-viewer.js.map +1 -1
- package/dist/components/images/mask-editor.d.ts.map +1 -1
- package/dist/components/images/mask-editor.js +7 -5
- package/dist/components/images/mask-editor.js.map +1 -1
- package/dist/components/layout/app-shell.d.ts.map +1 -1
- package/dist/components/layout/app-shell.js +5 -1
- package/dist/components/layout/app-shell.js.map +1 -1
- package/dist/components/layout/desktop-palette.d.ts +23 -0
- package/dist/components/layout/desktop-palette.d.ts.map +1 -0
- package/dist/components/layout/desktop-palette.js +132 -0
- package/dist/components/layout/desktop-palette.js.map +1 -0
- package/dist/components/layout/key-cap.d.ts +9 -0
- package/dist/components/layout/key-cap.d.ts.map +1 -0
- package/dist/components/layout/key-cap.js +10 -0
- package/dist/components/layout/key-cap.js.map +1 -0
- package/dist/components/layout/mobile-tab-bar.d.ts +13 -0
- package/dist/components/layout/mobile-tab-bar.d.ts.map +1 -1
- package/dist/components/layout/mobile-tab-bar.js +58 -47
- package/dist/components/layout/mobile-tab-bar.js.map +1 -1
- package/dist/components/layout/shortcut-switch.d.ts +13 -0
- package/dist/components/layout/shortcut-switch.d.ts.map +1 -0
- package/dist/components/layout/shortcut-switch.js +22 -0
- package/dist/components/layout/shortcut-switch.js.map +1 -0
- package/dist/components/layout/side-rail.d.ts +24 -0
- package/dist/components/layout/side-rail.d.ts.map +1 -1
- package/dist/components/layout/side-rail.js +65 -27
- package/dist/components/layout/side-rail.js.map +1 -1
- package/dist/components/layout/slide-panel.d.ts +12 -2
- package/dist/components/layout/slide-panel.d.ts.map +1 -1
- package/dist/components/layout/slide-panel.js +11 -2
- package/dist/components/layout/slide-panel.js.map +1 -1
- package/dist/components/layout/theme.d.ts +22 -0
- package/dist/components/layout/theme.d.ts.map +1 -0
- package/dist/components/layout/theme.js +44 -0
- package/dist/components/layout/theme.js.map +1 -0
- package/dist/components/quick-actions/add-form.d.ts +44 -0
- package/dist/components/quick-actions/add-form.d.ts.map +1 -0
- package/dist/components/quick-actions/add-form.js +30 -0
- package/dist/components/quick-actions/add-form.js.map +1 -0
- package/dist/components/quick-actions/add-modal.d.ts +7 -0
- package/dist/components/quick-actions/add-modal.d.ts.map +1 -1
- package/dist/components/quick-actions/add-modal.js +66 -20
- package/dist/components/quick-actions/add-modal.js.map +1 -1
- package/dist/components/quick-actions/search-modal.d.ts.map +1 -1
- package/dist/components/quick-actions/search-modal.js +48 -19
- package/dist/components/quick-actions/search-modal.js.map +1 -1
- package/dist/components/quick-actions/streaming-modal.d.ts +6 -0
- package/dist/components/quick-actions/streaming-modal.d.ts.map +1 -1
- package/dist/components/quick-actions/streaming-modal.js +42 -17
- package/dist/components/quick-actions/streaming-modal.js.map +1 -1
- package/dist/components/quick-actions/streaming-output.d.ts +38 -0
- package/dist/components/quick-actions/streaming-output.d.ts.map +1 -0
- package/dist/components/quick-actions/streaming-output.js +22 -0
- package/dist/components/quick-actions/streaming-output.js.map +1 -0
- package/dist/components/quick-actions/whatsup-modal.d.ts +5 -0
- package/dist/components/quick-actions/whatsup-modal.d.ts.map +1 -1
- package/dist/components/quick-actions/whatsup-modal.js +36 -10
- package/dist/components/quick-actions/whatsup-modal.js.map +1 -1
- package/dist/components/settings/devices-agents-tab.d.ts +10 -0
- package/dist/components/settings/devices-agents-tab.d.ts.map +1 -0
- package/dist/components/settings/devices-agents-tab.js +131 -0
- package/dist/components/settings/devices-agents-tab.js.map +1 -0
- package/dist/components/settings/models-list.d.ts +39 -0
- package/dist/components/settings/models-list.d.ts.map +1 -0
- package/dist/components/settings/models-list.js +72 -0
- package/dist/components/settings/models-list.js.map +1 -0
- package/dist/components/settings/models-tab.d.ts +4 -0
- package/dist/components/settings/models-tab.d.ts.map +1 -1
- package/dist/components/settings/models-tab.js +52 -102
- package/dist/components/settings/models-tab.js.map +1 -1
- package/dist/components/settings/one-time-agent-credential.d.ts +3 -0
- package/dist/components/settings/one-time-agent-credential.d.ts.map +1 -0
- package/dist/components/settings/one-time-agent-credential.js +55 -0
- package/dist/components/settings/one-time-agent-credential.js.map +1 -0
- package/dist/components/settings/passkey-list.d.ts +35 -0
- package/dist/components/settings/passkey-list.d.ts.map +1 -0
- package/dist/components/settings/passkey-list.js +34 -0
- package/dist/components/settings/passkey-list.js.map +1 -0
- package/dist/components/settings/passkey-tab.d.ts +3 -0
- package/dist/components/settings/passkey-tab.d.ts.map +1 -1
- package/dist/components/settings/passkey-tab.js +53 -45
- package/dist/components/settings/passkey-tab.js.map +1 -1
- package/dist/components/settings/pi-accounts-list.d.ts +27 -0
- package/dist/components/settings/pi-accounts-list.d.ts.map +1 -0
- package/dist/components/settings/pi-accounts-list.js +15 -0
- package/dist/components/settings/pi-accounts-list.js.map +1 -0
- package/dist/components/settings/pi-accounts.d.ts +3 -0
- package/dist/components/settings/pi-accounts.d.ts.map +1 -1
- package/dist/components/settings/pi-accounts.js +73 -55
- package/dist/components/settings/pi-accounts.js.map +1 -1
- package/dist/components/settings/principal-list.d.ts +37 -0
- package/dist/components/settings/principal-list.d.ts.map +1 -0
- package/dist/components/settings/principal-list.js +18 -0
- package/dist/components/settings/principal-list.js.map +1 -0
- package/dist/components/settings/settings-panel.d.ts +10 -3
- package/dist/components/settings/settings-panel.d.ts.map +1 -1
- package/dist/components/settings/settings-panel.js +80 -6
- package/dist/components/settings/settings-panel.js.map +1 -1
- package/dist/components/settings/skills-list.d.ts +53 -0
- package/dist/components/settings/skills-list.d.ts.map +1 -0
- package/dist/components/settings/skills-list.js +28 -0
- package/dist/components/settings/skills-list.js.map +1 -0
- package/dist/components/settings/skills-tab.d.ts.map +1 -1
- package/dist/components/settings/skills-tab.js +65 -38
- package/dist/components/settings/skills-tab.js.map +1 -1
- package/dist/components/settings/tool-permissions-list.d.ts +18 -0
- package/dist/components/settings/tool-permissions-list.d.ts.map +1 -0
- package/dist/components/settings/tool-permissions-list.js +6 -0
- package/dist/components/settings/tool-permissions-list.js.map +1 -0
- package/dist/components/settings/tool-permissions.d.ts +2 -1
- package/dist/components/settings/tool-permissions.d.ts.map +1 -1
- package/dist/components/settings/tool-permissions.js +33 -16
- package/dist/components/settings/tool-permissions.js.map +1 -1
- package/dist/components/settings/web-search-chain.d.ts +41 -0
- package/dist/components/settings/web-search-chain.d.ts.map +1 -0
- package/dist/components/settings/web-search-chain.js +47 -0
- package/dist/components/settings/web-search-chain.js.map +1 -0
- package/dist/components/settings/web-search-settings.d.ts +4 -7
- package/dist/components/settings/web-search-settings.d.ts.map +1 -1
- package/dist/components/settings/web-search-settings.js +54 -76
- package/dist/components/settings/web-search-settings.js.map +1 -1
- package/dist/components/share/share-menu.d.ts.map +1 -1
- package/dist/components/share/share-menu.js +24 -4
- package/dist/components/share/share-menu.js.map +1 -1
- package/dist/components/voice/dictation-sheet.js +3 -3
- package/dist/components/voice/dictation-sheet.js.map +1 -1
- package/dist/components/voice/mic-button.js +1 -1
- package/dist/components/voice/mic-button.js.map +1 -1
- package/dist/components/voice/review-card.js +1 -1
- package/dist/components/voice/review-card.js.map +1 -1
- package/dist/config.d.ts +5 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +15 -5
- package/dist/config.js.map +1 -1
- package/dist/connection.d.ts +12 -0
- package/dist/connection.d.ts.map +1 -0
- package/dist/connection.js +421 -0
- package/dist/connection.js.map +1 -0
- package/dist/default-root.d.ts +3 -0
- package/dist/default-root.d.ts.map +1 -0
- package/dist/default-root.js +16 -0
- package/dist/default-root.js.map +1 -0
- package/dist/hooks/use-color-scheme.d.ts +14 -0
- package/dist/hooks/use-color-scheme.d.ts.map +1 -0
- package/dist/hooks/use-color-scheme.js +37 -0
- package/dist/hooks/use-color-scheme.js.map +1 -0
- package/dist/hooks/use-hash-routes.d.ts.map +1 -1
- package/dist/hooks/use-hash-routes.js +4 -2
- package/dist/hooks/use-hash-routes.js.map +1 -1
- package/dist/hooks/use-media-query.d.ts +7 -0
- package/dist/hooks/use-media-query.d.ts.map +1 -0
- package/dist/hooks/use-media-query.js +34 -0
- package/dist/hooks/use-media-query.js.map +1 -0
- package/dist/hooks/use-share-intake.d.ts.map +1 -1
- package/dist/hooks/use-share-intake.js +37 -12
- package/dist/hooks/use-share-intake.js.map +1 -1
- package/dist/hooks/use-vpn-status.d.ts +1 -1
- package/dist/hooks/use-vpn-status.d.ts.map +1 -1
- package/dist/hooks/use-vpn-status.js +20 -16
- package/dist/hooks/use-vpn-status.js.map +1 -1
- package/dist/hooks/use-websocket.d.ts +5 -24
- package/dist/hooks/use-websocket.d.ts.map +1 -1
- package/dist/hooks/use-websocket.js +11 -382
- package/dist/hooks/use-websocket.js.map +1 -1
- package/dist/hooks/websocket-handlers/activity.d.ts +2 -2
- package/dist/hooks/websocket-handlers/activity.d.ts.map +1 -1
- package/dist/hooks/websocket-handlers/activity.js +4 -5
- package/dist/hooks/websocket-handlers/activity.js.map +1 -1
- package/dist/hooks/websocket-handlers/chat.d.ts +1 -0
- package/dist/hooks/websocket-handlers/chat.d.ts.map +1 -1
- package/dist/hooks/websocket-handlers/chat.js +27 -5
- package/dist/hooks/websocket-handlers/chat.js.map +1 -1
- package/dist/hooks/websocket-handlers/connection.d.ts.map +1 -1
- package/dist/hooks/websocket-handlers/connection.js +4 -6
- package/dist/hooks/websocket-handlers/connection.js.map +1 -1
- package/dist/hooks/websocket-handlers/mask.d.ts +1 -1
- package/dist/hooks/websocket-handlers/mask.d.ts.map +1 -1
- package/dist/hooks/websocket-handlers/mask.js +2 -3
- package/dist/hooks/websocket-handlers/mask.js.map +1 -1
- package/dist/hooks/websocket-handlers/provider.d.ts.map +1 -1
- package/dist/hooks/websocket-handlers/provider.js +4 -6
- package/dist/hooks/websocket-handlers/provider.js.map +1 -1
- package/dist/hooks/websocket-handlers/types.d.ts +6 -2
- package/dist/hooks/websocket-handlers/types.d.ts.map +1 -1
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -3
- package/dist/index.js.map +1 -1
- package/dist/lib/api-client.d.ts +321 -0
- package/dist/lib/api-client.d.ts.map +1 -1
- package/dist/lib/api-client.js +243 -213
- package/dist/lib/api-client.js.map +1 -1
- package/dist/lib/backend.d.ts +19 -2
- package/dist/lib/backend.d.ts.map +1 -1
- package/dist/lib/backend.js +15 -9
- package/dist/lib/backend.js.map +1 -1
- package/dist/lib/diff.d.ts +8 -10
- package/dist/lib/diff.d.ts.map +1 -1
- package/dist/lib/diff.js +26 -53
- package/dist/lib/diff.js.map +1 -1
- package/dist/lib/format-time.d.ts +3 -0
- package/dist/lib/format-time.d.ts.map +1 -0
- package/dist/lib/format-time.js +25 -0
- package/dist/lib/format-time.js.map +1 -0
- package/dist/lib/light-dark.d.ts +37 -0
- package/dist/lib/light-dark.d.ts.map +1 -0
- package/dist/lib/light-dark.js +83 -0
- package/dist/lib/light-dark.js.map +1 -0
- package/dist/lib/mermaid-theme.d.ts +7 -2
- package/dist/lib/mermaid-theme.d.ts.map +1 -1
- package/dist/lib/mermaid-theme.js +125 -203
- package/dist/lib/mermaid-theme.js.map +1 -1
- package/dist/lib/passkeys.d.ts +6 -3
- package/dist/lib/passkeys.d.ts.map +1 -1
- package/dist/lib/passkeys.js +10 -4
- package/dist/lib/passkeys.js.map +1 -1
- package/dist/lib/push-registration.d.ts +10 -0
- package/dist/lib/push-registration.d.ts.map +1 -0
- package/dist/lib/push-registration.js +44 -0
- package/dist/lib/push-registration.js.map +1 -0
- package/dist/lib/share-intake.d.ts +2 -1
- package/dist/lib/share-intake.d.ts.map +1 -1
- package/dist/lib/share-intake.js +3 -3
- package/dist/lib/share-intake.js.map +1 -1
- package/dist/lib/share.d.ts +4 -3
- package/dist/lib/share.d.ts.map +1 -1
- package/dist/lib/share.js +6 -7
- package/dist/lib/share.js.map +1 -1
- package/dist/lib/single-key.d.ts +30 -0
- package/dist/lib/single-key.d.ts.map +1 -0
- package/dist/lib/single-key.js +45 -0
- package/dist/lib/single-key.js.map +1 -0
- package/dist/lib/tool-names.d.ts +8 -6
- package/dist/lib/tool-names.d.ts.map +1 -1
- package/dist/lib/tool-names.js +17 -7
- package/dist/lib/tool-names.js.map +1 -1
- package/dist/root-context.d.ts +229 -0
- package/dist/root-context.d.ts.map +1 -0
- package/dist/root-context.js +33 -0
- package/dist/root-context.js.map +1 -0
- package/dist/root.d.ts +38 -0
- package/dist/root.d.ts.map +1 -0
- package/dist/root.js +47 -0
- package/dist/root.js.map +1 -0
- package/dist/stores/activity-state.d.ts +29 -0
- package/dist/stores/activity-state.d.ts.map +1 -0
- package/dist/stores/activity-state.js +282 -0
- package/dist/stores/activity-state.js.map +1 -0
- package/dist/stores/activity-store.d.ts +10 -41
- package/dist/stores/activity-store.d.ts.map +1 -1
- package/dist/stores/activity-store.js +9 -271
- package/dist/stores/activity-store.js.map +1 -1
- package/dist/stores/chat-state.d.ts +212 -0
- package/dist/stores/chat-state.d.ts.map +1 -0
- package/dist/stores/chat-state.js +466 -0
- package/dist/stores/chat-state.js.map +1 -0
- package/dist/stores/chat-store.d.ts +4 -162
- package/dist/stores/chat-store.d.ts.map +1 -1
- package/dist/stores/chat-store.js +7 -418
- package/dist/stores/chat-store.js.map +1 -1
- package/dist/stores/connection-state.d.ts +40 -0
- package/dist/stores/connection-state.d.ts.map +1 -0
- package/dist/stores/connection-state.js +30 -0
- package/dist/stores/connection-state.js.map +1 -0
- package/dist/stores/connection-store.d.ts +4 -40
- package/dist/stores/connection-store.d.ts.map +1 -1
- package/dist/stores/connection-store.js +7 -27
- package/dist/stores/connection-store.js.map +1 -1
- package/dist/stores/create-stores.d.ts +23 -0
- package/dist/stores/create-stores.d.ts.map +1 -0
- package/dist/stores/create-stores.js +28 -0
- package/dist/stores/create-stores.js.map +1 -0
- package/dist/stores/file-state.d.ts +53 -0
- package/dist/stores/file-state.d.ts.map +1 -0
- package/dist/stores/file-state.js +341 -0
- package/dist/stores/file-state.js.map +1 -0
- package/dist/stores/file-store.d.ts +4 -52
- package/dist/stores/file-store.d.ts.map +1 -1
- package/dist/stores/file-store.js +7 -300
- package/dist/stores/file-store.js.map +1 -1
- package/dist/stores/graph-state.d.ts +95 -0
- package/dist/stores/graph-state.d.ts.map +1 -0
- package/dist/stores/graph-state.js +252 -0
- package/dist/stores/graph-state.js.map +1 -0
- package/dist/stores/graph-store.d.ts +7 -83
- package/dist/stores/graph-store.d.ts.map +1 -1
- package/dist/stores/graph-store.js +8 -249
- package/dist/stores/graph-store.js.map +1 -1
- package/dist/stores/mask-state.d.ts +21 -0
- package/dist/stores/mask-state.d.ts.map +1 -0
- package/dist/stores/mask-state.js +9 -0
- package/dist/stores/mask-state.js.map +1 -0
- package/dist/stores/mask-store.d.ts +4 -21
- package/dist/stores/mask-store.d.ts.map +1 -1
- package/dist/stores/mask-store.js +7 -6
- package/dist/stores/mask-store.js.map +1 -1
- package/dist/stores/principal-state.d.ts +16 -0
- package/dist/stores/principal-state.d.ts.map +1 -0
- package/dist/stores/principal-state.js +31 -0
- package/dist/stores/principal-state.js.map +1 -0
- package/dist/stores/principal-store.d.ts +5 -0
- package/dist/stores/principal-store.d.ts.map +1 -0
- package/dist/stores/principal-store.js +8 -0
- package/dist/stores/principal-store.js.map +1 -0
- package/dist/stores/provider-state.d.ts +24 -0
- package/dist/stores/provider-state.d.ts.map +1 -0
- package/dist/stores/provider-state.js +68 -0
- package/dist/stores/provider-state.js.map +1 -0
- package/dist/stores/provider-store.d.ts +4 -23
- package/dist/stores/provider-store.d.ts.map +1 -1
- package/dist/stores/provider-store.js +7 -64
- package/dist/stores/provider-store.js.map +1 -1
- package/dist/stores/share-state.d.ts +29 -0
- package/dist/stores/share-state.d.ts.map +1 -0
- package/dist/stores/share-state.js +21 -0
- package/dist/stores/share-state.js.map +1 -0
- package/dist/stores/share-store.d.ts +4 -28
- package/dist/stores/share-store.d.ts.map +1 -1
- package/dist/stores/share-store.js +7 -18
- package/dist/stores/share-store.js.map +1 -1
- package/dist/stores/store-environment.d.ts +10 -0
- package/dist/stores/store-environment.d.ts.map +1 -0
- package/dist/stores/store-environment.js +2 -0
- package/dist/stores/store-environment.js.map +1 -0
- package/dist/stores/ui-state.d.ts +71 -0
- package/dist/stores/ui-state.d.ts.map +1 -0
- package/dist/stores/ui-state.js +58 -0
- package/dist/stores/ui-state.js.map +1 -0
- package/dist/stores/ui-store.d.ts +4 -45
- package/dist/stores/ui-store.d.ts.map +1 -1
- package/dist/stores/ui-store.js +7 -36
- package/dist/stores/ui-store.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/theme.css +150 -97
- package/dist/voice/asr-clients.d.ts +2 -1
- package/dist/voice/asr-clients.d.ts.map +1 -1
- package/dist/voice/asr-clients.js +16 -17
- package/dist/voice/asr-clients.js.map +1 -1
- package/dist/voice/use-dictation.d.ts.map +1 -1
- package/dist/voice/use-dictation.js +12 -8
- package/dist/voice/use-dictation.js.map +1 -1
- package/dist/voice/voice-state.d.ts +25 -0
- package/dist/voice/voice-state.d.ts.map +1 -0
- package/dist/voice/voice-state.js +29 -0
- package/dist/voice/voice-state.js.map +1 -0
- package/dist/voice/voice-store.d.ts +4 -25
- package/dist/voice/voice-store.d.ts.map +1 -1
- package/dist/voice/voice-store.js +7 -26
- package/dist/voice/voice-store.js.map +1 -1
- package/package.json +3 -2
- package/src/components/activity/activity-page.tsx +334 -160
- package/src/components/activity/activity-run-detail.tsx +81 -47
- package/src/components/activity/activity-run-list.tsx +27 -59
- package/src/components/activity/activity-views.tsx +155 -0
- package/src/components/activity/approval-card.tsx +80 -0
- package/src/components/activity/digest-card.tsx +25 -61
- package/src/components/activity/digest-summary.tsx +52 -0
- package/src/components/activity/push-switch.tsx +62 -0
- package/src/components/activity/push-toggle.tsx +51 -81
- package/src/components/activity/span-bits.tsx +8 -7
- package/src/components/chat/ask-user-card.tsx +292 -356
- package/src/components/chat/ask-user-typed.ts +77 -0
- package/src/components/chat/brain-markdown-links.tsx +4 -4
- package/src/components/chat/brain-markdown.tsx +4 -2
- package/src/components/chat/chat-page.tsx +38 -9
- package/src/components/chat/composer-view.tsx +194 -0
- package/src/components/chat/composer.tsx +117 -296
- package/src/components/chat/markdown-content.tsx +53 -2
- package/src/components/chat/mermaid-block.tsx +13 -5
- package/src/components/chat/mermaid-share.ts +8 -7
- package/src/components/chat/mermaid-viewer.tsx +3 -1
- package/src/components/chat/message-bubble.tsx +78 -94
- package/src/components/chat/message-share.ts +7 -7
- package/src/components/chat/renderers/bind.tsx +94 -0
- package/src/components/chat/renderers/brain-ui-tools.tsx +56 -0
- package/src/components/chat/renderers/claude-tools.tsx +3 -2
- package/src/components/chat/renderers/index.ts +15 -10
- package/src/components/chat/session-drawer.tsx +60 -138
- package/src/components/chat/session-list.tsx +113 -0
- package/src/components/chat/share-block.tsx +16 -12
- package/src/components/chat/share-card.tsx +2 -2
- package/src/components/chat/subagent-view.tsx +4 -4
- package/src/components/chat/tool-call-timeline.tsx +59 -22
- package/src/components/chat/tool-cards/block-card.tsx +145 -0
- package/src/components/chat/tool-cards/image-mask-card.tsx +214 -0
- package/src/components/chat/tool-cards/location-card.tsx +159 -0
- package/src/components/chat/tool-views.tsx +23 -73
- package/src/components/chat/transcript-turn.tsx +108 -0
- package/src/components/chat/use-chat-commands.ts +14 -16
- package/src/components/chat/welcome-state.tsx +36 -91
- package/src/components/connectivity/connection-gate.tsx +80 -9
- package/src/components/connectivity/login-form.tsx +122 -0
- package/src/components/connectivity/login-screen.tsx +45 -100
- package/src/components/dev/share-harness.tsx +2 -2
- package/src/components/files/file-panel.tsx +168 -0
- package/src/components/files/file-tree-view.tsx +127 -0
- package/src/components/files/file-tree.tsx +55 -109
- package/src/components/files/file-viewer-binary.tsx +3 -2
- package/src/components/files/file-viewer-frame.tsx +113 -0
- package/src/components/files/file-viewer.tsx +40 -95
- package/src/components/files/frontmatter-chips.tsx +42 -0
- package/src/components/files/frontmatter-panel.tsx +6 -71
- package/src/components/files/staleness.ts +29 -0
- package/src/components/graph/graph-canvas.tsx +24 -1
- package/src/components/graph/graph-controls-column.tsx +92 -0
- package/src/components/graph/graph-controls.tsx +83 -127
- package/src/components/graph/graph-form.tsx +183 -0
- package/src/components/graph/graph-maintenance.tsx +9 -14
- package/src/components/graph/graph-node-rail.tsx +147 -0
- package/src/components/graph/graph-page.tsx +189 -49
- package/src/components/graph/graph-scene.tsx +200 -30
- package/src/components/graph/lib/graph-helpers.ts +65 -43
- package/src/components/graph/node-card.tsx +64 -0
- package/src/components/graph/node-popover.tsx +28 -117
- package/src/components/graph/use-graph-theme.ts +69 -32
- package/src/components/graph/use-node-actions.ts +56 -0
- package/src/components/images/image-share.ts +4 -2
- package/src/components/images/image-viewer.tsx +3 -1
- package/src/components/images/mask-editor.tsx +7 -4
- package/src/components/layout/app-shell.tsx +7 -1
- package/src/components/layout/desktop-palette.tsx +151 -0
- package/src/components/layout/key-cap.tsx +15 -0
- package/src/components/layout/mobile-tab-bar.tsx +80 -157
- package/src/components/layout/shortcut-switch.tsx +32 -0
- package/src/components/layout/side-rail.tsx +70 -150
- package/src/components/layout/slide-panel.tsx +29 -2
- package/src/components/layout/theme.tsx +67 -0
- package/src/components/quick-actions/add-form.tsx +188 -0
- package/src/components/quick-actions/add-modal.tsx +68 -144
- package/src/components/quick-actions/search-modal.tsx +49 -19
- package/src/components/quick-actions/streaming-modal.tsx +44 -71
- package/src/components/quick-actions/streaming-output.tsx +112 -0
- package/src/components/quick-actions/whatsup-modal.tsx +38 -60
- package/src/components/settings/devices-agents-tab.tsx +139 -0
- package/src/components/settings/models-list.tsx +299 -0
- package/src/components/settings/models-tab.tsx +63 -337
- package/src/components/settings/one-time-agent-credential.tsx +131 -0
- package/src/components/settings/passkey-list.tsx +201 -0
- package/src/components/settings/passkey-tab.tsx +53 -197
- package/src/components/settings/pi-accounts-list.tsx +128 -0
- package/src/components/settings/pi-accounts.tsx +71 -170
- package/src/components/settings/principal-list.tsx +172 -0
- package/src/components/settings/settings-panel.tsx +245 -19
- package/src/components/settings/skills-list.tsx +276 -0
- package/src/components/settings/skills-tab.tsx +82 -269
- package/src/components/settings/tool-permissions-list.tsx +54 -0
- package/src/components/settings/tool-permissions.tsx +27 -46
- package/src/components/settings/web-search-chain.tsx +300 -0
- package/src/components/settings/web-search-settings.tsx +58 -328
- package/src/components/share/share-menu.tsx +19 -4
- package/src/components/voice/dictation-sheet.tsx +5 -5
- package/src/components/voice/mic-button.tsx +1 -1
- package/src/components/voice/review-card.tsx +1 -1
- package/src/config.ts +21 -7
- package/src/connection.ts +443 -0
- package/src/default-root.ts +16 -0
- package/src/hooks/use-color-scheme.ts +36 -0
- package/src/hooks/use-hash-routes.ts +4 -2
- package/src/hooks/use-media-query.ts +32 -0
- package/src/hooks/use-share-intake.ts +32 -12
- package/src/hooks/use-vpn-status.ts +23 -15
- package/src/hooks/use-websocket.ts +12 -426
- package/src/hooks/websocket-handlers/activity.ts +4 -5
- package/src/hooks/websocket-handlers/chat.ts +26 -5
- package/src/hooks/websocket-handlers/connection.ts +4 -6
- package/src/hooks/websocket-handlers/mask.ts +2 -3
- package/src/hooks/websocket-handlers/provider.ts +4 -6
- package/src/hooks/websocket-handlers/types.ts +6 -2
- package/src/index.ts +7 -3
- package/src/lib/api-client.ts +446 -365
- package/src/lib/backend.ts +20 -10
- package/src/lib/diff.ts +28 -62
- package/src/lib/format-time.ts +20 -0
- package/src/lib/light-dark.ts +83 -0
- package/src/lib/mermaid-theme.ts +183 -214
- package/src/lib/passkeys.ts +12 -4
- package/src/lib/push-registration.ts +46 -0
- package/src/lib/share-intake.ts +6 -3
- package/src/lib/share.ts +7 -4
- package/src/lib/single-key.ts +47 -0
- package/src/lib/tool-names.ts +31 -8
- package/src/root-context.tsx +40 -0
- package/src/root.ts +83 -0
- package/src/stores/activity-state.ts +295 -0
- package/src/stores/activity-store.ts +11 -285
- package/src/stores/chat-state.ts +795 -0
- package/src/stores/chat-store.ts +11 -705
- package/src/stores/connection-state.ts +78 -0
- package/src/stores/connection-store.ts +11 -76
- package/src/stores/create-stores.ts +31 -0
- package/src/stores/file-state.ts +399 -0
- package/src/stores/file-store.ts +9 -360
- package/src/stores/graph-state.ts +368 -0
- package/src/stores/graph-store.ts +10 -355
- package/src/stores/mask-state.ts +30 -0
- package/src/stores/mask-store.ts +10 -27
- package/src/stores/principal-state.ts +42 -0
- package/src/stores/principal-store.ts +11 -0
- package/src/stores/provider-state.ts +103 -0
- package/src/stores/provider-store.ts +10 -95
- package/src/stores/share-state.ts +56 -0
- package/src/stores/share-store.ts +11 -54
- package/src/stores/store-environment.ts +10 -0
- package/src/stores/ui-state.ts +143 -0
- package/src/stores/ui-store.ts +11 -93
- package/src/styles.css +4 -1
- package/src/theme.css +150 -97
- package/src/voice/asr-clients.ts +17 -17
- package/src/voice/use-dictation.ts +11 -8
- package/src/voice/voice-state.ts +57 -0
- package/src/voice/voice-store.ts +11 -55
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The typed answer (D38 §1): a composer send while an `ask_user` question is
|
|
3
|
+
* pending is the answer to that question, not a new message.
|
|
4
|
+
*
|
|
5
|
+
* The exchange is submitted through the same path the card's Submit uses —
|
|
6
|
+
* the store records the answers and the socket carries `ask_user_response` —
|
|
7
|
+
* with one difference: the exchange is marked `typed`, so the card quotes the
|
|
8
|
+
* text it took instead of showing a chosen option. Dropping the card would
|
|
9
|
+
* leave the transcript claiming the question was never answered; leaving it
|
|
10
|
+
* pending would ask twice.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import type { AskUserQuestion, ClientMessage } from "@schlessera/brain-ui-sdk/protocol";
|
|
14
|
+
import type { AskUserExchange, ChatKey, ChatState } from "../../stores/chat-state.js";
|
|
15
|
+
|
|
16
|
+
/** A request the user has neither answered nor dismissed. */
|
|
17
|
+
export function isPendingExchange(
|
|
18
|
+
exchange: AskUserExchange | null | undefined
|
|
19
|
+
): exchange is AskUserExchange {
|
|
20
|
+
return !!exchange && !exchange.answers && !exchange.cancelled;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* The question the composer text answers — only when the exchange has exactly
|
|
25
|
+
* one. Answers are submitted for the whole exchange at once and the server
|
|
26
|
+
* resolves the request on the first response, so binding a typed reply to
|
|
27
|
+
* question one of several would leave the others blank and unanswerable. A
|
|
28
|
+
* multi-question prompt keeps the cards' own Submit; the composer text is an
|
|
29
|
+
* ordinary message.
|
|
30
|
+
*/
|
|
31
|
+
export function questionForTypedAnswer(exchange: AskUserExchange): AskUserQuestion | null {
|
|
32
|
+
return exchange.questions.length === 1 ? exchange.questions[0]! : null;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Binds `text` to the buffer's pending question, if there is one. Returns
|
|
37
|
+
* `true` when the text was consumed as an answer — the caller must then NOT
|
|
38
|
+
* send it as a chat message — and `false` when nothing was pending.
|
|
39
|
+
*/
|
|
40
|
+
export function takeComposerTextAsAnswer(
|
|
41
|
+
chat: Pick<ChatState, "submitAskUserAnswers"> & {
|
|
42
|
+
buffers: ChatState["buffers"];
|
|
43
|
+
draft: ChatState["draft"];
|
|
44
|
+
},
|
|
45
|
+
key: ChatKey,
|
|
46
|
+
text: string,
|
|
47
|
+
send: (message: ClientMessage) => void
|
|
48
|
+
): boolean {
|
|
49
|
+
const buffer = key === null ? chat.draft : chat.buffers[key];
|
|
50
|
+
const exchange = buffer?.askUser;
|
|
51
|
+
if (!isPendingExchange(exchange)) return false;
|
|
52
|
+
const question = questionForTypedAnswer(exchange);
|
|
53
|
+
if (!question) return false;
|
|
54
|
+
const answer = text.trim();
|
|
55
|
+
if (!answer) return false;
|
|
56
|
+
|
|
57
|
+
const answers = { [question.question]: answer };
|
|
58
|
+
chat.submitAskUserAnswers(key, exchange.requestId, answers, undefined, true);
|
|
59
|
+
send({ type: "ask_user_response", requestId: exchange.requestId, answers });
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* The composer message a reopened (dismissed, then "Ask again") card sends
|
|
65
|
+
* in place of an `ask_user_response`: the server resolved the request when
|
|
66
|
+
* the turn ended, so the answer has to travel as a normal message that
|
|
67
|
+
* quotes the question it answers. One block per question, the picks as
|
|
68
|
+
* they were recorded.
|
|
69
|
+
*/
|
|
70
|
+
export function reaskMessage(
|
|
71
|
+
questions: readonly Pick<AskUserQuestion, "question">[],
|
|
72
|
+
answers: Record<string, string>
|
|
73
|
+
): string {
|
|
74
|
+
return questions
|
|
75
|
+
.map((q) => `Answering \u201C${q.question}\u201D: ${answers[q.question] ?? ""}`)
|
|
76
|
+
.join("\n\n");
|
|
77
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import type { BrainUiRoot } from "../../root.js";
|
|
4
4
|
import {
|
|
5
5
|
isInternalRepoDir,
|
|
6
6
|
isInternalRepoPath,
|
|
@@ -15,13 +15,13 @@ import { useUIStore } from "../../stores/ui-store.js";
|
|
|
15
15
|
* already an API route — passes through. A repo-relative path is rewritten to
|
|
16
16
|
* the files endpoint, which is where brain content is served from.
|
|
17
17
|
*/
|
|
18
|
-
export function repoImageSrc(src: string): string {
|
|
18
|
+
export function repoImageSrc(src: string, root: BrainUiRoot): string {
|
|
19
19
|
const trimmed = src.trim();
|
|
20
20
|
if (!trimmed) return src;
|
|
21
21
|
if (/^(data:|blob:|https?:\/\/)/i.test(trimmed)) return trimmed;
|
|
22
|
-
if (trimmed.startsWith("/api/")) return trimmed;
|
|
22
|
+
if (trimmed.startsWith("/api/")) return root.backendUrl(trimmed);
|
|
23
23
|
const rel = trimmed.replace(/^\.\//, "").replace(/^\/+/, "");
|
|
24
|
-
return `${apiBase()}/files/content?path=${encodeURIComponent(rel)}&raw=1`;
|
|
24
|
+
return `${root.apiBase()}/files/content?path=${encodeURIComponent(rel)}&raw=1`;
|
|
25
25
|
}
|
|
26
26
|
/** Click target for a repo-relative file reference. Opens the file panel + viewer. */
|
|
27
27
|
export function FileLink({ path, children }: { path: string; children?: React.ReactNode }) {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { useBrainUiRoot } from "../../root-context.js";
|
|
1
2
|
import React, { memo, useEffect, useMemo } from "react";
|
|
2
3
|
import Markdown from "react-markdown";
|
|
3
4
|
|
|
@@ -83,6 +84,7 @@ export const BrainMarkdown = memo(function BrainMarkdown({ content, className, e
|
|
|
83
84
|
});
|
|
84
85
|
|
|
85
86
|
const BrainMarkdownInner = memo(function BrainMarkdownInner({ content, className, entityTags = false, fileLinks = false }: BrainMarkdownProps) {
|
|
87
|
+
const root = useBrainUiRoot();
|
|
86
88
|
const processed = entityTags ? renderEntityTags(content) : content;
|
|
87
89
|
const ensureWikilinks = useFileStore((s) => s.ensureWikilinks);
|
|
88
90
|
// Entity-tag rendering emits its own markup and must not be re-highlighted.
|
|
@@ -134,7 +136,7 @@ const BrainMarkdownInner = memo(function BrainMarkdownInner({ content, className
|
|
|
134
136
|
* appears. `data:` URIs and absolute URLs are left alone.
|
|
135
137
|
*/
|
|
136
138
|
img: ({ src, alt, ...props }: React.ComponentPropsWithoutRef<"img">) => {
|
|
137
|
-
const resolved = typeof src === "string" ? repoImageSrc(src) : src;
|
|
139
|
+
const resolved = typeof src === "string" ? repoImageSrc(src, root) : src;
|
|
138
140
|
// Inline, an image is only as wide as the viewport. Tapping it opens the
|
|
139
141
|
// zoom viewer, the same way a mermaid diagram does.
|
|
140
142
|
if (typeof resolved !== "string") {
|
|
@@ -166,7 +168,7 @@ const BrainMarkdownInner = memo(function BrainMarkdownInner({ content, className
|
|
|
166
168
|
);
|
|
167
169
|
},
|
|
168
170
|
};
|
|
169
|
-
}, [entityTags, fileLinks]);
|
|
171
|
+
}, [entityTags, fileLinks, root]);
|
|
170
172
|
|
|
171
173
|
return (
|
|
172
174
|
<div className={className ?? "brain-prose"}>
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { useBrainUiRoot } from "../../root-context.js";
|
|
1
2
|
import { useState, useRef, useEffect, useLayoutEffect, useCallback } from "react";
|
|
2
3
|
import { ArrowDown, ChevronUp } from "lucide-react";
|
|
3
4
|
import { useChatStore, activeChat } from "../../stores/chat-store.js";
|
|
@@ -18,7 +19,7 @@ import { AddPanel } from "../quick-actions/add-modal.js";
|
|
|
18
19
|
import { FilePanel } from "../files/file-panel.js";
|
|
19
20
|
import { Composer } from "./composer.js";
|
|
20
21
|
import { useChatCommands } from "./use-chat-commands.js";
|
|
21
|
-
import {
|
|
22
|
+
import { Button } from "@schlessera/brain-ui-kit";
|
|
22
23
|
import {
|
|
23
24
|
primeClientEnvironment,
|
|
24
25
|
READING_COLUMN_ATTR,
|
|
@@ -48,6 +49,7 @@ const WINDOW_STEP = 40;
|
|
|
48
49
|
* that on the first re-render.
|
|
49
50
|
*/
|
|
50
51
|
export function ChatPage() {
|
|
52
|
+
const root = useBrainUiRoot();
|
|
51
53
|
const scrollRef = useRef<HTMLDivElement>(null);
|
|
52
54
|
const autoScrollRef = useRef(true);
|
|
53
55
|
const [showScrollButton, setShowScrollButton] = useState(false);
|
|
@@ -139,14 +141,14 @@ export function ChatPage() {
|
|
|
139
141
|
|
|
140
142
|
const handleToolApproval = useCallback(
|
|
141
143
|
(toolUseId: string, approved: boolean, always?: boolean) => {
|
|
142
|
-
|
|
144
|
+
root.stores.chat.getState().resolveToolApproval(sessionId, toolUseId, approved);
|
|
143
145
|
if (approved) {
|
|
144
146
|
send({ type: "tool_approval", toolUseId, ...(always ? { always: true } : {}) });
|
|
145
147
|
} else {
|
|
146
148
|
send({ type: "tool_denial", toolUseId, message: "Denied by user" });
|
|
147
149
|
}
|
|
148
150
|
},
|
|
149
|
-
[send, sessionId]
|
|
151
|
+
[send, sessionId, root]
|
|
150
152
|
);
|
|
151
153
|
|
|
152
154
|
const handleAskUserSubmit = useCallback(
|
|
@@ -155,20 +157,37 @@ export function ChatPage() {
|
|
|
155
157
|
answers: Record<string, string>,
|
|
156
158
|
annotations?: Record<string, AskUserAnnotation>
|
|
157
159
|
) => {
|
|
158
|
-
|
|
159
|
-
.getState()
|
|
160
|
+
root.stores.chat.getState()
|
|
160
161
|
.submitAskUserAnswers(sessionId, requestId, answers, annotations);
|
|
161
162
|
send({ type: "ask_user_response", requestId, answers, annotations });
|
|
162
163
|
},
|
|
163
|
-
[send, sessionId]
|
|
164
|
+
[send, sessionId, root]
|
|
164
165
|
);
|
|
165
166
|
|
|
166
167
|
const handleAskUserCancel = useCallback(
|
|
167
168
|
(requestId: string) => {
|
|
168
|
-
|
|
169
|
+
root.stores.chat.getState().cancelAskUser(sessionId, requestId);
|
|
169
170
|
send({ type: "ask_user_cancel", requestId, reason: "User dismissed" });
|
|
170
171
|
},
|
|
171
|
-
[send, sessionId]
|
|
172
|
+
[send, sessionId, root]
|
|
173
|
+
);
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* A dismissed question asked again (seventh drop, ruling 7). The request
|
|
177
|
+
* was resolved server-side when the turn ended, so the answer goes out as
|
|
178
|
+
* an ordinary message — the same path the composer's send takes, minus
|
|
179
|
+
* attachments and provider (a resumed session is pinned to its own).
|
|
180
|
+
*/
|
|
181
|
+
const handleAskUserReask = useCallback(
|
|
182
|
+
(text: string) => {
|
|
183
|
+
const chat = root.stores.chat.getState();
|
|
184
|
+
chat.addUserMessage(sessionId, text, "typed");
|
|
185
|
+
if (!(sessionId === null ? chat.draft : chat.buffers[sessionId])?.isStreaming) {
|
|
186
|
+
chat.startAssistantMessage(sessionId);
|
|
187
|
+
}
|
|
188
|
+
send({ type: "chat_message", text, sessionId: sessionId ?? undefined });
|
|
189
|
+
},
|
|
190
|
+
[send, sessionId, root]
|
|
172
191
|
);
|
|
173
192
|
|
|
174
193
|
const handleSessionResume = useCallback(
|
|
@@ -225,7 +244,7 @@ export function ChatPage() {
|
|
|
225
244
|
open={syncPanelOpen}
|
|
226
245
|
onClose={() => setSyncPanelOpen(false)}
|
|
227
246
|
title="Brain Sync"
|
|
228
|
-
endpoint=
|
|
247
|
+
endpoint="/api/brain/sync"
|
|
229
248
|
/>
|
|
230
249
|
<WhatsupPanel
|
|
231
250
|
open={whatsupPanelOpen}
|
|
@@ -244,6 +263,15 @@ export function ChatPage() {
|
|
|
244
263
|
onClose={() => setFilePanelOpen(false)}
|
|
245
264
|
/>
|
|
246
265
|
|
|
266
|
+
{/* New chat is the Chat header's primary action (D37): a tab is a place
|
|
267
|
+
and starting a chat is an act, so it is neither a rail row nor a bar
|
|
268
|
+
slot. It only appears once there is a conversation to leave. */}
|
|
269
|
+
{hasMessages && (
|
|
270
|
+
<div className="flex shrink-0 items-center justify-end px-4 pt-2 md:px-6">
|
|
271
|
+
<Button label="New chat" icon="compose" tone="ghost" size="sm" block={false} onClick={clearMessages} />
|
|
272
|
+
</div>
|
|
273
|
+
)}
|
|
274
|
+
|
|
247
275
|
{/* Message area */}
|
|
248
276
|
<div className="relative flex-1 overflow-hidden">
|
|
249
277
|
{messages.length === 0 ? (
|
|
@@ -284,6 +312,7 @@ export function ChatPage() {
|
|
|
284
312
|
onToolApproval={handleToolApproval}
|
|
285
313
|
onAskUserSubmit={handleAskUserSubmit}
|
|
286
314
|
onAskUserCancel={handleAskUserCancel}
|
|
315
|
+
onAskUserReask={handleAskUserReask}
|
|
287
316
|
/>
|
|
288
317
|
))}
|
|
289
318
|
</div>
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import { BottomSheet, Button, Callout, Composer as KitComposer, Icon, ListRow, type ComposerState } from "@schlessera/brain-ui-kit";
|
|
2
|
+
import { X } from "lucide-react";
|
|
3
|
+
import type { ClipboardEvent, KeyboardEvent, ReactNode, RefObject } from "react";
|
|
4
|
+
import { cn } from "../../lib/utils.js";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* The composer's frame, rendered from props (S7, the `chat` directory).
|
|
8
|
+
* `Composer` is the container: it owns the draft, the attachments and their
|
|
9
|
+
* object URLs, the provider choice, the voice review, the command palette's
|
|
10
|
+
* open state and every store read.
|
|
11
|
+
*
|
|
12
|
+
* The field itself is the kit `Composer` (D37: the composer is kit-owned —
|
|
13
|
+
* it is the one piece of permanent chrome, and a field redrawn per screen is
|
|
14
|
+
* a component nobody can audit). The kit draws attach · field · mic ·
|
|
15
|
+
* send/stop, the provider chip in the hint line and the state-driven
|
|
16
|
+
* placeholder, hint and trailing control. What this frame adds around it is
|
|
17
|
+
* what the design leaves to the app: the slash-command palette above the
|
|
18
|
+
* field, the attachment previews and their errors, the attach MENU behind
|
|
19
|
+
* the paperclip (a docked `BottomSheet` on a phone, a popover on a pointer
|
|
20
|
+
* screen — capture is a menu, not three more icons), the provider list, and
|
|
21
|
+
* two keys the kit does not know: ↑ on an empty draft recalls the last
|
|
22
|
+
* prompt, and esc dismisses the slash palette.
|
|
23
|
+
*
|
|
24
|
+
* Paste-to-attach is caught here too: the kit's textarea has no paste
|
|
25
|
+
* handler of its own, and the event bubbles to this frame with its files.
|
|
26
|
+
*/
|
|
27
|
+
export interface ComposerAttachment {
|
|
28
|
+
previewUrl: string;
|
|
29
|
+
name: string;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export interface ComposerProvider {
|
|
33
|
+
label: string;
|
|
34
|
+
/** Fixed for this conversation: the chip is text, not a control. */
|
|
35
|
+
locked: boolean;
|
|
36
|
+
menuOpen: boolean;
|
|
37
|
+
options: { id: string; label: string }[];
|
|
38
|
+
selectedId: string | null;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export interface ComposerViewProps {
|
|
42
|
+
value: string;
|
|
43
|
+
state: ComposerState;
|
|
44
|
+
/** Overrides the state's own placeholder (a connection reason, the host's copy). */
|
|
45
|
+
placeholder?: string;
|
|
46
|
+
/** Overrides the state's own hint ("Will queue" while a session runs). */
|
|
47
|
+
hint?: string;
|
|
48
|
+
/** The offline reason, printed in the hint row. */
|
|
49
|
+
blockedWhy?: string;
|
|
50
|
+
paletteOpen: boolean;
|
|
51
|
+
/** The command palette, already rendered by the container, or null. */
|
|
52
|
+
palette: ReactNode;
|
|
53
|
+
attachMenuOpen: boolean;
|
|
54
|
+
attachments: ComposerAttachment[];
|
|
55
|
+
attachErrors: string[];
|
|
56
|
+
provider: ComposerProvider | null;
|
|
57
|
+
/** The container's ref: it focuses the field after a recall or a voice edit. */
|
|
58
|
+
frameRef: RefObject<HTMLDivElement | null>;
|
|
59
|
+
/** The container's ref for the provider popover's outside-click dismissal. */
|
|
60
|
+
providerMenuRef: RefObject<HTMLDivElement | null>;
|
|
61
|
+
onChange: (value: string) => void;
|
|
62
|
+
onSend: () => void;
|
|
63
|
+
onStop: () => void;
|
|
64
|
+
onMic: () => void;
|
|
65
|
+
onAttachToggle: () => void;
|
|
66
|
+
onPickLibrary: () => void;
|
|
67
|
+
onPickCamera: () => void;
|
|
68
|
+
onPasteFiles: (files: File[]) => void;
|
|
69
|
+
onRecall: () => void;
|
|
70
|
+
onEscape: () => void;
|
|
71
|
+
onRemoveAttachment: (index: number) => void;
|
|
72
|
+
onDismissErrors: () => void;
|
|
73
|
+
onProviderToggle: () => void;
|
|
74
|
+
onProviderSelect: (id: string) => void;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export function ComposerView(p: ComposerViewProps) {
|
|
78
|
+
function onKeyDown(e: KeyboardEvent<HTMLDivElement>) {
|
|
79
|
+
if ((e.target as HTMLElement).tagName !== "TEXTAREA") return;
|
|
80
|
+
if (e.key === "ArrowUp" && !p.value.trim()) p.onRecall();
|
|
81
|
+
if (e.key === "Escape" && p.paletteOpen) p.onEscape();
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
function onPaste(e: ClipboardEvent<HTMLDivElement>) {
|
|
85
|
+
const files = e.clipboardData?.files;
|
|
86
|
+
if (!files || files.length === 0) return;
|
|
87
|
+
const images = Array.from(files).filter((f) => f.type.startsWith("image/"));
|
|
88
|
+
if (images.length === 0) return;
|
|
89
|
+
e.preventDefault();
|
|
90
|
+
p.onPasteFiles(images);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
const pointer = typeof window !== "undefined" && typeof window.matchMedia === "function" && window.matchMedia("(min-width: 900px)").matches;
|
|
94
|
+
const attachMenu = (
|
|
95
|
+
<div className="flex flex-col">
|
|
96
|
+
<ListRow variant="group" icon="image" iconTone="teal" title="Photo library" subtitle="Pick images already on this device" onClick={p.onPickLibrary} />
|
|
97
|
+
<ListRow variant="group" icon="attach" iconTone="amber" title="Camera" subtitle="Take a photo now" onClick={p.onPickCamera} />
|
|
98
|
+
<ListRow variant="group" icon="copy" iconTone="neutral" title="Paste" subtitle="An image on the clipboard pastes straight into the field" last />
|
|
99
|
+
</div>
|
|
100
|
+
);
|
|
101
|
+
|
|
102
|
+
return (
|
|
103
|
+
<div ref={p.frameRef} data-composer="" className="relative mx-auto max-w-3xl" onKeyDown={onKeyDown} onPaste={onPaste}>
|
|
104
|
+
{p.attachErrors.length > 0 && (
|
|
105
|
+
<div className="mb-2 flex items-start gap-2" role="alert">
|
|
106
|
+
<div className="min-w-0 flex-1">
|
|
107
|
+
<Callout tone="red" variant="banner" icon="failed" mono text={p.attachErrors.join(" · ")} />
|
|
108
|
+
</div>
|
|
109
|
+
<Button label="Dismiss" tone="quiet" size="sm" block={false} onClick={p.onDismissErrors} />
|
|
110
|
+
</div>
|
|
111
|
+
)}
|
|
112
|
+
|
|
113
|
+
{p.attachments.length > 0 && (
|
|
114
|
+
<div className="mb-2 flex flex-wrap gap-2">
|
|
115
|
+
{p.attachments.map((a, i) => (
|
|
116
|
+
<div key={i} className="relative h-16 w-16 shrink-0">
|
|
117
|
+
<img src={a.previewUrl} alt={a.name} className="h-16 w-16 rounded-lg border border-border object-cover" />
|
|
118
|
+
<button
|
|
119
|
+
type="button"
|
|
120
|
+
onClick={() => p.onRemoveAttachment(i)}
|
|
121
|
+
title="Remove"
|
|
122
|
+
aria-label={`Remove ${a.name}`}
|
|
123
|
+
className="absolute -right-1.5 -top-1.5 flex h-5 w-5 items-center justify-center rounded-full border border-border bg-surface text-muted-foreground shadow transition-colors hover:text-destructive"
|
|
124
|
+
>
|
|
125
|
+
<X className="h-3 w-3" />
|
|
126
|
+
</button>
|
|
127
|
+
</div>
|
|
128
|
+
))}
|
|
129
|
+
</div>
|
|
130
|
+
)}
|
|
131
|
+
|
|
132
|
+
{p.palette}
|
|
133
|
+
|
|
134
|
+
{/* The provider list, anchored above the field: the chip that opens it
|
|
135
|
+
sits in the kit's hint line, so the list is the frame's. */}
|
|
136
|
+
{p.provider && p.provider.menuOpen && !p.provider.locked && (
|
|
137
|
+
<div ref={p.providerMenuRef} role="menu" aria-label="Model" className="absolute bottom-full left-4 z-50 mb-1 min-w-[14rem] overflow-hidden rounded-xl border border-[var(--bk-color-edge)] bg-[var(--bk-color-raised)] py-1 shadow-2xl">
|
|
138
|
+
{p.provider.options.map((o) => (
|
|
139
|
+
<button
|
|
140
|
+
key={o.id}
|
|
141
|
+
role="menuitem"
|
|
142
|
+
type="button"
|
|
143
|
+
onClick={() => p.onProviderSelect(o.id)}
|
|
144
|
+
className="flex w-full items-center gap-2 px-3 py-2 text-left text-xs text-foreground transition-colors hover:bg-surface-raised"
|
|
145
|
+
>
|
|
146
|
+
<span className={cn("flex w-3.5 shrink-0", o.id === p.provider!.selectedId ? "opacity-100" : "opacity-0")}>
|
|
147
|
+
<Icon icon="confirm" size={14} color="var(--bk-amber-ink)" />
|
|
148
|
+
</span>
|
|
149
|
+
<span className="truncate">{o.label}</span>
|
|
150
|
+
</button>
|
|
151
|
+
))}
|
|
152
|
+
</div>
|
|
153
|
+
)}
|
|
154
|
+
|
|
155
|
+
{/* Capture is a MENU behind the paperclip (D37): a popover on a pointer
|
|
156
|
+
screen, the kit sheet on a phone. */}
|
|
157
|
+
{p.attachMenuOpen && pointer && (
|
|
158
|
+
<div role="menu" aria-label="Attach" className="absolute bottom-full left-4 z-50 mb-1 w-72 overflow-hidden rounded-xl border border-[var(--bk-color-edge)] bg-[var(--bk-color-raised)] shadow-2xl">
|
|
159
|
+
{attachMenu}
|
|
160
|
+
</div>
|
|
161
|
+
)}
|
|
162
|
+
{p.attachMenuOpen && !pointer && (
|
|
163
|
+
<div
|
|
164
|
+
className="fixed inset-0 z-40 bg-black/60"
|
|
165
|
+
onMouseDown={(e) => {
|
|
166
|
+
if (e.target === e.currentTarget) p.onAttachToggle();
|
|
167
|
+
}}
|
|
168
|
+
>
|
|
169
|
+
<div role="dialog" aria-label="Attach" className="absolute inset-x-0 bottom-0">
|
|
170
|
+
<BottomSheet title="Attach" subtitle="Photo, camera, or paste." docked>
|
|
171
|
+
{attachMenu}
|
|
172
|
+
</BottomSheet>
|
|
173
|
+
</div>
|
|
174
|
+
</div>
|
|
175
|
+
)}
|
|
176
|
+
|
|
177
|
+
<KitComposer
|
|
178
|
+
variant="send"
|
|
179
|
+
state={p.state}
|
|
180
|
+
placeholder={p.placeholder}
|
|
181
|
+
hint={p.hint}
|
|
182
|
+
blockedWhy={p.blockedWhy}
|
|
183
|
+
value={p.value}
|
|
184
|
+
provider={p.provider?.label}
|
|
185
|
+
onProvider={p.provider && !p.provider.locked ? p.onProviderToggle : undefined}
|
|
186
|
+
onChange={p.onChange}
|
|
187
|
+
onSend={p.onSend}
|
|
188
|
+
onStop={p.onStop}
|
|
189
|
+
onAttach={p.onAttachToggle}
|
|
190
|
+
onMic={p.onMic}
|
|
191
|
+
/>
|
|
192
|
+
</div>
|
|
193
|
+
);
|
|
194
|
+
}
|