@chatsdk-dev/ui 0.0.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -7
- package/dist/atoms/accordion.d.ts +7 -0
- package/dist/atoms/accordion.d.ts.map +1 -0
- package/dist/atoms/accordion.js +18 -0
- package/dist/atoms/alert-dialog.d.ts +19 -0
- package/dist/atoms/alert-dialog.d.ts.map +1 -0
- package/dist/atoms/alert-dialog.js +42 -0
- package/dist/atoms/alert.d.ts +11 -0
- package/dist/atoms/alert.d.ts.map +1 -0
- package/dist/atoms/alert.js +27 -0
- package/dist/atoms/avatar.d.ts +12 -0
- package/dist/atoms/avatar.d.ts.map +1 -0
- package/dist/atoms/avatar.js +23 -0
- package/dist/atoms/badge.d.ts +8 -0
- package/dist/atoms/badge.d.ts.map +1 -0
- package/dist/atoms/badge.js +44 -0
- package/dist/atoms/button-group.d.ts +11 -0
- package/dist/atoms/button-group.d.ts.map +1 -0
- package/dist/atoms/button-group.js +36 -0
- package/dist/atoms/button-loader.d.ts +9 -0
- package/dist/atoms/button-loader.d.ts.map +1 -0
- package/dist/atoms/button-loader.js +10 -0
- package/dist/atoms/button.d.ts +9 -0
- package/dist/atoms/button.d.ts.map +1 -0
- package/dist/atoms/button.js +32 -0
- package/dist/atoms/card.d.ts +12 -0
- package/dist/atoms/card.d.ts.map +1 -0
- package/dist/atoms/card.js +25 -0
- package/dist/atoms/carousel.d.ts +29 -0
- package/dist/atoms/carousel.d.ts.map +1 -0
- package/dist/atoms/carousel.js +91 -0
- package/dist/atoms/collapsible.d.ts +6 -0
- package/dist/atoms/collapsible.d.ts.map +1 -0
- package/dist/atoms/collapsible.js +13 -0
- package/dist/atoms/command.d.ts +20 -0
- package/dist/atoms/command.d.ts.map +1 -0
- package/dist/atoms/command.js +35 -0
- package/dist/atoms/container.d.ts +8 -0
- package/dist/atoms/container.d.ts.map +1 -0
- package/dist/atoms/container.js +5 -0
- package/dist/atoms/dialog.d.ts +19 -0
- package/dist/atoms/dialog.d.ts.map +1 -0
- package/dist/atoms/dialog.js +38 -0
- package/dist/atoms/dots-loader.d.ts +15 -0
- package/dist/atoms/dots-loader.d.ts.map +1 -0
- package/dist/atoms/dots-loader.js +21 -0
- package/dist/atoms/drawer.d.ts +14 -0
- package/dist/atoms/drawer.d.ts.map +1 -0
- package/dist/atoms/drawer.js +35 -0
- package/dist/atoms/dropdown-menu.d.ts +26 -0
- package/dist/atoms/dropdown-menu.d.ts.map +1 -0
- package/dist/atoms/dropdown-menu.js +51 -0
- package/dist/atoms/empty.d.ts +12 -0
- package/dist/atoms/empty.d.ts.map +1 -0
- package/dist/atoms/empty.js +33 -0
- package/dist/atoms/field.d.ts +25 -0
- package/dist/atoms/field.d.ts.map +1 -0
- package/dist/atoms/field.js +68 -0
- package/dist/atoms/form.d.ts +23 -0
- package/dist/atoms/form.d.ts.map +1 -0
- package/dist/atoms/form.js +68 -0
- package/dist/atoms/header.d.ts +6 -0
- package/dist/atoms/header.d.ts.map +1 -0
- package/dist/atoms/header.js +6 -0
- package/dist/atoms/hover-card.d.ts +6 -0
- package/dist/atoms/hover-card.d.ts.map +1 -0
- package/dist/atoms/hover-card.js +14 -0
- package/dist/atoms/index.d.ts +5 -0
- package/dist/atoms/index.d.ts.map +1 -0
- package/dist/atoms/index.js +5 -0
- package/dist/atoms/input-group.d.ts +19 -0
- package/dist/atoms/input-group.d.ts.map +1 -0
- package/dist/atoms/input-group.js +57 -0
- package/dist/atoms/input.d.ts +7 -0
- package/dist/atoms/input.d.ts.map +1 -0
- package/dist/atoms/input.js +6 -0
- package/dist/atoms/label.d.ts +3 -0
- package/dist/atoms/label.d.ts.map +1 -0
- package/dist/atoms/label.js +7 -0
- package/dist/atoms/logo.d.ts +7 -0
- package/dist/atoms/logo.d.ts.map +1 -0
- package/dist/atoms/logo.js +6 -0
- package/dist/atoms/number-flow.d.ts +3 -0
- package/dist/atoms/number-flow.d.ts.map +1 -0
- package/dist/atoms/number-flow.js +6 -0
- package/dist/atoms/popover.d.ts +10 -0
- package/dist/atoms/popover.d.ts.map +1 -0
- package/dist/atoms/popover.js +23 -0
- package/dist/atoms/progress.d.ts +8 -0
- package/dist/atoms/progress.d.ts.map +1 -0
- package/dist/atoms/progress.js +20 -0
- package/dist/atoms/radio-group.d.ts +6 -0
- package/dist/atoms/radio-group.d.ts.map +1 -0
- package/dist/atoms/radio-group.js +13 -0
- package/dist/atoms/scroll-area.d.ts +5 -0
- package/dist/atoms/scroll-area.d.ts.map +1 -0
- package/dist/atoms/scroll-area.js +11 -0
- package/dist/atoms/select.d.ts +17 -0
- package/dist/atoms/select.d.ts.map +1 -0
- package/dist/atoms/select.js +34 -0
- package/dist/atoms/separator.d.ts +3 -0
- package/dist/atoms/separator.d.ts.map +1 -0
- package/dist/atoms/separator.js +7 -0
- package/dist/atoms/sheet.d.ts +15 -0
- package/dist/atoms/sheet.d.ts.map +1 -0
- package/dist/atoms/sheet.js +37 -0
- package/dist/atoms/sidebar.d.ts +65 -0
- package/dist/atoms/sidebar.d.ts.map +1 -0
- package/dist/atoms/sidebar.js +258 -0
- package/dist/atoms/skeleton.d.ts +2 -0
- package/dist/atoms/skeleton.d.ts.map +1 -0
- package/dist/atoms/skeleton.js +5 -0
- package/dist/atoms/spinner.d.ts +3 -0
- package/dist/atoms/spinner.d.ts.map +1 -0
- package/dist/atoms/spinner.js +7 -0
- package/dist/atoms/switch.d.ts +5 -0
- package/dist/atoms/switch.d.ts.map +1 -0
- package/dist/atoms/switch.js +7 -0
- package/dist/atoms/table.d.ts +13 -0
- package/dist/atoms/table.d.ts.map +1 -0
- package/dist/atoms/table.js +28 -0
- package/dist/atoms/tabs.d.ts +12 -0
- package/dist/atoms/tabs.d.ts.map +1 -0
- package/dist/atoms/tabs.js +32 -0
- package/dist/atoms/textarea.d.ts +3 -0
- package/dist/atoms/textarea.d.ts.map +1 -0
- package/dist/atoms/textarea.js +5 -0
- package/dist/atoms/toggle.d.ts +9 -0
- package/dist/atoms/toggle.d.ts.map +1 -0
- package/dist/atoms/toggle.js +26 -0
- package/dist/atoms/tooltip.d.ts +7 -0
- package/dist/atoms/tooltip.d.ts.map +1 -0
- package/dist/atoms/tooltip.js +17 -0
- package/dist/atoms/typography/h1.d.ts +10 -0
- package/dist/atoms/typography/h1.d.ts.map +1 -0
- package/dist/atoms/typography/h1.js +6 -0
- package/dist/atoms/typography/paragraph.d.ts +6 -0
- package/dist/atoms/typography/paragraph.d.ts.map +1 -0
- package/dist/atoms/typography/paragraph.js +6 -0
- package/dist/atoms/typography/text.d.ts +14 -0
- package/dist/atoms/typography/text.d.ts.map +1 -0
- package/dist/atoms/typography/text.js +41 -0
- package/dist/components/responsive-alert-dialog.d.ts +16 -0
- package/dist/components/responsive-alert-dialog.d.ts.map +1 -0
- package/dist/components/responsive-alert-dialog.js +20 -0
- package/dist/components/responsive-dialog.d.ts +11 -0
- package/dist/components/responsive-dialog.d.ts.map +1 -0
- package/dist/components/responsive-dialog.js +21 -0
- package/dist/hooks/use-copy-to-clipboard.d.ts +2 -0
- package/dist/hooks/use-copy-to-clipboard.d.ts.map +1 -0
- package/dist/hooks/use-copy-to-clipboard.js +31 -0
- package/dist/index.css +1580 -39
- package/dist/molecules/actions.d.ts +10 -0
- package/dist/molecules/actions.d.ts.map +1 -0
- package/dist/molecules/actions.js +13 -0
- package/dist/molecules/agent.d.ts +27 -0
- package/dist/molecules/agent.d.ts.map +1 -0
- package/dist/molecules/agent.js +27 -0
- package/dist/molecules/ai/actions.d.ts +10 -0
- package/dist/molecules/ai/actions.d.ts.map +1 -0
- package/dist/molecules/ai/actions.js +13 -0
- package/dist/molecules/ai/agent.d.ts +27 -0
- package/dist/molecules/ai/agent.d.ts.map +1 -0
- package/dist/molecules/ai/agent.js +27 -0
- package/dist/molecules/ai/artifact.d.ts +24 -0
- package/dist/molecules/ai/artifact.d.ts.map +1 -0
- package/dist/molecules/ai/artifact.js +20 -0
- package/dist/molecules/ai/attachments.d.ts +55 -0
- package/dist/molecules/ai/attachments.d.ts.map +1 -0
- package/dist/molecules/ai/attachments.js +125 -0
- package/dist/molecules/ai/audio-player.d.ts +30 -0
- package/dist/molecules/ai/audio-player.d.ts.map +1 -0
- package/dist/molecules/ai/audio-player.js +43 -0
- package/dist/molecules/ai/canvas.d.ts +9 -0
- package/dist/molecules/ai/canvas.d.ts.map +1 -0
- package/dist/molecules/ai/canvas.js +5 -0
- package/dist/molecules/ai/chain-of-thought.d.ts +30 -0
- package/dist/molecules/ai/chain-of-thought.d.ts.map +1 -0
- package/dist/molecules/ai/chain-of-thought.js +49 -0
- package/dist/molecules/ai/checkpoint.d.ts +12 -0
- package/dist/molecules/ai/checkpoint.d.ts.map +1 -0
- package/dist/molecules/ai/checkpoint.js +10 -0
- package/dist/molecules/ai/code-block.d.ts +46 -0
- package/dist/molecules/ai/code-block.d.ts.map +1 -0
- package/dist/molecules/ai/code-block.js +216 -0
- package/dist/molecules/ai/commit.d.ts +65 -0
- package/dist/molecules/ai/commit.d.ts.map +1 -0
- package/dist/molecules/ai/commit.js +95 -0
- package/dist/molecules/ai/confirmation.d.ts +50 -0
- package/dist/molecules/ai/confirmation.d.ts.map +1 -0
- package/dist/molecules/ai/confirmation.js +61 -0
- package/dist/molecules/ai/connection.d.ts +3 -0
- package/dist/molecules/ai/connection.d.ts.map +1 -0
- package/dist/molecules/ai/connection.js +3 -0
- package/dist/molecules/ai/context.d.ts +33 -0
- package/dist/molecules/ai/context.d.ts.map +1 -0
- package/dist/molecules/ai/context.js +164 -0
- package/dist/molecules/ai/controls.d.ts +5 -0
- package/dist/molecules/ai/controls.d.ts.map +1 -0
- package/dist/molecules/ai/controls.js +5 -0
- package/dist/molecules/ai/conversation.d.ts +24 -0
- package/dist/molecules/ai/conversation.d.ts.map +1 -0
- package/dist/molecules/ai/conversation.js +41 -0
- package/dist/molecules/ai/edge.d.ts +6 -0
- package/dist/molecules/ai/edge.d.ts.map +1 -0
- package/dist/molecules/ai/edge.js +87 -0
- package/dist/molecules/ai/environment-variables.d.ts +39 -0
- package/dist/molecules/ai/environment-variables.d.ts.map +1 -0
- package/dist/molecules/ai/environment-variables.js +87 -0
- package/dist/molecules/ai/file-tree.d.ts +27 -0
- package/dist/molecules/ai/file-tree.d.ts.map +1 -0
- package/dist/molecules/ai/file-tree.js +71 -0
- package/dist/molecules/ai/image.d.ts +7 -0
- package/dist/molecules/ai/image.d.ts.map +1 -0
- package/dist/molecules/ai/image.js +3 -0
- package/dist/molecules/ai/inline-citation.d.ts +39 -0
- package/dist/molecules/ai/inline-citation.d.ts.map +1 -0
- package/dist/molecules/ai/inline-citation.js +68 -0
- package/dist/molecules/ai/jsx-preview.d.ts +30 -0
- package/dist/molecules/ai/jsx-preview.d.ts.map +1 -0
- package/dist/molecules/ai/jsx-preview.js +167 -0
- package/dist/molecules/ai/loader.d.ts +6 -0
- package/dist/molecules/ai/loader.d.ts.map +1 -0
- package/dist/molecules/ai/loader.js +4 -0
- package/dist/molecules/ai/message.d.ts +38 -0
- package/dist/molecules/ai/message.d.ts.map +1 -0
- package/dist/molecules/ai/message.js +92 -0
- package/dist/molecules/ai/mic-selector.d.ts +46 -0
- package/dist/molecules/ai/mic-selector.d.ts.map +1 -0
- package/dist/molecules/ai/mic-selector.js +184 -0
- package/dist/molecules/ai/model-selector.d.ts +36 -0
- package/dist/molecules/ai/model-selector.d.ts.map +1 -0
- package/dist/molecules/ai/model-selector.js +18 -0
- package/dist/molecules/ai/node.d.ts +22 -0
- package/dist/molecules/ai/node.d.ts.map +1 -0
- package/dist/molecules/ai/node.js +11 -0
- package/dist/molecules/ai/open-in-chat.d.ts +29 -0
- package/dist/molecules/ai/open-in-chat.d.ts.map +1 -0
- package/dist/molecules/ai/open-in-chat.js +100 -0
- package/dist/molecules/ai/package-info.d.ts +30 -0
- package/dist/molecules/ai/package-info.d.ts.map +1 -0
- package/dist/molecules/ai/package-info.js +50 -0
- package/dist/molecules/ai/panel.d.ts +6 -0
- package/dist/molecules/ai/panel.d.ts.map +1 -0
- package/dist/molecules/ai/panel.js +4 -0
- package/dist/molecules/ai/persona.d.ts +49 -0
- package/dist/molecules/ai/persona.d.ts.map +1 -0
- package/dist/molecules/ai/persona.js +189 -0
- package/dist/molecules/ai/plan.d.ts +26 -0
- package/dist/molecules/ai/plan.d.ts.map +1 -0
- package/dist/molecules/ai/plan.js +34 -0
- package/dist/molecules/ai/prompt-input.d.ts +149 -0
- package/dist/molecules/ai/prompt-input.d.ts.map +1 -0
- package/dist/molecules/ai/prompt-input.js +702 -0
- package/dist/molecules/ai/queue.d.ts +62 -0
- package/dist/molecules/ai/queue.d.ts.map +1 -0
- package/dist/molecules/ai/queue.js +28 -0
- package/dist/molecules/ai/reasoning.d.ts +27 -0
- package/dist/molecules/ai/reasoning.d.ts.map +1 -0
- package/dist/molecules/ai/reasoning.js +95 -0
- package/dist/molecules/ai/response.d.ts +6 -0
- package/dist/molecules/ai/response.d.ts.map +1 -0
- package/dist/molecules/ai/response.js +18 -0
- package/dist/molecules/ai/sandbox.d.ts +25 -0
- package/dist/molecules/ai/sandbox.d.ts.map +1 -0
- package/dist/molecules/ai/sandbox.js +15 -0
- package/dist/molecules/ai/schema-display.d.ts +56 -0
- package/dist/molecules/ai/schema-display.d.ts.map +1 -0
- package/dist/molecules/ai/schema-display.js +73 -0
- package/dist/molecules/ai/shimmer.d.ts +10 -0
- package/dist/molecules/ai/shimmer.d.ts.map +1 -0
- package/dist/molecules/ai/shimmer.js +28 -0
- package/dist/molecules/ai/snippet.d.ts +19 -0
- package/dist/molecules/ai/snippet.d.ts.map +1 -0
- package/dist/molecules/ai/snippet.js +46 -0
- package/dist/molecules/ai/sources.d.ts +13 -0
- package/dist/molecules/ai/sources.d.ts.map +1 -0
- package/dist/molecules/ai/sources.js +9 -0
- package/dist/molecules/ai/speech-input.d.ts +55 -0
- package/dist/molecules/ai/speech-input.d.ts.map +1 -0
- package/dist/molecules/ai/speech-input.js +187 -0
- package/dist/molecules/ai/stack-trace.d.ts +38 -0
- package/dist/molecules/ai/stack-trace.d.ts.map +1 -0
- package/dist/molecules/ai/stack-trace.js +194 -0
- package/dist/molecules/ai/suggestion.d.ts +11 -0
- package/dist/molecules/ai/suggestion.d.ts.map +1 -0
- package/dist/molecules/ai/suggestion.js +13 -0
- package/dist/molecules/ai/task.d.ts +15 -0
- package/dist/molecules/ai/task.d.ts.map +1 -0
- package/dist/molecules/ai/task.js +10 -0
- package/dist/molecules/ai/terminal.d.ts +28 -0
- package/dist/molecules/ai/terminal.d.ts.map +1 -0
- package/dist/molecules/ai/terminal.js +68 -0
- package/dist/molecules/ai/test-results.d.ts +59 -0
- package/dist/molecules/ai/test-results.d.ts.map +1 -0
- package/dist/molecules/ai/test-results.js +97 -0
- package/dist/molecules/ai/tool.d.ts +32 -0
- package/dist/molecules/ai/tool.d.ts.map +1 -0
- package/dist/molecules/ai/tool.js +49 -0
- package/dist/molecules/ai/toolbar.d.ts +6 -0
- package/dist/molecules/ai/toolbar.d.ts.map +1 -0
- package/dist/molecules/ai/toolbar.js +4 -0
- package/dist/molecules/ai/transcription.d.ts +17 -0
- package/dist/molecules/ai/transcription.d.ts.map +1 -0
- package/dist/molecules/ai/transcription.js +36 -0
- package/dist/molecules/ai/voice-selector.d.ts +64 -0
- package/dist/molecules/ai/voice-selector.d.ts.map +1 -0
- package/dist/molecules/ai/voice-selector.js +224 -0
- package/dist/molecules/ai/web-preview.d.ts +35 -0
- package/dist/molecules/ai/web-preview.d.ts.map +1 -0
- package/dist/molecules/ai/web-preview.js +65 -0
- package/dist/molecules/artifact.d.ts +24 -0
- package/dist/molecules/artifact.d.ts.map +1 -0
- package/dist/molecules/artifact.js +20 -0
- package/dist/molecules/attachments.d.ts +55 -0
- package/dist/molecules/attachments.d.ts.map +1 -0
- package/dist/molecules/attachments.js +125 -0
- package/dist/molecules/audio-player.d.ts +30 -0
- package/dist/molecules/audio-player.d.ts.map +1 -0
- package/dist/molecules/audio-player.js +43 -0
- package/dist/molecules/canvas.d.ts +9 -0
- package/dist/molecules/canvas.d.ts.map +1 -0
- package/dist/molecules/canvas.js +5 -0
- package/dist/molecules/chain-of-thought.d.ts +30 -0
- package/dist/molecules/chain-of-thought.d.ts.map +1 -0
- package/dist/molecules/chain-of-thought.js +49 -0
- package/dist/molecules/chat-message.d.ts +10 -0
- package/dist/molecules/chat-message.d.ts.map +1 -0
- package/dist/molecules/chat-message.js +53 -0
- package/dist/molecules/checkpoint.d.ts +12 -0
- package/dist/molecules/checkpoint.d.ts.map +1 -0
- package/dist/molecules/checkpoint.js +10 -0
- package/dist/molecules/code-block.d.ts +46 -0
- package/dist/molecules/code-block.d.ts.map +1 -0
- package/dist/molecules/code-block.js +216 -0
- package/dist/molecules/commit.d.ts +65 -0
- package/dist/molecules/commit.d.ts.map +1 -0
- package/dist/molecules/commit.js +95 -0
- package/dist/molecules/confirmation.d.ts +50 -0
- package/dist/molecules/confirmation.d.ts.map +1 -0
- package/dist/molecules/confirmation.js +61 -0
- package/dist/molecules/connection.d.ts +3 -0
- package/dist/molecules/connection.d.ts.map +1 -0
- package/dist/molecules/connection.js +3 -0
- package/dist/molecules/context.d.ts +33 -0
- package/dist/molecules/context.d.ts.map +1 -0
- package/dist/molecules/context.js +164 -0
- package/dist/molecules/controls.d.ts +5 -0
- package/dist/molecules/controls.d.ts.map +1 -0
- package/dist/molecules/controls.js +5 -0
- package/dist/molecules/conversation.d.ts +24 -0
- package/dist/molecules/conversation.d.ts.map +1 -0
- package/dist/molecules/conversation.js +41 -0
- package/dist/molecules/edge.d.ts +6 -0
- package/dist/molecules/edge.d.ts.map +1 -0
- package/dist/molecules/edge.js +87 -0
- package/dist/molecules/environment-variables.d.ts +39 -0
- package/dist/molecules/environment-variables.d.ts.map +1 -0
- package/dist/molecules/environment-variables.js +87 -0
- package/dist/molecules/file-tree.d.ts +27 -0
- package/dist/molecules/file-tree.d.ts.map +1 -0
- package/dist/molecules/file-tree.js +71 -0
- package/dist/molecules/image.d.ts +7 -0
- package/dist/molecules/image.d.ts.map +1 -0
- package/dist/molecules/image.js +3 -0
- package/dist/molecules/inline-citation.d.ts +39 -0
- package/dist/molecules/inline-citation.d.ts.map +1 -0
- package/dist/molecules/inline-citation.js +68 -0
- package/dist/molecules/jsx-preview.d.ts +30 -0
- package/dist/molecules/jsx-preview.d.ts.map +1 -0
- package/dist/molecules/jsx-preview.js +167 -0
- package/dist/molecules/loader.d.ts +6 -0
- package/dist/molecules/loader.d.ts.map +1 -0
- package/dist/molecules/loader.js +4 -0
- package/dist/molecules/message.d.ts +38 -0
- package/dist/molecules/message.d.ts.map +1 -0
- package/dist/molecules/message.js +92 -0
- package/dist/molecules/mic-selector.d.ts +46 -0
- package/dist/molecules/mic-selector.d.ts.map +1 -0
- package/dist/molecules/mic-selector.js +184 -0
- package/dist/molecules/model-selector.d.ts +36 -0
- package/dist/molecules/model-selector.d.ts.map +1 -0
- package/dist/molecules/model-selector.js +18 -0
- package/dist/molecules/node.d.ts +22 -0
- package/dist/molecules/node.d.ts.map +1 -0
- package/dist/molecules/node.js +11 -0
- package/dist/molecules/open-in-chat.d.ts +29 -0
- package/dist/molecules/open-in-chat.d.ts.map +1 -0
- package/dist/molecules/open-in-chat.js +100 -0
- package/dist/molecules/package-info.d.ts +30 -0
- package/dist/molecules/package-info.d.ts.map +1 -0
- package/dist/molecules/package-info.js +50 -0
- package/dist/molecules/panel.d.ts +6 -0
- package/dist/molecules/panel.d.ts.map +1 -0
- package/dist/molecules/panel.js +4 -0
- package/dist/molecules/persona.d.ts +49 -0
- package/dist/molecules/persona.d.ts.map +1 -0
- package/dist/molecules/persona.js +189 -0
- package/dist/molecules/plan.d.ts +26 -0
- package/dist/molecules/plan.d.ts.map +1 -0
- package/dist/molecules/plan.js +34 -0
- package/dist/molecules/prompt-input.d.ts +149 -0
- package/dist/molecules/prompt-input.d.ts.map +1 -0
- package/dist/molecules/prompt-input.js +702 -0
- package/dist/molecules/queue.d.ts +62 -0
- package/dist/molecules/queue.d.ts.map +1 -0
- package/dist/molecules/queue.js +28 -0
- package/dist/molecules/reasoning.d.ts +27 -0
- package/dist/molecules/reasoning.d.ts.map +1 -0
- package/dist/molecules/reasoning.js +95 -0
- package/dist/molecules/response.d.ts +6 -0
- package/dist/molecules/response.d.ts.map +1 -0
- package/dist/molecules/response.js +18 -0
- package/dist/molecules/responsive-alert-dialog.d.ts +16 -0
- package/dist/molecules/responsive-alert-dialog.d.ts.map +1 -0
- package/dist/molecules/responsive-alert-dialog.js +20 -0
- package/dist/molecules/responsive-dialog.d.ts +11 -0
- package/dist/molecules/responsive-dialog.d.ts.map +1 -0
- package/dist/molecules/responsive-dialog.js +21 -0
- package/dist/molecules/sandbox.d.ts +25 -0
- package/dist/molecules/sandbox.d.ts.map +1 -0
- package/dist/molecules/sandbox.js +15 -0
- package/dist/molecules/schema-display.d.ts +56 -0
- package/dist/molecules/schema-display.d.ts.map +1 -0
- package/dist/molecules/schema-display.js +73 -0
- package/dist/molecules/shimmer.d.ts +10 -0
- package/dist/molecules/shimmer.d.ts.map +1 -0
- package/dist/molecules/shimmer.js +28 -0
- package/dist/molecules/snippet.d.ts +19 -0
- package/dist/molecules/snippet.d.ts.map +1 -0
- package/dist/molecules/snippet.js +46 -0
- package/dist/molecules/sources.d.ts +13 -0
- package/dist/molecules/sources.d.ts.map +1 -0
- package/dist/molecules/sources.js +9 -0
- package/dist/molecules/speech-input.d.ts +55 -0
- package/dist/molecules/speech-input.d.ts.map +1 -0
- package/dist/molecules/speech-input.js +187 -0
- package/dist/molecules/stack-trace.d.ts +38 -0
- package/dist/molecules/stack-trace.d.ts.map +1 -0
- package/dist/molecules/stack-trace.js +194 -0
- package/dist/molecules/suggestion.d.ts +11 -0
- package/dist/molecules/suggestion.d.ts.map +1 -0
- package/dist/molecules/suggestion.js +13 -0
- package/dist/molecules/task.d.ts +15 -0
- package/dist/molecules/task.d.ts.map +1 -0
- package/dist/molecules/task.js +10 -0
- package/dist/molecules/terminal.d.ts +28 -0
- package/dist/molecules/terminal.d.ts.map +1 -0
- package/dist/molecules/terminal.js +68 -0
- package/dist/molecules/test-results.d.ts +59 -0
- package/dist/molecules/test-results.d.ts.map +1 -0
- package/dist/molecules/test-results.js +97 -0
- package/dist/molecules/tool.d.ts +32 -0
- package/dist/molecules/tool.d.ts.map +1 -0
- package/dist/molecules/tool.js +49 -0
- package/dist/molecules/toolbar.d.ts +6 -0
- package/dist/molecules/toolbar.d.ts.map +1 -0
- package/dist/molecules/toolbar.js +4 -0
- package/dist/molecules/transcription.d.ts +17 -0
- package/dist/molecules/transcription.d.ts.map +1 -0
- package/dist/molecules/transcription.js +36 -0
- package/dist/molecules/voice-selector.d.ts +64 -0
- package/dist/molecules/voice-selector.d.ts.map +1 -0
- package/dist/molecules/voice-selector.js +224 -0
- package/dist/molecules/web-preview.d.ts +35 -0
- package/dist/molecules/web-preview.d.ts.map +1 -0
- package/dist/molecules/web-preview.js +65 -0
- package/package.json +27 -8
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Button } from "@chatsdk-dev/ui/atoms/button";
|
|
2
|
+
import type { ComponentProps } from "react";
|
|
3
|
+
interface SpeechRecognition extends EventTarget {
|
|
4
|
+
continuous: boolean;
|
|
5
|
+
interimResults: boolean;
|
|
6
|
+
lang: string;
|
|
7
|
+
start(): void;
|
|
8
|
+
stop(): void;
|
|
9
|
+
onstart: ((this: SpeechRecognition, ev: Event) => void) | null;
|
|
10
|
+
onend: ((this: SpeechRecognition, ev: Event) => void) | null;
|
|
11
|
+
onresult: ((this: SpeechRecognition, ev: SpeechRecognitionEvent) => void) | null;
|
|
12
|
+
onerror: ((this: SpeechRecognition, ev: SpeechRecognitionErrorEvent) => void) | null;
|
|
13
|
+
}
|
|
14
|
+
interface SpeechRecognitionEvent extends Event {
|
|
15
|
+
results: SpeechRecognitionResultList;
|
|
16
|
+
resultIndex: number;
|
|
17
|
+
}
|
|
18
|
+
interface SpeechRecognitionResultList {
|
|
19
|
+
readonly length: number;
|
|
20
|
+
item(index: number): SpeechRecognitionResult;
|
|
21
|
+
[index: number]: SpeechRecognitionResult;
|
|
22
|
+
}
|
|
23
|
+
interface SpeechRecognitionResult {
|
|
24
|
+
readonly length: number;
|
|
25
|
+
item(index: number): SpeechRecognitionAlternative;
|
|
26
|
+
[index: number]: SpeechRecognitionAlternative;
|
|
27
|
+
isFinal: boolean;
|
|
28
|
+
}
|
|
29
|
+
interface SpeechRecognitionAlternative {
|
|
30
|
+
transcript: string;
|
|
31
|
+
confidence: number;
|
|
32
|
+
}
|
|
33
|
+
interface SpeechRecognitionErrorEvent extends Event {
|
|
34
|
+
error: string;
|
|
35
|
+
}
|
|
36
|
+
declare global {
|
|
37
|
+
interface Window {
|
|
38
|
+
SpeechRecognition: new () => SpeechRecognition;
|
|
39
|
+
webkitSpeechRecognition: new () => SpeechRecognition;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
export type SpeechInputProps = ComponentProps<typeof Button> & {
|
|
43
|
+
onTranscriptionChange?: (text: string) => void;
|
|
44
|
+
/**
|
|
45
|
+
* Callback for when audio is recorded using MediaRecorder fallback.
|
|
46
|
+
* This is called in browsers that don't support the Web Speech API (Firefox, Safari).
|
|
47
|
+
* The callback receives an audio Blob that should be sent to a transcription service.
|
|
48
|
+
* Return the transcribed text, which will be passed to onTranscriptionChange.
|
|
49
|
+
*/
|
|
50
|
+
onAudioRecorded?: (audioBlob: Blob) => Promise<string>;
|
|
51
|
+
lang?: string;
|
|
52
|
+
};
|
|
53
|
+
export declare const SpeechInput: ({ className, onTranscriptionChange, onAudioRecorded, lang, ...props }: SpeechInputProps) => import("react/jsx-runtime").JSX.Element;
|
|
54
|
+
export {};
|
|
55
|
+
//# sourceMappingURL=speech-input.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"speech-input.d.ts","sourceRoot":"","sources":["../../../src/molecules/ai/speech-input.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAItD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAG5C,UAAU,iBAAkB,SAAQ,WAAW;IAC7C,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,IAAI,IAAI,CAAC;IACd,IAAI,IAAI,IAAI,CAAC;IACb,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,iBAAiB,EAAE,EAAE,EAAE,KAAK,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;IAC/D,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,iBAAiB,EAAE,EAAE,EAAE,KAAK,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;IAC7D,QAAQ,EACJ,CAAC,CAAC,IAAI,EAAE,iBAAiB,EAAE,EAAE,EAAE,sBAAsB,KAAK,IAAI,CAAC,GAC/D,IAAI,CAAC;IACT,OAAO,EACH,CAAC,CAAC,IAAI,EAAE,iBAAiB,EAAE,EAAE,EAAE,2BAA2B,KAAK,IAAI,CAAC,GACpE,IAAI,CAAC;CACV;AAED,UAAU,sBAAuB,SAAQ,KAAK;IAC5C,OAAO,EAAE,2BAA2B,CAAC;IACrC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,2BAA2B;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,uBAAuB,CAAC;IAC7C,CAAC,KAAK,EAAE,MAAM,GAAG,uBAAuB,CAAC;CAC1C;AAED,UAAU,uBAAuB;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,4BAA4B,CAAC;IAClD,CAAC,KAAK,EAAE,MAAM,GAAG,4BAA4B,CAAC;IAC9C,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,UAAU,4BAA4B;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,2BAA4B,SAAQ,KAAK;IACjD,KAAK,EAAE,MAAM,CAAC;CACf;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,iBAAiB,EAAE,UAAU,iBAAiB,CAAC;QAC/C,uBAAuB,EAAE,UAAU,iBAAiB,CAAC;KACtD;CACF;AAID,MAAM,MAAM,gBAAgB,GAAG,cAAc,CAAC,OAAO,MAAM,CAAC,GAAG;IAC7D,qBAAqB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C;;;;;OAKG;IACH,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACvD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAkBF,eAAO,MAAM,WAAW,GAAI,uEAMzB,gBAAgB,4CAmOlB,CAAC"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Button } from "@chatsdk-dev/ui/atoms/button";
|
|
4
|
+
import { Spinner } from "@chatsdk-dev/ui/atoms/spinner";
|
|
5
|
+
import { cn } from "@chatsdk-dev/ui/lib/utils";
|
|
6
|
+
import { MicIcon, SquareIcon } from "lucide-react";
|
|
7
|
+
import { useCallback, useEffect, useRef, useState } from "react";
|
|
8
|
+
const detectSpeechInputMode = () => {
|
|
9
|
+
if (typeof window === "undefined") {
|
|
10
|
+
return "none";
|
|
11
|
+
}
|
|
12
|
+
if ("SpeechRecognition" in window || "webkitSpeechRecognition" in window) {
|
|
13
|
+
return "speech-recognition";
|
|
14
|
+
}
|
|
15
|
+
if ("MediaRecorder" in window && "mediaDevices" in navigator) {
|
|
16
|
+
return "media-recorder";
|
|
17
|
+
}
|
|
18
|
+
return "none";
|
|
19
|
+
};
|
|
20
|
+
export const SpeechInput = ({ className, onTranscriptionChange, onAudioRecorded, lang = "en-US", ...props }) => {
|
|
21
|
+
const [isListening, setIsListening] = useState(false);
|
|
22
|
+
const [isProcessing, setIsProcessing] = useState(false);
|
|
23
|
+
const [mode] = useState(detectSpeechInputMode);
|
|
24
|
+
const [isRecognitionReady, setIsRecognitionReady] = useState(false);
|
|
25
|
+
const recognitionRef = useRef(null);
|
|
26
|
+
const mediaRecorderRef = useRef(null);
|
|
27
|
+
const streamRef = useRef(null);
|
|
28
|
+
const audioChunksRef = useRef([]);
|
|
29
|
+
const onTranscriptionChangeRef = useRef(onTranscriptionChange);
|
|
30
|
+
const onAudioRecordedRef = useRef(onAudioRecorded);
|
|
31
|
+
// Keep refs in sync
|
|
32
|
+
onTranscriptionChangeRef.current = onTranscriptionChange;
|
|
33
|
+
onAudioRecordedRef.current = onAudioRecorded;
|
|
34
|
+
// Initialize Speech Recognition when mode is speech-recognition
|
|
35
|
+
useEffect(() => {
|
|
36
|
+
if (mode !== "speech-recognition") {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
|
|
40
|
+
const speechRecognition = new SpeechRecognition();
|
|
41
|
+
speechRecognition.continuous = true;
|
|
42
|
+
speechRecognition.interimResults = true;
|
|
43
|
+
speechRecognition.lang = lang;
|
|
44
|
+
const handleStart = () => {
|
|
45
|
+
setIsListening(true);
|
|
46
|
+
};
|
|
47
|
+
const handleEnd = () => {
|
|
48
|
+
setIsListening(false);
|
|
49
|
+
};
|
|
50
|
+
const handleResult = (event) => {
|
|
51
|
+
const speechEvent = event;
|
|
52
|
+
let finalTranscript = "";
|
|
53
|
+
for (let i = speechEvent.resultIndex; i < speechEvent.results.length; i += 1) {
|
|
54
|
+
const result = speechEvent.results[i];
|
|
55
|
+
if (result?.isFinal) {
|
|
56
|
+
finalTranscript += result[0]?.transcript ?? "";
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
if (finalTranscript) {
|
|
60
|
+
onTranscriptionChangeRef.current?.(finalTranscript);
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
const handleError = () => {
|
|
64
|
+
setIsListening(false);
|
|
65
|
+
};
|
|
66
|
+
speechRecognition.addEventListener("start", handleStart);
|
|
67
|
+
speechRecognition.addEventListener("end", handleEnd);
|
|
68
|
+
speechRecognition.addEventListener("result", handleResult);
|
|
69
|
+
speechRecognition.addEventListener("error", handleError);
|
|
70
|
+
recognitionRef.current = speechRecognition;
|
|
71
|
+
setIsRecognitionReady(true);
|
|
72
|
+
return () => {
|
|
73
|
+
speechRecognition.removeEventListener("start", handleStart);
|
|
74
|
+
speechRecognition.removeEventListener("end", handleEnd);
|
|
75
|
+
speechRecognition.removeEventListener("result", handleResult);
|
|
76
|
+
speechRecognition.removeEventListener("error", handleError);
|
|
77
|
+
speechRecognition.stop();
|
|
78
|
+
recognitionRef.current = null;
|
|
79
|
+
setIsRecognitionReady(false);
|
|
80
|
+
};
|
|
81
|
+
}, [mode, lang]);
|
|
82
|
+
// Cleanup MediaRecorder and stream on unmount
|
|
83
|
+
useEffect(() => () => {
|
|
84
|
+
if (mediaRecorderRef.current?.state === "recording") {
|
|
85
|
+
mediaRecorderRef.current.stop();
|
|
86
|
+
}
|
|
87
|
+
if (streamRef.current) {
|
|
88
|
+
for (const track of streamRef.current.getTracks()) {
|
|
89
|
+
track.stop();
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}, []);
|
|
93
|
+
// Start MediaRecorder recording
|
|
94
|
+
const startMediaRecorder = useCallback(async () => {
|
|
95
|
+
if (!onAudioRecordedRef.current) {
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
try {
|
|
99
|
+
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
|
|
100
|
+
streamRef.current = stream;
|
|
101
|
+
const mediaRecorder = new MediaRecorder(stream);
|
|
102
|
+
audioChunksRef.current = [];
|
|
103
|
+
const handleDataAvailable = (event) => {
|
|
104
|
+
if (event.data.size > 0) {
|
|
105
|
+
audioChunksRef.current.push(event.data);
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
const handleStop = async () => {
|
|
109
|
+
for (const track of stream.getTracks()) {
|
|
110
|
+
track.stop();
|
|
111
|
+
}
|
|
112
|
+
streamRef.current = null;
|
|
113
|
+
const audioBlob = new Blob(audioChunksRef.current, {
|
|
114
|
+
type: "audio/webm",
|
|
115
|
+
});
|
|
116
|
+
if (audioBlob.size > 0 && onAudioRecordedRef.current) {
|
|
117
|
+
setIsProcessing(true);
|
|
118
|
+
try {
|
|
119
|
+
const transcript = await onAudioRecordedRef.current(audioBlob);
|
|
120
|
+
if (transcript) {
|
|
121
|
+
onTranscriptionChangeRef.current?.(transcript);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
// Error handling delegated to the onAudioRecorded caller
|
|
126
|
+
}
|
|
127
|
+
finally {
|
|
128
|
+
setIsProcessing(false);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
const handleError = () => {
|
|
133
|
+
setIsListening(false);
|
|
134
|
+
for (const track of stream.getTracks()) {
|
|
135
|
+
track.stop();
|
|
136
|
+
}
|
|
137
|
+
streamRef.current = null;
|
|
138
|
+
};
|
|
139
|
+
mediaRecorder.addEventListener("dataavailable", handleDataAvailable);
|
|
140
|
+
mediaRecorder.addEventListener("stop", handleStop);
|
|
141
|
+
mediaRecorder.addEventListener("error", handleError);
|
|
142
|
+
mediaRecorderRef.current = mediaRecorder;
|
|
143
|
+
mediaRecorder.start();
|
|
144
|
+
setIsListening(true);
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
setIsListening(false);
|
|
148
|
+
}
|
|
149
|
+
}, []);
|
|
150
|
+
// Stop MediaRecorder recording
|
|
151
|
+
const stopMediaRecorder = useCallback(() => {
|
|
152
|
+
if (mediaRecorderRef.current?.state === "recording") {
|
|
153
|
+
mediaRecorderRef.current.stop();
|
|
154
|
+
}
|
|
155
|
+
setIsListening(false);
|
|
156
|
+
}, []);
|
|
157
|
+
const toggleListening = useCallback(() => {
|
|
158
|
+
if (mode === "speech-recognition" && recognitionRef.current) {
|
|
159
|
+
if (isListening) {
|
|
160
|
+
recognitionRef.current.stop();
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
recognitionRef.current.start();
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
else if (mode === "media-recorder") {
|
|
167
|
+
if (isListening) {
|
|
168
|
+
stopMediaRecorder();
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
startMediaRecorder();
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}, [mode, isListening, startMediaRecorder, stopMediaRecorder]);
|
|
175
|
+
// Determine if button should be disabled
|
|
176
|
+
const isDisabled = mode === "none" ||
|
|
177
|
+
(mode === "speech-recognition" && !isRecognitionReady) ||
|
|
178
|
+
(mode === "media-recorder" && !onAudioRecorded) ||
|
|
179
|
+
isProcessing;
|
|
180
|
+
return (_jsxs("div", { className: "relative inline-flex items-center justify-center", children: [isListening &&
|
|
181
|
+
[0, 1, 2].map((index) => (_jsx("div", { className: "absolute inset-0 animate-ping rounded-full border-2 border-red-400/30", style: {
|
|
182
|
+
animationDelay: `${index * 0.3}s`,
|
|
183
|
+
animationDuration: "2s",
|
|
184
|
+
} }, index))), _jsxs(Button, { className: cn("relative z-10 rounded-full transition-all duration-300", isListening
|
|
185
|
+
? "bg-destructive text-white hover:bg-destructive/80 hover:text-white"
|
|
186
|
+
: "bg-primary text-primary-foreground hover:bg-primary/80 hover:text-primary-foreground", className), disabled: isDisabled, onClick: toggleListening, ...props, children: [isProcessing && _jsx(Spinner, {}), !isProcessing && isListening && _jsx(SquareIcon, { className: "size-4" }), !(isProcessing || isListening) && _jsx(MicIcon, { className: "size-4" })] })] }));
|
|
187
|
+
};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Button } from "@chatsdk-dev/ui/atoms/button";
|
|
2
|
+
import { CollapsibleContent, CollapsibleTrigger } from "@chatsdk-dev/ui/atoms/collapsible";
|
|
3
|
+
import type { ComponentProps } from "react";
|
|
4
|
+
export type StackTraceProps = ComponentProps<"div"> & {
|
|
5
|
+
trace: string;
|
|
6
|
+
open?: boolean;
|
|
7
|
+
defaultOpen?: boolean;
|
|
8
|
+
onOpenChange?: (open: boolean) => void;
|
|
9
|
+
onFilePathClick?: (filePath: string, line?: number, column?: number) => void;
|
|
10
|
+
};
|
|
11
|
+
export declare const StackTrace: import("react").MemoExoticComponent<({ trace, className, open, defaultOpen, onOpenChange, onFilePathClick, children, ...props }: StackTraceProps) => import("react/jsx-runtime").JSX.Element>;
|
|
12
|
+
export type StackTraceHeaderProps = ComponentProps<typeof CollapsibleTrigger>;
|
|
13
|
+
export declare const StackTraceHeader: import("react").MemoExoticComponent<({ className, children, ...props }: StackTraceHeaderProps) => import("react/jsx-runtime").JSX.Element>;
|
|
14
|
+
export type StackTraceErrorProps = ComponentProps<"div">;
|
|
15
|
+
export declare const StackTraceError: import("react").MemoExoticComponent<({ className, children, ...props }: StackTraceErrorProps) => import("react/jsx-runtime").JSX.Element>;
|
|
16
|
+
export type StackTraceErrorTypeProps = ComponentProps<"span">;
|
|
17
|
+
export declare const StackTraceErrorType: import("react").MemoExoticComponent<({ className, children, ...props }: StackTraceErrorTypeProps) => import("react/jsx-runtime").JSX.Element>;
|
|
18
|
+
export type StackTraceErrorMessageProps = ComponentProps<"span">;
|
|
19
|
+
export declare const StackTraceErrorMessage: import("react").MemoExoticComponent<({ className, children, ...props }: StackTraceErrorMessageProps) => import("react/jsx-runtime").JSX.Element>;
|
|
20
|
+
export type StackTraceActionsProps = ComponentProps<"div">;
|
|
21
|
+
export declare const StackTraceActions: import("react").MemoExoticComponent<({ className, children, ...props }: StackTraceActionsProps) => import("react/jsx-runtime").JSX.Element>;
|
|
22
|
+
export type StackTraceCopyButtonProps = ComponentProps<typeof Button> & {
|
|
23
|
+
onCopy?: () => void;
|
|
24
|
+
onError?: (error: Error) => void;
|
|
25
|
+
timeout?: number;
|
|
26
|
+
};
|
|
27
|
+
export declare const StackTraceCopyButton: import("react").MemoExoticComponent<({ onCopy, onError, timeout, className, children, ...props }: StackTraceCopyButtonProps) => import("react/jsx-runtime").JSX.Element>;
|
|
28
|
+
export type StackTraceExpandButtonProps = ComponentProps<"div">;
|
|
29
|
+
export declare const StackTraceExpandButton: import("react").MemoExoticComponent<({ className, ...props }: StackTraceExpandButtonProps) => import("react/jsx-runtime").JSX.Element>;
|
|
30
|
+
export type StackTraceContentProps = ComponentProps<typeof CollapsibleContent> & {
|
|
31
|
+
maxHeight?: number;
|
|
32
|
+
};
|
|
33
|
+
export declare const StackTraceContent: import("react").MemoExoticComponent<({ className, maxHeight, children, ...props }: StackTraceContentProps) => import("react/jsx-runtime").JSX.Element>;
|
|
34
|
+
export type StackTraceFramesProps = ComponentProps<"div"> & {
|
|
35
|
+
showInternalFrames?: boolean;
|
|
36
|
+
};
|
|
37
|
+
export declare const StackTraceFrames: import("react").MemoExoticComponent<({ className, showInternalFrames, ...props }: StackTraceFramesProps) => import("react/jsx-runtime").JSX.Element>;
|
|
38
|
+
//# sourceMappingURL=stack-trace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stack-trace.d.ts","sourceRoot":"","sources":["../../../src/molecules/ai/stack-trace.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AACtD,OAAO,EAEL,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,mCAAmC,CAAC;AAQ3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AA4I5C,MAAM,MAAM,eAAe,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG;IACpD,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9E,CAAC;AAEF,eAAO,MAAM,UAAU,mIAUlB,eAAe,6CAkCnB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,cAAc,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9E,eAAO,MAAM,gBAAgB,0EACS,qBAAqB,6CAqB1D,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;AAEzD,eAAO,MAAM,eAAe,0EACU,oBAAoB,6CAYzD,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;AAE9D,eAAO,MAAM,mBAAmB,0EACM,wBAAwB,6CAY7D,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;AAEjE,eAAO,MAAM,sBAAsB,0EACG,2BAA2B,6CAShE,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;AAS3D,eAAO,MAAM,iBAAiB,0EACQ,sBAAsB,6CAW3D,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,cAAc,CAAC,OAAO,MAAM,CAAC,GAAG;IACtE,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,eAAO,MAAM,oBAAoB,oGAQ5B,yBAAyB,6CA6C7B,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;AAEhE,eAAO,MAAM,sBAAsB,gEACP,2BAA2B,6CAiBtD,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,cAAc,CACjD,OAAO,kBAAkB,CAC1B,GAAG;IACF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,iBAAiB,qFAMzB,sBAAsB,6CAmB1B,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG;IAC1D,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B,CAAC;AA2CF,eAAO,MAAM,gBAAgB,oFAKxB,qBAAqB,6CA8CzB,CAAC"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { useControllableState } from "@radix-ui/react-use-controllable-state";
|
|
4
|
+
import { Button } from "@chatsdk-dev/ui/atoms/button";
|
|
5
|
+
import { Collapsible, CollapsibleContent, CollapsibleTrigger, } from "@chatsdk-dev/ui/atoms/collapsible";
|
|
6
|
+
import { cn } from "@chatsdk-dev/ui/lib/utils";
|
|
7
|
+
import { AlertTriangleIcon, CheckIcon, ChevronDownIcon, CopyIcon, } from "lucide-react";
|
|
8
|
+
import { createContext, memo, useCallback, useContext, useEffect, useMemo, useRef, useState, } from "react";
|
|
9
|
+
// Regex patterns for parsing stack traces
|
|
10
|
+
const STACK_FRAME_WITH_PARENS_REGEX = /^at\s+(.+?)\s+\((.+):(\d+):(\d+)\)$/;
|
|
11
|
+
const STACK_FRAME_WITHOUT_FN_REGEX = /^at\s+(.+):(\d+):(\d+)$/;
|
|
12
|
+
const ERROR_TYPE_REGEX = /^(\w+Error|Error):\s*(.*)$/;
|
|
13
|
+
const AT_PREFIX_REGEX = /^at\s+/;
|
|
14
|
+
const StackTraceContext = createContext(null);
|
|
15
|
+
const useStackTrace = () => {
|
|
16
|
+
const context = useContext(StackTraceContext);
|
|
17
|
+
if (!context) {
|
|
18
|
+
throw new Error("StackTrace components must be used within StackTrace");
|
|
19
|
+
}
|
|
20
|
+
return context;
|
|
21
|
+
};
|
|
22
|
+
const parseStackFrame = (line) => {
|
|
23
|
+
const trimmed = line.trim();
|
|
24
|
+
// Pattern: at functionName (filePath:line:column)
|
|
25
|
+
const withParensMatch = trimmed.match(STACK_FRAME_WITH_PARENS_REGEX);
|
|
26
|
+
if (withParensMatch) {
|
|
27
|
+
const [, functionName, filePath, lineNum, colNum] = withParensMatch;
|
|
28
|
+
const isInternal = filePath?.includes("node_modules") ||
|
|
29
|
+
filePath?.startsWith("node:") ||
|
|
30
|
+
!!filePath?.includes("internal/");
|
|
31
|
+
return {
|
|
32
|
+
columnNumber: colNum ? Number.parseInt(colNum, 10) : null,
|
|
33
|
+
filePath: filePath ?? null,
|
|
34
|
+
functionName: functionName ?? null,
|
|
35
|
+
isInternal,
|
|
36
|
+
lineNumber: lineNum ? Number.parseInt(lineNum, 10) : null,
|
|
37
|
+
raw: trimmed,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
// Pattern: at filePath:line:column (no function name)
|
|
41
|
+
const withoutFnMatch = trimmed.match(STACK_FRAME_WITHOUT_FN_REGEX);
|
|
42
|
+
if (withoutFnMatch) {
|
|
43
|
+
const [, filePath, lineNum, colNum] = withoutFnMatch;
|
|
44
|
+
const isInternal = (filePath?.includes("node_modules") ?? false) ||
|
|
45
|
+
(filePath?.startsWith("node:") ?? false) ||
|
|
46
|
+
(filePath?.includes("internal/") ?? false);
|
|
47
|
+
return {
|
|
48
|
+
columnNumber: colNum ? Number.parseInt(colNum, 10) : null,
|
|
49
|
+
filePath: filePath ?? null,
|
|
50
|
+
functionName: null,
|
|
51
|
+
isInternal,
|
|
52
|
+
lineNumber: lineNum ? Number.parseInt(lineNum, 10) : null,
|
|
53
|
+
raw: trimmed,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
// Fallback: unparseable line
|
|
57
|
+
return {
|
|
58
|
+
columnNumber: null,
|
|
59
|
+
filePath: null,
|
|
60
|
+
functionName: null,
|
|
61
|
+
isInternal: trimmed.includes("node_modules") || trimmed.includes("node:"),
|
|
62
|
+
lineNumber: null,
|
|
63
|
+
raw: trimmed,
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
const parseStackTrace = (trace) => {
|
|
67
|
+
const lines = trace.split("\n").filter((line) => line.trim());
|
|
68
|
+
if (lines.length === 0) {
|
|
69
|
+
return {
|
|
70
|
+
errorMessage: trace,
|
|
71
|
+
errorType: null,
|
|
72
|
+
frames: [],
|
|
73
|
+
raw: trace,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
const firstLine = lines[0]?.trim() ?? "";
|
|
77
|
+
let errorType = null;
|
|
78
|
+
let errorMessage = firstLine;
|
|
79
|
+
// Try to extract error type from "ErrorType: message" format
|
|
80
|
+
const errorMatch = firstLine.match(ERROR_TYPE_REGEX);
|
|
81
|
+
if (errorMatch) {
|
|
82
|
+
const [, type, msg] = errorMatch;
|
|
83
|
+
errorType = type ?? null;
|
|
84
|
+
errorMessage = msg || "";
|
|
85
|
+
}
|
|
86
|
+
// Parse stack frames (lines starting with "at")
|
|
87
|
+
const frames = lines
|
|
88
|
+
.slice(1)
|
|
89
|
+
.filter((line) => line.trim().startsWith("at "))
|
|
90
|
+
.map(parseStackFrame);
|
|
91
|
+
return {
|
|
92
|
+
errorMessage,
|
|
93
|
+
errorType,
|
|
94
|
+
frames,
|
|
95
|
+
raw: trace,
|
|
96
|
+
};
|
|
97
|
+
};
|
|
98
|
+
export const StackTrace = memo(({ trace, className, open, defaultOpen = false, onOpenChange, onFilePathClick, children, ...props }) => {
|
|
99
|
+
const [isOpen, setIsOpen] = useControllableState({
|
|
100
|
+
defaultProp: defaultOpen,
|
|
101
|
+
onChange: onOpenChange,
|
|
102
|
+
prop: open,
|
|
103
|
+
});
|
|
104
|
+
const parsedTrace = useMemo(() => parseStackTrace(trace), [trace]);
|
|
105
|
+
const contextValue = useMemo(() => ({
|
|
106
|
+
isOpen,
|
|
107
|
+
onFilePathClick,
|
|
108
|
+
raw: trace,
|
|
109
|
+
setIsOpen,
|
|
110
|
+
trace: parsedTrace,
|
|
111
|
+
}), [parsedTrace, trace, isOpen, setIsOpen, onFilePathClick]);
|
|
112
|
+
return (_jsx(StackTraceContext.Provider, { value: contextValue, children: _jsx("div", { className: cn("not-prose w-full overflow-hidden rounded-lg border bg-background font-mono text-sm", className), ...props, children: children }) }));
|
|
113
|
+
});
|
|
114
|
+
export const StackTraceHeader = memo(({ className, children, ...props }) => {
|
|
115
|
+
const { isOpen, setIsOpen } = useStackTrace();
|
|
116
|
+
return (_jsx(Collapsible, { onOpenChange: setIsOpen, open: isOpen, children: _jsx(CollapsibleTrigger, { render: () => (_jsx("button", { className: cn("flex w-full cursor-pointer items-center gap-3 p-3 text-left transition-colors hover:bg-muted/50", className), ...props, children: children })) }) }));
|
|
117
|
+
});
|
|
118
|
+
export const StackTraceError = memo(({ className, children, ...props }) => (_jsxs("div", { className: cn("flex flex-1 items-center gap-2 overflow-hidden", className), ...props, children: [_jsx(AlertTriangleIcon, { className: "size-4 shrink-0 text-destructive" }), children] })));
|
|
119
|
+
export const StackTraceErrorType = memo(({ className, children, ...props }) => {
|
|
120
|
+
const { trace } = useStackTrace();
|
|
121
|
+
return (_jsx("span", { className: cn("shrink-0 font-semibold text-destructive", className), ...props, children: children ?? trace.errorType }));
|
|
122
|
+
});
|
|
123
|
+
export const StackTraceErrorMessage = memo(({ className, children, ...props }) => {
|
|
124
|
+
const { trace } = useStackTrace();
|
|
125
|
+
return (_jsx("span", { className: cn("truncate text-foreground", className), ...props, children: children ?? trace.errorMessage }));
|
|
126
|
+
});
|
|
127
|
+
const handleActionsClick = (e) => e.stopPropagation();
|
|
128
|
+
const handleActionsKeyDown = (e) => {
|
|
129
|
+
if (e.key === "Enter" || e.key === " ") {
|
|
130
|
+
e.stopPropagation();
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
export const StackTraceActions = memo(({ className, children, ...props }) => (_jsx("div", { className: cn("flex shrink-0 items-center gap-1", className), onClick: handleActionsClick, onKeyDown: handleActionsKeyDown, role: "group", ...props, children: children })));
|
|
134
|
+
export const StackTraceCopyButton = memo(({ onCopy, onError, timeout = 2000, className, children, ...props }) => {
|
|
135
|
+
const [isCopied, setIsCopied] = useState(false);
|
|
136
|
+
const timeoutRef = useRef(0);
|
|
137
|
+
const { raw } = useStackTrace();
|
|
138
|
+
const copyToClipboard = useCallback(async () => {
|
|
139
|
+
if (typeof window === "undefined" || !navigator?.clipboard?.writeText) {
|
|
140
|
+
onError?.(new Error("Clipboard API not available"));
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
try {
|
|
144
|
+
await navigator.clipboard.writeText(raw);
|
|
145
|
+
setIsCopied(true);
|
|
146
|
+
onCopy?.();
|
|
147
|
+
timeoutRef.current = window.setTimeout(() => setIsCopied(false), timeout);
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
onError?.(error);
|
|
151
|
+
}
|
|
152
|
+
}, [raw, onCopy, onError, timeout]);
|
|
153
|
+
useEffect(() => () => {
|
|
154
|
+
window.clearTimeout(timeoutRef.current);
|
|
155
|
+
}, []);
|
|
156
|
+
const Icon = isCopied ? CheckIcon : CopyIcon;
|
|
157
|
+
return (_jsx(Button, { className: cn("size-7", className), onClick: copyToClipboard, size: "icon", variant: "ghost", ...props, children: children ?? _jsx(Icon, { size: 14 }) }));
|
|
158
|
+
});
|
|
159
|
+
export const StackTraceExpandButton = memo(({ className, ...props }) => {
|
|
160
|
+
const { isOpen } = useStackTrace();
|
|
161
|
+
return (_jsx("div", { className: cn("flex size-7 items-center justify-center", className), ...props, children: _jsx(ChevronDownIcon, { className: cn("size-4 text-muted-foreground transition-transform", isOpen ? "rotate-180" : "rotate-0") }) }));
|
|
162
|
+
});
|
|
163
|
+
export const StackTraceContent = memo(({ className, maxHeight = 400, children, ...props }) => {
|
|
164
|
+
const { isOpen } = useStackTrace();
|
|
165
|
+
return (_jsx(Collapsible, { open: isOpen, children: _jsx(CollapsibleContent, { className: cn("overflow-auto border-t bg-muted/30", "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:animate-out data-[state=open]:animate-in", className), style: { maxHeight }, ...props, children: children }) }));
|
|
166
|
+
});
|
|
167
|
+
const FilePathButton = memo(({ frame, onFilePathClick }) => {
|
|
168
|
+
const handleClick = useCallback(() => {
|
|
169
|
+
if (frame.filePath) {
|
|
170
|
+
onFilePathClick?.(frame.filePath, frame.lineNumber ?? undefined, frame.columnNumber ?? undefined);
|
|
171
|
+
}
|
|
172
|
+
}, [frame, onFilePathClick]);
|
|
173
|
+
return (_jsxs("button", { className: cn("underline decoration-dotted hover:text-primary", onFilePathClick && "cursor-pointer"), disabled: !onFilePathClick, onClick: handleClick, type: "button", children: [frame.filePath, frame.lineNumber !== null && `:${frame.lineNumber}`, frame.columnNumber !== null && `:${frame.columnNumber}`] }));
|
|
174
|
+
});
|
|
175
|
+
FilePathButton.displayName = "FilePathButton";
|
|
176
|
+
export const StackTraceFrames = memo(({ className, showInternalFrames = true, ...props }) => {
|
|
177
|
+
const { trace, onFilePathClick } = useStackTrace();
|
|
178
|
+
const framesToShow = showInternalFrames
|
|
179
|
+
? trace.frames
|
|
180
|
+
: trace.frames.filter((f) => !f.isInternal);
|
|
181
|
+
return (_jsxs("div", { className: cn("space-y-1 p-3", className), ...props, children: [framesToShow.map((frame) => (_jsxs("div", { className: cn("text-xs", frame.isInternal
|
|
182
|
+
? "text-muted-foreground/50"
|
|
183
|
+
: "text-foreground/90"), children: [_jsx("span", { className: "text-muted-foreground", children: "at " }), frame.functionName && (_jsxs("span", { className: frame.isInternal ? "" : "text-foreground", children: [frame.functionName, " "] })), frame.filePath && (_jsxs(_Fragment, { children: [_jsx("span", { className: "text-muted-foreground", children: "(" }), _jsx(FilePathButton, { frame: frame, onFilePathClick: onFilePathClick }), _jsx("span", { className: "text-muted-foreground", children: ")" })] })), !(frame.filePath || frame.functionName) && (_jsx("span", { children: frame.raw.replace(AT_PREFIX_REGEX, "") }))] }, frame.raw))), framesToShow.length === 0 && (_jsx("div", { className: "text-muted-foreground text-xs", children: "No stack frames" }))] }));
|
|
184
|
+
});
|
|
185
|
+
StackTrace.displayName = "StackTrace";
|
|
186
|
+
StackTraceHeader.displayName = "StackTraceHeader";
|
|
187
|
+
StackTraceError.displayName = "StackTraceError";
|
|
188
|
+
StackTraceErrorType.displayName = "StackTraceErrorType";
|
|
189
|
+
StackTraceErrorMessage.displayName = "StackTraceErrorMessage";
|
|
190
|
+
StackTraceActions.displayName = "StackTraceActions";
|
|
191
|
+
StackTraceCopyButton.displayName = "StackTraceCopyButton";
|
|
192
|
+
StackTraceExpandButton.displayName = "StackTraceExpandButton";
|
|
193
|
+
StackTraceContent.displayName = "StackTraceContent";
|
|
194
|
+
StackTraceFrames.displayName = "StackTraceFrames";
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Button } from "@chatsdk-dev/ui/atoms/button";
|
|
2
|
+
import { ScrollArea } from "@chatsdk-dev/ui/atoms/scroll-area";
|
|
3
|
+
import type { ComponentProps } from "react";
|
|
4
|
+
export type SuggestionsProps = ComponentProps<typeof ScrollArea>;
|
|
5
|
+
export declare const Suggestions: ({ className, children, ...props }: SuggestionsProps) => import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
export type SuggestionProps = Omit<ComponentProps<typeof Button>, "onClick"> & {
|
|
7
|
+
suggestion: string;
|
|
8
|
+
onClick?: (suggestion: string) => void;
|
|
9
|
+
};
|
|
10
|
+
export declare const Suggestion: ({ suggestion, onClick, className, variant, size, children, ...props }: SuggestionProps) => import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
//# sourceMappingURL=suggestion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suggestion.d.ts","sourceRoot":"","sources":["../../../src/molecules/ai/suggestion.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AACtD,OAAO,EAAE,UAAU,EAAa,MAAM,mCAAmC,CAAC;AAE1E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAG5C,MAAM,MAAM,gBAAgB,GAAG,cAAc,CAAC,OAAO,UAAU,CAAC,CAAC;AAEjE,eAAO,MAAM,WAAW,GAAI,mCAIzB,gBAAgB,4CAOlB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,EAAE,SAAS,CAAC,GAAG;IAC7E,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,uEAQxB,eAAe,4CAiBjB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Button } from "@chatsdk-dev/ui/atoms/button";
|
|
4
|
+
import { ScrollArea, ScrollBar } from "@chatsdk-dev/ui/atoms/scroll-area";
|
|
5
|
+
import { cn } from "@chatsdk-dev/ui/lib/utils";
|
|
6
|
+
import { useCallback } from "react";
|
|
7
|
+
export const Suggestions = ({ className, children, ...props }) => (_jsxs(ScrollArea, { className: "w-full overflow-x-auto whitespace-nowrap", ...props, children: [_jsx("div", { className: cn("flex w-max flex-nowrap items-center gap-2", className), children: children }), _jsx(ScrollBar, { className: "hidden", orientation: "horizontal" })] }));
|
|
8
|
+
export const Suggestion = ({ suggestion, onClick, className, variant = "outline", size = "sm", children, ...props }) => {
|
|
9
|
+
const handleClick = useCallback(() => {
|
|
10
|
+
onClick?.(suggestion);
|
|
11
|
+
}, [onClick, suggestion]);
|
|
12
|
+
return (_jsx(Button, { className: cn("cursor-pointer rounded-full px-4", className), onClick: handleClick, size: size, type: "button", variant: variant, ...props, children: children || suggestion }));
|
|
13
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "@chatsdk-dev/ui/atoms/collapsible";
|
|
2
|
+
import type { ComponentProps } from "react";
|
|
3
|
+
export type TaskItemFileProps = ComponentProps<"div">;
|
|
4
|
+
export declare const TaskItemFile: ({ children, className, ...props }: TaskItemFileProps) => import("react/jsx-runtime").JSX.Element;
|
|
5
|
+
export type TaskItemProps = ComponentProps<"div">;
|
|
6
|
+
export declare const TaskItem: ({ children, className, ...props }: TaskItemProps) => import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export type TaskProps = ComponentProps<typeof Collapsible>;
|
|
8
|
+
export declare const Task: ({ defaultOpen, className, ...props }: TaskProps) => import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export type TaskTriggerProps = ComponentProps<typeof CollapsibleTrigger> & {
|
|
10
|
+
title: string;
|
|
11
|
+
};
|
|
12
|
+
export declare const TaskTrigger: ({ children, className, title, ...props }: TaskTriggerProps) => import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
export type TaskContentProps = ComponentProps<typeof CollapsibleContent>;
|
|
14
|
+
export declare const TaskContent: ({ children, className, ...props }: TaskContentProps) => import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
//# sourceMappingURL=task.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../../src/molecules/ai/task.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,mCAAmC,CAAC;AAG3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAE5C,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;AAEtD,eAAO,MAAM,YAAY,GAAI,mCAI1B,iBAAiB,4CAUnB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;AAElD,eAAO,MAAM,QAAQ,GAAI,mCAAmC,aAAa,4CAIxE,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,cAAc,CAAC,OAAO,WAAW,CAAC,CAAC;AAE3D,eAAO,MAAM,IAAI,GAAI,sCAIlB,SAAS,4CAEX,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,cAAc,CAAC,OAAO,kBAAkB,CAAC,GAAG;IACzE,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,0CAKzB,gBAAgB,4CAgBlB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,cAAc,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEzE,eAAO,MAAM,WAAW,GAAI,mCAIzB,gBAAgB,4CAYlB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Collapsible, CollapsibleContent, CollapsibleTrigger, } from "@chatsdk-dev/ui/atoms/collapsible";
|
|
4
|
+
import { cn } from "@chatsdk-dev/ui/lib/utils";
|
|
5
|
+
import { ChevronDownIcon, SearchIcon } from "lucide-react";
|
|
6
|
+
export const TaskItemFile = ({ children, className, ...props }) => (_jsx("div", { className: cn("inline-flex items-center gap-1 rounded-md border bg-secondary px-1.5 py-0.5 text-foreground text-xs", className), ...props, children: children }));
|
|
7
|
+
export const TaskItem = ({ children, className, ...props }) => (_jsx("div", { className: cn("text-muted-foreground text-sm", className), ...props, children: children }));
|
|
8
|
+
export const Task = ({ defaultOpen = true, className, ...props }) => (_jsx(Collapsible, { className: cn(className), defaultOpen: defaultOpen, ...props }));
|
|
9
|
+
export const TaskTrigger = ({ children, className, title, ...props }) => (_jsx(CollapsibleTrigger, { className: cn("group", className), ...props, render: () => children ? (_jsx(_Fragment, { children: children })) : (_jsxs("div", { className: "flex w-full cursor-pointer items-center gap-2 text-muted-foreground text-sm transition-colors hover:text-foreground", children: [_jsx(SearchIcon, { className: "size-4" }), _jsx("p", { className: "text-sm", children: title }), _jsx(ChevronDownIcon, { className: "size-4 transition-transform group-data-[state=open]:rotate-180" })] })) }));
|
|
10
|
+
export const TaskContent = ({ children, className, ...props }) => (_jsx(CollapsibleContent, { className: cn("data-[state=closed]:fade-out-0 data-[state=closed]:slide-out-to-top-2 data-[state=open]:slide-in-from-top-2 text-popover-foreground outline-none data-[state=closed]:animate-out data-[state=open]:animate-in", className), ...props, children: _jsx("div", { className: "mt-4 space-y-2 border-muted border-l-2 pl-4", children: children }) }));
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Button } from "@chatsdk-dev/ui/atoms/button";
|
|
2
|
+
import type { ComponentProps, HTMLAttributes } from "react";
|
|
3
|
+
export type TerminalHeaderProps = HTMLAttributes<HTMLDivElement>;
|
|
4
|
+
export declare const TerminalHeader: ({ className, children, ...props }: TerminalHeaderProps) => import("react/jsx-runtime").JSX.Element;
|
|
5
|
+
export type TerminalTitleProps = HTMLAttributes<HTMLDivElement>;
|
|
6
|
+
export declare const TerminalTitle: ({ className, children, ...props }: TerminalTitleProps) => import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export type TerminalStatusProps = HTMLAttributes<HTMLDivElement>;
|
|
8
|
+
export declare const TerminalStatus: ({ className, children, ...props }: TerminalStatusProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
9
|
+
export type TerminalActionsProps = HTMLAttributes<HTMLDivElement>;
|
|
10
|
+
export declare const TerminalActions: ({ className, children, ...props }: TerminalActionsProps) => import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export type TerminalCopyButtonProps = ComponentProps<typeof Button> & {
|
|
12
|
+
onCopy?: () => void;
|
|
13
|
+
onError?: (error: Error) => void;
|
|
14
|
+
timeout?: number;
|
|
15
|
+
};
|
|
16
|
+
export declare const TerminalCopyButton: ({ onCopy, onError, timeout, children, className, ...props }: TerminalCopyButtonProps) => import("react/jsx-runtime").JSX.Element;
|
|
17
|
+
export type TerminalClearButtonProps = ComponentProps<typeof Button>;
|
|
18
|
+
export declare const TerminalClearButton: ({ children, className, ...props }: TerminalClearButtonProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
19
|
+
export type TerminalContentProps = HTMLAttributes<HTMLDivElement>;
|
|
20
|
+
export declare const TerminalContent: ({ className, children, ...props }: TerminalContentProps) => import("react/jsx-runtime").JSX.Element;
|
|
21
|
+
export type TerminalProps = HTMLAttributes<HTMLDivElement> & {
|
|
22
|
+
output: string;
|
|
23
|
+
isStreaming?: boolean;
|
|
24
|
+
autoScroll?: boolean;
|
|
25
|
+
onClear?: () => void;
|
|
26
|
+
};
|
|
27
|
+
export declare const Terminal: ({ output, isStreaming, autoScroll, onClear, className, children, ...props }: TerminalProps) => import("react/jsx-runtime").JSX.Element;
|
|
28
|
+
//# sourceMappingURL=terminal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../../src/molecules/ai/terminal.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAItD,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAwB5D,MAAM,MAAM,mBAAmB,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC;AAEjE,eAAO,MAAM,cAAc,GAAI,mCAI5B,mBAAmB,4CAUrB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC;AAEhE,eAAO,MAAM,aAAa,GAAI,mCAI3B,kBAAkB,4CAQpB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC;AAEjE,eAAO,MAAM,cAAc,GAAI,mCAI5B,mBAAmB,mDAerB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC;AAElE,eAAO,MAAM,eAAe,GAAI,mCAI7B,oBAAoB,4CAItB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,cAAc,CAAC,OAAO,MAAM,CAAC,GAAG;IACpE,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,6DAOhC,uBAAuB,4CA4CzB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,cAAc,CAAC,OAAO,MAAM,CAAC,CAAC;AAErE,eAAO,MAAM,mBAAmB,GAAI,mCAIjC,wBAAwB,mDAqB1B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC;AAElE,eAAO,MAAM,eAAe,GAAI,mCAI7B,oBAAoB,4CA6BtB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,cAAc,CAAC,cAAc,CAAC,GAAG;IAC3D,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAI,6EAQtB,aAAa,4CAiCf,CAAC"}
|