@elizaos/ui 2.0.0-alpha.17 → 2.0.0-alpha.171
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 +98 -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 +59 -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
package/package.json
CHANGED
|
@@ -1,51 +1,95 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elizaos/ui",
|
|
3
|
-
"version": "2.0.0-alpha.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "2.0.0-alpha.171",
|
|
4
|
+
"description": "Shared UI primitives, composites, and layout utilities for elizaOS apps.",
|
|
5
5
|
"type": "module",
|
|
6
|
-
"main": "dist/index.js",
|
|
7
|
-
"types": "dist/index.d.ts",
|
|
8
6
|
"license": "MIT",
|
|
9
|
-
"homepage": "https://
|
|
7
|
+
"homepage": "https://github.com/elizaOS/eliza",
|
|
10
8
|
"repository": {
|
|
11
9
|
"type": "git",
|
|
12
|
-
"url": "https://github.com/
|
|
10
|
+
"url": "https://github.com/elizaOS/eliza.git",
|
|
13
11
|
"directory": "packages/ui"
|
|
14
12
|
},
|
|
15
13
|
"keywords": [
|
|
16
14
|
"elizaos",
|
|
17
15
|
"ui",
|
|
18
16
|
"react",
|
|
19
|
-
"
|
|
17
|
+
"design-system"
|
|
20
18
|
],
|
|
21
|
-
"
|
|
22
|
-
"clean": "rm -rf dist && find src -type f \\( -name '*.js' -o -name '*.d.ts' -o -name '*.d.ts.map' -o -name '*.js.map' \\) -delete",
|
|
23
|
-
"build": "bun run build:dist",
|
|
24
|
-
"build:dist": "find src -type f \\( -name '*.js' -o -name '*.d.ts' -o -name '*.d.ts.map' -o -name '*.js.map' \\) -delete && rm -rf dist && tsc -p tsconfig.build.json && find src -type f \\( -name '*.js' -o -name '*.d.ts' -o -name '*.d.ts.map' -o -name '*.js.map' \\) -delete && node ../../scripts/copy-package-assets.mjs packages/ui src/styles && node ../../scripts/prepare-package-dist.mjs packages/ui",
|
|
25
|
-
"typecheck": "tsc --noEmit -p tsconfig.json",
|
|
26
|
-
"lint": "bunx @biomejs/biome check --write ./src/index.ts ./src/lib ./src/components ./src/stories",
|
|
27
|
-
"lint:check": "bunx @biomejs/biome check ./src/index.ts ./src/lib ./src/components ./src/stories",
|
|
28
|
-
"pack:dry-run": "cd dist && npm pack --dry-run",
|
|
29
|
-
"storybook": "storybook dev -p 6006",
|
|
30
|
-
"build-storybook": "storybook build"
|
|
31
|
-
},
|
|
19
|
+
"main": "./packages/ui/src/index.js",
|
|
32
20
|
"exports": {
|
|
33
21
|
".": {
|
|
34
|
-
"types": "./
|
|
35
|
-
"import": "./
|
|
22
|
+
"types": "./packages/ui/src/index.d.ts",
|
|
23
|
+
"import": "./packages/ui/src/index.js",
|
|
24
|
+
"default": "./packages/ui/src/index.js"
|
|
25
|
+
},
|
|
26
|
+
"./components/*": {
|
|
27
|
+
"types": "./packages/ui/src/components/*.d.ts",
|
|
28
|
+
"import": "./packages/ui/src/components/*.js",
|
|
29
|
+
"default": "./packages/ui/src/components/*.js"
|
|
30
|
+
},
|
|
31
|
+
"./components/*/*": {
|
|
32
|
+
"types": "./packages/ui/src/components/*/*.d.ts",
|
|
33
|
+
"import": "./packages/ui/src/components/*/*.js",
|
|
34
|
+
"default": "./packages/ui/src/components/*/*.js"
|
|
35
|
+
},
|
|
36
|
+
"./components/*/*/*": {
|
|
37
|
+
"types": "./packages/ui/src/components/*/*/*.d.ts",
|
|
38
|
+
"import": "./packages/ui/src/components/*/*/*.js",
|
|
39
|
+
"default": "./packages/ui/src/components/*/*/*.js"
|
|
40
|
+
},
|
|
41
|
+
"./components/ui/*": {
|
|
42
|
+
"types": "./packages/ui/src/components/ui/*.tsx.d.ts",
|
|
43
|
+
"import": "./packages/ui/src/components/ui/*.tsx.js",
|
|
44
|
+
"default": "./packages/ui/src/components/ui/*.tsx.js"
|
|
45
|
+
},
|
|
46
|
+
"./components/composites/page-panel": {
|
|
47
|
+
"types": "./packages/ui/src/components/composites/page-panel/index.d.ts",
|
|
48
|
+
"import": "./packages/ui/src/components/composites/page-panel/index.js",
|
|
49
|
+
"default": "./packages/ui/src/components/composites/page-panel/index.js"
|
|
50
|
+
},
|
|
51
|
+
"./components/composites/*": {
|
|
52
|
+
"types": "./packages/ui/src/components/composites/*.d.ts",
|
|
53
|
+
"import": "./packages/ui/src/components/composites/*.js",
|
|
54
|
+
"default": "./packages/ui/src/components/composites/*.js"
|
|
55
|
+
},
|
|
56
|
+
"./components/composites/*/*": {
|
|
57
|
+
"types": "./packages/ui/src/components/composites/*/*.tsx.d.ts",
|
|
58
|
+
"import": "./packages/ui/src/components/composites/*/*.tsx.js",
|
|
59
|
+
"default": "./packages/ui/src/components/composites/*/*.tsx.js"
|
|
36
60
|
},
|
|
37
|
-
"./
|
|
38
|
-
"types": "./
|
|
39
|
-
"import": "./
|
|
61
|
+
"./hooks": {
|
|
62
|
+
"types": "./packages/ui/src/hooks/index.d.ts",
|
|
63
|
+
"import": "./packages/ui/src/hooks/index.js",
|
|
64
|
+
"default": "./packages/ui/src/hooks/index.js"
|
|
65
|
+
},
|
|
66
|
+
"./hooks/*": {
|
|
67
|
+
"types": "./packages/ui/src/hooks/*.d.ts",
|
|
68
|
+
"import": "./packages/ui/src/hooks/*.js",
|
|
69
|
+
"default": "./packages/ui/src/hooks/*.js"
|
|
70
|
+
},
|
|
71
|
+
"./layouts": {
|
|
72
|
+
"types": "./packages/ui/src/layouts/index.d.ts",
|
|
73
|
+
"import": "./packages/ui/src/layouts/index.js",
|
|
74
|
+
"default": "./packages/ui/src/layouts/index.js"
|
|
75
|
+
},
|
|
76
|
+
"./layouts/*": {
|
|
77
|
+
"types": "./packages/ui/src/layouts/*.d.ts",
|
|
78
|
+
"import": "./packages/ui/src/layouts/*.js",
|
|
79
|
+
"default": "./packages/ui/src/layouts/*.js"
|
|
80
|
+
},
|
|
81
|
+
"./lib/*": {
|
|
82
|
+
"types": "./packages/ui/src/lib/*.d.ts",
|
|
83
|
+
"import": "./packages/ui/src/lib/*.js",
|
|
84
|
+
"default": "./packages/ui/src/lib/*.js"
|
|
85
|
+
},
|
|
86
|
+
"./styles/*": {
|
|
87
|
+
"types": "./packages/ui/src/styles/*.d.ts",
|
|
88
|
+
"import": "./packages/ui/src/styles/*.js",
|
|
89
|
+
"default": "./packages/ui/src/styles/*.js"
|
|
40
90
|
},
|
|
41
|
-
"./styles/theme.css": "./src/styles/theme.css",
|
|
42
91
|
"./package.json": "./package.json"
|
|
43
92
|
},
|
|
44
|
-
"files": [
|
|
45
|
-
"dist",
|
|
46
|
-
"src/styles/theme.css",
|
|
47
|
-
"README.md"
|
|
48
|
-
],
|
|
49
93
|
"peerDependencies": {
|
|
50
94
|
"react": "^19.0.0",
|
|
51
95
|
"react-dom": "^19.0.0"
|
|
@@ -66,29 +110,12 @@
|
|
|
66
110
|
"class-variance-authority": "^0.7.1",
|
|
67
111
|
"clsx": "^2.1.1",
|
|
68
112
|
"lucide-react": "^0.575.0",
|
|
69
|
-
"next-themes": "^0.4.6",
|
|
70
113
|
"sonner": "^2.0.7",
|
|
71
114
|
"tailwind-merge": "^2.6.0"
|
|
72
115
|
},
|
|
73
116
|
"publishConfig": {
|
|
74
|
-
"access": "public"
|
|
75
|
-
|
|
76
|
-
"devDependencies": {
|
|
77
|
-
"@storybook/addon-essentials": "8.6.14",
|
|
78
|
-
"@storybook/blocks": "8.6.14",
|
|
79
|
-
"@storybook/react": "8.6.14",
|
|
80
|
-
"@storybook/react-vite": "8.6.14",
|
|
81
|
-
"@storybook/test": "8.6.14",
|
|
82
|
-
"@tailwindcss/vite": "^4.2.1",
|
|
83
|
-
"@types/react": "^19.0.0",
|
|
84
|
-
"@types/react-dom": "^19.0.0",
|
|
85
|
-
"storybook": "8.6.17",
|
|
86
|
-
"tailwindcss": "^4.1.18",
|
|
87
|
-
"typescript": "^5.9.3"
|
|
88
|
-
},
|
|
89
|
-
"author": "elizaOS Team",
|
|
90
|
-
"engines": {
|
|
91
|
-
"node": ">=18.0.0"
|
|
117
|
+
"access": "public",
|
|
118
|
+
"directory": "dist"
|
|
92
119
|
},
|
|
93
|
-
"
|
|
120
|
+
"types": "./packages/ui/src/index.d.ts"
|
|
94
121
|
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ChatAttachmentItem, ChatVariant } from "./chat-types";
|
|
2
|
+
export interface ChatAttachmentStripProps {
|
|
3
|
+
items: ChatAttachmentItem[];
|
|
4
|
+
onRemove: (id: string, index: number) => void;
|
|
5
|
+
removeLabel?: (item: ChatAttachmentItem) => string;
|
|
6
|
+
variant?: ChatVariant;
|
|
7
|
+
}
|
|
8
|
+
export declare function ChatAttachmentStrip({ items, onRemove, removeLabel, variant, }: ChatAttachmentStripProps): import("react/jsx-runtime").JSX.Element | null;
|
|
9
|
+
//# sourceMappingURL=chat-attachment-strip.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-attachment-strip.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/composites/chat/chat-attachment-strip.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEpE,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,MAAM,CAAC;IACnD,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB;AAED,wBAAgB,mBAAmB,CAAC,EAClC,KAAK,EACL,QAAQ,EACR,WAAmD,EACnD,OAAmB,GACpB,EAAE,wBAAwB,kDAoC1B"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Button } from "../../ui/button";
|
|
3
|
+
export function ChatAttachmentStrip({ items, onRemove, removeLabel = (item) => `Remove image ${item.name}`, variant = "default", }) {
|
|
4
|
+
if (items.length === 0) {
|
|
5
|
+
return null;
|
|
6
|
+
}
|
|
7
|
+
return (_jsx("div", { className: `relative flex flex-wrap gap-2 py-1 ${variant === "game-modal" ? "pointer-events-auto" : ""}`, "data-no-camera-drag": variant === "game-modal" || undefined, style: { zIndex: 1 }, children: items.map((item, index) => (_jsxs("div", { className: "relative h-16 w-16 shrink-0 group", children: [_jsx("img", { src: item.src, alt: item.alt, className: "h-16 w-16 rounded border border-border object-cover" }), _jsx(Button, { variant: variant === "game-modal" ? "surfaceDestructive" : "destructive", size: "icon", title: removeLabel(item), "aria-label": removeLabel(item), onClick: () => onRemove(item.id, index), className: "absolute -right-1.5 -top-1.5 flex h-4 w-4 items-center justify-center rounded-full text-2xs opacity-100 transition-opacity focus-visible:opacity-100 sm:opacity-0 sm:group-hover:opacity-100", children: "\u00D7" })] }, item.id))) }));
|
|
8
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type * as React from "react";
|
|
2
|
+
export type ChatBubbleTone = "assistant" | "user";
|
|
3
|
+
export interface ChatBubbleProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
4
|
+
tone?: ChatBubbleTone;
|
|
5
|
+
/**
|
|
6
|
+
* Source channel the message came from (e.g. "imessage", "telegram",
|
|
7
|
+
* "discord", "whatsapp"). When set, the bubble renders a connector-
|
|
8
|
+
* colored outline so cross-channel messages stay visually distinct
|
|
9
|
+
* without adding a repeated text badge above every message.
|
|
10
|
+
*/
|
|
11
|
+
source?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare function ChatBubble({ tone, source, className, ...props }: ChatBubbleProps): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
//# sourceMappingURL=chat-bubble.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-bubble.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/composites/chat/chat-bubble.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAKpC,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,MAAM,CAAC;AAElD,MAAM,WAAW,eAAgB,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IAC3E,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,UAAU,CAAC,EACzB,IAAkB,EAClB,MAAM,EACN,SAAS,EACT,GAAG,KAAK,EACT,EAAE,eAAe,2CAsBjB"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from "../../../lib/utils";
|
|
3
|
+
import { getChatSourceMeta } from "./chat-source";
|
|
4
|
+
export function ChatBubble({ tone = "assistant", source, className, ...props }) {
|
|
5
|
+
const normalizedSource = typeof source === "string" && source.trim().toLowerCase() !== "app"
|
|
6
|
+
? source
|
|
7
|
+
: undefined;
|
|
8
|
+
const sourceBorderClass = normalizedSource
|
|
9
|
+
? getChatSourceMeta(normalizedSource).borderClassName
|
|
10
|
+
: null;
|
|
11
|
+
return (_jsx("div", { className: cn("relative border whitespace-pre-wrap break-words", tone === "user"
|
|
12
|
+
? "border border-accent/24 bg-[linear-gradient(180deg,rgba(var(--accent-rgb),0.14),rgba(var(--accent-rgb),0.05))] text-txt-strong shadow-[inset_0_1px_0_rgba(255,255,255,0.16),0_18px_26px_-24px_rgba(var(--accent-rgb),0.18)] dark:shadow-[inset_0_1px_0_rgba(255,255,255,0.06),0_20px_28px_-24px_rgba(0,0,0,0.22)]"
|
|
13
|
+
: "border border-border/32 bg-[linear-gradient(180deg,color-mix(in_srgb,var(--card)_90%,transparent),color-mix(in_srgb,var(--bg)_96%,transparent))] text-txt shadow-[inset_0_1px_0_rgba(255,255,255,0.12),0_18px_26px_-24px_rgba(15,23,42,0.1)] dark:shadow-[inset_0_1px_0_rgba(255,255,255,0.04),0_20px_28px_-24px_rgba(0,0,0,0.22)]", sourceBorderClass ? `border-2 ${sourceBorderClass}` : null, className), "data-chat-source": normalizedSource ?? undefined, ...props }));
|
|
14
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type * as React from "react";
|
|
2
|
+
import type { ChatVariant } from "./chat-types";
|
|
3
|
+
export interface ChatComposerShellProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "children"> {
|
|
4
|
+
before?: React.ReactNode;
|
|
5
|
+
children: React.ReactNode;
|
|
6
|
+
shellRef?: React.Ref<HTMLDivElement>;
|
|
7
|
+
variant?: ChatVariant;
|
|
8
|
+
}
|
|
9
|
+
export declare function ChatComposerShell({ before, children, className, shellRef, style, variant, ...props }: ChatComposerShellProps): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
//# sourceMappingURL=chat-composer-shell.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-composer-shell.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/composites/chat/chat-composer-shell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAGpC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,WAAW,sBACf,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC;IAC9D,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACrC,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB;AAED,wBAAgB,iBAAiB,CAAC,EAChC,MAAM,EACN,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,KAAK,EACL,OAAmB,EACnB,GAAG,KAAK,EACT,EAAE,sBAAsB,2CAkDxB"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from "../../../lib/utils";
|
|
3
|
+
export function ChatComposerShell({ before, children, className, shellRef, style, variant = "default", ...props }) {
|
|
4
|
+
if (variant === "game-modal") {
|
|
5
|
+
return (_jsxs("div", { ref: shellRef, className: cn("mt-auto pointer-events-auto px-1 max-[380px]:px-0.5", className), "data-no-camera-drag": "true", style: {
|
|
6
|
+
zIndex: 1,
|
|
7
|
+
paddingBottom: "calc(max(env(safe-area-inset-bottom, 0px), 0px) + 0.25rem)",
|
|
8
|
+
...style,
|
|
9
|
+
}, ...props, children: [before, _jsxs("div", { className: "relative flex items-center px-3 py-2 max-[380px]:min-h-[78px] max-[380px]:px-2.5 max-[380px]:py-1.5", children: [_jsx("div", { "aria-hidden": true, className: "pointer-events-none absolute inset-0 rounded-full border border-border/26 bg-[linear-gradient(180deg,color-mix(in_srgb,var(--card)_84%,transparent),color-mix(in_srgb,var(--bg)_72%,transparent))] shadow-[inset_0_1px_0_rgba(255,255,255,0.16),0_20px_52px_rgba(15,23,42,0.18)] ring-1 ring-inset ring-white/8 backdrop-blur-[22px] dark:shadow-[inset_0_1px_0_rgba(255,255,255,0.04),0_24px_58px_rgba(0,0,0,0.36)]" }), _jsx("div", { className: "relative z-[1] flex w-full items-center", children: children })] })] }));
|
|
10
|
+
}
|
|
11
|
+
return (_jsxs("div", { ref: shellRef, className: cn("relative bg-transparent px-3 pb-3 pt-3 sm:px-4 sm:pb-4 xl:px-5", className), style: {
|
|
12
|
+
zIndex: 1,
|
|
13
|
+
paddingBottom: "calc(var(--safe-area-bottom, 0px) + 0.75rem)",
|
|
14
|
+
...style,
|
|
15
|
+
}, ...props, children: [before, children] }));
|
|
16
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { type KeyboardEvent, type RefObject } from "react";
|
|
2
|
+
import type { ChatVariant } from "./chat-types";
|
|
3
|
+
export interface ChatComposerVoiceState {
|
|
4
|
+
assistantTtsQuality?: "enhanced" | "standard";
|
|
5
|
+
captureMode: "idle" | "compose" | "push-to-talk";
|
|
6
|
+
interimTranscript: string;
|
|
7
|
+
isListening: boolean;
|
|
8
|
+
isSpeaking: boolean;
|
|
9
|
+
startListening: (mode?: "compose" | "push-to-talk") => void | Promise<void>;
|
|
10
|
+
stopListening: (options?: {
|
|
11
|
+
submit?: boolean;
|
|
12
|
+
}) => void | Promise<void>;
|
|
13
|
+
supported: boolean;
|
|
14
|
+
toggleListening: () => void;
|
|
15
|
+
}
|
|
16
|
+
export interface ChatComposerProps {
|
|
17
|
+
agentVoiceEnabled: boolean;
|
|
18
|
+
chatInput: string;
|
|
19
|
+
chatPendingImagesCount: number;
|
|
20
|
+
chatSending: boolean;
|
|
21
|
+
isAgentStarting: boolean;
|
|
22
|
+
isComposerLocked: boolean;
|
|
23
|
+
onAttachImage: () => void;
|
|
24
|
+
onChatInputChange: (value: string) => void;
|
|
25
|
+
onKeyDown: (event: KeyboardEvent<HTMLTextAreaElement>) => void;
|
|
26
|
+
onSend: () => void;
|
|
27
|
+
onStop: () => void;
|
|
28
|
+
onStopSpeaking: () => void;
|
|
29
|
+
onToggleAgentVoice: () => void;
|
|
30
|
+
showAgentVoiceToggle?: boolean;
|
|
31
|
+
t: (key: string, options?: Record<string, unknown>) => string;
|
|
32
|
+
textareaRef: RefObject<HTMLTextAreaElement | null>;
|
|
33
|
+
variant: ChatVariant;
|
|
34
|
+
voice: ChatComposerVoiceState;
|
|
35
|
+
codingAgentsAvailable?: boolean;
|
|
36
|
+
onCreateTask?: (description: string, agentType: string) => void;
|
|
37
|
+
}
|
|
38
|
+
export declare function ChatComposer({ variant, textareaRef, chatInput, chatPendingImagesCount, isComposerLocked, isAgentStarting, chatSending, voice, agentVoiceEnabled, showAgentVoiceToggle, t, onAttachImage, onChatInputChange, onKeyDown, onSend, onStop, onStopSpeaking, onToggleAgentVoice, codingAgentsAvailable, onCreateTask, }: ChatComposerProps): import("react/jsx-runtime").JSX.Element;
|
|
39
|
+
//# sourceMappingURL=chat-composer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-composer.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/composites/chat/chat-composer.tsx"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,aAAa,EAElB,KAAK,SAAS,EAIf,MAAM,OAAO,CAAC;AAIf,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,MAAM,WAAW,sBAAsB;IACrC,mBAAmB,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC;IAC9C,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,cAAc,CAAC;IACjD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,CAAC,IAAI,CAAC,EAAE,SAAS,GAAG,cAAc,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5E,aAAa,EAAE,CAAC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxE,SAAS,EAAE,OAAO,CAAC;IACnB,eAAe,EAAE,MAAM,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAChC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,WAAW,EAAE,OAAO,CAAC;IACrB,eAAe,EAAE,OAAO,CAAC;IACzB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,SAAS,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,mBAAmB,CAAC,KAAK,IAAI,CAAC;IAC/D,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC;IAC9D,WAAW,EAAE,SAAS,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAAC;IACnD,OAAO,EAAE,WAAW,CAAC;IACrB,KAAK,EAAE,sBAAsB,CAAC;IAC9B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,YAAY,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CACjE;AAED,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,WAAW,EACX,SAAS,EACT,sBAAsB,EACtB,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,KAAK,EACL,iBAAiB,EACjB,oBAA2B,EAC3B,CAAC,EACD,aAAa,EACb,iBAAiB,EACjB,SAAS,EACT,MAAM,EACN,MAAM,EACN,cAAc,EACd,kBAAkB,EAClB,qBAA6B,EAC7B,YAAY,GACb,EAAE,iBAAiB,2CAwSnB"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Mic, Paperclip, Send, Square, Volume2, VolumeX } from "lucide-react";
|
|
3
|
+
import { useEffect, useRef, useState, } from "react";
|
|
4
|
+
import { Button } from "../../ui/button";
|
|
5
|
+
import { Textarea } from "../../ui/textarea";
|
|
6
|
+
import { CreateTaskPopover } from "./create-task-popover";
|
|
7
|
+
export function ChatComposer({ variant, textareaRef, chatInput, chatPendingImagesCount, isComposerLocked, isAgentStarting, chatSending, voice, agentVoiceEnabled, showAgentVoiceToggle = true, t, onAttachImage, onChatInputChange, onKeyDown, onSend, onStop, onStopSpeaking, onToggleAgentVoice, codingAgentsAvailable = false, onCreateTask, }) {
|
|
8
|
+
const [isNarrow, setIsNarrow] = useState(() => typeof window !== "undefined" && window.innerWidth < 310);
|
|
9
|
+
useEffect(() => {
|
|
10
|
+
if (typeof window === "undefined" || !window.matchMedia)
|
|
11
|
+
return;
|
|
12
|
+
const mq = window.matchMedia("(max-width: 309px)");
|
|
13
|
+
const sync = () => setIsNarrow(mq.matches);
|
|
14
|
+
sync();
|
|
15
|
+
mq.addEventListener("change", sync);
|
|
16
|
+
return () => mq.removeEventListener("change", sync);
|
|
17
|
+
}, []);
|
|
18
|
+
const isGameModal = variant === "game-modal";
|
|
19
|
+
const showVoiceButton = isGameModal || voice.supported;
|
|
20
|
+
const defaultMicButtonVariant = voice.isListening
|
|
21
|
+
? "surfaceAccent"
|
|
22
|
+
: "surface";
|
|
23
|
+
const holdTimerRef = useRef(null);
|
|
24
|
+
const pushToTalkActiveRef = useRef(false);
|
|
25
|
+
const suppressClickRef = useRef(false);
|
|
26
|
+
const hasDraft = chatInput.trim().length > 0 || chatPendingImagesCount > 0;
|
|
27
|
+
const shouldShowStopButton = chatSending && !hasDraft;
|
|
28
|
+
const actionButtonTitle = shouldShowStopButton
|
|
29
|
+
? t("chat.stopGeneration")
|
|
30
|
+
: isGameModal || !voice.isSpeaking || hasDraft
|
|
31
|
+
? isAgentStarting
|
|
32
|
+
? t("chat.agentStarting")
|
|
33
|
+
: t("chat.send")
|
|
34
|
+
: t("chat.stopSpeaking");
|
|
35
|
+
const actionButtonLabel = isGameModal ? undefined : actionButtonTitle;
|
|
36
|
+
const inputPlaceholder = isNarrow
|
|
37
|
+
? t("chat.inputPlaceholderNarrow")
|
|
38
|
+
: t("chat.inputPlaceholder");
|
|
39
|
+
const defaultTextareaPlaceholder = isAgentStarting
|
|
40
|
+
? t("chat.agentStarting")
|
|
41
|
+
: voice.isListening
|
|
42
|
+
? voice.captureMode === "push-to-talk"
|
|
43
|
+
? t("chat.releaseToSend")
|
|
44
|
+
: !chatInput.trim()
|
|
45
|
+
? t("chat.listening")
|
|
46
|
+
: inputPlaceholder
|
|
47
|
+
: inputPlaceholder;
|
|
48
|
+
useEffect(() => {
|
|
49
|
+
return () => {
|
|
50
|
+
if (holdTimerRef.current) {
|
|
51
|
+
clearTimeout(holdTimerRef.current);
|
|
52
|
+
holdTimerRef.current = null;
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
}, []);
|
|
56
|
+
const startPushToTalk = () => {
|
|
57
|
+
if (isComposerLocked || voice.isListening)
|
|
58
|
+
return;
|
|
59
|
+
pushToTalkActiveRef.current = true;
|
|
60
|
+
suppressClickRef.current = true;
|
|
61
|
+
void voice.startListening("push-to-talk");
|
|
62
|
+
};
|
|
63
|
+
const clearHoldTimer = () => {
|
|
64
|
+
if (holdTimerRef.current) {
|
|
65
|
+
clearTimeout(holdTimerRef.current);
|
|
66
|
+
holdTimerRef.current = null;
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
const handleMicPointerDown = (_event) => {
|
|
70
|
+
if (isComposerLocked || voice.isListening)
|
|
71
|
+
return;
|
|
72
|
+
clearHoldTimer();
|
|
73
|
+
holdTimerRef.current = setTimeout(() => {
|
|
74
|
+
holdTimerRef.current = null;
|
|
75
|
+
startPushToTalk();
|
|
76
|
+
}, 180);
|
|
77
|
+
};
|
|
78
|
+
const handleMicPointerUp = () => {
|
|
79
|
+
clearHoldTimer();
|
|
80
|
+
if (!pushToTalkActiveRef.current)
|
|
81
|
+
return;
|
|
82
|
+
pushToTalkActiveRef.current = false;
|
|
83
|
+
void voice.stopListening({ submit: true });
|
|
84
|
+
window.setTimeout(() => {
|
|
85
|
+
suppressClickRef.current = false;
|
|
86
|
+
}, 0);
|
|
87
|
+
};
|
|
88
|
+
const handleMicPointerCancel = () => {
|
|
89
|
+
clearHoldTimer();
|
|
90
|
+
if (!pushToTalkActiveRef.current)
|
|
91
|
+
return;
|
|
92
|
+
pushToTalkActiveRef.current = false;
|
|
93
|
+
void voice.stopListening();
|
|
94
|
+
window.setTimeout(() => {
|
|
95
|
+
suppressClickRef.current = false;
|
|
96
|
+
}, 0);
|
|
97
|
+
};
|
|
98
|
+
const handleMicClick = () => {
|
|
99
|
+
if (suppressClickRef.current) {
|
|
100
|
+
suppressClickRef.current = false;
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
if (isComposerLocked)
|
|
104
|
+
return;
|
|
105
|
+
if (voice.isListening && voice.captureMode === "compose") {
|
|
106
|
+
void voice.stopListening();
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
if (voice.isListening)
|
|
110
|
+
return;
|
|
111
|
+
void voice.startListening("compose");
|
|
112
|
+
};
|
|
113
|
+
return (_jsxs("div", { className: isGameModal
|
|
114
|
+
? "relative flex w-full items-end gap-2 transition-all max-[380px]:gap-1.5"
|
|
115
|
+
: "flex items-end gap-1.5 sm:gap-2", children: [!isGameModal ? (_jsx(Button, { variant: chatPendingImagesCount > 0 ? "surfaceAccent" : "surface", size: "icon", className: `h-[46px] w-[46px] shrink-0 ${chatPendingImagesCount > 0 ? "ring-1 ring-inset ring-accent/25" : ""}`, onClick: onAttachImage, "aria-label": t("aria.attachImage"), title: t("chatview.AttachImage"), disabled: isComposerLocked, children: _jsx(Paperclip, { className: "h-4 w-4" }) })) : null, !isGameModal && codingAgentsAvailable && onCreateTask && (_jsx(CreateTaskPopover, { chatInput: chatInput, disabled: isComposerLocked, onCreateTask: onCreateTask, t: t })), showVoiceButton ? (_jsx(Button, { variant: isGameModal ? "ghost" : defaultMicButtonVariant, size: "icon", className: isGameModal
|
|
116
|
+
? `flex items-center justify-center h-[46px] w-[46px] shrink-0 ${voice.isListening
|
|
117
|
+
? "animate-pulse select-none rounded-full border border-border/28 bg-[linear-gradient(180deg,color-mix(in_srgb,var(--card)_82%,transparent),color-mix(in_srgb,var(--bg)_66%,transparent))] text-txt shadow-[inset_0_1px_0_rgba(255,255,255,0.14),0_16px_26px_-24px_rgba(15,23,42,0.16)] ring-1 ring-inset ring-white/8 backdrop-blur-md transition-all duration-300 active:scale-95 dark:shadow-[inset_0_1px_0_rgba(255,255,255,0.04),0_18px_28px_-24px_rgba(0,0,0,0.3)]"
|
|
118
|
+
: "select-none rounded-full border border-transparent bg-transparent text-muted-strong shadow-none ring-0 backdrop-blur-none transition-[border-color,background-color,color,transform,box-shadow] duration-300 hover:border-border/28 hover:bg-[linear-gradient(180deg,color-mix(in_srgb,var(--card)_74%,transparent),color-mix(in_srgb,var(--bg)_58%,transparent))] hover:text-txt active:scale-95"} ${isComposerLocked ? "opacity-50" : ""}`
|
|
119
|
+
: "h-[46px] w-[46px] shrink-0", onClick: handleMicClick, onPointerDown: handleMicPointerDown, onPointerUp: handleMicPointerUp, onPointerCancel: handleMicPointerCancel, onPointerLeave: handleMicPointerCancel, "aria-label": isAgentStarting
|
|
120
|
+
? t("chat.agentStarting")
|
|
121
|
+
: voice.isListening
|
|
122
|
+
? voice.captureMode === "push-to-talk"
|
|
123
|
+
? t("chat.releaseToSend")
|
|
124
|
+
: t("chat.stopListening")
|
|
125
|
+
: t("chat.voiceInput"), "aria-pressed": isGameModal ? undefined : voice.isListening, title: isAgentStarting
|
|
126
|
+
? t("chat.agentStarting")
|
|
127
|
+
: voice.isListening
|
|
128
|
+
? voice.captureMode === "push-to-talk"
|
|
129
|
+
? t("chat.releaseToSend")
|
|
130
|
+
: t("chat.stopListening")
|
|
131
|
+
: voice.assistantTtsQuality === "enhanced"
|
|
132
|
+
? t("chat.micTitleIdleEnhanced")
|
|
133
|
+
: t("chat.micTitleIdleStandard"), disabled: isComposerLocked, children: _jsx(Mic, { className: isGameModal ? "h-5 w-5" : "h-4 w-4" }) })) : null, _jsxs("div", { className: "relative min-w-0 flex-1", children: [_jsx(Textarea, { ref: textareaRef, value: chatInput, onChange: (event) => onChatInputChange(event.target.value), onKeyDown: onKeyDown, "data-testid": "chat-composer-textarea", className: isGameModal
|
|
134
|
+
? "w-full min-w-0 min-h-0 h-[46px] resize-none overflow-y-hidden max-h-[200px] outline-none ring-0 shadow-none focus:outline-none focus:ring-0 focus-visible:outline-none focus-visible:ring-0 focus-visible:ring-offset-0 font-[var(--font-chat)] disabled:opacity-50 rounded-3xl border border-transparent bg-transparent px-4 pb-[13px] pt-[13px] text-[15px] leading-[1.55] text-txt-strong placeholder:text-muted"
|
|
135
|
+
: "w-full min-w-0 min-h-0 h-[46px] resize-none overflow-y-hidden max-h-[200px] outline-none ring-0 shadow-none focus:outline-none focus:ring-0 focus-visible:outline-none focus-visible:ring-0 focus-visible:ring-offset-0 font-[var(--font-chat)] disabled:opacity-50 rounded-3xl border border-border/28 bg-[linear-gradient(180deg,color-mix(in_srgb,var(--card)_82%,transparent),color-mix(in_srgb,var(--bg)_96%,transparent))] px-4 py-[13px] text-[15px] leading-[1.55] text-txt shadow-[inset_0_1px_0_rgba(255,255,255,0.12),0_18px_24px_-22px_rgba(15,23,42,0.12)] placeholder:text-muted", placeholder: defaultTextareaPlaceholder, rows: 1, disabled: isComposerLocked }), voice.isListening && voice.interimTranscript ? (_jsx("div", { className: "pointer-events-none absolute inset-x-4 bottom-2.5 truncate text-xs-tight text-muted", children: voice.interimTranscript })) : null] }), showAgentVoiceToggle ? (_jsx(Button, { variant: isGameModal
|
|
136
|
+
? "ghost"
|
|
137
|
+
: agentVoiceEnabled
|
|
138
|
+
? "surfaceAccent"
|
|
139
|
+
: "surface", size: "icon", className: isGameModal
|
|
140
|
+
? `flex items-center justify-center h-[46px] w-[46px] shrink-0 ${agentVoiceEnabled
|
|
141
|
+
? "select-none rounded-full border border-border/28 bg-[linear-gradient(180deg,color-mix(in_srgb,var(--card)_82%,transparent),color-mix(in_srgb,var(--bg)_66%,transparent))] text-txt shadow-[inset_0_1px_0_rgba(255,255,255,0.14),0_16px_26px_-24px_rgba(15,23,42,0.16)] ring-1 ring-inset ring-white/8 backdrop-blur-md transition-all duration-300 active:scale-95 dark:shadow-[inset_0_1px_0_rgba(255,255,255,0.04),0_18px_28px_-24px_rgba(0,0,0,0.3)]"
|
|
142
|
+
: "select-none rounded-full border border-transparent bg-transparent text-muted-strong shadow-none ring-0 backdrop-blur-none transition-[border-color,background-color,color,transform,box-shadow] duration-300 hover:border-border/28 hover:bg-[linear-gradient(180deg,color-mix(in_srgb,var(--card)_74%,transparent),color-mix(in_srgb,var(--bg)_58%,transparent))] hover:text-txt active:scale-95"}`
|
|
143
|
+
: "h-[46px] w-[46px] shrink-0", onClick: onToggleAgentVoice, "aria-label": agentVoiceEnabled ? t("aria.agentVoiceOn") : t("aria.agentVoiceOff"), title: agentVoiceEnabled ? t("chat.agentVoiceOn") : t("chat.agentVoiceOff"), disabled: isComposerLocked, children: agentVoiceEnabled ? (_jsx(Volume2, { className: isGameModal ? "h-5 w-5" : "h-4 w-4" })) : (_jsx(VolumeX, { className: isGameModal ? "h-5 w-5" : "h-4 w-4" })) })) : null, shouldShowStopButton ? (_jsx(Button, { variant: "surfaceDestructive", "data-testid": "chat-composer-action", className: "ml-1 flex items-center justify-center rounded-full transition-all duration-300 select-none active:scale-95 h-[46px] w-[46px] shrink-0", onClick: onStop, size: "icon", title: actionButtonLabel, "aria-label": actionButtonLabel, children: _jsx(Square, { className: isGameModal ? "h-4.5 w-4.5" : "h-4 w-4" }) })) : !isGameModal && voice.isSpeaking && !hasDraft ? (_jsx(Button, { variant: "surfaceDestructive", "data-testid": "chat-composer-action", className: "ml-1 flex items-center justify-center rounded-full transition-all duration-300 select-none active:scale-95 h-[46px] w-[46px] shrink-0", onClick: onStopSpeaking, size: "icon", title: actionButtonLabel, "aria-label": actionButtonLabel, children: _jsx(Square, { className: "h-4 w-4" }) })) : (_jsx(Button, { variant: isGameModal ? "default" : "surfaceAccent", "data-testid": "chat-composer-action", size: "icon", className: isGameModal
|
|
144
|
+
? `ml-1 flex items-center justify-center rounded-full transition-all duration-300 select-none active:scale-95 h-[46px] w-[46px] shrink-0 ${hasDraft
|
|
145
|
+
? "select-none rounded-full border border-border/28 bg-[linear-gradient(180deg,color-mix(in_srgb,var(--card)_82%,transparent),color-mix(in_srgb,var(--bg)_66%,transparent))] text-txt shadow-[inset_0_1px_0_rgba(255,255,255,0.14),0_16px_26px_-24px_rgba(15,23,42,0.16)] ring-1 ring-inset ring-white/8 backdrop-blur-md transition-all duration-300 active:scale-95 dark:shadow-[inset_0_1px_0_rgba(255,255,255,0.04),0_18px_28px_-24px_rgba(0,0,0,0.3)]"
|
|
146
|
+
: "select-none rounded-full border border-transparent bg-transparent text-muted-strong shadow-none ring-0 backdrop-blur-none transition-[border-color,background-color,color,transform,box-shadow] duration-300 hover:border-border/28 hover:bg-[linear-gradient(180deg,color-mix(in_srgb,var(--card)_74%,transparent),color-mix(in_srgb,var(--bg)_58%,transparent))] hover:text-txt active:scale-95 opacity-80"}`
|
|
147
|
+
: "ml-1 flex items-center justify-center rounded-full transition-all duration-300 select-none active:scale-95 h-[46px] w-[46px] shrink-0 border-accent/26 disabled:ring-0", onClick: onSend, disabled: isComposerLocked || (!hasDraft && !chatSending), title: actionButtonLabel, "aria-label": actionButtonLabel, children: _jsx(Send, { className: isGameModal ? "h-4.5 w-4.5" : "h-4 w-4" }) }))] }));
|
|
148
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type React from "react";
|
|
2
|
+
import type { ChatConversationLabels, ChatConversationSummary, ChatVariant } from "./chat-types";
|
|
3
|
+
export interface ChatConversationItemProps {
|
|
4
|
+
conversation: ChatConversationSummary;
|
|
5
|
+
deleting?: boolean;
|
|
6
|
+
displayTitle?: string;
|
|
7
|
+
isActive: boolean;
|
|
8
|
+
isConfirmingDelete?: boolean;
|
|
9
|
+
isUnread?: boolean;
|
|
10
|
+
labels?: ChatConversationLabels;
|
|
11
|
+
mobile?: boolean;
|
|
12
|
+
onCancelDelete?: () => void;
|
|
13
|
+
onConfirmDelete?: () => void | Promise<void>;
|
|
14
|
+
onOpenActions?: (event: React.MouseEvent<HTMLButtonElement | HTMLDivElement> | React.TouchEvent<HTMLButtonElement | HTMLDivElement>, conversation: ChatConversationSummary) => void;
|
|
15
|
+
onRequestDeleteConfirm?: () => void;
|
|
16
|
+
onRequestRename?: () => void;
|
|
17
|
+
onSelect: () => void;
|
|
18
|
+
variant?: ChatVariant;
|
|
19
|
+
}
|
|
20
|
+
export declare function ChatConversationItem({ conversation, deleting, displayTitle, isActive, isConfirmingDelete, isUnread, labels, mobile, onCancelDelete, onConfirmDelete, onOpenActions, onRequestDeleteConfirm, onRequestRename, onSelect, variant, }: ChatConversationItemProps): import("react/jsx-runtime").JSX.Element;
|
|
21
|
+
//# sourceMappingURL=chat-conversation-item.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-conversation-item.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/composites/chat/chat-conversation-item.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAc/B,OAAO,KAAK,EACV,sBAAsB,EACtB,uBAAuB,EACvB,WAAW,EACZ,MAAM,cAAc,CAAC;AAkFtB,MAAM,WAAW,yBAAyB;IACxC,YAAY,EAAE,uBAAuB,CAAC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,sBAAsB,CAAC;IAChC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,aAAa,CAAC,EAAE,CACd,KAAK,EACD,KAAK,CAAC,UAAU,CAAC,iBAAiB,GAAG,cAAc,CAAC,GACpD,KAAK,CAAC,UAAU,CAAC,iBAAiB,GAAG,cAAc,CAAC,EACxD,YAAY,EAAE,uBAAuB,KAClC,IAAI,CAAC;IACV,sBAAsB,CAAC,EAAE,MAAM,IAAI,CAAC;IACpC,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB;AAED,wBAAgB,oBAAoB,CAAC,EACnC,YAAY,EACZ,QAAgB,EAChB,YAAY,EACZ,QAAQ,EACR,kBAA0B,EAC1B,QAAgB,EAChB,MAAW,EACX,MAAc,EACd,cAAc,EACd,eAAe,EACf,aAAa,EACb,sBAAsB,EACtB,eAAe,EACf,QAAQ,EACR,OAAmB,GACpB,EAAE,yBAAyB,2CAqM3B"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { PencilLine, X } from "lucide-react";
|
|
3
|
+
import { useCallback, useEffect, useLayoutEffect, useRef, useState, } from "react";
|
|
4
|
+
import { Z_OVERLAY } from "../../../lib/floating-layers";
|
|
5
|
+
import { cn } from "../../../lib/utils";
|
|
6
|
+
import { Button } from "../../ui/button";
|
|
7
|
+
import { Tooltip, TooltipContent, TooltipTrigger } from "../../ui/tooltip";
|
|
8
|
+
import { PagePanel } from "../page-panel";
|
|
9
|
+
import { ChatSourceIcon } from "./chat-source";
|
|
10
|
+
function TruncatingConversationTitle({ displayTitle, isActive, variant, }) {
|
|
11
|
+
const titleRef = useRef(null);
|
|
12
|
+
const [isTruncated, setIsTruncated] = useState(false);
|
|
13
|
+
const measure = useCallback(() => {
|
|
14
|
+
const el = titleRef.current;
|
|
15
|
+
if (!el)
|
|
16
|
+
return;
|
|
17
|
+
setIsTruncated(el.scrollWidth > el.clientWidth + 1);
|
|
18
|
+
}, []);
|
|
19
|
+
useLayoutEffect(() => {
|
|
20
|
+
measure();
|
|
21
|
+
const el = titleRef.current;
|
|
22
|
+
if (!el)
|
|
23
|
+
return;
|
|
24
|
+
let ro;
|
|
25
|
+
if (typeof ResizeObserver !== "undefined") {
|
|
26
|
+
ro = new ResizeObserver(() => {
|
|
27
|
+
measure();
|
|
28
|
+
});
|
|
29
|
+
ro.observe(el);
|
|
30
|
+
}
|
|
31
|
+
window.addEventListener("resize", measure);
|
|
32
|
+
return () => {
|
|
33
|
+
ro?.disconnect();
|
|
34
|
+
window.removeEventListener("resize", measure);
|
|
35
|
+
};
|
|
36
|
+
}, [measure]);
|
|
37
|
+
const span = (_jsx("span", { ref: titleRef, className: variant === "game-modal"
|
|
38
|
+
? `block w-full min-w-0 max-w-full truncate text-left text-sm font-medium leading-tight transition-colors ${isActive
|
|
39
|
+
? "text-txt text-shadow-glow"
|
|
40
|
+
: "text-white/90 group-hover:text-white"}`
|
|
41
|
+
: `block min-w-0 max-w-full flex-1 truncate text-left text-sm font-semibold leading-[1.2] tracking-[-0.01em] transition-colors ${isActive
|
|
42
|
+
? "text-txt"
|
|
43
|
+
: "text-[color:color-mix(in_srgb,var(--text-strong)_88%,var(--text)_12%)] group-hover:text-txt"}`, ...(isTruncated ? { title: displayTitle } : {}), children: displayTitle }));
|
|
44
|
+
if (!isTruncated) {
|
|
45
|
+
return span;
|
|
46
|
+
}
|
|
47
|
+
return (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: span }), _jsx(TooltipContent, { side: "right", align: "start", sideOffset: 10, collisionPadding: 12, className: `z-[${Z_OVERLAY}] max-w-[min(90vw,22rem)] whitespace-normal break-words px-3 py-2 text-sm leading-snug`, children: displayTitle })] }));
|
|
48
|
+
}
|
|
49
|
+
export function ChatConversationItem({ conversation, deleting = false, displayTitle, isActive, isConfirmingDelete = false, isUnread = false, labels = {}, mobile = false, onCancelDelete, onConfirmDelete, onOpenActions, onRequestDeleteConfirm, onRequestRename, onSelect, variant = "default", }) {
|
|
50
|
+
const longPressTimerRef = useRef(null);
|
|
51
|
+
const suppressClickRef = useRef(false);
|
|
52
|
+
const isGameModal = variant === "game-modal";
|
|
53
|
+
const clearLongPressTimer = useCallback(() => {
|
|
54
|
+
if (longPressTimerRef.current !== null) {
|
|
55
|
+
clearTimeout(longPressTimerRef.current);
|
|
56
|
+
longPressTimerRef.current = null;
|
|
57
|
+
}
|
|
58
|
+
}, []);
|
|
59
|
+
useEffect(() => {
|
|
60
|
+
return () => clearLongPressTimer();
|
|
61
|
+
}, [clearLongPressTimer]);
|
|
62
|
+
const handleTouchStart = (event) => {
|
|
63
|
+
if (!mobile || !onOpenActions)
|
|
64
|
+
return;
|
|
65
|
+
clearLongPressTimer();
|
|
66
|
+
longPressTimerRef.current = setTimeout(() => {
|
|
67
|
+
suppressClickRef.current = true;
|
|
68
|
+
onOpenActions(event, conversation);
|
|
69
|
+
clearLongPressTimer();
|
|
70
|
+
}, 450);
|
|
71
|
+
};
|
|
72
|
+
const handleTouchEnd = () => {
|
|
73
|
+
clearLongPressTimer();
|
|
74
|
+
};
|
|
75
|
+
const renderedTitle = displayTitle ?? conversation.title;
|
|
76
|
+
const conversationSource = typeof conversation.source === "string" && conversation.source.trim()
|
|
77
|
+
? conversation.source
|
|
78
|
+
: null;
|
|
79
|
+
const showInlineActions = isGameModal;
|
|
80
|
+
const showSourceBadge = !isGameModal &&
|
|
81
|
+
conversationSource !== null &&
|
|
82
|
+
conversationSource.trim().toLowerCase() !== "app";
|
|
83
|
+
return (_jsxs("div", { "data-testid": "conv-item", "data-active": isActive || undefined, className: isGameModal
|
|
84
|
+
? `group relative flex w-full items-start gap-2 rounded-xl border p-2.5 transition-all sm:gap-3 ${isActive
|
|
85
|
+
? "border-[color:var(--onboarding-accent-border)] bg-[color:var(--onboarding-accent-bg)] shadow-[0_14px_28px_rgba(0,0,0,0.2)]"
|
|
86
|
+
: "border-transparent bg-transparent hover:border-white/10 hover:bg-white/5"}`
|
|
87
|
+
: `group relative flex w-full items-start justify-start gap-3 rounded-2xl border px-3.5 py-3.5 text-left transition-[border-color,background-color,color,box-shadow,transform] duration-150 focus-within:ring-2 focus-within:ring-accent/35 ${isActive
|
|
88
|
+
? "border-accent/26 bg-[linear-gradient(180deg,rgba(var(--accent-rgb),0.18),rgba(var(--accent-rgb),0.08))] text-txt shadow-[inset_0_1px_0_rgba(255,255,255,0.16),0_18px_24px_-22px_rgba(var(--accent-rgb),0.22)] ring-1 ring-inset ring-accent/10 dark:shadow-[inset_0_1px_0_rgba(255,255,255,0.05),0_18px_28px_-22px_rgba(0,0,0,0.26),0_0_0_1px_rgba(var(--accent-rgb),0.12)]"
|
|
89
|
+
: "border-border/10 bg-[linear-gradient(180deg,color-mix(in_srgb,var(--card)_18%,transparent),transparent)] text-muted shadow-[inset_0_1px_0_rgba(255,255,255,0.04)] hover:border-border/28 hover:bg-[linear-gradient(180deg,color-mix(in_srgb,var(--card)_28%,transparent),transparent)] hover:text-txt hover:shadow-[inset_0_1px_0_rgba(255,255,255,0.08),0_14px_20px_-22px_rgba(15,23,42,0.12)] dark:shadow-[inset_0_1px_0_rgba(255,255,255,0.02)] dark:hover:shadow-[inset_0_1px_0_rgba(255,255,255,0.04),0_14px_22px_-22px_rgba(0,0,0,0.22)]"}`, children: [_jsxs(Button, { variant: "ghost", size: "sm", "data-testid": "conv-select", className: isGameModal
|
|
90
|
+
? "flex h-auto w-full min-w-0 flex-1 cursor-pointer flex-col !items-start !justify-start overflow-hidden rounded-none border-none bg-transparent p-0 !text-left"
|
|
91
|
+
: `m-0 flex h-auto w-full min-w-0 flex-1 cursor-pointer items-start gap-3 overflow-hidden rounded-none border-0 bg-transparent p-0 text-left hover:bg-transparent focus-visible:ring-0 focus-visible:ring-offset-0 ${showSourceBadge ? "pr-8" : ""}`, onClick: () => {
|
|
92
|
+
if (suppressClickRef.current) {
|
|
93
|
+
suppressClickRef.current = false;
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
onSelect();
|
|
97
|
+
}, onContextMenu: (event) => {
|
|
98
|
+
if (mobile || !onOpenActions)
|
|
99
|
+
return;
|
|
100
|
+
onOpenActions(event, conversation);
|
|
101
|
+
}, onTouchStart: handleTouchStart, onTouchEnd: handleTouchEnd, onTouchCancel: handleTouchEnd, onTouchMove: handleTouchEnd, children: [isUnread ? (_jsx("span", { className: isGameModal
|
|
102
|
+
? "absolute left-3 top-3 z-[1] h-2 w-2 shrink-0 rounded-full bg-accent shadow-[0_0_10px_rgba(var(--accent-rgb),0.6)] animate-pulse"
|
|
103
|
+
: "mt-1.5 h-2.5 w-2.5 shrink-0 rounded-full bg-accent shadow-[0_0_8px_rgba(var(--accent-rgb),0.35)]" })) : null, _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx(TruncatingConversationTitle, { displayTitle: renderedTitle, isActive: isActive, variant: variant }), !isGameModal ? (_jsxs("div", { className: "mt-1.5 flex flex-wrap items-center gap-1.5 text-xs-tight font-medium leading-none text-muted/72 [font-variant-numeric:tabular-nums]", children: [conversation.updatedAtLabel ? (_jsx("span", { children: conversation.updatedAtLabel })) : null, isUnread ? (_jsx(PagePanel.Meta, { compact: true, tone: "accent", children: "New" })) : null] })) : null] })] }), showSourceBadge && conversationSource !== null ? (_jsx("div", { className: "pointer-events-none absolute right-3.5 top-3.5", children: _jsx(ChatSourceIcon, { source: conversationSource, className: "h-4 w-4" }) })) : null, showInlineActions && !isConfirmingDelete ? (_jsx(Button, { size: "icon", variant: isGameModal ? "ghost" : "surface", "data-testid": "conv-rename", "aria-label": labels.rename ?? "Rename conversation", className: cn(isGameModal
|
|
104
|
+
? "h-8 w-8 shrink-0 self-center rounded-lg border border-white/10 bg-black/20 text-[color:var(--onboarding-text-muted)] shadow-sm transition-[border-color,background-color,color,opacity] hover:border-[color:var(--onboarding-accent-border)] hover:bg-[color:var(--onboarding-accent-bg)] hover:text-[color:var(--onboarding-text-strong)] focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-accent"
|
|
105
|
+
: "h-8 w-8 shrink-0 rounded-lg hover:text-accent", mobile
|
|
106
|
+
? "opacity-100"
|
|
107
|
+
: "opacity-0 pointer-events-none group-hover:opacity-100 group-hover:pointer-events-auto focus-visible:opacity-100 focus-visible:pointer-events-auto"), onClick: (event) => {
|
|
108
|
+
event.preventDefault();
|
|
109
|
+
event.stopPropagation();
|
|
110
|
+
onRequestRename?.();
|
|
111
|
+
}, children: _jsx(PencilLine, { className: "h-3.5 w-3.5", strokeWidth: 2.25, "aria-hidden": true }) })) : null, showInlineActions && !isConfirmingDelete ? (_jsx(Button, { size: "icon", variant: isGameModal ? "ghost" : "surfaceDestructive", "data-testid": "conv-delete", "aria-label": labels.delete ?? "Delete conversation", className: cn(isGameModal
|
|
112
|
+
? "h-8 w-8 shrink-0 self-center rounded-lg border border-white/10 bg-black/20 text-[color:var(--onboarding-text-muted)] shadow-sm transition-[border-color,background-color,color,opacity] hover:border-[color:var(--onboarding-accent-border)] hover:bg-[color:var(--onboarding-accent-bg)] hover:text-[color:var(--onboarding-text-strong)] focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-accent"
|
|
113
|
+
: "h-8 w-8 shrink-0 rounded-lg", mobile
|
|
114
|
+
? "opacity-100"
|
|
115
|
+
: "opacity-0 pointer-events-none group-hover:opacity-100 group-hover:pointer-events-auto focus-visible:opacity-100 focus-visible:pointer-events-auto", "hover:text-danger"), onClick: (event) => {
|
|
116
|
+
event.preventDefault();
|
|
117
|
+
event.stopPropagation();
|
|
118
|
+
onRequestDeleteConfirm?.();
|
|
119
|
+
}, children: _jsx(X, { className: "h-3.5 w-3.5", strokeWidth: 2.25, "aria-hidden": true }) })) : null, isConfirmingDelete ? (_jsxs("div", { className: "flex flex-shrink-0 items-center gap-1.5 rounded-lg border border-danger/22 bg-[linear-gradient(180deg,rgba(239,68,68,0.1),rgba(239,68,68,0.04))] px-2 py-1 shadow-[inset_0_1px_0_rgba(255,255,255,0.08),0_10px_16px_-16px_rgba(127,29,29,0.18)]", children: [_jsx("span", { className: "text-2xs font-medium text-danger", children: labels.deleteConfirm ?? "Delete?" }), _jsx(Button, { variant: "destructive", size: "sm", className: "h-7 rounded-md px-2 py-0.5 text-2xs shadow-sm disabled:opacity-50", onClick: () => void onConfirmDelete?.(), disabled: deleting, children: deleting ? "..." : (labels.deleteYes ?? "Yes") }), _jsx(Button, { variant: "outline", size: "sm", className: "h-7 rounded-md px-2 py-0.5 text-2xs text-muted-strong shadow-sm hover:border-accent/40 hover:text-txt disabled:opacity-50", onClick: onCancelDelete, disabled: deleting, children: labels.deleteNo ?? "No" })] })) : null] }));
|
|
120
|
+
}
|