From 4ed77de5d6d33b787274eaafaeecaa66d8b39e1a Mon Sep 17 00:00:00 2001 From: peoray Date: Fri, 28 Nov 2025 03:16:06 +0100 Subject: [PATCH 1/7] feat: update prompt input component --- .../3.components/1.chatbot/prompt-input.md | 6 +- .../elements/src/prompt-input/PromptInput.vue | 340 +++++++++++++++++- .../PromptInputActionAddAttachments.vue | 36 ++ .../prompt-input/PromptInputActionMenu.vue | 15 + .../PromptInputActionMenuContent.vue | 21 ++ .../PromptInputActionMenuItem.vue | 13 + .../PromptInputActionMenuTrigger.vue | 22 ++ .../prompt-input/PromptInputAttachment.vue | 112 ++++++ .../prompt-input/PromptInputAttachments.vue | 29 ++ .../src/prompt-input/PromptInputBody.vue | 12 + .../src/prompt-input/PromptInputButton.vue | 54 +-- .../src/prompt-input/PromptInputCommand.vue | 19 + .../prompt-input/PromptInputCommandEmpty.vue | 19 + .../prompt-input/PromptInputCommandGroup.vue | 19 + .../prompt-input/PromptInputCommandInput.vue | 17 + .../prompt-input/PromptInputCommandItem.vue | 19 + .../prompt-input/PromptInputCommandList.vue | 17 + .../PromptInputCommandSeparator.vue | 16 + .../src/prompt-input/PromptInputFooter.vue | 23 ++ .../src/prompt-input/PromptInputHeader.vue | 23 ++ .../src/prompt-input/PromptInputHoverCard.vue | 18 + .../PromptInputHoverCardContent.vue | 17 + .../PromptInputHoverCardTrigger.vue | 15 + .../src/prompt-input/PromptInputProvider.vue | 113 ++++++ .../src/prompt-input/PromptInputSelect.vue | 15 + .../prompt-input/PromptInputSelectContent.vue | 19 + .../prompt-input/PromptInputSelectItem.vue | 19 + .../prompt-input/PromptInputSelectTrigger.vue | 26 ++ .../prompt-input/PromptInputSelectValue.vue | 19 + .../prompt-input/PromptInputSpeechButton.vue | 159 ++++++++ .../src/prompt-input/PromptInputSubmit.vue | 61 ++-- .../src/prompt-input/PromptInputTab.vue | 16 + .../src/prompt-input/PromptInputTabBody.vue | 16 + .../src/prompt-input/PromptInputTabItem.vue | 16 + .../src/prompt-input/PromptInputTabLabel.vue | 16 + .../src/prompt-input/PromptInputTabsList.vue | 16 + .../src/prompt-input/PromptInputTextarea.vue | 117 ++++-- .../src/prompt-input/PromptInputTools.vue | 18 +- packages/elements/src/prompt-input/index.ts | 37 ++ packages/elements/src/prompt-input/types.ts | 37 ++ .../prompt-input/usePromptInputAttachments.ts | 30 ++ .../prompt-input/usePromptInputController.ts | 56 +++ .../prompt-input/useProviderAttachments.ts | 25 ++ .../src/prompt-input-header-controls.vue | 44 +++ packages/examples/src/prompt-input.vue | 230 ++++++++---- .../components/ui/input-group/InputGroup.vue | 35 ++ .../ui/input-group/InputGroupAddon.vue | 36 ++ .../ui/input-group/InputGroupButton.vue | 21 ++ .../ui/input-group/InputGroupInput.vue | 19 + .../ui/input-group/InputGroupText.vue | 19 + .../ui/input-group/InputGroupTextarea.vue | 19 + .../components/ui/input-group/index.ts | 59 +++ 52 files changed, 2045 insertions(+), 150 deletions(-) create mode 100644 packages/elements/src/prompt-input/PromptInputActionAddAttachments.vue create mode 100644 packages/elements/src/prompt-input/PromptInputActionMenu.vue create mode 100644 packages/elements/src/prompt-input/PromptInputActionMenuContent.vue create mode 100644 packages/elements/src/prompt-input/PromptInputActionMenuItem.vue create mode 100644 packages/elements/src/prompt-input/PromptInputActionMenuTrigger.vue create mode 100644 packages/elements/src/prompt-input/PromptInputAttachment.vue create mode 100644 packages/elements/src/prompt-input/PromptInputAttachments.vue create mode 100644 packages/elements/src/prompt-input/PromptInputBody.vue create mode 100644 packages/elements/src/prompt-input/PromptInputCommand.vue create mode 100644 packages/elements/src/prompt-input/PromptInputCommandEmpty.vue create mode 100644 packages/elements/src/prompt-input/PromptInputCommandGroup.vue create mode 100644 packages/elements/src/prompt-input/PromptInputCommandInput.vue create mode 100644 packages/elements/src/prompt-input/PromptInputCommandItem.vue create mode 100644 packages/elements/src/prompt-input/PromptInputCommandList.vue create mode 100644 packages/elements/src/prompt-input/PromptInputCommandSeparator.vue create mode 100644 packages/elements/src/prompt-input/PromptInputFooter.vue create mode 100644 packages/elements/src/prompt-input/PromptInputHeader.vue create mode 100644 packages/elements/src/prompt-input/PromptInputHoverCard.vue create mode 100644 packages/elements/src/prompt-input/PromptInputHoverCardContent.vue create mode 100644 packages/elements/src/prompt-input/PromptInputHoverCardTrigger.vue create mode 100644 packages/elements/src/prompt-input/PromptInputProvider.vue create mode 100644 packages/elements/src/prompt-input/PromptInputSelect.vue create mode 100644 packages/elements/src/prompt-input/PromptInputSelectContent.vue create mode 100644 packages/elements/src/prompt-input/PromptInputSelectItem.vue create mode 100644 packages/elements/src/prompt-input/PromptInputSelectTrigger.vue create mode 100644 packages/elements/src/prompt-input/PromptInputSelectValue.vue create mode 100644 packages/elements/src/prompt-input/PromptInputSpeechButton.vue create mode 100644 packages/elements/src/prompt-input/PromptInputTab.vue create mode 100644 packages/elements/src/prompt-input/PromptInputTabBody.vue create mode 100644 packages/elements/src/prompt-input/PromptInputTabItem.vue create mode 100644 packages/elements/src/prompt-input/PromptInputTabLabel.vue create mode 100644 packages/elements/src/prompt-input/PromptInputTabsList.vue create mode 100644 packages/elements/src/prompt-input/types.ts create mode 100644 packages/elements/src/prompt-input/usePromptInputAttachments.ts create mode 100644 packages/elements/src/prompt-input/usePromptInputController.ts create mode 100644 packages/elements/src/prompt-input/useProviderAttachments.ts create mode 100644 packages/examples/src/prompt-input-header-controls.vue create mode 100644 packages/shadcn-vue/components/ui/input-group/InputGroup.vue create mode 100644 packages/shadcn-vue/components/ui/input-group/InputGroupAddon.vue create mode 100644 packages/shadcn-vue/components/ui/input-group/InputGroupButton.vue create mode 100644 packages/shadcn-vue/components/ui/input-group/InputGroupInput.vue create mode 100644 packages/shadcn-vue/components/ui/input-group/InputGroupText.vue create mode 100644 packages/shadcn-vue/components/ui/input-group/InputGroupTextarea.vue create mode 100644 packages/shadcn-vue/components/ui/input-group/index.ts diff --git a/apps/www/content/3.components/1.chatbot/prompt-input.md b/apps/www/content/3.components/1.chatbot/prompt-input.md index aa604e6..8c137ff 100644 --- a/apps/www/content/3.components/1.chatbot/prompt-input.md +++ b/apps/www/content/3.components/1.chatbot/prompt-input.md @@ -1,12 +1,12 @@ --- title: Prompt Input -description: -icon: lucide:send +description: Allows a user to send a message with file attachments to a large language model. It includes a textarea, file upload capabilities, a submit button, and a dropdown for selecting the model. +icon: lucide:corner-down-left --- The `PromptInput` component allows a user to send a message to a large language model. It includes a textarea, a submit button, and a dropdown for selecting the model. -:::ComponentLoader{label="PromptInput" componentName="PromptInput"} +:::ComponentLoader{label="Preview" componentName="PromptInput"} ::: ## Install using CLI diff --git a/packages/elements/src/prompt-input/PromptInput.vue b/packages/elements/src/prompt-input/PromptInput.vue index a2bf275..85721bb 100644 --- a/packages/elements/src/prompt-input/PromptInput.vue +++ b/packages/elements/src/prompt-input/PromptInput.vue @@ -1,21 +1,345 @@ diff --git a/packages/elements/src/prompt-input/PromptInputActionAddAttachments.vue b/packages/elements/src/prompt-input/PromptInputActionAddAttachments.vue new file mode 100644 index 0000000..4f666f8 --- /dev/null +++ b/packages/elements/src/prompt-input/PromptInputActionAddAttachments.vue @@ -0,0 +1,36 @@ + + + diff --git a/packages/elements/src/prompt-input/PromptInputActionMenu.vue b/packages/elements/src/prompt-input/PromptInputActionMenu.vue new file mode 100644 index 0000000..f07edaf --- /dev/null +++ b/packages/elements/src/prompt-input/PromptInputActionMenu.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/elements/src/prompt-input/PromptInputActionMenuContent.vue b/packages/elements/src/prompt-input/PromptInputActionMenuContent.vue new file mode 100644 index 0000000..d165cfe --- /dev/null +++ b/packages/elements/src/prompt-input/PromptInputActionMenuContent.vue @@ -0,0 +1,21 @@ + + + diff --git a/packages/elements/src/prompt-input/PromptInputActionMenuItem.vue b/packages/elements/src/prompt-input/PromptInputActionMenuItem.vue new file mode 100644 index 0000000..25119d7 --- /dev/null +++ b/packages/elements/src/prompt-input/PromptInputActionMenuItem.vue @@ -0,0 +1,13 @@ + + + diff --git a/packages/elements/src/prompt-input/PromptInputActionMenuTrigger.vue b/packages/elements/src/prompt-input/PromptInputActionMenuTrigger.vue new file mode 100644 index 0000000..47da64a --- /dev/null +++ b/packages/elements/src/prompt-input/PromptInputActionMenuTrigger.vue @@ -0,0 +1,22 @@ + + + diff --git a/packages/elements/src/prompt-input/PromptInputAttachment.vue b/packages/elements/src/prompt-input/PromptInputAttachment.vue new file mode 100644 index 0000000..3c8535d --- /dev/null +++ b/packages/elements/src/prompt-input/PromptInputAttachment.vue @@ -0,0 +1,112 @@ + + + diff --git a/packages/elements/src/prompt-input/PromptInputAttachments.vue b/packages/elements/src/prompt-input/PromptInputAttachments.vue new file mode 100644 index 0000000..fc6dd94 --- /dev/null +++ b/packages/elements/src/prompt-input/PromptInputAttachments.vue @@ -0,0 +1,29 @@ + + + diff --git a/packages/elements/src/prompt-input/PromptInputBody.vue b/packages/elements/src/prompt-input/PromptInputBody.vue new file mode 100644 index 0000000..fedc6e7 --- /dev/null +++ b/packages/elements/src/prompt-input/PromptInputBody.vue @@ -0,0 +1,12 @@ + + + diff --git a/packages/elements/src/prompt-input/PromptInputButton.vue b/packages/elements/src/prompt-input/PromptInputButton.vue index 8cec8cb..87ea8b8 100644 --- a/packages/elements/src/prompt-input/PromptInputButton.vue +++ b/packages/elements/src/prompt-input/PromptInputButton.vue @@ -1,44 +1,54 @@ diff --git a/packages/elements/src/prompt-input/PromptInputCommand.vue b/packages/elements/src/prompt-input/PromptInputCommand.vue new file mode 100644 index 0000000..da05435 --- /dev/null +++ b/packages/elements/src/prompt-input/PromptInputCommand.vue @@ -0,0 +1,19 @@ + + + diff --git a/packages/elements/src/prompt-input/PromptInputCommandEmpty.vue b/packages/elements/src/prompt-input/PromptInputCommandEmpty.vue new file mode 100644 index 0000000..4f2fafb --- /dev/null +++ b/packages/elements/src/prompt-input/PromptInputCommandEmpty.vue @@ -0,0 +1,19 @@ + + + diff --git a/packages/elements/src/prompt-input/PromptInputCommandGroup.vue b/packages/elements/src/prompt-input/PromptInputCommandGroup.vue new file mode 100644 index 0000000..3d30dab --- /dev/null +++ b/packages/elements/src/prompt-input/PromptInputCommandGroup.vue @@ -0,0 +1,19 @@ + + + diff --git a/packages/elements/src/prompt-input/PromptInputCommandInput.vue b/packages/elements/src/prompt-input/PromptInputCommandInput.vue new file mode 100644 index 0000000..c3759f3 --- /dev/null +++ b/packages/elements/src/prompt-input/PromptInputCommandInput.vue @@ -0,0 +1,17 @@ + + + diff --git a/packages/elements/src/prompt-input/PromptInputCommandItem.vue b/packages/elements/src/prompt-input/PromptInputCommandItem.vue new file mode 100644 index 0000000..aeaf239 --- /dev/null +++ b/packages/elements/src/prompt-input/PromptInputCommandItem.vue @@ -0,0 +1,19 @@ + + + diff --git a/packages/elements/src/prompt-input/PromptInputCommandList.vue b/packages/elements/src/prompt-input/PromptInputCommandList.vue new file mode 100644 index 0000000..b6987e9 --- /dev/null +++ b/packages/elements/src/prompt-input/PromptInputCommandList.vue @@ -0,0 +1,17 @@ + + + diff --git a/packages/elements/src/prompt-input/PromptInputCommandSeparator.vue b/packages/elements/src/prompt-input/PromptInputCommandSeparator.vue new file mode 100644 index 0000000..4c0d243 --- /dev/null +++ b/packages/elements/src/prompt-input/PromptInputCommandSeparator.vue @@ -0,0 +1,16 @@ + + + diff --git a/packages/elements/src/prompt-input/PromptInputFooter.vue b/packages/elements/src/prompt-input/PromptInputFooter.vue new file mode 100644 index 0000000..af5a768 --- /dev/null +++ b/packages/elements/src/prompt-input/PromptInputFooter.vue @@ -0,0 +1,23 @@ + + + diff --git a/packages/elements/src/prompt-input/PromptInputHeader.vue b/packages/elements/src/prompt-input/PromptInputHeader.vue new file mode 100644 index 0000000..46bc0d5 --- /dev/null +++ b/packages/elements/src/prompt-input/PromptInputHeader.vue @@ -0,0 +1,23 @@ + + + diff --git a/packages/elements/src/prompt-input/PromptInputHoverCard.vue b/packages/elements/src/prompt-input/PromptInputHoverCard.vue new file mode 100644 index 0000000..a4858f8 --- /dev/null +++ b/packages/elements/src/prompt-input/PromptInputHoverCard.vue @@ -0,0 +1,18 @@ + + + diff --git a/packages/elements/src/prompt-input/PromptInputHoverCardContent.vue b/packages/elements/src/prompt-input/PromptInputHoverCardContent.vue new file mode 100644 index 0000000..2eeb2de --- /dev/null +++ b/packages/elements/src/prompt-input/PromptInputHoverCardContent.vue @@ -0,0 +1,17 @@ + + + diff --git a/packages/elements/src/prompt-input/PromptInputHoverCardTrigger.vue b/packages/elements/src/prompt-input/PromptInputHoverCardTrigger.vue new file mode 100644 index 0000000..3282d73 --- /dev/null +++ b/packages/elements/src/prompt-input/PromptInputHoverCardTrigger.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/elements/src/prompt-input/PromptInputProvider.vue b/packages/elements/src/prompt-input/PromptInputProvider.vue new file mode 100644 index 0000000..acc4f08 --- /dev/null +++ b/packages/elements/src/prompt-input/PromptInputProvider.vue @@ -0,0 +1,113 @@ + + + diff --git a/packages/elements/src/prompt-input/PromptInputSelect.vue b/packages/elements/src/prompt-input/PromptInputSelect.vue new file mode 100644 index 0000000..47be6d5 --- /dev/null +++ b/packages/elements/src/prompt-input/PromptInputSelect.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/elements/src/prompt-input/PromptInputSelectContent.vue b/packages/elements/src/prompt-input/PromptInputSelectContent.vue new file mode 100644 index 0000000..37a3b5e --- /dev/null +++ b/packages/elements/src/prompt-input/PromptInputSelectContent.vue @@ -0,0 +1,19 @@ + + + diff --git a/packages/elements/src/prompt-input/PromptInputSelectItem.vue b/packages/elements/src/prompt-input/PromptInputSelectItem.vue new file mode 100644 index 0000000..3ee31b6 --- /dev/null +++ b/packages/elements/src/prompt-input/PromptInputSelectItem.vue @@ -0,0 +1,19 @@ + + + diff --git a/packages/elements/src/prompt-input/PromptInputSelectTrigger.vue b/packages/elements/src/prompt-input/PromptInputSelectTrigger.vue new file mode 100644 index 0000000..39a4806 --- /dev/null +++ b/packages/elements/src/prompt-input/PromptInputSelectTrigger.vue @@ -0,0 +1,26 @@ + + + diff --git a/packages/elements/src/prompt-input/PromptInputSelectValue.vue b/packages/elements/src/prompt-input/PromptInputSelectValue.vue new file mode 100644 index 0000000..f0ae98c --- /dev/null +++ b/packages/elements/src/prompt-input/PromptInputSelectValue.vue @@ -0,0 +1,19 @@ + + + diff --git a/packages/elements/src/prompt-input/PromptInputSpeechButton.vue b/packages/elements/src/prompt-input/PromptInputSpeechButton.vue new file mode 100644 index 0000000..3e9ce97 --- /dev/null +++ b/packages/elements/src/prompt-input/PromptInputSpeechButton.vue @@ -0,0 +1,159 @@ + + + diff --git a/packages/elements/src/prompt-input/PromptInputSubmit.vue b/packages/elements/src/prompt-input/PromptInputSubmit.vue index 1cb4f08..274009c 100644 --- a/packages/elements/src/prompt-input/PromptInputSubmit.vue +++ b/packages/elements/src/prompt-input/PromptInputSubmit.vue @@ -1,40 +1,57 @@ diff --git a/packages/elements/src/prompt-input/PromptInputTab.vue b/packages/elements/src/prompt-input/PromptInputTab.vue new file mode 100644 index 0000000..c0cc3e1 --- /dev/null +++ b/packages/elements/src/prompt-input/PromptInputTab.vue @@ -0,0 +1,16 @@ + + + diff --git a/packages/elements/src/prompt-input/PromptInputTabBody.vue b/packages/elements/src/prompt-input/PromptInputTabBody.vue new file mode 100644 index 0000000..0cc5def --- /dev/null +++ b/packages/elements/src/prompt-input/PromptInputTabBody.vue @@ -0,0 +1,16 @@ + + + diff --git a/packages/elements/src/prompt-input/PromptInputTabItem.vue b/packages/elements/src/prompt-input/PromptInputTabItem.vue new file mode 100644 index 0000000..bc9d6fe --- /dev/null +++ b/packages/elements/src/prompt-input/PromptInputTabItem.vue @@ -0,0 +1,16 @@ + + + diff --git a/packages/elements/src/prompt-input/PromptInputTabLabel.vue b/packages/elements/src/prompt-input/PromptInputTabLabel.vue new file mode 100644 index 0000000..2a9341a --- /dev/null +++ b/packages/elements/src/prompt-input/PromptInputTabLabel.vue @@ -0,0 +1,16 @@ + + + diff --git a/packages/elements/src/prompt-input/PromptInputTabsList.vue b/packages/elements/src/prompt-input/PromptInputTabsList.vue new file mode 100644 index 0000000..c0cc3e1 --- /dev/null +++ b/packages/elements/src/prompt-input/PromptInputTabsList.vue @@ -0,0 +1,16 @@ + + + diff --git a/packages/elements/src/prompt-input/PromptInputTextarea.vue b/packages/elements/src/prompt-input/PromptInputTextarea.vue index 57573e9..e50b7d0 100644 --- a/packages/elements/src/prompt-input/PromptInputTextarea.vue +++ b/packages/elements/src/prompt-input/PromptInputTextarea.vue @@ -1,43 +1,120 @@