@elizaos/ui 2.0.0-alpha.13 → 2.0.0-alpha.140
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/package.json +76 -49
- package/packages/ui/src/components/composites/chat/chat-attachment-strip.d.ts +9 -0
- package/packages/ui/src/components/composites/chat/chat-attachment-strip.d.ts.map +1 -0
- package/packages/ui/src/components/composites/chat/chat-attachment-strip.js +8 -0
- package/packages/ui/src/components/composites/chat/chat-bubble.d.ts +14 -0
- package/packages/ui/src/components/composites/chat/chat-bubble.d.ts.map +1 -0
- package/packages/ui/src/components/composites/chat/chat-bubble.js +14 -0
- package/packages/ui/src/components/composites/chat/chat-composer-shell.d.ts +10 -0
- package/packages/ui/src/components/composites/chat/chat-composer-shell.d.ts.map +1 -0
- package/packages/ui/src/components/composites/chat/chat-composer-shell.js +16 -0
- package/packages/ui/src/components/composites/chat/chat-composer.d.ts +39 -0
- package/packages/ui/src/components/composites/chat/chat-composer.d.ts.map +1 -0
- package/packages/ui/src/components/composites/chat/chat-composer.js +148 -0
- package/packages/ui/src/components/composites/chat/chat-conversation-item.d.ts +21 -0
- package/packages/ui/src/components/composites/chat/chat-conversation-item.d.ts.map +1 -0
- package/packages/ui/src/components/composites/chat/chat-conversation-item.js +120 -0
- package/packages/ui/src/components/composites/chat/chat-conversation-rename-dialog.d.ts +22 -0
- package/packages/ui/src/components/composites/chat/chat-conversation-rename-dialog.d.ts.map +1 -0
- package/packages/ui/src/components/composites/chat/chat-conversation-rename-dialog.js +14 -0
- package/packages/ui/src/components/composites/chat/chat-empty-state.d.ts +19 -0
- package/packages/ui/src/components/composites/chat/chat-empty-state.d.ts.map +1 -0
- package/packages/ui/src/components/composites/chat/chat-empty-state.js +8 -0
- package/packages/ui/src/components/composites/chat/chat-message-actions.d.ts +14 -0
- package/packages/ui/src/components/composites/chat/chat-message-actions.d.ts.map +1 -0
- package/packages/ui/src/components/composites/chat/chat-message-actions.js +10 -0
- package/packages/ui/src/components/composites/chat/chat-message.d.ts +18 -0
- package/packages/ui/src/components/composites/chat/chat-message.d.ts.map +1 -0
- package/packages/ui/src/components/composites/chat/chat-message.js +275 -0
- package/packages/ui/src/components/composites/chat/chat-sidebar.d.ts +54 -0
- package/packages/ui/src/components/composites/chat/chat-sidebar.d.ts.map +1 -0
- package/packages/ui/src/components/composites/chat/chat-sidebar.js +64 -0
- package/packages/ui/src/components/composites/chat/chat-source.d.ts +19 -0
- package/packages/ui/src/components/composites/chat/chat-source.d.ts.map +1 -0
- package/packages/ui/src/components/composites/chat/chat-source.js +127 -0
- package/packages/ui/src/components/composites/chat/chat-thread-layout.d.ts +18 -0
- package/packages/ui/src/components/composites/chat/chat-thread-layout.d.ts.map +1 -0
- package/packages/ui/src/components/composites/chat/chat-thread-layout.js +28 -0
- package/packages/ui/src/components/composites/chat/chat-transcript.d.ts +19 -0
- package/packages/ui/src/components/composites/chat/chat-transcript.d.ts.map +1 -0
- package/packages/ui/src/components/composites/chat/chat-transcript.js +82 -0
- package/packages/ui/src/components/composites/chat/chat-types.d.ts +90 -0
- package/packages/ui/src/components/composites/chat/chat-types.d.ts.map +1 -0
- package/packages/ui/src/components/composites/chat/chat-types.js +1 -0
- package/packages/ui/src/components/composites/chat/chat-typing-indicator.d.ts +10 -0
- package/packages/ui/src/components/composites/chat/chat-typing-indicator.d.ts.map +1 -0
- package/packages/ui/src/components/composites/chat/chat-typing-indicator.js +11 -0
- package/packages/ui/src/components/composites/chat/create-task-popover.d.ts +8 -0
- package/packages/ui/src/components/composites/chat/create-task-popover.d.ts.map +1 -0
- package/packages/ui/src/components/composites/chat/create-task-popover.js +44 -0
- package/packages/ui/src/components/composites/chat/index.d.ts +17 -0
- package/packages/ui/src/components/composites/chat/index.d.ts.map +1 -0
- package/packages/ui/src/components/composites/chat/index.js +16 -0
- package/packages/ui/src/components/composites/form-field/form-field.d.ts +14 -0
- package/packages/ui/src/components/composites/form-field/form-field.d.ts.map +1 -0
- package/packages/ui/src/components/composites/form-field/form-field.js +8 -0
- package/packages/ui/src/components/composites/form-field/index.d.ts +2 -0
- package/packages/ui/src/components/composites/form-field/index.d.ts.map +1 -0
- package/packages/ui/src/components/composites/form-field/index.js +1 -0
- package/packages/ui/src/components/composites/index.d.ts +27 -0
- package/packages/ui/src/components/composites/index.d.ts.map +1 -0
- package/packages/ui/src/components/composites/index.js +26 -0
- package/packages/ui/src/components/composites/page-panel/index.d.ts +29 -0
- package/packages/ui/src/components/composites/page-panel/index.d.ts.map +1 -0
- package/packages/ui/src/components/composites/page-panel/index.js +28 -0
- package/packages/ui/src/components/composites/page-panel/page-panel-collapsible-section.d.ts +4 -0
- package/packages/ui/src/components/composites/page-panel/page-panel-collapsible-section.d.ts.map +1 -0
- package/packages/ui/src/components/composites/page-panel/page-panel-collapsible-section.js +60 -0
- package/packages/ui/src/components/composites/page-panel/page-panel-empty.d.ts +3 -0
- package/packages/ui/src/components/composites/page-panel/page-panel-empty.d.ts.map +1 -0
- package/packages/ui/src/components/composites/page-panel/page-panel-empty.js +15 -0
- package/packages/ui/src/components/composites/page-panel/page-panel-frame.d.ts +5 -0
- package/packages/ui/src/components/composites/page-panel/page-panel-frame.d.ts.map +1 -0
- package/packages/ui/src/components/composites/page-panel/page-panel-frame.js +9 -0
- package/packages/ui/src/components/composites/page-panel/page-panel-header.d.ts +7 -0
- package/packages/ui/src/components/composites/page-panel/page-panel-header.d.ts.map +1 -0
- package/packages/ui/src/components/composites/page-panel/page-panel-header.js +30 -0
- package/packages/ui/src/components/composites/page-panel/page-panel-loading.d.ts +3 -0
- package/packages/ui/src/components/composites/page-panel/page-panel-loading.d.ts.map +1 -0
- package/packages/ui/src/components/composites/page-panel/page-panel-loading.js +13 -0
- package/packages/ui/src/components/composites/page-panel/page-panel-root.d.ts +7 -0
- package/packages/ui/src/components/composites/page-panel/page-panel-root.d.ts.map +1 -0
- package/packages/ui/src/components/composites/page-panel/page-panel-root.js +17 -0
- package/packages/ui/src/components/composites/page-panel/page-panel-toolbar.d.ts +4 -0
- package/packages/ui/src/components/composites/page-panel/page-panel-toolbar.d.ts.map +1 -0
- package/packages/ui/src/components/composites/page-panel/page-panel-toolbar.js +6 -0
- package/packages/ui/src/components/composites/page-panel/page-panel-types.d.ts +66 -0
- package/packages/ui/src/components/composites/page-panel/page-panel-types.d.ts.map +1 -0
- package/packages/ui/src/components/composites/page-panel/page-panel-types.js +1 -0
- package/packages/ui/src/components/composites/search/index.d.ts +3 -0
- package/packages/ui/src/components/composites/search/index.d.ts.map +1 -0
- package/packages/ui/src/components/composites/search/index.js +2 -0
- package/packages/ui/src/components/composites/search/search-input.d.ts.map +1 -0
- package/{dist/components/ui → packages/ui/src/components/composites/search}/search-input.js +3 -2
- package/{dist/components/ui/search-bar.d.ts → packages/ui/src/components/composites/search/searchbar.d.ts} +8 -7
- package/packages/ui/src/components/composites/search/searchbar.d.ts.map +1 -0
- package/packages/ui/src/components/composites/search/searchbar.js +25 -0
- package/packages/ui/src/components/composites/sidebar/index.d.ts +11 -0
- package/packages/ui/src/components/composites/sidebar/index.d.ts.map +1 -0
- package/packages/ui/src/components/composites/sidebar/index.js +10 -0
- package/packages/ui/src/components/composites/sidebar/sidebar-auto-rail.d.ts +15 -0
- package/packages/ui/src/components/composites/sidebar/sidebar-auto-rail.d.ts.map +1 -0
- package/packages/ui/src/components/composites/sidebar/sidebar-auto-rail.js +292 -0
- package/packages/ui/src/components/composites/sidebar/sidebar-body.d.ts +4 -0
- package/packages/ui/src/components/composites/sidebar/sidebar-body.d.ts.map +1 -0
- package/packages/ui/src/components/composites/sidebar/sidebar-body.js +7 -0
- package/packages/ui/src/components/composites/sidebar/sidebar-collapsed-rail.d.ts +11 -0
- package/packages/ui/src/components/composites/sidebar/sidebar-collapsed-rail.d.ts.map +1 -0
- package/packages/ui/src/components/composites/sidebar/sidebar-collapsed-rail.js +13 -0
- package/packages/ui/src/components/composites/sidebar/sidebar-content.d.ts +78 -0
- package/packages/ui/src/components/composites/sidebar/sidebar-content.d.ts.map +1 -0
- package/packages/ui/src/components/composites/sidebar/sidebar-content.js +89 -0
- package/packages/ui/src/components/composites/sidebar/sidebar-filter-bar.d.ts +3 -0
- package/packages/ui/src/components/composites/sidebar/sidebar-filter-bar.d.ts.map +1 -0
- package/packages/ui/src/components/composites/sidebar/sidebar-filter-bar.js +14 -0
- package/packages/ui/src/components/composites/sidebar/sidebar-header-stack.d.ts +3 -0
- package/packages/ui/src/components/composites/sidebar/sidebar-header-stack.d.ts.map +1 -0
- package/packages/ui/src/components/composites/sidebar/sidebar-header-stack.js +6 -0
- package/packages/ui/src/components/composites/sidebar/sidebar-header.d.ts +9 -0
- package/packages/ui/src/components/composites/sidebar/sidebar-header.d.ts.map +1 -0
- package/packages/ui/src/components/composites/sidebar/sidebar-header.js +6 -0
- package/packages/ui/src/components/composites/sidebar/sidebar-panel.d.ts +3 -0
- package/packages/ui/src/components/composites/sidebar/sidebar-panel.d.ts.map +1 -0
- package/packages/ui/src/components/composites/sidebar/sidebar-panel.js +18 -0
- package/packages/ui/src/components/composites/sidebar/sidebar-root.d.ts +4 -0
- package/packages/ui/src/components/composites/sidebar/sidebar-root.d.ts.map +1 -0
- package/packages/ui/src/components/composites/sidebar/sidebar-root.js +448 -0
- package/packages/ui/src/components/composites/sidebar/sidebar-scroll-region.d.ts +3 -0
- package/packages/ui/src/components/composites/sidebar/sidebar-scroll-region.d.ts.map +1 -0
- package/packages/ui/src/components/composites/sidebar/sidebar-scroll-region.js +18 -0
- package/packages/ui/src/components/composites/sidebar/sidebar-types.d.ts +59 -0
- package/packages/ui/src/components/composites/sidebar/sidebar-types.d.ts.map +1 -0
- package/packages/ui/src/components/composites/sidebar/sidebar-types.js +1 -0
- package/packages/ui/src/components/composites/skills/index.d.ts +2 -0
- package/packages/ui/src/components/composites/skills/index.d.ts.map +1 -0
- package/packages/ui/src/components/composites/skills/index.js +1 -0
- package/packages/ui/src/components/composites/skills/skill-sidebar-item.d.ts +16 -0
- package/packages/ui/src/components/composites/skills/skill-sidebar-item.d.ts.map +1 -0
- package/packages/ui/src/components/composites/skills/skill-sidebar-item.js +7 -0
- package/packages/ui/src/components/composites/trajectories/index.d.ts +5 -0
- package/packages/ui/src/components/composites/trajectories/index.d.ts.map +1 -0
- package/packages/ui/src/components/composites/trajectories/index.js +4 -0
- package/packages/ui/src/components/composites/trajectories/trajectory-code-block.d.ts +13 -0
- package/packages/ui/src/components/composites/trajectories/trajectory-code-block.d.ts.map +1 -0
- package/packages/ui/src/components/composites/trajectories/trajectory-code-block.js +13 -0
- package/packages/ui/src/components/composites/trajectories/trajectory-llm-call-card.d.ts +34 -0
- package/packages/ui/src/components/composites/trajectories/trajectory-llm-call-card.d.ts.map +1 -0
- package/packages/ui/src/components/composites/trajectories/trajectory-llm-call-card.js +14 -0
- package/packages/ui/src/components/composites/trajectories/trajectory-pipeline-graph.d.ts +26 -0
- package/packages/ui/src/components/composites/trajectories/trajectory-pipeline-graph.d.ts.map +1 -0
- package/packages/ui/src/components/composites/trajectories/trajectory-pipeline-graph.js +46 -0
- package/packages/ui/src/components/composites/trajectories/trajectory-sidebar-item.d.ts +15 -0
- package/packages/ui/src/components/composites/trajectories/trajectory-sidebar-item.d.ts.map +1 -0
- package/packages/ui/src/components/composites/trajectories/trajectory-sidebar-item.js +8 -0
- package/packages/ui/src/components/primitives/index.d.ts +26 -0
- package/packages/ui/src/components/primitives/index.d.ts.map +1 -0
- package/packages/ui/src/components/primitives/index.js +25 -0
- package/packages/ui/src/components/ui/admin-dialog.d.ts +50 -0
- package/packages/ui/src/components/ui/admin-dialog.d.ts.map +1 -0
- package/packages/ui/src/components/ui/admin-dialog.js +48 -0
- package/{dist → packages/ui/src}/components/ui/badge.d.ts +1 -1
- package/packages/ui/src/components/ui/badge.d.ts.map +1 -0
- package/packages/ui/src/components/ui/banner.d.ts.map +1 -0
- package/{dist → packages/ui/src}/components/ui/banner.js +2 -1
- package/{dist → packages/ui/src}/components/ui/button.d.ts +1 -1
- package/packages/ui/src/components/ui/button.d.ts.map +1 -0
- package/packages/ui/src/components/ui/button.js +39 -0
- package/{dist → packages/ui/src}/components/ui/card.d.ts +8 -2
- package/packages/ui/src/components/ui/card.d.ts.map +1 -0
- package/{dist → packages/ui/src}/components/ui/card.js +17 -2
- package/packages/ui/src/components/ui/checkbox.d.ts.map +1 -0
- package/packages/ui/src/components/ui/confirm-delete.d.ts +20 -0
- package/packages/ui/src/components/ui/confirm-delete.d.ts.map +1 -0
- package/packages/ui/src/components/ui/confirm-delete.js +16 -0
- package/packages/ui/src/components/ui/confirm-dialog.d.ts +49 -0
- package/packages/ui/src/components/ui/confirm-dialog.d.ts.map +1 -0
- package/packages/ui/src/components/ui/confirm-dialog.js +90 -0
- package/{dist → packages/ui/src}/components/ui/connection-status.d.ts +6 -0
- package/packages/ui/src/components/ui/connection-status.d.ts.map +1 -0
- package/packages/ui/src/components/ui/connection-status.js +25 -0
- package/packages/ui/src/components/ui/copy-button.d.ts.map +1 -0
- package/{dist → packages/ui/src}/components/ui/dialog.d.ts +6 -1
- package/packages/ui/src/components/ui/dialog.d.ts.map +1 -0
- package/packages/ui/src/components/ui/dialog.js +23 -0
- package/packages/ui/src/components/ui/drawer-sheet.d.ts +19 -0
- package/packages/ui/src/components/ui/drawer-sheet.d.ts.map +1 -0
- package/packages/ui/src/components/ui/drawer-sheet.js +21 -0
- package/packages/ui/src/components/ui/dropdown-menu.d.ts.map +1 -0
- package/{dist → packages/ui/src}/components/ui/dropdown-menu.js +1 -1
- package/packages/ui/src/components/ui/empty-state.d.ts.map +1 -0
- package/{dist → packages/ui/src}/components/ui/error-boundary.d.ts +5 -1
- package/packages/ui/src/components/ui/error-boundary.d.ts.map +1 -0
- package/{dist → packages/ui/src}/components/ui/error-boundary.js +1 -1
- package/packages/ui/src/components/ui/field-switch.d.ts +8 -0
- package/packages/ui/src/components/ui/field-switch.d.ts.map +1 -0
- package/packages/ui/src/components/ui/field-switch.js +10 -0
- package/packages/ui/src/components/ui/field.d.ts +11 -0
- package/packages/ui/src/components/ui/field.d.ts.map +1 -0
- package/packages/ui/src/components/ui/field.js +21 -0
- package/packages/ui/src/components/ui/form-select.d.ts +13 -0
- package/packages/ui/src/components/ui/form-select.d.ts.map +1 -0
- package/packages/ui/src/components/ui/form-select.js +9 -0
- package/{dist → packages/ui/src}/components/ui/grid.d.ts +1 -1
- package/packages/ui/src/components/ui/grid.d.ts.map +1 -0
- package/packages/ui/src/components/ui/input.d.ts +12 -0
- package/packages/ui/src/components/ui/input.d.ts.map +1 -0
- package/packages/ui/src/components/ui/input.js +28 -0
- package/packages/ui/src/components/ui/label.d.ts.map +1 -0
- package/packages/ui/src/components/ui/new-action-button.d.ts +7 -0
- package/packages/ui/src/components/ui/new-action-button.d.ts.map +1 -0
- package/packages/ui/src/components/ui/new-action-button.js +13 -0
- package/packages/ui/src/components/ui/popover.d.ts.map +1 -0
- package/packages/ui/src/components/ui/save-footer.d.ts.map +1 -0
- package/packages/ui/src/components/ui/save-footer.js +10 -0
- package/packages/ui/src/components/ui/section-card.d.ts.map +1 -0
- package/{dist → packages/ui/src}/components/ui/section-card.js +3 -2
- package/packages/ui/src/components/ui/segmented-control.d.ts +18 -0
- package/packages/ui/src/components/ui/segmented-control.d.ts.map +1 -0
- package/packages/ui/src/components/ui/segmented-control.js +10 -0
- package/packages/ui/src/components/ui/select.d.ts.map +1 -0
- package/{dist → packages/ui/src}/components/ui/select.js +7 -6
- package/packages/ui/src/components/ui/separator.d.ts.map +1 -0
- package/packages/ui/src/components/ui/settings-controls.d.ts +41 -0
- package/packages/ui/src/components/ui/settings-controls.d.ts.map +1 -0
- package/packages/ui/src/components/ui/settings-controls.js +60 -0
- package/packages/ui/src/components/ui/skeleton.d.ts.map +1 -0
- package/{dist → packages/ui/src}/components/ui/skeleton.js +1 -2
- package/packages/ui/src/components/ui/slider.d.ts.map +1 -0
- package/{dist → packages/ui/src}/components/ui/slider.js +1 -1
- package/packages/ui/src/components/ui/sonner.d.ts +2 -0
- package/packages/ui/src/components/ui/sonner.d.ts.map +1 -0
- package/packages/ui/src/components/ui/sonner.js +1 -0
- package/packages/ui/src/components/ui/spinner.d.ts.map +1 -0
- package/{dist → packages/ui/src}/components/ui/stack.d.ts +1 -1
- package/packages/ui/src/components/ui/stack.d.ts.map +1 -0
- package/{dist → packages/ui/src}/components/ui/status-badge.d.ts +11 -4
- package/packages/ui/src/components/ui/status-badge.d.ts.map +1 -0
- package/packages/ui/src/components/ui/status-badge.js +70 -0
- package/packages/ui/src/components/ui/switch.d.ts.map +1 -0
- package/packages/ui/src/components/ui/switch.js +7 -0
- package/packages/ui/src/components/ui/tabs.d.ts.map +1 -0
- package/{dist → packages/ui/src}/components/ui/tabs.js +1 -1
- package/packages/ui/src/components/ui/tag-editor.d.ts +12 -0
- package/packages/ui/src/components/ui/tag-editor.d.ts.map +1 -0
- package/packages/ui/src/components/ui/tag-editor.js +34 -0
- package/packages/ui/src/components/ui/tag-input.d.ts +3 -0
- package/packages/ui/src/components/ui/tag-input.d.ts.map +1 -0
- package/packages/ui/src/components/ui/tag-input.js +1 -0
- package/packages/ui/src/components/ui/textarea.d.ts +12 -0
- package/packages/ui/src/components/ui/textarea.d.ts.map +1 -0
- package/packages/ui/src/components/ui/textarea.js +28 -0
- package/{dist → packages/ui/src}/components/ui/themed-select.d.ts +3 -8
- package/packages/ui/src/components/ui/themed-select.d.ts.map +1 -0
- package/packages/ui/src/components/ui/themed-select.js +137 -0
- package/{dist → packages/ui/src}/components/ui/tooltip-extended.d.ts +3 -25
- package/packages/ui/src/components/ui/tooltip-extended.d.ts.map +1 -0
- package/packages/ui/src/components/ui/tooltip-extended.js +116 -0
- package/{dist → packages/ui/src}/components/ui/tooltip.d.ts +10 -0
- package/packages/ui/src/components/ui/tooltip.d.ts.map +1 -0
- package/packages/ui/src/components/ui/tooltip.js +13 -0
- package/{dist → packages/ui/src}/components/ui/typography.d.ts +2 -2
- package/packages/ui/src/components/ui/typography.d.ts.map +1 -0
- package/{dist → packages/ui/src}/components/ui/typography.js +1 -1
- package/packages/ui/src/hooks/index.d.ts +6 -0
- package/packages/ui/src/hooks/index.d.ts.map +1 -0
- package/packages/ui/src/hooks/index.js +5 -0
- package/packages/ui/src/hooks/useClickOutside.d.ts +3 -0
- package/packages/ui/src/hooks/useClickOutside.d.ts.map +1 -0
- package/packages/ui/src/hooks/useClickOutside.js +22 -0
- package/packages/ui/src/hooks/useDocumentVisibility.d.ts +3 -0
- package/packages/ui/src/hooks/useDocumentVisibility.d.ts.map +1 -0
- package/packages/ui/src/hooks/useDocumentVisibility.js +28 -0
- package/packages/ui/src/hooks/useKeyboardShortcuts.d.ts +13 -0
- package/packages/ui/src/hooks/useKeyboardShortcuts.d.ts.map +1 -0
- package/packages/ui/src/hooks/useKeyboardShortcuts.js +34 -0
- package/packages/ui/src/hooks/useLinkedSidebarSelection.d.ts +16 -0
- package/packages/ui/src/hooks/useLinkedSidebarSelection.d.ts.map +1 -0
- package/packages/ui/src/hooks/useLinkedSidebarSelection.js +117 -0
- package/packages/ui/src/hooks/useTimeout.d.ts +5 -0
- package/packages/ui/src/hooks/useTimeout.d.ts.map +1 -0
- package/packages/ui/src/hooks/useTimeout.js +26 -0
- package/packages/ui/src/index.d.ts +8 -0
- package/packages/ui/src/index.d.ts.map +1 -0
- package/packages/ui/src/index.js +7 -0
- package/packages/ui/src/layouts/chat-panel-layout/chat-panel-layout.d.ts +11 -0
- package/packages/ui/src/layouts/chat-panel-layout/chat-panel-layout.d.ts.map +1 -0
- package/packages/ui/src/layouts/chat-panel-layout/chat-panel-layout.js +37 -0
- package/packages/ui/src/layouts/chat-panel-layout/index.d.ts +2 -0
- package/packages/ui/src/layouts/chat-panel-layout/index.d.ts.map +1 -0
- package/packages/ui/src/layouts/chat-panel-layout/index.js +1 -0
- package/packages/ui/src/layouts/content-layout/content-layout.d.ts +21 -0
- package/packages/ui/src/layouts/content-layout/content-layout.d.ts.map +1 -0
- package/packages/ui/src/layouts/content-layout/content-layout.js +5 -0
- package/packages/ui/src/layouts/content-layout/index.d.ts +2 -0
- package/packages/ui/src/layouts/content-layout/index.d.ts.map +1 -0
- package/packages/ui/src/layouts/content-layout/index.js +1 -0
- package/packages/ui/src/layouts/index.d.ts +5 -0
- package/packages/ui/src/layouts/index.d.ts.map +1 -0
- package/packages/ui/src/layouts/index.js +4 -0
- package/packages/ui/src/layouts/layout-test-utils.d.ts +6 -0
- package/packages/ui/src/layouts/layout-test-utils.d.ts.map +1 -0
- package/packages/ui/src/layouts/layout-test-utils.js +36 -0
- package/packages/ui/src/layouts/page-layout/index.d.ts +5 -0
- package/packages/ui/src/layouts/page-layout/index.d.ts.map +1 -0
- package/packages/ui/src/layouts/page-layout/index.js +4 -0
- package/packages/ui/src/layouts/page-layout/page-layout-header.d.ts +5 -0
- package/packages/ui/src/layouts/page-layout/page-layout-header.d.ts.map +1 -0
- package/packages/ui/src/layouts/page-layout/page-layout-header.js +5 -0
- package/packages/ui/src/layouts/page-layout/page-layout-mobile-drawer.d.ts +3 -0
- package/packages/ui/src/layouts/page-layout/page-layout-mobile-drawer.d.ts.map +1 -0
- package/packages/ui/src/layouts/page-layout/page-layout-mobile-drawer.js +18 -0
- package/packages/ui/src/layouts/page-layout/page-layout-types.d.ts +15 -0
- package/packages/ui/src/layouts/page-layout/page-layout-types.d.ts.map +1 -0
- package/packages/ui/src/layouts/page-layout/page-layout-types.js +1 -0
- package/packages/ui/src/layouts/page-layout/page-layout.d.ts +3 -0
- package/packages/ui/src/layouts/page-layout/page-layout.d.ts.map +1 -0
- package/packages/ui/src/layouts/page-layout/page-layout.js +5 -0
- package/packages/ui/src/layouts/workspace-layout/index.d.ts +3 -0
- package/packages/ui/src/layouts/workspace-layout/index.d.ts.map +1 -0
- package/packages/ui/src/layouts/workspace-layout/index.js +2 -0
- package/packages/ui/src/layouts/workspace-layout/workspace-layout-types.d.ts +19 -0
- package/packages/ui/src/layouts/workspace-layout/workspace-layout-types.d.ts.map +1 -0
- package/packages/ui/src/layouts/workspace-layout/workspace-layout-types.js +1 -0
- package/packages/ui/src/layouts/workspace-layout/workspace-layout.d.ts +3 -0
- package/packages/ui/src/layouts/workspace-layout/workspace-layout.d.ts.map +1 -0
- package/packages/ui/src/layouts/workspace-layout/workspace-layout.js +50 -0
- package/packages/ui/src/lib/floating-layers.d.ts +17 -0
- package/packages/ui/src/lib/floating-layers.d.ts.map +1 -0
- package/packages/ui/src/lib/floating-layers.js +20 -0
- package/packages/ui/src/lib/utils.d.ts +3 -0
- package/packages/ui/src/lib/utils.d.ts.map +1 -0
- package/{dist → packages/ui/src}/lib/utils.js +0 -3
- package/packages/ui/src/stories/layout-story-fixtures.d.ts +14 -0
- package/packages/ui/src/stories/layout-story-fixtures.d.ts.map +1 -0
- package/packages/ui/src/stories/layout-story-fixtures.js +33 -0
- package/styles/theme.css +7 -0
- package/README.md +0 -6
- package/dist/components/ui/badge.d.ts.map +0 -1
- package/dist/components/ui/banner.d.ts.map +0 -1
- package/dist/components/ui/button.d.ts.map +0 -1
- package/dist/components/ui/button.js +0 -33
- package/dist/components/ui/card.d.ts.map +0 -1
- package/dist/components/ui/chat-atoms.d.ts +0 -26
- package/dist/components/ui/chat-atoms.d.ts.map +0 -1
- package/dist/components/ui/chat-atoms.js +0 -17
- package/dist/components/ui/checkbox.d.ts.map +0 -1
- package/dist/components/ui/confirm-delete.d.ts +0 -12
- package/dist/components/ui/confirm-delete.d.ts.map +0 -1
- package/dist/components/ui/confirm-delete.js +0 -13
- package/dist/components/ui/confirm-dialog.d.ts +0 -24
- package/dist/components/ui/confirm-dialog.d.ts.map +0 -1
- package/dist/components/ui/confirm-dialog.js +0 -55
- package/dist/components/ui/connection-status.d.ts.map +0 -1
- package/dist/components/ui/connection-status.js +0 -25
- package/dist/components/ui/copy-button.d.ts.map +0 -1
- package/dist/components/ui/dialog.d.ts.map +0 -1
- package/dist/components/ui/dialog.js +0 -22
- package/dist/components/ui/dropdown-menu.d.ts.map +0 -1
- package/dist/components/ui/empty-state.d.ts.map +0 -1
- package/dist/components/ui/error-boundary.d.ts.map +0 -1
- package/dist/components/ui/grid.d.ts.map +0 -1
- package/dist/components/ui/input.d.ts +0 -6
- package/dist/components/ui/input.d.ts.map +0 -1
- package/dist/components/ui/input.js +0 -8
- package/dist/components/ui/label.d.ts.map +0 -1
- package/dist/components/ui/popover.d.ts.map +0 -1
- package/dist/components/ui/save-footer.d.ts.map +0 -1
- package/dist/components/ui/save-footer.js +0 -9
- package/dist/components/ui/search-bar.d.ts.map +0 -1
- package/dist/components/ui/search-bar.js +0 -19
- package/dist/components/ui/search-input.d.ts.map +0 -1
- package/dist/components/ui/section-card.d.ts.map +0 -1
- package/dist/components/ui/select.d.ts.map +0 -1
- package/dist/components/ui/separator.d.ts.map +0 -1
- package/dist/components/ui/skeleton.d.ts.map +0 -1
- package/dist/components/ui/slider.d.ts.map +0 -1
- package/dist/components/ui/sonner.d.ts +0 -5
- package/dist/components/ui/sonner.d.ts.map +0 -1
- package/dist/components/ui/sonner.js +0 -15
- package/dist/components/ui/spinner.d.ts.map +0 -1
- package/dist/components/ui/stack.d.ts.map +0 -1
- package/dist/components/ui/status-badge.d.ts.map +0 -1
- package/dist/components/ui/status-badge.js +0 -41
- package/dist/components/ui/switch.d.ts.map +0 -1
- package/dist/components/ui/switch.js +0 -7
- package/dist/components/ui/tabs.d.ts.map +0 -1
- package/dist/components/ui/tag-editor.d.ts +0 -24
- package/dist/components/ui/tag-editor.d.ts.map +0 -1
- package/dist/components/ui/tag-editor.js +0 -32
- package/dist/components/ui/tag-input.d.ts +0 -19
- package/dist/components/ui/tag-input.d.ts.map +0 -1
- package/dist/components/ui/tag-input.js +0 -28
- package/dist/components/ui/textarea.d.ts +0 -6
- package/dist/components/ui/textarea.d.ts.map +0 -1
- package/dist/components/ui/textarea.js +0 -8
- package/dist/components/ui/themed-select.d.ts.map +0 -1
- package/dist/components/ui/themed-select.js +0 -57
- package/dist/components/ui/tooltip-extended.d.ts.map +0 -1
- package/dist/components/ui/tooltip-extended.js +0 -128
- package/dist/components/ui/tooltip.d.ts.map +0 -1
- package/dist/components/ui/tooltip.js +0 -10
- package/dist/components/ui/typography.d.ts.map +0 -1
- package/dist/index.d.ts +0 -42
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -43
- package/dist/lib/button-styles.d.ts +0 -12
- package/dist/lib/button-styles.d.ts.map +0 -1
- package/dist/lib/button-styles.js +0 -11
- package/dist/lib/utils.d.ts +0 -6
- package/dist/lib/utils.d.ts.map +0 -1
- package/dist/package.json +0 -64
- package/dist/styles/theme.css +0 -193
- package/src/styles/theme.css +0 -193
- /package/{dist/components/ui → packages/ui/src/components/composites/search}/search-input.d.ts +0 -0
- /package/{dist → packages/ui/src}/components/ui/badge.js +0 -0
- /package/{dist → packages/ui/src}/components/ui/banner.d.ts +0 -0
- /package/{dist → packages/ui/src}/components/ui/checkbox.d.ts +0 -0
- /package/{dist → packages/ui/src}/components/ui/checkbox.js +0 -0
- /package/{dist → packages/ui/src}/components/ui/copy-button.d.ts +0 -0
- /package/{dist → packages/ui/src}/components/ui/copy-button.js +0 -0
- /package/{dist → packages/ui/src}/components/ui/dropdown-menu.d.ts +0 -0
- /package/{dist → packages/ui/src}/components/ui/empty-state.d.ts +0 -0
- /package/{dist → packages/ui/src}/components/ui/empty-state.js +0 -0
- /package/{dist → packages/ui/src}/components/ui/grid.js +0 -0
- /package/{dist → packages/ui/src}/components/ui/label.d.ts +0 -0
- /package/{dist → packages/ui/src}/components/ui/label.js +0 -0
- /package/{dist → packages/ui/src}/components/ui/popover.d.ts +0 -0
- /package/{dist → packages/ui/src}/components/ui/popover.js +0 -0
- /package/{dist → packages/ui/src}/components/ui/save-footer.d.ts +0 -0
- /package/{dist → packages/ui/src}/components/ui/section-card.d.ts +0 -0
- /package/{dist → packages/ui/src}/components/ui/select.d.ts +0 -0
- /package/{dist → packages/ui/src}/components/ui/separator.d.ts +0 -0
- /package/{dist → packages/ui/src}/components/ui/separator.js +0 -0
- /package/{dist → packages/ui/src}/components/ui/skeleton.d.ts +0 -0
- /package/{dist → packages/ui/src}/components/ui/slider.d.ts +0 -0
- /package/{dist → packages/ui/src}/components/ui/spinner.d.ts +0 -0
- /package/{dist → packages/ui/src}/components/ui/spinner.js +0 -0
- /package/{dist → packages/ui/src}/components/ui/stack.js +0 -0
- /package/{dist → packages/ui/src}/components/ui/switch.d.ts +0 -0
- /package/{dist → packages/ui/src}/components/ui/tabs.d.ts +0 -0
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Hash, MessageCircleMore, MessageSquareText, MessagesSquare, Phone, Send, Shield, TerminalSquare, } from "lucide-react";
|
|
3
|
+
import { cn } from "../../../lib/utils";
|
|
4
|
+
function DiscordIcon({ className }) {
|
|
5
|
+
return (_jsx("svg", { "aria-hidden": "true", className: cn("h-4 w-4", className), viewBox: "0 0 24 24", fill: "currentColor", children: _jsx("path", { d: "M20.317 4.37a19.791 19.791 0 00-4.885-1.515.074.074 0 00-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 00-5.487 0 12.64 12.64 0 00-.617-1.25.077.077 0 00-.079-.037A19.736 19.736 0 003.677 4.37a.07.07 0 00-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 00.031.057 19.9 19.9 0 005.993 3.03.078.078 0 00.084-.028c.462-.63.874-1.295 1.226-1.994a.076.076 0 00-.041-.106 13.107 13.107 0 01-1.872-.892.077.077 0 01-.008-.128 10.2 10.2 0 00.372-.292.074.074 0 01.077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 01.078.01c.12.098.246.198.373.292a.077.077 0 01-.006.127 12.299 12.299 0 01-1.873.892.077.077 0 00-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 00.084.028 19.839 19.839 0 006.002-3.03.077.077 0 00.032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 00-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.095 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.095 2.157 2.42 0 1.333-.947 2.418-2.157 2.418z" }) }));
|
|
6
|
+
}
|
|
7
|
+
const SOURCE_META = {
|
|
8
|
+
eliza: {
|
|
9
|
+
badgeClassName: "border-accent/30 bg-accent/10 text-accent",
|
|
10
|
+
borderClassName: "border-accent/60",
|
|
11
|
+
iconClassName: "text-accent",
|
|
12
|
+
Icon: TerminalSquare,
|
|
13
|
+
label: "Terminal",
|
|
14
|
+
},
|
|
15
|
+
app: {
|
|
16
|
+
badgeClassName: "border-accent/30 bg-accent/10 text-accent",
|
|
17
|
+
borderClassName: "border-accent/60",
|
|
18
|
+
iconClassName: "text-accent",
|
|
19
|
+
Icon: TerminalSquare,
|
|
20
|
+
label: "Terminal",
|
|
21
|
+
},
|
|
22
|
+
discord: {
|
|
23
|
+
badgeClassName: "border-[#5865F2]/30 bg-[#5865F2]/10 text-[#c7cdff]",
|
|
24
|
+
borderClassName: "border-[#5865F2]/60",
|
|
25
|
+
iconClassName: "text-[#8ea1ff]",
|
|
26
|
+
Icon: DiscordIcon,
|
|
27
|
+
label: "Discord",
|
|
28
|
+
},
|
|
29
|
+
"discord-local": {
|
|
30
|
+
badgeClassName: "border-[#5865F2]/30 bg-[#5865F2]/10 text-[#c7cdff]",
|
|
31
|
+
borderClassName: "border-[#5865F2]/60",
|
|
32
|
+
iconClassName: "text-[#8ea1ff]",
|
|
33
|
+
Icon: DiscordIcon,
|
|
34
|
+
label: "Discord",
|
|
35
|
+
},
|
|
36
|
+
bluebubbles: {
|
|
37
|
+
badgeClassName: "border-[#34c759]/30 bg-[#34c759]/10 text-[#b6f2c7]",
|
|
38
|
+
borderClassName: "border-[#34c759]/60",
|
|
39
|
+
iconClassName: "text-[#34c759]",
|
|
40
|
+
Icon: MessageCircleMore,
|
|
41
|
+
label: "iMessage",
|
|
42
|
+
},
|
|
43
|
+
imessage: {
|
|
44
|
+
badgeClassName: "border-[#34c759]/30 bg-[#34c759]/10 text-[#b6f2c7]",
|
|
45
|
+
borderClassName: "border-[#34c759]/60",
|
|
46
|
+
iconClassName: "text-[#34c759]",
|
|
47
|
+
Icon: MessageCircleMore,
|
|
48
|
+
label: "iMessage",
|
|
49
|
+
},
|
|
50
|
+
signal: {
|
|
51
|
+
badgeClassName: "border-[#3A76F0]/30 bg-[#3A76F0]/10 text-[#bed2ff]",
|
|
52
|
+
borderClassName: "border-[#3A76F0]/60",
|
|
53
|
+
iconClassName: "text-[#73a0ff]",
|
|
54
|
+
Icon: Shield,
|
|
55
|
+
label: "Signal",
|
|
56
|
+
},
|
|
57
|
+
slack: {
|
|
58
|
+
badgeClassName: "border-[#4A154B]/30 bg-[#4A154B]/10 text-[#dfb9df]",
|
|
59
|
+
borderClassName: "border-[#4A154B]/60",
|
|
60
|
+
iconClassName: "text-[#c78bc8]",
|
|
61
|
+
Icon: Hash,
|
|
62
|
+
label: "Slack",
|
|
63
|
+
},
|
|
64
|
+
sms: {
|
|
65
|
+
badgeClassName: "border-[#8E8E93]/30 bg-[#8E8E93]/10 text-[#d7d7da]",
|
|
66
|
+
borderClassName: "border-[#8E8E93]/60",
|
|
67
|
+
iconClassName: "text-[#c8c8cc]",
|
|
68
|
+
Icon: MessageSquareText,
|
|
69
|
+
label: "SMS",
|
|
70
|
+
},
|
|
71
|
+
telegram: {
|
|
72
|
+
badgeClassName: "border-[#229ED9]/30 bg-[#229ED9]/10 text-[#b3e6ff]",
|
|
73
|
+
borderClassName: "border-[#229ED9]/60",
|
|
74
|
+
iconClassName: "text-[#63c5ff]",
|
|
75
|
+
Icon: Send,
|
|
76
|
+
label: "Telegram",
|
|
77
|
+
},
|
|
78
|
+
"telegram-account": {
|
|
79
|
+
badgeClassName: "border-[#229ED9]/30 bg-[#229ED9]/10 text-[#b3e6ff]",
|
|
80
|
+
borderClassName: "border-[#229ED9]/60",
|
|
81
|
+
iconClassName: "text-[#63c5ff]",
|
|
82
|
+
Icon: Send,
|
|
83
|
+
label: "Telegram",
|
|
84
|
+
},
|
|
85
|
+
wechat: {
|
|
86
|
+
badgeClassName: "border-[#07C160]/30 bg-[#07C160]/10 text-[#acf0c8]",
|
|
87
|
+
borderClassName: "border-[#07C160]/60",
|
|
88
|
+
iconClassName: "text-[#4ed58f]",
|
|
89
|
+
Icon: MessagesSquare,
|
|
90
|
+
label: "WeChat",
|
|
91
|
+
},
|
|
92
|
+
whatsapp: {
|
|
93
|
+
badgeClassName: "border-[#25D366]/30 bg-[#25D366]/10 text-[#b3f1c6]",
|
|
94
|
+
borderClassName: "border-[#25D366]/60",
|
|
95
|
+
iconClassName: "text-[#4fdf85]",
|
|
96
|
+
Icon: Phone,
|
|
97
|
+
label: "WhatsApp",
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
function toTitleCase(source) {
|
|
101
|
+
return source
|
|
102
|
+
.trim()
|
|
103
|
+
.split(/[\s_-]+/)
|
|
104
|
+
.filter(Boolean)
|
|
105
|
+
.map((part) => part.charAt(0).toUpperCase() + part.slice(1))
|
|
106
|
+
.join(" ");
|
|
107
|
+
}
|
|
108
|
+
export function getChatSourceMeta(source) {
|
|
109
|
+
const normalized = source.trim().toLowerCase();
|
|
110
|
+
const known = SOURCE_META[normalized];
|
|
111
|
+
if (known)
|
|
112
|
+
return known;
|
|
113
|
+
return {
|
|
114
|
+
badgeClassName: "border-accent/25 bg-accent/8 text-muted-strong",
|
|
115
|
+
borderClassName: "border-accent/40",
|
|
116
|
+
iconClassName: "text-accent/85",
|
|
117
|
+
Icon: MessageSquareText,
|
|
118
|
+
label: toTitleCase(source),
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
export function ChatSourceIcon({ source, className, decorative = false, }) {
|
|
122
|
+
const meta = getChatSourceMeta(source);
|
|
123
|
+
const Icon = meta.Icon;
|
|
124
|
+
return (_jsx("span", { "data-testid": "chat-source-icon", "data-source": source.trim().toLowerCase(), className: cn("inline-flex shrink-0 items-center justify-center", meta.iconClassName), ...(decorative
|
|
125
|
+
? { "aria-hidden": true }
|
|
126
|
+
: { "aria-label": meta.label, role: "img", title: meta.label }), children: _jsx(Icon, { className: className }) }));
|
|
127
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import type { ChatVariant } from "./chat-types";
|
|
3
|
+
export interface ChatThreadLayoutProps extends React.HTMLAttributes<HTMLElement> {
|
|
4
|
+
composerHeight?: number;
|
|
5
|
+
composer?: React.ReactNode;
|
|
6
|
+
footerStack?: React.ReactNode;
|
|
7
|
+
gameModalComposerGapPx?: number;
|
|
8
|
+
gameModalMessageBottomFallback?: string;
|
|
9
|
+
gameModalMessageTop?: string;
|
|
10
|
+
imageDragOver?: boolean;
|
|
11
|
+
messagesClassName?: string;
|
|
12
|
+
messagesRef?: React.Ref<HTMLDivElement>;
|
|
13
|
+
messagesStyle?: React.CSSProperties;
|
|
14
|
+
messagesTestId?: string;
|
|
15
|
+
variant?: ChatVariant;
|
|
16
|
+
}
|
|
17
|
+
export declare const ChatThreadLayout: React.ForwardRefExoticComponent<ChatThreadLayoutProps & React.RefAttributes<HTMLElement>>;
|
|
18
|
+
//# sourceMappingURL=chat-thread-layout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-thread-layout.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/composites/chat/chat-thread-layout.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,WAAW,qBACf,SAAQ,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC;IACzC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,8BAA8B,CAAC,EAAE,MAAM,CAAC;IACxC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACxC,aAAa,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACpC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB;AAED,eAAO,MAAM,gBAAgB,2FA+E3B,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
import { cn } from "../../../lib/utils";
|
|
4
|
+
export const ChatThreadLayout = React.forwardRef(function ChatThreadLayout({ children, className, composerHeight = 0, composer, footerStack, gameModalComposerGapPx = 18, gameModalMessageBottomFallback = "5.25rem", gameModalMessageTop = "calc(-100% + 1.5rem)", imageDragOver = false, messagesClassName, messagesRef, messagesStyle, messagesTestId = "chat-messages-scroll", variant = "default", ...props }, ref) {
|
|
5
|
+
const isGameModal = variant === "game-modal";
|
|
6
|
+
const resolvedMessagesStyle = isGameModal
|
|
7
|
+
? {
|
|
8
|
+
zIndex: 1,
|
|
9
|
+
top: gameModalMessageTop,
|
|
10
|
+
bottom: composerHeight > 0
|
|
11
|
+
? `${composerHeight + gameModalComposerGapPx}px`
|
|
12
|
+
: gameModalMessageBottomFallback,
|
|
13
|
+
overscrollBehavior: "contain",
|
|
14
|
+
touchAction: "pan-y",
|
|
15
|
+
userSelect: "text",
|
|
16
|
+
WebkitUserSelect: "text",
|
|
17
|
+
maskImage: "linear-gradient(to bottom, transparent 0%, rgba(0,0,0,0.28) 6%, rgba(0,0,0,0.82) 12%, black 17%, black 100%)",
|
|
18
|
+
WebkitMaskImage: "linear-gradient(to bottom, transparent 0%, rgba(0,0,0,0.28) 6%, rgba(0,0,0,0.82) 12%, black 17%, black 100%)",
|
|
19
|
+
...messagesStyle,
|
|
20
|
+
}
|
|
21
|
+
: {
|
|
22
|
+
zIndex: 1,
|
|
23
|
+
...messagesStyle,
|
|
24
|
+
};
|
|
25
|
+
return (_jsxs("section", { ref: ref, "aria-label": "Chat workspace", className: cn("relative flex min-h-0 flex-1 flex-col", isGameModal ? "overflow-visible pointer-events-none" : "bg-transparent", imageDragOver && "ring-2 ring-inset ring-accent", className), ...props, children: [_jsx("div", { ref: messagesRef, "data-testid": messagesTestId, "data-no-window-drag": false, "data-no-camera-drag": false, "data-no-camera-zoom": false, className: cn(isGameModal
|
|
26
|
+
? "chat-native-scrollbar absolute inset-x-0 overflow-x-hidden overflow-y-auto pointer-events-auto"
|
|
27
|
+
: "chat-native-scrollbar relative flex flex-1 flex-col overflow-x-hidden overflow-y-auto px-3 py-3 sm:px-4 sm:py-4 xl:px-5", messagesClassName), style: resolvedMessagesStyle, children: children }), footerStack, composer] }));
|
|
28
|
+
});
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type * as React from "react";
|
|
2
|
+
import type { ChatMessageData, ChatMessageLabels, ChatVariant } from "./chat-types";
|
|
3
|
+
export interface ChatTranscriptProps {
|
|
4
|
+
agentName?: string;
|
|
5
|
+
carryoverMessages?: ChatMessageData[];
|
|
6
|
+
carryoverOpacity?: number;
|
|
7
|
+
labels?: ChatMessageLabels;
|
|
8
|
+
messages: ChatMessageData[];
|
|
9
|
+
onCopy?: (text: string) => void;
|
|
10
|
+
onDelete?: (messageId: string) => void;
|
|
11
|
+
onEdit?: (messageId: string, text: string) => Promise<boolean> | boolean;
|
|
12
|
+
onSpeak?: (messageId: string, text: string) => void;
|
|
13
|
+
renderMessageContent?: (message: ChatMessageData) => React.ReactNode;
|
|
14
|
+
typingIndicator?: React.ReactNode;
|
|
15
|
+
userMessagesOnRight?: boolean;
|
|
16
|
+
variant?: ChatVariant;
|
|
17
|
+
}
|
|
18
|
+
export declare const ChatTranscript: React.NamedExoticComponent<ChatTranscriptProps>;
|
|
19
|
+
//# sourceMappingURL=chat-transcript.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-transcript.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/composites/chat/chat-transcript.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAMpC,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,EACjB,WAAW,EACZ,MAAM,cAAc,CAAC;AAEtB,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,eAAe,EAAE,CAAC;IACtC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IACzE,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,oBAAoB,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,KAAK,CAAC,SAAS,CAAC;IACrE,eAAe,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAClC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB;AA0ED,eAAO,MAAM,cAAc,iDAwHzB,CAAC"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { memo } from "react";
|
|
3
|
+
import { ChatBubble } from "./chat-bubble";
|
|
4
|
+
import { ChatMessage } from "./chat-message";
|
|
5
|
+
function renderTranscriptMessageContent(message, renderMessageContent) {
|
|
6
|
+
return renderMessageContent?.(message) ?? message.text;
|
|
7
|
+
}
|
|
8
|
+
const LEGACY_REPLY_REFERENCE_RE = /^Referencing MessageID ([0-9a-f-]{36})(?: \([^)]+\))?(?: in channel .*)?(?: in guild .*)?$/i;
|
|
9
|
+
function normalizeTranscriptMessage(message) {
|
|
10
|
+
const rawText = typeof message.text === "string" ? message.text : "";
|
|
11
|
+
const lines = rawText.split(/\r?\n/);
|
|
12
|
+
let extractedReplyToMessageId = typeof message.replyToMessageId === "string" &&
|
|
13
|
+
message.replyToMessageId.trim().length > 0
|
|
14
|
+
? message.replyToMessageId.trim()
|
|
15
|
+
: "";
|
|
16
|
+
let removedLegacyReference = false;
|
|
17
|
+
const cleanedLines = lines.filter((line) => {
|
|
18
|
+
const match = line.trim().match(LEGACY_REPLY_REFERENCE_RE);
|
|
19
|
+
if (!match) {
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
if (!extractedReplyToMessageId) {
|
|
23
|
+
extractedReplyToMessageId = match[1];
|
|
24
|
+
}
|
|
25
|
+
removedLegacyReference = true;
|
|
26
|
+
return false;
|
|
27
|
+
});
|
|
28
|
+
const cleanedText = removedLegacyReference
|
|
29
|
+
? cleanedLines
|
|
30
|
+
.join("\n")
|
|
31
|
+
.replace(/\n{3,}/g, "\n\n")
|
|
32
|
+
.trimEnd()
|
|
33
|
+
: rawText;
|
|
34
|
+
if (cleanedText === rawText &&
|
|
35
|
+
extractedReplyToMessageId === (message.replyToMessageId ?? "")) {
|
|
36
|
+
return message;
|
|
37
|
+
}
|
|
38
|
+
return {
|
|
39
|
+
...message,
|
|
40
|
+
text: cleanedText,
|
|
41
|
+
...(extractedReplyToMessageId
|
|
42
|
+
? { replyToMessageId: extractedReplyToMessageId }
|
|
43
|
+
: {}),
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
function getMessageGroupingKey(message) {
|
|
47
|
+
if (message.role !== "user") {
|
|
48
|
+
return message.role;
|
|
49
|
+
}
|
|
50
|
+
const source = message.source?.trim().toLowerCase() ?? "";
|
|
51
|
+
const senderName = message.from?.trim().toLowerCase() ?? "";
|
|
52
|
+
const senderHandle = message.fromUserName?.trim().toLowerCase() ?? "";
|
|
53
|
+
const avatarUrl = message.avatarUrl?.trim() ?? "";
|
|
54
|
+
if (!source && !senderName && !senderHandle && !avatarUrl) {
|
|
55
|
+
return "user";
|
|
56
|
+
}
|
|
57
|
+
return `user:${source}|${senderName}|${senderHandle}|${avatarUrl}`;
|
|
58
|
+
}
|
|
59
|
+
export const ChatTranscript = memo(function ChatTranscript({ agentName = "Agent", carryoverMessages = [], carryoverOpacity = 1, labels, messages, onCopy, onDelete, onEdit, onSpeak, renderMessageContent, typingIndicator, userMessagesOnRight = true, variant = "default", }) {
|
|
60
|
+
const normalizedMessages = messages.map(normalizeTranscriptMessage);
|
|
61
|
+
if (variant === "game-modal") {
|
|
62
|
+
return (_jsxs("div", { className: "flex min-h-full w-full flex-col justify-end gap-4 px-1 py-4", children: [carryoverMessages.map((message) => {
|
|
63
|
+
const isUser = message.role === "user";
|
|
64
|
+
return (_jsx("div", { "data-testid": "companion-message-row", "data-companion-carryover": "true", className: `flex w-full ${isUser ? "justify-end" : "justify-start"}`, style: { opacity: carryoverOpacity }, children: _jsx(ChatBubble, { tone: isUser ? "user" : "assistant", className: `max-w-[min(85%,24rem)] rounded-2xl px-4 py-3 text-[15px] leading-relaxed backdrop-blur-md ${isUser ? "rounded-br-sm" : "rounded-bl-sm"}`, children: _jsx("div", { className: "break-words", style: { fontFamily: "var(--font-chat)" }, children: renderTranscriptMessageContent(message, renderMessageContent) }) }) }, `carryover-${message.id}`));
|
|
65
|
+
}), normalizedMessages.map((message) => {
|
|
66
|
+
const isUser = message.role === "user";
|
|
67
|
+
return (_jsx("div", { "data-testid": "companion-message-row", className: `flex w-full ${isUser ? "justify-end" : "justify-start"}`, children: _jsx(ChatBubble, { tone: isUser ? "user" : "assistant", className: `max-w-[min(85%,24rem)] rounded-2xl px-4 py-3 text-[15px] leading-relaxed backdrop-blur-md ${isUser ? "rounded-br-sm" : "rounded-bl-sm"}`, children: _jsx("div", { className: "break-words", style: { fontFamily: "var(--font-chat)" }, children: renderTranscriptMessageContent(message, renderMessageContent) }) }) }, message.id));
|
|
68
|
+
}), typingIndicator] }));
|
|
69
|
+
}
|
|
70
|
+
return (_jsxs("div", { className: "w-full space-y-1.5", children: [normalizedMessages.map((message, index) => {
|
|
71
|
+
const replyTarget = typeof message.replyToMessageId === "string" &&
|
|
72
|
+
message.replyToMessageId.length > 0
|
|
73
|
+
? (normalizedMessages.find((candidate) => candidate.id === message.replyToMessageId) ?? null)
|
|
74
|
+
: null;
|
|
75
|
+
const previousMessage = index > 0 ? normalizedMessages[index - 1] : null;
|
|
76
|
+
const isGrouped = previousMessage?.role === message.role &&
|
|
77
|
+
previousMessage != null &&
|
|
78
|
+
getMessageGroupingKey(previousMessage) ===
|
|
79
|
+
getMessageGroupingKey(message);
|
|
80
|
+
return (_jsx(ChatMessage, { message: message, isGrouped: isGrouped, agentName: agentName, labels: labels, onCopy: onCopy, onDelete: onDelete, onEdit: onEdit, onSpeak: onSpeak, replyTarget: replyTarget, userMessagesOnRight: userMessagesOnRight, children: renderTranscriptMessageContent(message, renderMessageContent) }, message.id));
|
|
81
|
+
}), typingIndicator] }));
|
|
82
|
+
});
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
export type ChatVariant = "default" | "game-modal";
|
|
2
|
+
export interface ChatLabelSet {
|
|
3
|
+
agentStarting?: string;
|
|
4
|
+
agentVoiceOff?: string;
|
|
5
|
+
agentVoiceOn?: string;
|
|
6
|
+
attachImage?: string;
|
|
7
|
+
cancel?: string;
|
|
8
|
+
clearSearch?: string;
|
|
9
|
+
chatIconLabel?: string;
|
|
10
|
+
chats?: string;
|
|
11
|
+
closePanel?: string;
|
|
12
|
+
copied?: string;
|
|
13
|
+
copiedAria?: string;
|
|
14
|
+
copy?: string;
|
|
15
|
+
delete?: string;
|
|
16
|
+
deleteConfirm?: string;
|
|
17
|
+
deleteNo?: string;
|
|
18
|
+
deleteYes?: string;
|
|
19
|
+
edit?: string;
|
|
20
|
+
expandChatsPanel?: string;
|
|
21
|
+
inputPlaceholder?: string;
|
|
22
|
+
inputPlaceholderNarrow?: string;
|
|
23
|
+
listening?: string;
|
|
24
|
+
micTitleIdleEnhanced?: string;
|
|
25
|
+
micTitleIdleStandard?: string;
|
|
26
|
+
newChat?: string;
|
|
27
|
+
none?: string;
|
|
28
|
+
noMatchingChats?: string;
|
|
29
|
+
play?: string;
|
|
30
|
+
releaseToSend?: string;
|
|
31
|
+
rename?: string;
|
|
32
|
+
responseInterrupted?: string;
|
|
33
|
+
saveAndResend?: string;
|
|
34
|
+
searchChats?: string;
|
|
35
|
+
saving?: string;
|
|
36
|
+
send?: string;
|
|
37
|
+
sendMessageTo?: string;
|
|
38
|
+
startConversation?: string;
|
|
39
|
+
stopGeneration?: string;
|
|
40
|
+
stopListening?: string;
|
|
41
|
+
stopSpeaking?: string;
|
|
42
|
+
toBeginChatting?: string;
|
|
43
|
+
voiceInput?: string;
|
|
44
|
+
}
|
|
45
|
+
export interface ChatAttachmentItem {
|
|
46
|
+
alt: string;
|
|
47
|
+
id: string;
|
|
48
|
+
name: string;
|
|
49
|
+
src: string;
|
|
50
|
+
}
|
|
51
|
+
export interface ChatMessageReaction {
|
|
52
|
+
emoji: string;
|
|
53
|
+
count: number;
|
|
54
|
+
users?: string[];
|
|
55
|
+
}
|
|
56
|
+
export interface ChatMessageData {
|
|
57
|
+
avatarUrl?: string;
|
|
58
|
+
from?: string;
|
|
59
|
+
fromUserName?: string;
|
|
60
|
+
id: string;
|
|
61
|
+
interrupted?: boolean;
|
|
62
|
+
reactions?: ChatMessageReaction[];
|
|
63
|
+
replyToMessageId?: string;
|
|
64
|
+
replyToSenderName?: string;
|
|
65
|
+
replyToSenderUserName?: string;
|
|
66
|
+
role: string;
|
|
67
|
+
source?: string;
|
|
68
|
+
text: string;
|
|
69
|
+
}
|
|
70
|
+
export interface ChatMessageLabels extends ChatLabelSet {
|
|
71
|
+
}
|
|
72
|
+
export interface ChatConversationSummary {
|
|
73
|
+
avatarUrl?: string;
|
|
74
|
+
id: string;
|
|
75
|
+
title: string;
|
|
76
|
+
updatedAtLabel?: string;
|
|
77
|
+
/**
|
|
78
|
+
* Optional connector source tag (e.g. "imessage", "telegram",
|
|
79
|
+
* "discord", "whatsapp"). When set, the conversation item renders
|
|
80
|
+
* a brand-colored channel pill next to the title so cross-channel
|
|
81
|
+
* threads in a unified sidebar are visually distinct from the
|
|
82
|
+
* agent's own dashboard conversations. Unknown sources fall back
|
|
83
|
+
* to a neutral accent pill; dashboard conversations leave this
|
|
84
|
+
* unset and get no pill at all.
|
|
85
|
+
*/
|
|
86
|
+
source?: string;
|
|
87
|
+
}
|
|
88
|
+
export interface ChatConversationLabels extends ChatLabelSet {
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=chat-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-types.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/composites/chat/chat-types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,YAAY,CAAC;AAEnD,MAAM,WAAW,YAAY;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAClC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,iBAAkB,SAAQ,YAAY;CAAG;AAE1D,MAAM,WAAW,uBAAuB;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAuB,SAAQ,YAAY;CAAG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ChatVariant } from "./chat-types";
|
|
2
|
+
export interface TypingIndicatorProps {
|
|
3
|
+
agentAvatarSrc?: string | null;
|
|
4
|
+
agentName: string;
|
|
5
|
+
className?: string;
|
|
6
|
+
dotClassName?: string;
|
|
7
|
+
variant?: ChatVariant;
|
|
8
|
+
}
|
|
9
|
+
export declare function TypingIndicator({ agentAvatarSrc, agentName, className, dotClassName, variant, }: TypingIndicatorProps): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
//# sourceMappingURL=chat-typing-indicator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-typing-indicator.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/composites/chat/chat-typing-indicator.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,WAAW,oBAAoB;IACnC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB;AAED,wBAAgB,eAAe,CAAC,EAC9B,cAAc,EACd,SAAS,EACT,SAAS,EACT,YAAY,EACZ,OAAmB,GACpB,EAAE,oBAAoB,2CA8DtB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { ChatBubble } from "./chat-bubble";
|
|
3
|
+
export function TypingIndicator({ agentAvatarSrc, agentName, className, dotClassName, variant = "default", }) {
|
|
4
|
+
if (variant === "game-modal") {
|
|
5
|
+
return (_jsx("div", { className: className ?? "flex w-full justify-start", children: _jsx(ChatBubble, { tone: "assistant", className: "flex max-w-[min(85%,24rem)] items-center gap-1 rounded-2xl rounded-bl-sm px-4 py-3 backdrop-blur-md", children: [0, 150, 300].map((delay) => (_jsx("span", { className: dotClassName ??
|
|
6
|
+
"h-1.5 w-1.5 rounded-full bg-[color:color-mix(in_srgb,var(--muted)_82%,transparent)] animate-bounce", style: { animationDelay: `${delay}ms` } }, delay))) }) }));
|
|
7
|
+
}
|
|
8
|
+
const agentInitial = agentName.trim().charAt(0).toUpperCase() || "A";
|
|
9
|
+
return (_jsxs("div", { className: className ?? "mt-4 flex items-start gap-2 sm:gap-3", children: [_jsx("div", { className: "h-8 w-8 shrink-0 overflow-hidden rounded-full border border-border bg-bg-hover shadow-sm", children: agentAvatarSrc ? (_jsx("img", { src: agentAvatarSrc, alt: `${agentName} avatar`, className: "h-full w-full object-cover" })) : (_jsx("div", { className: "flex h-full w-full items-center justify-center bg-accent-subtle text-xs-tight font-bold text-accent", children: agentInitial })) }), _jsxs("div", { className: "min-w-0 max-w-[88%] sm:max-w-[80%]", children: [_jsx("div", { className: "mb-1 text-xs font-semibold text-accent", children: agentName }), _jsx("div", { className: "rounded-2xl rounded-bl-md border border-border bg-bg-accent px-4 py-3", children: _jsx("div", { className: "flex gap-1", children: [0, 200, 400].map((delay) => (_jsx("span", { className: dotClassName ??
|
|
10
|
+
"h-2 w-2 rounded-full bg-muted-strong animate-[typing-bounce_1.2s_ease-in-out_infinite]", style: { animationDelay: `${delay}ms` } }, delay))) }) })] })] }));
|
|
11
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface CreateTaskPopoverProps {
|
|
2
|
+
chatInput: string;
|
|
3
|
+
disabled: boolean;
|
|
4
|
+
onCreateTask: (description: string, agentType: string) => void;
|
|
5
|
+
t: (key: string, options?: Record<string, unknown>) => string;
|
|
6
|
+
}
|
|
7
|
+
export declare function CreateTaskPopover({ chatInput, disabled, onCreateTask, t, }: CreateTaskPopoverProps): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
//# sourceMappingURL=create-task-popover.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-task-popover.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/composites/chat/create-task-popover.tsx"],"names":[],"mappings":"AAkBA,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/D,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC;CAC/D;AAED,wBAAgB,iBAAiB,CAAC,EAChC,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,CAAC,GACF,EAAE,sBAAsB,2CAgHxB"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Code2, X } from "lucide-react";
|
|
3
|
+
import { useCallback, useEffect, useRef, useState } from "react";
|
|
4
|
+
import { Button } from "../../ui/button";
|
|
5
|
+
import { Popover, PopoverContent, PopoverTrigger } from "../../ui/popover";
|
|
6
|
+
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "../../ui/select";
|
|
7
|
+
import { Textarea } from "../../ui/textarea";
|
|
8
|
+
const DEFAULT_AGENT_TYPES = ["claude", "gemini", "codex", "aider"];
|
|
9
|
+
export function CreateTaskPopover({ chatInput, disabled, onCreateTask, t, }) {
|
|
10
|
+
const [open, setOpen] = useState(false);
|
|
11
|
+
const [description, setDescription] = useState("");
|
|
12
|
+
const [agentType, setAgentType] = useState("claude");
|
|
13
|
+
const previouslyOpenRef = useRef(false);
|
|
14
|
+
useEffect(() => {
|
|
15
|
+
if (open && !previouslyOpenRef.current && chatInput.trim()) {
|
|
16
|
+
setDescription(chatInput.trim());
|
|
17
|
+
}
|
|
18
|
+
previouslyOpenRef.current = open;
|
|
19
|
+
}, [chatInput, open]);
|
|
20
|
+
const handleCreate = useCallback(() => {
|
|
21
|
+
const trimmedDescription = description.trim();
|
|
22
|
+
if (!trimmedDescription) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
onCreateTask(trimmedDescription, agentType);
|
|
26
|
+
setDescription("");
|
|
27
|
+
setAgentType("claude");
|
|
28
|
+
setOpen(false);
|
|
29
|
+
}, [agentType, description, onCreateTask]);
|
|
30
|
+
return (_jsxs(Popover, { open: open, onOpenChange: setOpen, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsx(Button, { variant: "surface", size: "icon", className: "h-[46px] w-[46px] shrink-0", disabled: disabled, "aria-label": t("chat.createTask", {
|
|
31
|
+
defaultValue: "Create coding task",
|
|
32
|
+
}), title: t("chat.createTask", {
|
|
33
|
+
defaultValue: "Create coding task",
|
|
34
|
+
}), children: _jsx(Code2, { className: "h-4 w-4" }) }) }), _jsx(PopoverContent, { side: "top", align: "end", sideOffset: 8, className: "w-80 p-0", children: _jsxs("div", { className: "flex flex-col gap-3 p-4", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-sm font-medium text-txt-strong", children: t("chat.createTaskTitle", {
|
|
35
|
+
defaultValue: "Create Coding Task",
|
|
36
|
+
}) }), _jsx(Button, { variant: "ghost", size: "icon", className: "h-6 w-6", onClick: () => setOpen(false), "aria-label": t("common.close", { defaultValue: "Close" }), children: _jsx(X, { className: "h-3.5 w-3.5" }) })] }), _jsx(Textarea, { value: description, onChange: (event) => setDescription(event.target.value), placeholder: t("chat.taskDescriptionPlaceholder", {
|
|
37
|
+
defaultValue: "Describe what to build...",
|
|
38
|
+
}), className: "min-h-[80px] resize-none text-sm", onKeyDown: (event) => {
|
|
39
|
+
if (event.key === "Enter" && (event.metaKey || event.ctrlKey)) {
|
|
40
|
+
event.preventDefault();
|
|
41
|
+
handleCreate();
|
|
42
|
+
}
|
|
43
|
+
} }), _jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx("label", { htmlFor: "chat-task-agent-type", className: "text-xs text-muted-foreground", children: t("chat.agentType", { defaultValue: "Agent" }) }), _jsxs(Select, { value: agentType, onValueChange: (value) => setAgentType(value), children: [_jsx(SelectTrigger, { id: "chat-task-agent-type", className: "h-9 text-sm", children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: DEFAULT_AGENT_TYPES.map((type) => (_jsx(SelectItem, { value: type, children: type.charAt(0).toUpperCase() + type.slice(1) }, type))) })] })] }), _jsx(Button, { onClick: handleCreate, disabled: !description.trim(), children: t("chat.createTaskButton", { defaultValue: "Create" }) })] }) })] }));
|
|
44
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export * from "./chat-attachment-strip";
|
|
2
|
+
export * from "./chat-bubble";
|
|
3
|
+
export * from "./chat-composer";
|
|
4
|
+
export * from "./chat-composer-shell";
|
|
5
|
+
export * from "./chat-conversation-item";
|
|
6
|
+
export * from "./chat-conversation-rename-dialog";
|
|
7
|
+
export * from "./chat-empty-state";
|
|
8
|
+
export * from "./chat-message";
|
|
9
|
+
export * from "./chat-message-actions";
|
|
10
|
+
export * from "./chat-sidebar";
|
|
11
|
+
export * from "./chat-source";
|
|
12
|
+
export * from "./chat-thread-layout";
|
|
13
|
+
export * from "./chat-transcript";
|
|
14
|
+
export * from "./chat-types";
|
|
15
|
+
export * from "./chat-typing-indicator";
|
|
16
|
+
export * from "./create-task-popover";
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/composites/chat/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mCAAmC,CAAC;AAClD,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wBAAwB,CAAC;AACvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export * from "./chat-attachment-strip";
|
|
2
|
+
export * from "./chat-bubble";
|
|
3
|
+
export * from "./chat-composer";
|
|
4
|
+
export * from "./chat-composer-shell";
|
|
5
|
+
export * from "./chat-conversation-item";
|
|
6
|
+
export * from "./chat-conversation-rename-dialog";
|
|
7
|
+
export * from "./chat-empty-state";
|
|
8
|
+
export * from "./chat-message";
|
|
9
|
+
export * from "./chat-message-actions";
|
|
10
|
+
export * from "./chat-sidebar";
|
|
11
|
+
export * from "./chat-source";
|
|
12
|
+
export * from "./chat-thread-layout";
|
|
13
|
+
export * from "./chat-transcript";
|
|
14
|
+
export * from "./chat-types";
|
|
15
|
+
export * from "./chat-typing-indicator";
|
|
16
|
+
export * from "./create-task-popover";
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type * as React from "react";
|
|
2
|
+
export interface FormFieldProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
3
|
+
/** Label text shown above the field. */
|
|
4
|
+
label?: React.ReactNode;
|
|
5
|
+
/** Optional description below the label. */
|
|
6
|
+
description?: React.ReactNode;
|
|
7
|
+
/** Validation error messages. */
|
|
8
|
+
errors?: readonly string[];
|
|
9
|
+
/** Density controls spacing and text size. */
|
|
10
|
+
density?: "default" | "compact" | "relaxed";
|
|
11
|
+
}
|
|
12
|
+
declare function FormField({ label, description, errors, density, className, children, ...props }: FormFieldProps): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
export { FormField };
|
|
14
|
+
//# sourceMappingURL=form-field.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-field.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/composites/form-field/form-field.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AASpC,MAAM,WAAW,cAAe,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IAC1E,wCAAwC;IACxC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,4CAA4C;IAC5C,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,iCAAiC;IACjC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,8CAA8C;IAC9C,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;CAC7C;AAED,iBAAS,SAAS,CAAC,EACjB,KAAK,EACL,WAAW,EACX,MAAM,EACN,OAAmB,EACnB,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,cAAc,2CA6BhB;AAED,OAAO,EAAE,SAAS,EAAE,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from "../../../lib/utils";
|
|
3
|
+
import { Field, FieldDescription, FieldLabel, FieldMessage, } from "../../ui/field";
|
|
4
|
+
function FormField({ label, description, errors, density = "default", className, children, ...props }) {
|
|
5
|
+
const isCompact = density === "compact";
|
|
6
|
+
return (_jsxs(Field, { className: cn(isCompact ? "gap-1.5" : "space-y-2", className), ...props, children: [label && (_jsx(FieldLabel, { className: cn(isCompact && "text-xs font-semibold text-txt"), children: label })), description && (_jsx(FieldDescription, { className: cn(isCompact && "text-xs-tight text-muted"), children: description })), children, errors?.map((err) => (_jsx(FieldMessage, { tone: "danger", children: err }, err)))] }));
|
|
7
|
+
}
|
|
8
|
+
export { FormField };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/composites/form-field/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { FormField } from "./form-field";
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export * from "../ui/admin-dialog";
|
|
2
|
+
export * from "../ui/banner";
|
|
3
|
+
export * from "../ui/confirm-delete";
|
|
4
|
+
export * from "../ui/confirm-dialog";
|
|
5
|
+
export * from "../ui/connection-status";
|
|
6
|
+
export * from "../ui/copy-button";
|
|
7
|
+
export * from "../ui/empty-state";
|
|
8
|
+
export * from "../ui/error-boundary";
|
|
9
|
+
export * from "../ui/field";
|
|
10
|
+
export * from "../ui/field-switch";
|
|
11
|
+
export * from "../ui/form-select";
|
|
12
|
+
export * from "../ui/new-action-button";
|
|
13
|
+
export * from "../ui/save-footer";
|
|
14
|
+
export * from "../ui/section-card";
|
|
15
|
+
export * from "../ui/segmented-control";
|
|
16
|
+
export * from "../ui/settings-controls";
|
|
17
|
+
export * from "../ui/status-badge";
|
|
18
|
+
export * from "../ui/themed-select";
|
|
19
|
+
export * from "../ui/tooltip-extended";
|
|
20
|
+
export * from "./chat";
|
|
21
|
+
export * from "./form-field";
|
|
22
|
+
export * from "./page-panel";
|
|
23
|
+
export * from "./search";
|
|
24
|
+
export * from "./sidebar";
|
|
25
|
+
export * from "./skills";
|
|
26
|
+
export * from "./trajectories";
|
|
27
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/components/composites/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export * from "../ui/admin-dialog";
|
|
2
|
+
export * from "../ui/banner";
|
|
3
|
+
export * from "../ui/confirm-delete";
|
|
4
|
+
export * from "../ui/confirm-dialog";
|
|
5
|
+
export * from "../ui/connection-status";
|
|
6
|
+
export * from "../ui/copy-button";
|
|
7
|
+
export * from "../ui/empty-state";
|
|
8
|
+
export * from "../ui/error-boundary";
|
|
9
|
+
export * from "../ui/field";
|
|
10
|
+
export * from "../ui/field-switch";
|
|
11
|
+
export * from "../ui/form-select";
|
|
12
|
+
export * from "../ui/new-action-button";
|
|
13
|
+
export * from "../ui/save-footer";
|
|
14
|
+
export * from "../ui/section-card";
|
|
15
|
+
export * from "../ui/segmented-control";
|
|
16
|
+
export * from "../ui/settings-controls";
|
|
17
|
+
export * from "../ui/status-badge";
|
|
18
|
+
export * from "../ui/themed-select";
|
|
19
|
+
export * from "../ui/tooltip-extended";
|
|
20
|
+
export * from "./chat";
|
|
21
|
+
export * from "./form-field";
|
|
22
|
+
export * from "./page-panel";
|
|
23
|
+
export * from "./search";
|
|
24
|
+
export * from "./sidebar";
|
|
25
|
+
export * from "./skills";
|
|
26
|
+
export * from "./trajectories";
|