@wzh-/ai-chat-example 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (385) hide show
  1. package/.vscode/extensions.json +3 -0
  2. package/.vscode/settings.json +6 -0
  3. package/README.md +5 -0
  4. package/auto-imports.d.ts +73 -0
  5. package/components.d.ts +312 -0
  6. package/components.json +21 -0
  7. package/index.html +13 -0
  8. package/package.json +60 -0
  9. package/public/vite.svg +1 -0
  10. package/src/App.vue +68 -0
  11. package/src/components/ChatConversation/ChatConversation.vue +97 -0
  12. package/src/components/ChatConversation/index.ts +1 -0
  13. package/src/components/ChatPromptInputProvider/ChatPromptInputProvider.vue +47 -0
  14. package/src/components/ChatPromptInputProvider/index.ts +1 -0
  15. package/src/components/ai-elements/artifact/Artifact.vue +23 -0
  16. package/src/components/ai-elements/artifact/ArtifactAction.vue +72 -0
  17. package/src/components/ai-elements/artifact/ArtifactActions.vue +19 -0
  18. package/src/components/ai-elements/artifact/ArtifactClose.vue +39 -0
  19. package/src/components/ai-elements/artifact/ArtifactContent.vue +20 -0
  20. package/src/components/ai-elements/artifact/ArtifactDescription.vue +20 -0
  21. package/src/components/ai-elements/artifact/ArtifactHeader.vue +23 -0
  22. package/src/components/ai-elements/artifact/ArtifactTitle.vue +20 -0
  23. package/src/components/ai-elements/artifact/index.ts +8 -0
  24. package/src/components/ai-elements/canvas/Canvas.vue +37 -0
  25. package/src/components/ai-elements/canvas/index.ts +1 -0
  26. package/src/components/ai-elements/chain-of-thought/ChainOfThought.vue +41 -0
  27. package/src/components/ai-elements/chain-of-thought/ChainOfThoughtContent.vue +32 -0
  28. package/src/components/ai-elements/chain-of-thought/ChainOfThoughtHeader.vue +43 -0
  29. package/src/components/ai-elements/chain-of-thought/ChainOfThoughtImage.vue +25 -0
  30. package/src/components/ai-elements/chain-of-thought/ChainOfThoughtSearchResult.vue +24 -0
  31. package/src/components/ai-elements/chain-of-thought/ChainOfThoughtSearchResults.vue +17 -0
  32. package/src/components/ai-elements/chain-of-thought/ChainOfThoughtStep.vue +54 -0
  33. package/src/components/ai-elements/chain-of-thought/context.ts +22 -0
  34. package/src/components/ai-elements/chain-of-thought/index.ts +7 -0
  35. package/src/components/ai-elements/checkpoint/Checkpoint.vue +19 -0
  36. package/src/components/ai-elements/checkpoint/CheckpointIcon.vue +19 -0
  37. package/src/components/ai-elements/checkpoint/CheckpointTrigger.vue +46 -0
  38. package/src/components/ai-elements/checkpoint/index.ts +3 -0
  39. package/src/components/ai-elements/code-block/CodeBlock.vue +84 -0
  40. package/src/components/ai-elements/code-block/CodeBlockCopyButton.vue +84 -0
  41. package/src/components/ai-elements/code-block/context.ts +7 -0
  42. package/src/components/ai-elements/code-block/index.ts +2 -0
  43. package/src/components/ai-elements/code-block/utils.ts +46 -0
  44. package/src/components/ai-elements/confirmation/Confirmation.vue +30 -0
  45. package/src/components/ai-elements/confirmation/ConfirmationAccepted.vue +18 -0
  46. package/src/components/ai-elements/confirmation/ConfirmationAction.vue +9 -0
  47. package/src/components/ai-elements/confirmation/ConfirmationActions.vue +23 -0
  48. package/src/components/ai-elements/confirmation/ConfirmationRejected.vue +18 -0
  49. package/src/components/ai-elements/confirmation/ConfirmationRequest.vue +11 -0
  50. package/src/components/ai-elements/confirmation/ConfirmationTitle.vue +18 -0
  51. package/src/components/ai-elements/confirmation/context.ts +46 -0
  52. package/src/components/ai-elements/confirmation/index.ts +7 -0
  53. package/src/components/ai-elements/connection/Connection.vue +36 -0
  54. package/src/components/ai-elements/connection/index.ts +1 -0
  55. package/src/components/ai-elements/context/Context.vue +29 -0
  56. package/src/components/ai-elements/context/ContextCacheUsage.vue +45 -0
  57. package/src/components/ai-elements/context/ContextContent.vue +20 -0
  58. package/src/components/ai-elements/context/ContextContentBody.vue +14 -0
  59. package/src/components/ai-elements/context/ContextContentFooter.vue +49 -0
  60. package/src/components/ai-elements/context/ContextContentHeader.vue +49 -0
  61. package/src/components/ai-elements/context/ContextIcon.vue +62 -0
  62. package/src/components/ai-elements/context/ContextInputUsage.vue +46 -0
  63. package/src/components/ai-elements/context/ContextOutputUsage.vue +45 -0
  64. package/src/components/ai-elements/context/ContextReasoningUsage.vue +48 -0
  65. package/src/components/ai-elements/context/ContextTrigger.vue +32 -0
  66. package/src/components/ai-elements/context/TokensWithCost.vue +25 -0
  67. package/src/components/ai-elements/context/context.ts +23 -0
  68. package/src/components/ai-elements/context/index.ts +12 -0
  69. package/src/components/ai-elements/controls/Controls.vue +25 -0
  70. package/src/components/ai-elements/controls/index.ts +1 -0
  71. package/src/components/ai-elements/conversation/Conversation.vue +37 -0
  72. package/src/components/ai-elements/conversation/ConversationContent.vue +21 -0
  73. package/src/components/ai-elements/conversation/ConversationEmptyState.vue +40 -0
  74. package/src/components/ai-elements/conversation/ConversationScrollButton.vue +34 -0
  75. package/src/components/ai-elements/conversation/index.ts +4 -0
  76. package/src/components/ai-elements/edge/Animated.vue +91 -0
  77. package/src/components/ai-elements/edge/Temporary.vue +28 -0
  78. package/src/components/ai-elements/edge/index.ts +2 -0
  79. package/src/components/ai-elements/image/Image.vue +29 -0
  80. package/src/components/ai-elements/image/index.ts +1 -0
  81. package/src/components/ai-elements/inline-citation/InlineCitation.vue +14 -0
  82. package/src/components/ai-elements/inline-citation/InlineCitationCard.vue +17 -0
  83. package/src/components/ai-elements/inline-citation/InlineCitationCardBody.vue +15 -0
  84. package/src/components/ai-elements/inline-citation/InlineCitationCardTrigger.vue +35 -0
  85. package/src/components/ai-elements/inline-citation/InlineCitationCarousel.vue +15 -0
  86. package/src/components/ai-elements/inline-citation/InlineCitationCarouselContent.vue +9 -0
  87. package/src/components/ai-elements/inline-citation/InlineCitationCarouselHeader.vue +16 -0
  88. package/src/components/ai-elements/inline-citation/InlineCitationCarouselIndex.vue +46 -0
  89. package/src/components/ai-elements/inline-citation/InlineCitationCarouselItem.vue +15 -0
  90. package/src/components/ai-elements/inline-citation/InlineCitationCarouselNext.vue +23 -0
  91. package/src/components/ai-elements/inline-citation/InlineCitationCarouselPrev.vue +23 -0
  92. package/src/components/ai-elements/inline-citation/InlineCitationQuote.vue +16 -0
  93. package/src/components/ai-elements/inline-citation/InlineCitationSource.vue +26 -0
  94. package/src/components/ai-elements/inline-citation/InlineCitationText.vue +14 -0
  95. package/src/components/ai-elements/inline-citation/index.ts +14 -0
  96. package/src/components/ai-elements/loader/Loader.vue +23 -0
  97. package/src/components/ai-elements/loader/LoaderIcon.vue +38 -0
  98. package/src/components/ai-elements/loader/index.ts +2 -0
  99. package/src/components/ai-elements/message/Message.vue +27 -0
  100. package/src/components/ai-elements/message/MessageAction.vue +45 -0
  101. package/src/components/ai-elements/message/MessageActions.vue +19 -0
  102. package/src/components/ai-elements/message/MessageAttachment.vue +87 -0
  103. package/src/components/ai-elements/message/MessageAttachments.vue +25 -0
  104. package/src/components/ai-elements/message/MessageAvatar.vue +22 -0
  105. package/src/components/ai-elements/message/MessageBranch.vue +66 -0
  106. package/src/components/ai-elements/message/MessageBranchContent.vue +51 -0
  107. package/src/components/ai-elements/message/MessageBranchNext.vue +23 -0
  108. package/src/components/ai-elements/message/MessageBranchPage.vue +28 -0
  109. package/src/components/ai-elements/message/MessageBranchPrevious.vue +23 -0
  110. package/src/components/ai-elements/message/MessageBranchSelector.vue +23 -0
  111. package/src/components/ai-elements/message/MessageContent.vue +26 -0
  112. package/src/components/ai-elements/message/MessageResponse.vue +42 -0
  113. package/src/components/ai-elements/message/MessageToolbar.vue +24 -0
  114. package/src/components/ai-elements/message/context.ts +22 -0
  115. package/src/components/ai-elements/message/index.ts +15 -0
  116. package/src/components/ai-elements/model-selector/ModelSelector.vue +9 -0
  117. package/src/components/ai-elements/model-selector/ModelSelectorContent.vue +29 -0
  118. package/src/components/ai-elements/model-selector/ModelSelectorDialog.vue +9 -0
  119. package/src/components/ai-elements/model-selector/ModelSelectorEmpty.vue +9 -0
  120. package/src/components/ai-elements/model-selector/ModelSelectorGroup.vue +9 -0
  121. package/src/components/ai-elements/model-selector/ModelSelectorInput.vue +18 -0
  122. package/src/components/ai-elements/model-selector/ModelSelectorItem.vue +10 -0
  123. package/src/components/ai-elements/model-selector/ModelSelectorList.vue +9 -0
  124. package/src/components/ai-elements/model-selector/ModelSelectorLogo.vue +22 -0
  125. package/src/components/ai-elements/model-selector/ModelSelectorLogoGroup.vue +24 -0
  126. package/src/components/ai-elements/model-selector/ModelSelectorName.vue +19 -0
  127. package/src/components/ai-elements/model-selector/ModelSelectorSeparator.vue +7 -0
  128. package/src/components/ai-elements/model-selector/ModelSelectorShortcut.vue +9 -0
  129. package/src/components/ai-elements/model-selector/ModelSelectorTrigger.vue +9 -0
  130. package/src/components/ai-elements/model-selector/index.ts +14 -0
  131. package/src/components/ai-elements/node/Node.vue +31 -0
  132. package/src/components/ai-elements/node/NodeAction.vue +9 -0
  133. package/src/components/ai-elements/node/NodeContent.vue +15 -0
  134. package/src/components/ai-elements/node/NodeDescription.vue +9 -0
  135. package/src/components/ai-elements/node/NodeFooter.vue +15 -0
  136. package/src/components/ai-elements/node/NodeHeader.vue +15 -0
  137. package/src/components/ai-elements/node/NodeTitle.vue +9 -0
  138. package/src/components/ai-elements/node/index.ts +7 -0
  139. package/src/components/ai-elements/open-in-chat/OpenIn.vue +20 -0
  140. package/src/components/ai-elements/open-in-chat/OpenInContent.vue +25 -0
  141. package/src/components/ai-elements/open-in-chat/OpenInItemLink.vue +30 -0
  142. package/src/components/ai-elements/open-in-chat/OpenInTrigger.vue +16 -0
  143. package/src/components/ai-elements/open-in-chat/context.ts +20 -0
  144. package/src/components/ai-elements/open-in-chat/index.ts +9 -0
  145. package/src/components/ai-elements/open-in-chat/providers/icons/ChatGPT.vue +13 -0
  146. package/src/components/ai-elements/open-in-chat/providers/icons/Claude.vue +15 -0
  147. package/src/components/ai-elements/open-in-chat/providers/icons/Cursor.vue +13 -0
  148. package/src/components/ai-elements/open-in-chat/providers/icons/Github.vue +8 -0
  149. package/src/components/ai-elements/open-in-chat/providers/icons/Scira.vue +58 -0
  150. package/src/components/ai-elements/open-in-chat/providers/icons/V0.vue +15 -0
  151. package/src/components/ai-elements/open-in-chat/providers/icons/index.ts +6 -0
  152. package/src/components/ai-elements/open-in-chat/providers/index.ts +69 -0
  153. package/src/components/ai-elements/open-in-chat/providers/items/OpenInChatGPT.vue +18 -0
  154. package/src/components/ai-elements/open-in-chat/providers/items/OpenInClaude.vue +18 -0
  155. package/src/components/ai-elements/open-in-chat/providers/items/OpenInCursor.vue +18 -0
  156. package/src/components/ai-elements/open-in-chat/providers/items/OpenInScira.vue +18 -0
  157. package/src/components/ai-elements/open-in-chat/providers/items/OpenInT3.vue +18 -0
  158. package/src/components/ai-elements/open-in-chat/providers/items/OpenInv0.vue +18 -0
  159. package/src/components/ai-elements/panel/Panel.vue +28 -0
  160. package/src/components/ai-elements/panel/index.ts +1 -0
  161. package/src/components/ai-elements/plan/Plan.vue +32 -0
  162. package/src/components/ai-elements/plan/PlanAction.vue +9 -0
  163. package/src/components/ai-elements/plan/PlanContent.vue +12 -0
  164. package/src/components/ai-elements/plan/PlanDescription.vue +25 -0
  165. package/src/components/ai-elements/plan/PlanFooter.vue +9 -0
  166. package/src/components/ai-elements/plan/PlanHeader.vue +18 -0
  167. package/src/components/ai-elements/plan/PlanTitle.vue +16 -0
  168. package/src/components/ai-elements/plan/PlanTrigger.vue +25 -0
  169. package/src/components/ai-elements/plan/context.ts +20 -0
  170. package/src/components/ai-elements/plan/index.ts +8 -0
  171. package/src/components/ai-elements/prompt-input/PromptInput.vue +116 -0
  172. package/src/components/ai-elements/prompt-input/PromptInputActionAddAttachments.vue +22 -0
  173. package/src/components/ai-elements/prompt-input/PromptInputActionMenu.vue +15 -0
  174. package/src/components/ai-elements/prompt-input/PromptInputActionMenuContent.vue +21 -0
  175. package/src/components/ai-elements/prompt-input/PromptInputActionMenuItem.vue +19 -0
  176. package/src/components/ai-elements/prompt-input/PromptInputActionMenuTrigger.vue +22 -0
  177. package/src/components/ai-elements/prompt-input/PromptInputAttachment.vue +94 -0
  178. package/src/components/ai-elements/prompt-input/PromptInputAttachments.vue +22 -0
  179. package/src/components/ai-elements/prompt-input/PromptInputBody.vue +12 -0
  180. package/src/components/ai-elements/prompt-input/PromptInputButton.vue +56 -0
  181. package/src/components/ai-elements/prompt-input/PromptInputCommand.vue +19 -0
  182. package/src/components/ai-elements/prompt-input/PromptInputCommandEmpty.vue +19 -0
  183. package/src/components/ai-elements/prompt-input/PromptInputCommandGroup.vue +19 -0
  184. package/src/components/ai-elements/prompt-input/PromptInputCommandInput.vue +17 -0
  185. package/src/components/ai-elements/prompt-input/PromptInputCommandItem.vue +19 -0
  186. package/src/components/ai-elements/prompt-input/PromptInputCommandList.vue +17 -0
  187. package/src/components/ai-elements/prompt-input/PromptInputCommandSeparator.vue +16 -0
  188. package/src/components/ai-elements/prompt-input/PromptInputFooter.vue +23 -0
  189. package/src/components/ai-elements/prompt-input/PromptInputHeader.vue +23 -0
  190. package/src/components/ai-elements/prompt-input/PromptInputHoverCard.vue +23 -0
  191. package/src/components/ai-elements/prompt-input/PromptInputHoverCardContent.vue +19 -0
  192. package/src/components/ai-elements/prompt-input/PromptInputHoverCardTrigger.vue +15 -0
  193. package/src/components/ai-elements/prompt-input/PromptInputProvider.vue +32 -0
  194. package/src/components/ai-elements/prompt-input/PromptInputSelect.vue +15 -0
  195. package/src/components/ai-elements/prompt-input/PromptInputSelectContent.vue +19 -0
  196. package/src/components/ai-elements/prompt-input/PromptInputSelectItem.vue +19 -0
  197. package/src/components/ai-elements/prompt-input/PromptInputSelectTrigger.vue +26 -0
  198. package/src/components/ai-elements/prompt-input/PromptInputSelectValue.vue +19 -0
  199. package/src/components/ai-elements/prompt-input/PromptInputSpeechButton.vue +137 -0
  200. package/src/components/ai-elements/prompt-input/PromptInputSubmit.vue +60 -0
  201. package/src/components/ai-elements/prompt-input/PromptInputTab.vue +16 -0
  202. package/src/components/ai-elements/prompt-input/PromptInputTabBody.vue +16 -0
  203. package/src/components/ai-elements/prompt-input/PromptInputTabItem.vue +16 -0
  204. package/src/components/ai-elements/prompt-input/PromptInputTabLabel.vue +16 -0
  205. package/src/components/ai-elements/prompt-input/PromptInputTabsList.vue +16 -0
  206. package/src/components/ai-elements/prompt-input/PromptInputTextarea.vue +78 -0
  207. package/src/components/ai-elements/prompt-input/PromptInputTools.vue +12 -0
  208. package/src/components/ai-elements/prompt-input/context.ts +223 -0
  209. package/src/components/ai-elements/prompt-input/index.ts +39 -0
  210. package/src/components/ai-elements/prompt-input/types.ts +28 -0
  211. package/src/components/ai-elements/queue/Queue.vue +21 -0
  212. package/src/components/ai-elements/queue/QueueItem.vue +21 -0
  213. package/src/components/ai-elements/queue/QueueItemAction.vue +25 -0
  214. package/src/components/ai-elements/queue/QueueItemActions.vue +14 -0
  215. package/src/components/ai-elements/queue/QueueItemAttachment.vue +14 -0
  216. package/src/components/ai-elements/queue/QueueItemContent.vue +32 -0
  217. package/src/components/ai-elements/queue/QueueItemDescription.vue +32 -0
  218. package/src/components/ai-elements/queue/QueueItemFile.vue +25 -0
  219. package/src/components/ai-elements/queue/QueueItemImage.vue +18 -0
  220. package/src/components/ai-elements/queue/QueueItemIndicator.vue +30 -0
  221. package/src/components/ai-elements/queue/QueueList.vue +22 -0
  222. package/src/components/ai-elements/queue/QueueSection.vue +26 -0
  223. package/src/components/ai-elements/queue/QueueSectionContent.vue +15 -0
  224. package/src/components/ai-elements/queue/QueueSectionLabel.vue +26 -0
  225. package/src/components/ai-elements/queue/QueueSectionTrigger.vue +25 -0
  226. package/src/components/ai-elements/queue/index.ts +15 -0
  227. package/src/components/ai-elements/reasoning/Reasoning.vue +94 -0
  228. package/src/components/ai-elements/reasoning/ReasoningContent.vue +41 -0
  229. package/src/components/ai-elements/reasoning/ReasoningTrigger.vue +61 -0
  230. package/src/components/ai-elements/reasoning/context.ts +19 -0
  231. package/src/components/ai-elements/reasoning/index.ts +3 -0
  232. package/src/components/ai-elements/shimmer/Shimmer.vue +69 -0
  233. package/src/components/ai-elements/shimmer/index.ts +1 -0
  234. package/src/components/ai-elements/sources/Source.vue +26 -0
  235. package/src/components/ai-elements/sources/Sources.vue +17 -0
  236. package/src/components/ai-elements/sources/SourcesContent.vue +23 -0
  237. package/src/components/ai-elements/sources/SourcesTrigger.vue +24 -0
  238. package/src/components/ai-elements/sources/index.ts +4 -0
  239. package/src/components/ai-elements/suggestion/Suggestion.vue +38 -0
  240. package/src/components/ai-elements/suggestion/Suggestions.vue +20 -0
  241. package/src/components/ai-elements/suggestion/index.ts +2 -0
  242. package/src/components/ai-elements/task/Task.vue +32 -0
  243. package/src/components/ai-elements/task/TaskContent.vue +27 -0
  244. package/src/components/ai-elements/task/TaskItem.vue +16 -0
  245. package/src/components/ai-elements/task/TaskItemFile.vue +18 -0
  246. package/src/components/ai-elements/task/TaskTrigger.vue +33 -0
  247. package/src/components/ai-elements/task/index.ts +5 -0
  248. package/src/components/ai-elements/tool/Tool.vue +18 -0
  249. package/src/components/ai-elements/tool/ToolContent.vue +23 -0
  250. package/src/components/ai-elements/tool/ToolHeader.vue +38 -0
  251. package/src/components/ai-elements/tool/ToolInput.vue +32 -0
  252. package/src/components/ai-elements/tool/ToolOutput.vue +69 -0
  253. package/src/components/ai-elements/tool/ToolStatusBadge.vue +63 -0
  254. package/src/components/ai-elements/tool/index.ts +5 -0
  255. package/src/components/ai-elements/toolbar/Toolbar.vue +32 -0
  256. package/src/components/ai-elements/toolbar/index.ts +1 -0
  257. package/src/components/ai-elements/web-preview/WebPreview.vue +60 -0
  258. package/src/components/ai-elements/web-preview/WebPreviewBody.vue +34 -0
  259. package/src/components/ai-elements/web-preview/WebPreviewConsole.vue +92 -0
  260. package/src/components/ai-elements/web-preview/WebPreviewNavigation.vue +21 -0
  261. package/src/components/ai-elements/web-preview/WebPreviewNavigationButton.vue +45 -0
  262. package/src/components/ai-elements/web-preview/WebPreviewUrl.vue +43 -0
  263. package/src/components/ai-elements/web-preview/context.ts +25 -0
  264. package/src/components/ai-elements/web-preview/index.ts +7 -0
  265. package/src/components/ui/alert/Alert.vue +21 -0
  266. package/src/components/ui/alert/AlertDescription.vue +17 -0
  267. package/src/components/ui/alert/AlertTitle.vue +17 -0
  268. package/src/components/ui/alert/index.ts +24 -0
  269. package/src/components/ui/avatar/Avatar.vue +18 -0
  270. package/src/components/ui/avatar/AvatarFallback.vue +21 -0
  271. package/src/components/ui/avatar/AvatarImage.vue +16 -0
  272. package/src/components/ui/avatar/index.ts +3 -0
  273. package/src/components/ui/badge/Badge.vue +26 -0
  274. package/src/components/ui/badge/index.ts +26 -0
  275. package/src/components/ui/button/Button.vue +29 -0
  276. package/src/components/ui/button/index.ts +38 -0
  277. package/src/components/ui/button-group/ButtonGroup.vue +22 -0
  278. package/src/components/ui/button-group/ButtonGroupSeparator.vue +24 -0
  279. package/src/components/ui/button-group/ButtonGroupText.vue +29 -0
  280. package/src/components/ui/button-group/index.ts +25 -0
  281. package/src/components/ui/card/Card.vue +22 -0
  282. package/src/components/ui/card/CardAction.vue +17 -0
  283. package/src/components/ui/card/CardContent.vue +17 -0
  284. package/src/components/ui/card/CardDescription.vue +17 -0
  285. package/src/components/ui/card/CardFooter.vue +17 -0
  286. package/src/components/ui/card/CardHeader.vue +17 -0
  287. package/src/components/ui/card/CardTitle.vue +17 -0
  288. package/src/components/ui/card/index.ts +7 -0
  289. package/src/components/ui/carousel/Carousel.vue +53 -0
  290. package/src/components/ui/carousel/CarouselContent.vue +33 -0
  291. package/src/components/ui/carousel/CarouselItem.vue +24 -0
  292. package/src/components/ui/carousel/CarouselNext.vue +41 -0
  293. package/src/components/ui/carousel/CarouselPrevious.vue +41 -0
  294. package/src/components/ui/carousel/index.ts +10 -0
  295. package/src/components/ui/carousel/interface.ts +26 -0
  296. package/src/components/ui/carousel/useCarousel.ts +56 -0
  297. package/src/components/ui/collapsible/Collapsible.vue +19 -0
  298. package/src/components/ui/collapsible/CollapsibleContent.vue +15 -0
  299. package/src/components/ui/collapsible/CollapsibleTrigger.vue +15 -0
  300. package/src/components/ui/collapsible/index.ts +3 -0
  301. package/src/components/ui/command/Command.vue +87 -0
  302. package/src/components/ui/command/CommandDialog.vue +31 -0
  303. package/src/components/ui/command/CommandEmpty.vue +27 -0
  304. package/src/components/ui/command/CommandGroup.vue +45 -0
  305. package/src/components/ui/command/CommandInput.vue +39 -0
  306. package/src/components/ui/command/CommandItem.vue +76 -0
  307. package/src/components/ui/command/CommandList.vue +25 -0
  308. package/src/components/ui/command/CommandSeparator.vue +21 -0
  309. package/src/components/ui/command/CommandShortcut.vue +17 -0
  310. package/src/components/ui/command/index.ts +25 -0
  311. package/src/components/ui/dialog/Dialog.vue +19 -0
  312. package/src/components/ui/dialog/DialogClose.vue +15 -0
  313. package/src/components/ui/dialog/DialogContent.vue +53 -0
  314. package/src/components/ui/dialog/DialogDescription.vue +23 -0
  315. package/src/components/ui/dialog/DialogFooter.vue +15 -0
  316. package/src/components/ui/dialog/DialogHeader.vue +17 -0
  317. package/src/components/ui/dialog/DialogOverlay.vue +21 -0
  318. package/src/components/ui/dialog/DialogScrollContent.vue +59 -0
  319. package/src/components/ui/dialog/DialogTitle.vue +23 -0
  320. package/src/components/ui/dialog/DialogTrigger.vue +15 -0
  321. package/src/components/ui/dialog/index.ts +10 -0
  322. package/src/components/ui/dropdown-menu/DropdownMenu.vue +19 -0
  323. package/src/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue +39 -0
  324. package/src/components/ui/dropdown-menu/DropdownMenuContent.vue +39 -0
  325. package/src/components/ui/dropdown-menu/DropdownMenuGroup.vue +15 -0
  326. package/src/components/ui/dropdown-menu/DropdownMenuItem.vue +31 -0
  327. package/src/components/ui/dropdown-menu/DropdownMenuLabel.vue +23 -0
  328. package/src/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue +21 -0
  329. package/src/components/ui/dropdown-menu/DropdownMenuRadioItem.vue +40 -0
  330. package/src/components/ui/dropdown-menu/DropdownMenuSeparator.vue +23 -0
  331. package/src/components/ui/dropdown-menu/DropdownMenuShortcut.vue +17 -0
  332. package/src/components/ui/dropdown-menu/DropdownMenuSub.vue +18 -0
  333. package/src/components/ui/dropdown-menu/DropdownMenuSubContent.vue +27 -0
  334. package/src/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue +30 -0
  335. package/src/components/ui/dropdown-menu/DropdownMenuTrigger.vue +17 -0
  336. package/src/components/ui/dropdown-menu/index.ts +16 -0
  337. package/src/components/ui/hover-card/HoverCard.vue +19 -0
  338. package/src/components/ui/hover-card/HoverCardContent.vue +43 -0
  339. package/src/components/ui/hover-card/HoverCardTrigger.vue +15 -0
  340. package/src/components/ui/hover-card/index.ts +3 -0
  341. package/src/components/ui/input/Input.vue +33 -0
  342. package/src/components/ui/input/index.ts +1 -0
  343. package/src/components/ui/input-group/InputGroup.vue +37 -0
  344. package/src/components/ui/input-group/InputGroupAddon.vue +36 -0
  345. package/src/components/ui/input-group/InputGroupButton.vue +21 -0
  346. package/src/components/ui/input-group/InputGroupInput.vue +19 -0
  347. package/src/components/ui/input-group/InputGroupText.vue +19 -0
  348. package/src/components/ui/input-group/InputGroupTextarea.vue +19 -0
  349. package/src/components/ui/input-group/index.ts +59 -0
  350. package/src/components/ui/progress/Progress.vue +38 -0
  351. package/src/components/ui/progress/index.ts +1 -0
  352. package/src/components/ui/scroll-area/ScrollArea.vue +33 -0
  353. package/src/components/ui/scroll-area/ScrollBar.vue +32 -0
  354. package/src/components/ui/scroll-area/index.ts +2 -0
  355. package/src/components/ui/select/Select.vue +19 -0
  356. package/src/components/ui/select/SelectContent.vue +51 -0
  357. package/src/components/ui/select/SelectGroup.vue +15 -0
  358. package/src/components/ui/select/SelectItem.vue +44 -0
  359. package/src/components/ui/select/SelectItemText.vue +15 -0
  360. package/src/components/ui/select/SelectLabel.vue +17 -0
  361. package/src/components/ui/select/SelectScrollDownButton.vue +26 -0
  362. package/src/components/ui/select/SelectScrollUpButton.vue +26 -0
  363. package/src/components/ui/select/SelectSeparator.vue +19 -0
  364. package/src/components/ui/select/SelectTrigger.vue +33 -0
  365. package/src/components/ui/select/SelectValue.vue +15 -0
  366. package/src/components/ui/select/index.ts +11 -0
  367. package/src/components/ui/separator/Separator.vue +29 -0
  368. package/src/components/ui/separator/index.ts +1 -0
  369. package/src/components/ui/textarea/Textarea.vue +28 -0
  370. package/src/components/ui/textarea/index.ts +1 -0
  371. package/src/components/ui/tooltip/Tooltip.vue +19 -0
  372. package/src/components/ui/tooltip/TooltipContent.vue +34 -0
  373. package/src/components/ui/tooltip/TooltipProvider.vue +14 -0
  374. package/src/components/ui/tooltip/TooltipTrigger.vue +15 -0
  375. package/src/components/ui/tooltip/index.ts +4 -0
  376. package/src/composables/useChat.ts +46 -0
  377. package/src/index.ts +3 -0
  378. package/src/lib/utils.ts +7 -0
  379. package/src/main.ts +5 -0
  380. package/src/request/index.ts +41 -0
  381. package/src/style.css +120 -0
  382. package/tsconfig.app.json +25 -0
  383. package/tsconfig.json +13 -0
  384. package/tsconfig.node.json +26 -0
  385. package/vite.config.ts +26 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ "recommendations": ["Vue.volar"]
3
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "editor.formatOnSave": true,
3
+ "editor.codeActionsOnSave": {
4
+ "source.organizeImports": "explicit"
5
+ },
6
+ }
package/README.md ADDED
@@ -0,0 +1,5 @@
1
+ # Vue 3 + TypeScript + Vite
2
+
3
+ This template should help get you started developing with Vue 3 and TypeScript in Vite. The template uses Vue 3 `<script setup>` SFCs, check out the [script setup docs](https://v3.vuejs.org/api/sfc-script-setup.html#sfc-script-setup) to learn more.
4
+
5
+ Learn more about the recommended Project Setup and IDE Support in the [Vue Docs TypeScript Guide](https://vuejs.org/guide/typescript/overview.html#project-setup).
@@ -0,0 +1,73 @@
1
+ /* eslint-disable */
2
+ /* prettier-ignore */
3
+ // @ts-nocheck
4
+ // noinspection JSUnusedGlobalSymbols
5
+ // Generated by unplugin-auto-import
6
+ // biome-ignore lint: disable
7
+ export {}
8
+ declare global {
9
+ const EffectScope: typeof import('vue').EffectScope
10
+ const computed: typeof import('vue').computed
11
+ const createApp: typeof import('vue').createApp
12
+ const customRef: typeof import('vue').customRef
13
+ const defineAsyncComponent: typeof import('vue').defineAsyncComponent
14
+ const defineComponent: typeof import('vue').defineComponent
15
+ const effectScope: typeof import('vue').effectScope
16
+ const getCurrentInstance: typeof import('vue').getCurrentInstance
17
+ const getCurrentScope: typeof import('vue').getCurrentScope
18
+ const getCurrentWatcher: typeof import('vue').getCurrentWatcher
19
+ const h: typeof import('vue').h
20
+ const inject: typeof import('vue').inject
21
+ const isProxy: typeof import('vue').isProxy
22
+ const isReactive: typeof import('vue').isReactive
23
+ const isReadonly: typeof import('vue').isReadonly
24
+ const isRef: typeof import('vue').isRef
25
+ const isShallow: typeof import('vue').isShallow
26
+ const markRaw: typeof import('vue').markRaw
27
+ const nextTick: typeof import('vue').nextTick
28
+ const onActivated: typeof import('vue').onActivated
29
+ const onBeforeMount: typeof import('vue').onBeforeMount
30
+ const onBeforeUnmount: typeof import('vue').onBeforeUnmount
31
+ const onBeforeUpdate: typeof import('vue').onBeforeUpdate
32
+ const onDeactivated: typeof import('vue').onDeactivated
33
+ const onErrorCaptured: typeof import('vue').onErrorCaptured
34
+ const onMounted: typeof import('vue').onMounted
35
+ const onRenderTracked: typeof import('vue').onRenderTracked
36
+ const onRenderTriggered: typeof import('vue').onRenderTriggered
37
+ const onScopeDispose: typeof import('vue').onScopeDispose
38
+ const onServerPrefetch: typeof import('vue').onServerPrefetch
39
+ const onUnmounted: typeof import('vue').onUnmounted
40
+ const onUpdated: typeof import('vue').onUpdated
41
+ const onWatcherCleanup: typeof import('vue').onWatcherCleanup
42
+ const provide: typeof import('vue').provide
43
+ const reactive: typeof import('vue').reactive
44
+ const readonly: typeof import('vue').readonly
45
+ const ref: typeof import('vue').ref
46
+ const resolveComponent: typeof import('vue').resolveComponent
47
+ const shallowReactive: typeof import('vue').shallowReactive
48
+ const shallowReadonly: typeof import('vue').shallowReadonly
49
+ const shallowRef: typeof import('vue').shallowRef
50
+ const toRaw: typeof import('vue').toRaw
51
+ const toRef: typeof import('vue').toRef
52
+ const toRefs: typeof import('vue').toRefs
53
+ const toValue: typeof import('vue').toValue
54
+ const triggerRef: typeof import('vue').triggerRef
55
+ const unref: typeof import('vue').unref
56
+ const useAttrs: typeof import('vue').useAttrs
57
+ const useCssModule: typeof import('vue').useCssModule
58
+ const useCssVars: typeof import('vue').useCssVars
59
+ const useId: typeof import('vue').useId
60
+ const useModel: typeof import('vue').useModel
61
+ const useSlots: typeof import('vue').useSlots
62
+ const useTemplateRef: typeof import('vue').useTemplateRef
63
+ const watch: typeof import('vue').watch
64
+ const watchEffect: typeof import('vue').watchEffect
65
+ const watchPostEffect: typeof import('vue').watchPostEffect
66
+ const watchSyncEffect: typeof import('vue').watchSyncEffect
67
+ }
68
+ // for type re-export
69
+ declare global {
70
+ // @ts-ignore
71
+ export type { Component, Slot, Slots, ComponentPublicInstance, ComputedRef, DirectiveBinding, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, ShallowRef, MaybeRef, MaybeRefOrGetter, VNode, WritableComputedRef } from 'vue'
72
+ import('vue')
73
+ }
@@ -0,0 +1,312 @@
1
+ /* eslint-disable */
2
+ // @ts-nocheck
3
+ // biome-ignore lint: disable
4
+ // oxlint-disable
5
+ // ------
6
+ // Generated by unplugin-vue-components
7
+ // Read more: https://github.com/vuejs/core/pull/3399
8
+
9
+ export {}
10
+
11
+ /* prettier-ignore */
12
+ declare module 'vue' {
13
+ export interface GlobalComponents {
14
+ Alert: typeof import('./src/components/ui/alert/Alert.vue')['default']
15
+ AlertDescription: typeof import('./src/components/ui/alert/AlertDescription.vue')['default']
16
+ AlertTitle: typeof import('./src/components/ui/alert/AlertTitle.vue')['default']
17
+ Animated: typeof import('./src/components/ai-elements/edge/Animated.vue')['default']
18
+ Artifact: typeof import('./src/components/ai-elements/artifact/Artifact.vue')['default']
19
+ ArtifactAction: typeof import('./src/components/ai-elements/artifact/ArtifactAction.vue')['default']
20
+ ArtifactActions: typeof import('./src/components/ai-elements/artifact/ArtifactActions.vue')['default']
21
+ ArtifactClose: typeof import('./src/components/ai-elements/artifact/ArtifactClose.vue')['default']
22
+ ArtifactContent: typeof import('./src/components/ai-elements/artifact/ArtifactContent.vue')['default']
23
+ ArtifactDescription: typeof import('./src/components/ai-elements/artifact/ArtifactDescription.vue')['default']
24
+ ArtifactHeader: typeof import('./src/components/ai-elements/artifact/ArtifactHeader.vue')['default']
25
+ ArtifactTitle: typeof import('./src/components/ai-elements/artifact/ArtifactTitle.vue')['default']
26
+ Avatar: typeof import('./src/components/ui/avatar/Avatar.vue')['default']
27
+ AvatarFallback: typeof import('./src/components/ui/avatar/AvatarFallback.vue')['default']
28
+ AvatarImage: typeof import('./src/components/ui/avatar/AvatarImage.vue')['default']
29
+ Badge: typeof import('./src/components/ui/badge/Badge.vue')['default']
30
+ Button: typeof import('./src/components/ui/button/Button.vue')['default']
31
+ ButtonGroup: typeof import('./src/components/ui/button-group/ButtonGroup.vue')['default']
32
+ ButtonGroupSeparator: typeof import('./src/components/ui/button-group/ButtonGroupSeparator.vue')['default']
33
+ ButtonGroupText: typeof import('./src/components/ui/button-group/ButtonGroupText.vue')['default']
34
+ Canvas: typeof import('./src/components/ai-elements/canvas/Canvas.vue')['default']
35
+ Card: typeof import('./src/components/ui/card/Card.vue')['default']
36
+ CardAction: typeof import('./src/components/ui/card/CardAction.vue')['default']
37
+ CardContent: typeof import('./src/components/ui/card/CardContent.vue')['default']
38
+ CardDescription: typeof import('./src/components/ui/card/CardDescription.vue')['default']
39
+ CardFooter: typeof import('./src/components/ui/card/CardFooter.vue')['default']
40
+ CardHeader: typeof import('./src/components/ui/card/CardHeader.vue')['default']
41
+ CardTitle: typeof import('./src/components/ui/card/CardTitle.vue')['default']
42
+ Carousel: typeof import('./src/components/ui/carousel/Carousel.vue')['default']
43
+ CarouselContent: typeof import('./src/components/ui/carousel/CarouselContent.vue')['default']
44
+ CarouselItem: typeof import('./src/components/ui/carousel/CarouselItem.vue')['default']
45
+ CarouselNext: typeof import('./src/components/ui/carousel/CarouselNext.vue')['default']
46
+ CarouselPrevious: typeof import('./src/components/ui/carousel/CarouselPrevious.vue')['default']
47
+ ChainOfThought: typeof import('./src/components/ai-elements/chain-of-thought/ChainOfThought.vue')['default']
48
+ ChainOfThoughtContent: typeof import('./src/components/ai-elements/chain-of-thought/ChainOfThoughtContent.vue')['default']
49
+ ChainOfThoughtHeader: typeof import('./src/components/ai-elements/chain-of-thought/ChainOfThoughtHeader.vue')['default']
50
+ ChainOfThoughtImage: typeof import('./src/components/ai-elements/chain-of-thought/ChainOfThoughtImage.vue')['default']
51
+ ChainOfThoughtSearchResult: typeof import('./src/components/ai-elements/chain-of-thought/ChainOfThoughtSearchResult.vue')['default']
52
+ ChainOfThoughtSearchResults: typeof import('./src/components/ai-elements/chain-of-thought/ChainOfThoughtSearchResults.vue')['default']
53
+ ChainOfThoughtStep: typeof import('./src/components/ai-elements/chain-of-thought/ChainOfThoughtStep.vue')['default']
54
+ ChatConversation: typeof import('./src/components/ChatConversation/ChatConversation.vue')['default']
55
+ ChatGPT: typeof import('./src/components/ai-elements/open-in-chat/providers/icons/ChatGPT.vue')['default']
56
+ ChatPromptInputProvider: typeof import('./src/components/ChatPromptInputProvider/ChatPromptInputProvider.vue')['default']
57
+ Checkpoint: typeof import('./src/components/ai-elements/checkpoint/Checkpoint.vue')['default']
58
+ CheckpointIcon: typeof import('./src/components/ai-elements/checkpoint/CheckpointIcon.vue')['default']
59
+ CheckpointTrigger: typeof import('./src/components/ai-elements/checkpoint/CheckpointTrigger.vue')['default']
60
+ Claude: typeof import('./src/components/ai-elements/open-in-chat/providers/icons/Claude.vue')['default']
61
+ CodeBlock: typeof import('./src/components/ai-elements/code-block/CodeBlock.vue')['default']
62
+ CodeBlockCopyButton: typeof import('./src/components/ai-elements/code-block/CodeBlockCopyButton.vue')['default']
63
+ Collapsible: typeof import('./src/components/ui/collapsible/Collapsible.vue')['default']
64
+ CollapsibleContent: typeof import('./src/components/ui/collapsible/CollapsibleContent.vue')['default']
65
+ CollapsibleTrigger: typeof import('./src/components/ui/collapsible/CollapsibleTrigger.vue')['default']
66
+ Command: typeof import('./src/components/ui/command/Command.vue')['default']
67
+ CommandDialog: typeof import('./src/components/ui/command/CommandDialog.vue')['default']
68
+ CommandEmpty: typeof import('./src/components/ui/command/CommandEmpty.vue')['default']
69
+ CommandGroup: typeof import('./src/components/ui/command/CommandGroup.vue')['default']
70
+ CommandInput: typeof import('./src/components/ui/command/CommandInput.vue')['default']
71
+ CommandItem: typeof import('./src/components/ui/command/CommandItem.vue')['default']
72
+ CommandList: typeof import('./src/components/ui/command/CommandList.vue')['default']
73
+ CommandSeparator: typeof import('./src/components/ui/command/CommandSeparator.vue')['default']
74
+ CommandShortcut: typeof import('./src/components/ui/command/CommandShortcut.vue')['default']
75
+ Confirmation: typeof import('./src/components/ai-elements/confirmation/Confirmation.vue')['default']
76
+ ConfirmationAccepted: typeof import('./src/components/ai-elements/confirmation/ConfirmationAccepted.vue')['default']
77
+ ConfirmationAction: typeof import('./src/components/ai-elements/confirmation/ConfirmationAction.vue')['default']
78
+ ConfirmationActions: typeof import('./src/components/ai-elements/confirmation/ConfirmationActions.vue')['default']
79
+ ConfirmationRejected: typeof import('./src/components/ai-elements/confirmation/ConfirmationRejected.vue')['default']
80
+ ConfirmationRequest: typeof import('./src/components/ai-elements/confirmation/ConfirmationRequest.vue')['default']
81
+ ConfirmationTitle: typeof import('./src/components/ai-elements/confirmation/ConfirmationTitle.vue')['default']
82
+ Connection: typeof import('./src/components/ai-elements/connection/Connection.vue')['default']
83
+ Context: typeof import('./src/components/ai-elements/context/Context.vue')['default']
84
+ ContextCacheUsage: typeof import('./src/components/ai-elements/context/ContextCacheUsage.vue')['default']
85
+ ContextContent: typeof import('./src/components/ai-elements/context/ContextContent.vue')['default']
86
+ ContextContentBody: typeof import('./src/components/ai-elements/context/ContextContentBody.vue')['default']
87
+ ContextContentFooter: typeof import('./src/components/ai-elements/context/ContextContentFooter.vue')['default']
88
+ ContextContentHeader: typeof import('./src/components/ai-elements/context/ContextContentHeader.vue')['default']
89
+ ContextIcon: typeof import('./src/components/ai-elements/context/ContextIcon.vue')['default']
90
+ ContextInputUsage: typeof import('./src/components/ai-elements/context/ContextInputUsage.vue')['default']
91
+ ContextOutputUsage: typeof import('./src/components/ai-elements/context/ContextOutputUsage.vue')['default']
92
+ ContextReasoningUsage: typeof import('./src/components/ai-elements/context/ContextReasoningUsage.vue')['default']
93
+ ContextTrigger: typeof import('./src/components/ai-elements/context/ContextTrigger.vue')['default']
94
+ Controls: typeof import('./src/components/ai-elements/controls/Controls.vue')['default']
95
+ Conversation: typeof import('./src/components/ai-elements/conversation/Conversation.vue')['default']
96
+ ConversationContent: typeof import('./src/components/ai-elements/conversation/ConversationContent.vue')['default']
97
+ ConversationEmptyState: typeof import('./src/components/ai-elements/conversation/ConversationEmptyState.vue')['default']
98
+ ConversationScrollButton: typeof import('./src/components/ai-elements/conversation/ConversationScrollButton.vue')['default']
99
+ Cursor: typeof import('./src/components/ai-elements/open-in-chat/providers/icons/Cursor.vue')['default']
100
+ Dialog: typeof import('./src/components/ui/dialog/Dialog.vue')['default']
101
+ DialogClose: typeof import('./src/components/ui/dialog/DialogClose.vue')['default']
102
+ DialogContent: typeof import('./src/components/ui/dialog/DialogContent.vue')['default']
103
+ DialogDescription: typeof import('./src/components/ui/dialog/DialogDescription.vue')['default']
104
+ DialogFooter: typeof import('./src/components/ui/dialog/DialogFooter.vue')['default']
105
+ DialogHeader: typeof import('./src/components/ui/dialog/DialogHeader.vue')['default']
106
+ DialogOverlay: typeof import('./src/components/ui/dialog/DialogOverlay.vue')['default']
107
+ DialogScrollContent: typeof import('./src/components/ui/dialog/DialogScrollContent.vue')['default']
108
+ DialogTitle: typeof import('./src/components/ui/dialog/DialogTitle.vue')['default']
109
+ DialogTrigger: typeof import('./src/components/ui/dialog/DialogTrigger.vue')['default']
110
+ DropdownMenu: typeof import('./src/components/ui/dropdown-menu/DropdownMenu.vue')['default']
111
+ DropdownMenuCheckboxItem: typeof import('./src/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue')['default']
112
+ DropdownMenuContent: typeof import('./src/components/ui/dropdown-menu/DropdownMenuContent.vue')['default']
113
+ DropdownMenuGroup: typeof import('./src/components/ui/dropdown-menu/DropdownMenuGroup.vue')['default']
114
+ DropdownMenuItem: typeof import('./src/components/ui/dropdown-menu/DropdownMenuItem.vue')['default']
115
+ DropdownMenuLabel: typeof import('./src/components/ui/dropdown-menu/DropdownMenuLabel.vue')['default']
116
+ DropdownMenuRadioGroup: typeof import('./src/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue')['default']
117
+ DropdownMenuRadioItem: typeof import('./src/components/ui/dropdown-menu/DropdownMenuRadioItem.vue')['default']
118
+ DropdownMenuSeparator: typeof import('./src/components/ui/dropdown-menu/DropdownMenuSeparator.vue')['default']
119
+ DropdownMenuShortcut: typeof import('./src/components/ui/dropdown-menu/DropdownMenuShortcut.vue')['default']
120
+ DropdownMenuSub: typeof import('./src/components/ui/dropdown-menu/DropdownMenuSub.vue')['default']
121
+ DropdownMenuSubContent: typeof import('./src/components/ui/dropdown-menu/DropdownMenuSubContent.vue')['default']
122
+ DropdownMenuSubTrigger: typeof import('./src/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue')['default']
123
+ DropdownMenuTrigger: typeof import('./src/components/ui/dropdown-menu/DropdownMenuTrigger.vue')['default']
124
+ Github: typeof import('./src/components/ai-elements/open-in-chat/providers/icons/Github.vue')['default']
125
+ HoverCard: typeof import('./src/components/ui/hover-card/HoverCard.vue')['default']
126
+ HoverCardContent: typeof import('./src/components/ui/hover-card/HoverCardContent.vue')['default']
127
+ HoverCardTrigger: typeof import('./src/components/ui/hover-card/HoverCardTrigger.vue')['default']
128
+ Image: typeof import('./src/components/ai-elements/image/Image.vue')['default']
129
+ InlineCitation: typeof import('./src/components/ai-elements/inline-citation/InlineCitation.vue')['default']
130
+ InlineCitationCard: typeof import('./src/components/ai-elements/inline-citation/InlineCitationCard.vue')['default']
131
+ InlineCitationCardBody: typeof import('./src/components/ai-elements/inline-citation/InlineCitationCardBody.vue')['default']
132
+ InlineCitationCardTrigger: typeof import('./src/components/ai-elements/inline-citation/InlineCitationCardTrigger.vue')['default']
133
+ InlineCitationCarousel: typeof import('./src/components/ai-elements/inline-citation/InlineCitationCarousel.vue')['default']
134
+ InlineCitationCarouselContent: typeof import('./src/components/ai-elements/inline-citation/InlineCitationCarouselContent.vue')['default']
135
+ InlineCitationCarouselHeader: typeof import('./src/components/ai-elements/inline-citation/InlineCitationCarouselHeader.vue')['default']
136
+ InlineCitationCarouselIndex: typeof import('./src/components/ai-elements/inline-citation/InlineCitationCarouselIndex.vue')['default']
137
+ InlineCitationCarouselItem: typeof import('./src/components/ai-elements/inline-citation/InlineCitationCarouselItem.vue')['default']
138
+ InlineCitationCarouselNext: typeof import('./src/components/ai-elements/inline-citation/InlineCitationCarouselNext.vue')['default']
139
+ InlineCitationCarouselPrev: typeof import('./src/components/ai-elements/inline-citation/InlineCitationCarouselPrev.vue')['default']
140
+ InlineCitationQuote: typeof import('./src/components/ai-elements/inline-citation/InlineCitationQuote.vue')['default']
141
+ InlineCitationSource: typeof import('./src/components/ai-elements/inline-citation/InlineCitationSource.vue')['default']
142
+ InlineCitationText: typeof import('./src/components/ai-elements/inline-citation/InlineCitationText.vue')['default']
143
+ Input: typeof import('./src/components/ui/input/Input.vue')['default']
144
+ InputGroup: typeof import('./src/components/ui/input-group/InputGroup.vue')['default']
145
+ InputGroupAddon: typeof import('./src/components/ui/input-group/InputGroupAddon.vue')['default']
146
+ InputGroupButton: typeof import('./src/components/ui/input-group/InputGroupButton.vue')['default']
147
+ InputGroupInput: typeof import('./src/components/ui/input-group/InputGroupInput.vue')['default']
148
+ InputGroupText: typeof import('./src/components/ui/input-group/InputGroupText.vue')['default']
149
+ InputGroupTextarea: typeof import('./src/components/ui/input-group/InputGroupTextarea.vue')['default']
150
+ Loader: typeof import('./src/components/ai-elements/loader/Loader.vue')['default']
151
+ LoaderIcon: typeof import('./src/components/ai-elements/loader/LoaderIcon.vue')['default']
152
+ Message: typeof import('./src/components/ai-elements/message/Message.vue')['default']
153
+ MessageAction: typeof import('./src/components/ai-elements/message/MessageAction.vue')['default']
154
+ MessageActions: typeof import('./src/components/ai-elements/message/MessageActions.vue')['default']
155
+ MessageAttachment: typeof import('./src/components/ai-elements/message/MessageAttachment.vue')['default']
156
+ MessageAttachments: typeof import('./src/components/ai-elements/message/MessageAttachments.vue')['default']
157
+ MessageAvatar: typeof import('./src/components/ai-elements/message/MessageAvatar.vue')['default']
158
+ MessageBranch: typeof import('./src/components/ai-elements/message/MessageBranch.vue')['default']
159
+ MessageBranchContent: typeof import('./src/components/ai-elements/message/MessageBranchContent.vue')['default']
160
+ MessageBranchNext: typeof import('./src/components/ai-elements/message/MessageBranchNext.vue')['default']
161
+ MessageBranchPage: typeof import('./src/components/ai-elements/message/MessageBranchPage.vue')['default']
162
+ MessageBranchPrevious: typeof import('./src/components/ai-elements/message/MessageBranchPrevious.vue')['default']
163
+ MessageBranchSelector: typeof import('./src/components/ai-elements/message/MessageBranchSelector.vue')['default']
164
+ MessageContent: typeof import('./src/components/ai-elements/message/MessageContent.vue')['default']
165
+ MessageResponse: typeof import('./src/components/ai-elements/message/MessageResponse.vue')['default']
166
+ MessageToolbar: typeof import('./src/components/ai-elements/message/MessageToolbar.vue')['default']
167
+ ModelSelector: typeof import('./src/components/ai-elements/model-selector/ModelSelector.vue')['default']
168
+ ModelSelectorContent: typeof import('./src/components/ai-elements/model-selector/ModelSelectorContent.vue')['default']
169
+ ModelSelectorDialog: typeof import('./src/components/ai-elements/model-selector/ModelSelectorDialog.vue')['default']
170
+ ModelSelectorEmpty: typeof import('./src/components/ai-elements/model-selector/ModelSelectorEmpty.vue')['default']
171
+ ModelSelectorGroup: typeof import('./src/components/ai-elements/model-selector/ModelSelectorGroup.vue')['default']
172
+ ModelSelectorInput: typeof import('./src/components/ai-elements/model-selector/ModelSelectorInput.vue')['default']
173
+ ModelSelectorItem: typeof import('./src/components/ai-elements/model-selector/ModelSelectorItem.vue')['default']
174
+ ModelSelectorList: typeof import('./src/components/ai-elements/model-selector/ModelSelectorList.vue')['default']
175
+ ModelSelectorLogo: typeof import('./src/components/ai-elements/model-selector/ModelSelectorLogo.vue')['default']
176
+ ModelSelectorLogoGroup: typeof import('./src/components/ai-elements/model-selector/ModelSelectorLogoGroup.vue')['default']
177
+ ModelSelectorName: typeof import('./src/components/ai-elements/model-selector/ModelSelectorName.vue')['default']
178
+ ModelSelectorSeparator: typeof import('./src/components/ai-elements/model-selector/ModelSelectorSeparator.vue')['default']
179
+ ModelSelectorShortcut: typeof import('./src/components/ai-elements/model-selector/ModelSelectorShortcut.vue')['default']
180
+ ModelSelectorTrigger: typeof import('./src/components/ai-elements/model-selector/ModelSelectorTrigger.vue')['default']
181
+ Node: typeof import('./src/components/ai-elements/node/Node.vue')['default']
182
+ NodeAction: typeof import('./src/components/ai-elements/node/NodeAction.vue')['default']
183
+ NodeContent: typeof import('./src/components/ai-elements/node/NodeContent.vue')['default']
184
+ NodeDescription: typeof import('./src/components/ai-elements/node/NodeDescription.vue')['default']
185
+ NodeFooter: typeof import('./src/components/ai-elements/node/NodeFooter.vue')['default']
186
+ NodeHeader: typeof import('./src/components/ai-elements/node/NodeHeader.vue')['default']
187
+ NodeTitle: typeof import('./src/components/ai-elements/node/NodeTitle.vue')['default']
188
+ OpenIn: typeof import('./src/components/ai-elements/open-in-chat/OpenIn.vue')['default']
189
+ OpenInChatGPT: typeof import('./src/components/ai-elements/open-in-chat/providers/items/OpenInChatGPT.vue')['default']
190
+ OpenInClaude: typeof import('./src/components/ai-elements/open-in-chat/providers/items/OpenInClaude.vue')['default']
191
+ OpenInContent: typeof import('./src/components/ai-elements/open-in-chat/OpenInContent.vue')['default']
192
+ OpenInCursor: typeof import('./src/components/ai-elements/open-in-chat/providers/items/OpenInCursor.vue')['default']
193
+ OpenInItemLink: typeof import('./src/components/ai-elements/open-in-chat/OpenInItemLink.vue')['default']
194
+ OpenInScira: typeof import('./src/components/ai-elements/open-in-chat/providers/items/OpenInScira.vue')['default']
195
+ OpenInT3: typeof import('./src/components/ai-elements/open-in-chat/providers/items/OpenInT3.vue')['default']
196
+ OpenInTrigger: typeof import('./src/components/ai-elements/open-in-chat/OpenInTrigger.vue')['default']
197
+ OpenInv0: typeof import('./src/components/ai-elements/open-in-chat/providers/items/OpenInv0.vue')['default']
198
+ Panel: typeof import('./src/components/ai-elements/panel/Panel.vue')['default']
199
+ Plan: typeof import('./src/components/ai-elements/plan/Plan.vue')['default']
200
+ PlanAction: typeof import('./src/components/ai-elements/plan/PlanAction.vue')['default']
201
+ PlanContent: typeof import('./src/components/ai-elements/plan/PlanContent.vue')['default']
202
+ PlanDescription: typeof import('./src/components/ai-elements/plan/PlanDescription.vue')['default']
203
+ PlanFooter: typeof import('./src/components/ai-elements/plan/PlanFooter.vue')['default']
204
+ PlanHeader: typeof import('./src/components/ai-elements/plan/PlanHeader.vue')['default']
205
+ PlanTitle: typeof import('./src/components/ai-elements/plan/PlanTitle.vue')['default']
206
+ PlanTrigger: typeof import('./src/components/ai-elements/plan/PlanTrigger.vue')['default']
207
+ Progress: typeof import('./src/components/ui/progress/Progress.vue')['default']
208
+ PromptInput: typeof import('./src/components/ai-elements/prompt-input/PromptInput.vue')['default']
209
+ PromptInputActionAddAttachments: typeof import('./src/components/ai-elements/prompt-input/PromptInputActionAddAttachments.vue')['default']
210
+ PromptInputActionMenu: typeof import('./src/components/ai-elements/prompt-input/PromptInputActionMenu.vue')['default']
211
+ PromptInputActionMenuContent: typeof import('./src/components/ai-elements/prompt-input/PromptInputActionMenuContent.vue')['default']
212
+ PromptInputActionMenuItem: typeof import('./src/components/ai-elements/prompt-input/PromptInputActionMenuItem.vue')['default']
213
+ PromptInputActionMenuTrigger: typeof import('./src/components/ai-elements/prompt-input/PromptInputActionMenuTrigger.vue')['default']
214
+ PromptInputAttachment: typeof import('./src/components/ai-elements/prompt-input/PromptInputAttachment.vue')['default']
215
+ PromptInputAttachments: typeof import('./src/components/ai-elements/prompt-input/PromptInputAttachments.vue')['default']
216
+ PromptInputBody: typeof import('./src/components/ai-elements/prompt-input/PromptInputBody.vue')['default']
217
+ PromptInputButton: typeof import('./src/components/ai-elements/prompt-input/PromptInputButton.vue')['default']
218
+ PromptInputCommand: typeof import('./src/components/ai-elements/prompt-input/PromptInputCommand.vue')['default']
219
+ PromptInputCommandEmpty: typeof import('./src/components/ai-elements/prompt-input/PromptInputCommandEmpty.vue')['default']
220
+ PromptInputCommandGroup: typeof import('./src/components/ai-elements/prompt-input/PromptInputCommandGroup.vue')['default']
221
+ PromptInputCommandInput: typeof import('./src/components/ai-elements/prompt-input/PromptInputCommandInput.vue')['default']
222
+ PromptInputCommandItem: typeof import('./src/components/ai-elements/prompt-input/PromptInputCommandItem.vue')['default']
223
+ PromptInputCommandList: typeof import('./src/components/ai-elements/prompt-input/PromptInputCommandList.vue')['default']
224
+ PromptInputCommandSeparator: typeof import('./src/components/ai-elements/prompt-input/PromptInputCommandSeparator.vue')['default']
225
+ PromptInputFooter: typeof import('./src/components/ai-elements/prompt-input/PromptInputFooter.vue')['default']
226
+ PromptInputHeader: typeof import('./src/components/ai-elements/prompt-input/PromptInputHeader.vue')['default']
227
+ PromptInputHoverCard: typeof import('./src/components/ai-elements/prompt-input/PromptInputHoverCard.vue')['default']
228
+ PromptInputHoverCardContent: typeof import('./src/components/ai-elements/prompt-input/PromptInputHoverCardContent.vue')['default']
229
+ PromptInputHoverCardTrigger: typeof import('./src/components/ai-elements/prompt-input/PromptInputHoverCardTrigger.vue')['default']
230
+ PromptInputProvider: typeof import('./src/components/ai-elements/prompt-input/PromptInputProvider.vue')['default']
231
+ PromptInputSelect: typeof import('./src/components/ai-elements/prompt-input/PromptInputSelect.vue')['default']
232
+ PromptInputSelectContent: typeof import('./src/components/ai-elements/prompt-input/PromptInputSelectContent.vue')['default']
233
+ PromptInputSelectItem: typeof import('./src/components/ai-elements/prompt-input/PromptInputSelectItem.vue')['default']
234
+ PromptInputSelectTrigger: typeof import('./src/components/ai-elements/prompt-input/PromptInputSelectTrigger.vue')['default']
235
+ PromptInputSelectValue: typeof import('./src/components/ai-elements/prompt-input/PromptInputSelectValue.vue')['default']
236
+ PromptInputSpeechButton: typeof import('./src/components/ai-elements/prompt-input/PromptInputSpeechButton.vue')['default']
237
+ PromptInputSubmit: typeof import('./src/components/ai-elements/prompt-input/PromptInputSubmit.vue')['default']
238
+ PromptInputTab: typeof import('./src/components/ai-elements/prompt-input/PromptInputTab.vue')['default']
239
+ PromptInputTabBody: typeof import('./src/components/ai-elements/prompt-input/PromptInputTabBody.vue')['default']
240
+ PromptInputTabItem: typeof import('./src/components/ai-elements/prompt-input/PromptInputTabItem.vue')['default']
241
+ PromptInputTabLabel: typeof import('./src/components/ai-elements/prompt-input/PromptInputTabLabel.vue')['default']
242
+ PromptInputTabsList: typeof import('./src/components/ai-elements/prompt-input/PromptInputTabsList.vue')['default']
243
+ PromptInputTextarea: typeof import('./src/components/ai-elements/prompt-input/PromptInputTextarea.vue')['default']
244
+ PromptInputTools: typeof import('./src/components/ai-elements/prompt-input/PromptInputTools.vue')['default']
245
+ Queue: typeof import('./src/components/ai-elements/queue/Queue.vue')['default']
246
+ QueueItem: typeof import('./src/components/ai-elements/queue/QueueItem.vue')['default']
247
+ QueueItemAction: typeof import('./src/components/ai-elements/queue/QueueItemAction.vue')['default']
248
+ QueueItemActions: typeof import('./src/components/ai-elements/queue/QueueItemActions.vue')['default']
249
+ QueueItemAttachment: typeof import('./src/components/ai-elements/queue/QueueItemAttachment.vue')['default']
250
+ QueueItemContent: typeof import('./src/components/ai-elements/queue/QueueItemContent.vue')['default']
251
+ QueueItemDescription: typeof import('./src/components/ai-elements/queue/QueueItemDescription.vue')['default']
252
+ QueueItemFile: typeof import('./src/components/ai-elements/queue/QueueItemFile.vue')['default']
253
+ QueueItemImage: typeof import('./src/components/ai-elements/queue/QueueItemImage.vue')['default']
254
+ QueueItemIndicator: typeof import('./src/components/ai-elements/queue/QueueItemIndicator.vue')['default']
255
+ QueueList: typeof import('./src/components/ai-elements/queue/QueueList.vue')['default']
256
+ QueueSection: typeof import('./src/components/ai-elements/queue/QueueSection.vue')['default']
257
+ QueueSectionContent: typeof import('./src/components/ai-elements/queue/QueueSectionContent.vue')['default']
258
+ QueueSectionLabel: typeof import('./src/components/ai-elements/queue/QueueSectionLabel.vue')['default']
259
+ QueueSectionTrigger: typeof import('./src/components/ai-elements/queue/QueueSectionTrigger.vue')['default']
260
+ Reasoning: typeof import('./src/components/ai-elements/reasoning/Reasoning.vue')['default']
261
+ ReasoningContent: typeof import('./src/components/ai-elements/reasoning/ReasoningContent.vue')['default']
262
+ ReasoningTrigger: typeof import('./src/components/ai-elements/reasoning/ReasoningTrigger.vue')['default']
263
+ Scira: typeof import('./src/components/ai-elements/open-in-chat/providers/icons/Scira.vue')['default']
264
+ ScrollArea: typeof import('./src/components/ui/scroll-area/ScrollArea.vue')['default']
265
+ ScrollBar: typeof import('./src/components/ui/scroll-area/ScrollBar.vue')['default']
266
+ Select: typeof import('./src/components/ui/select/Select.vue')['default']
267
+ SelectContent: typeof import('./src/components/ui/select/SelectContent.vue')['default']
268
+ SelectGroup: typeof import('./src/components/ui/select/SelectGroup.vue')['default']
269
+ SelectItem: typeof import('./src/components/ui/select/SelectItem.vue')['default']
270
+ SelectItemText: typeof import('./src/components/ui/select/SelectItemText.vue')['default']
271
+ SelectLabel: typeof import('./src/components/ui/select/SelectLabel.vue')['default']
272
+ SelectScrollDownButton: typeof import('./src/components/ui/select/SelectScrollDownButton.vue')['default']
273
+ SelectScrollUpButton: typeof import('./src/components/ui/select/SelectScrollUpButton.vue')['default']
274
+ SelectSeparator: typeof import('./src/components/ui/select/SelectSeparator.vue')['default']
275
+ SelectTrigger: typeof import('./src/components/ui/select/SelectTrigger.vue')['default']
276
+ SelectValue: typeof import('./src/components/ui/select/SelectValue.vue')['default']
277
+ Separator: typeof import('./src/components/ui/separator/Separator.vue')['default']
278
+ Shimmer: typeof import('./src/components/ai-elements/shimmer/Shimmer.vue')['default']
279
+ Source: typeof import('./src/components/ai-elements/sources/Source.vue')['default']
280
+ Sources: typeof import('./src/components/ai-elements/sources/Sources.vue')['default']
281
+ SourcesContent: typeof import('./src/components/ai-elements/sources/SourcesContent.vue')['default']
282
+ SourcesTrigger: typeof import('./src/components/ai-elements/sources/SourcesTrigger.vue')['default']
283
+ Suggestion: typeof import('./src/components/ai-elements/suggestion/Suggestion.vue')['default']
284
+ Suggestions: typeof import('./src/components/ai-elements/suggestion/Suggestions.vue')['default']
285
+ Task: typeof import('./src/components/ai-elements/task/Task.vue')['default']
286
+ TaskContent: typeof import('./src/components/ai-elements/task/TaskContent.vue')['default']
287
+ TaskItem: typeof import('./src/components/ai-elements/task/TaskItem.vue')['default']
288
+ TaskItemFile: typeof import('./src/components/ai-elements/task/TaskItemFile.vue')['default']
289
+ TaskTrigger: typeof import('./src/components/ai-elements/task/TaskTrigger.vue')['default']
290
+ Temporary: typeof import('./src/components/ai-elements/edge/Temporary.vue')['default']
291
+ Textarea: typeof import('./src/components/ui/textarea/Textarea.vue')['default']
292
+ TokensWithCost: typeof import('./src/components/ai-elements/context/TokensWithCost.vue')['default']
293
+ Tool: typeof import('./src/components/ai-elements/tool/Tool.vue')['default']
294
+ Toolbar: typeof import('./src/components/ai-elements/toolbar/Toolbar.vue')['default']
295
+ ToolContent: typeof import('./src/components/ai-elements/tool/ToolContent.vue')['default']
296
+ ToolHeader: typeof import('./src/components/ai-elements/tool/ToolHeader.vue')['default']
297
+ ToolInput: typeof import('./src/components/ai-elements/tool/ToolInput.vue')['default']
298
+ ToolOutput: typeof import('./src/components/ai-elements/tool/ToolOutput.vue')['default']
299
+ ToolStatusBadge: typeof import('./src/components/ai-elements/tool/ToolStatusBadge.vue')['default']
300
+ Tooltip: typeof import('./src/components/ui/tooltip/Tooltip.vue')['default']
301
+ TooltipContent: typeof import('./src/components/ui/tooltip/TooltipContent.vue')['default']
302
+ TooltipProvider: typeof import('./src/components/ui/tooltip/TooltipProvider.vue')['default']
303
+ TooltipTrigger: typeof import('./src/components/ui/tooltip/TooltipTrigger.vue')['default']
304
+ V0: typeof import('./src/components/ai-elements/open-in-chat/providers/icons/V0.vue')['default']
305
+ WebPreview: typeof import('./src/components/ai-elements/web-preview/WebPreview.vue')['default']
306
+ WebPreviewBody: typeof import('./src/components/ai-elements/web-preview/WebPreviewBody.vue')['default']
307
+ WebPreviewConsole: typeof import('./src/components/ai-elements/web-preview/WebPreviewConsole.vue')['default']
308
+ WebPreviewNavigation: typeof import('./src/components/ai-elements/web-preview/WebPreviewNavigation.vue')['default']
309
+ WebPreviewNavigationButton: typeof import('./src/components/ai-elements/web-preview/WebPreviewNavigationButton.vue')['default']
310
+ WebPreviewUrl: typeof import('./src/components/ai-elements/web-preview/WebPreviewUrl.vue')['default']
311
+ }
312
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "$schema": "https://shadcn-vue.com/schema.json",
3
+ "style": "new-york",
4
+ "typescript": true,
5
+ "tailwind": {
6
+ "config": "",
7
+ "css": "src/style.css",
8
+ "baseColor": "neutral",
9
+ "cssVariables": true,
10
+ "prefix": ""
11
+ },
12
+ "iconLibrary": "lucide",
13
+ "aliases": {
14
+ "components": "@/components",
15
+ "utils": "@/lib/utils",
16
+ "ui": "@/components/ui",
17
+ "lib": "@/lib",
18
+ "composables": "@/composables"
19
+ },
20
+ "registries": {}
21
+ }
package/index.html ADDED
@@ -0,0 +1,13 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <link rel="icon" type="image/svg+xml" href="/vite.svg" />
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
+ <title>vue-template</title>
8
+ </head>
9
+ <body>
10
+ <div id="app"></div>
11
+ <script type="module" src="/src/main.ts"></script>
12
+ </body>
13
+ </html>
package/package.json ADDED
@@ -0,0 +1,60 @@
1
+ {
2
+ "name": "@wzh-/ai-chat-example",
3
+ "private": false,
4
+ "version": "1.0.0",
5
+ "type": "module",
6
+ "main": "index.ts",
7
+ "scripts": {
8
+ "dev": "vite",
9
+ "build": "vue-tsc -b && vite build",
10
+ "preview": "vite preview",
11
+ "pub":"npm publish"
12
+ },
13
+ "publishConfig": {
14
+ "access": "public"
15
+ },
16
+ "dependencies": {
17
+ "@ai-sdk/vue": "^3.0.1",
18
+ "@tailwindcss/vite": "^4.1.18",
19
+ "@vue-flow/background": "^1.3.2",
20
+ "@vue-flow/controls": "^1.1.3",
21
+ "@vue-flow/core": "^1.48.0",
22
+ "@vue-flow/node-toolbar": "^1.1.1",
23
+ "@vueuse/core": "^14.1.0",
24
+ "ai": "^6.0.1",
25
+ "class-variance-authority": "^0.7.1",
26
+ "clsx": "^2.1.1",
27
+ "embla-carousel-vue": "^8.6.0",
28
+ "lucide-vue-next": "^0.561.0",
29
+ "motion-v": "^1.7.4",
30
+ "nanoid": "^5.1.6",
31
+ "reka-ui": "^2.6.1",
32
+ "shiki": "^3.20.0",
33
+ "streamdown-vue": "^1.0.29",
34
+ "tailwind-merge": "^3.4.0",
35
+ "tailwindcss": "^4.1.18",
36
+ "tokenlens": "^1.3.1",
37
+ "vue": "^3.5.24",
38
+ "vue-stick-to-bottom": "^0.1.0",
39
+ "zod": "^4.2.1",
40
+ "axios": "^1.6.5"
41
+ },
42
+ "devDependencies": {
43
+ "@types/node": "^24.10.1",
44
+ "@vitejs/plugin-vue": "^6.0.1",
45
+ "@vue/tsconfig": "^0.8.1",
46
+ "tw-animate-css": "^1.4.0",
47
+ "typescript": "~5.9.3",
48
+ "unplugin-auto-import": "^20.3.0",
49
+ "unplugin-vue-components": "^30.0.0",
50
+ "vite": "npm:rolldown-vite@7.2.5",
51
+ "vite-tsconfig-paths": "^6.0.1",
52
+ "vue-tsc": "^3.1.4"
53
+ },
54
+ "pnpm": {
55
+ "overrides": {
56
+ "vite": "npm:rolldown-vite@7.2.5"
57
+ }
58
+ },
59
+ "packageManager": "pnpm@10.12.1+sha512.f0dda8580f0ee9481c5c79a1d927b9164f2c478e90992ad268bbb2465a736984391d6333d2c327913578b2804af33474ca554ba29c04a8b13060a717675ae3ac"
60
+ }
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>
package/src/App.vue ADDED
@@ -0,0 +1,68 @@
1
+ <script setup lang="ts">
2
+ import {
3
+
4
+ type DataUIPart,
5
+ type ToolUIPart,
6
+ type UIDataTypes,
7
+ type UIMessagePart,
8
+ type UITools,
9
+ } from "ai";
10
+ import { useChat } from "./composables/useChat";
11
+ import ChatConversation from "@/components/ChatConversation/ChatConversation.vue";
12
+ import ChatPromptInputProvider from "@/components/ChatPromptInputProvider/ChatPromptInputProvider.vue";
13
+ import request from "./request";
14
+
15
+ const api = 'http://192.168.10.98:3090/main/xiao-mian/chat'
16
+ const Authorization = "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwiZmFjdG9yeV9pZCI6MSwiaWF0IjoxNzY2MTA4MjMyLCJleHAiOjE3NjY3MTMwMzJ9.kBbSifm4CdLy4A2RjhQHJ51_zsr8EKwukhUMsb0QdTM"
17
+
18
+ const { messages, status, handleSubmit } = useChat(api, Authorization)
19
+
20
+
21
+ function isStreamingPart(messageIndex: number, partIndex: number) {
22
+ const lastMsg = messages.value[messages.value.length - 1];
23
+ const msg = messages.value[messageIndex];
24
+
25
+ if (!lastMsg || msg?.id !== lastMsg.id) return false;
26
+
27
+ const isLastPart =
28
+ msg?.parts?.length > 0 && partIndex === msg?.parts?.length - 1;
29
+ return status.value === "streaming" && isLastPart;
30
+ }
31
+
32
+ function isToolPart(partType: string): partType is `tool-${string}` {
33
+ return partType.startsWith("tool-");
34
+ }
35
+
36
+ function isDataPart(partType: string): partType is `data-${string}` {
37
+ return partType.startsWith("data-");
38
+ }
39
+
40
+ function toolPart(part: UIMessagePart<UIDataTypes, UITools>) {
41
+ return part as ToolUIPart<UITools>;
42
+ }
43
+
44
+ function dataPart(part: UIMessagePart<UIDataTypes, UITools>) {
45
+ return part as DataUIPart<UIDataTypes>;
46
+ }
47
+
48
+ const uploadImages = async (files: File[]) => {
49
+ const formData = new FormData();
50
+ files.forEach(file => {
51
+ formData.append('files', file);
52
+ })
53
+ const res = await request.post('/main/file/uploadImages', formData)
54
+ console.log(res);
55
+
56
+ return res.map((item: any) => ({ name: item.name, path: item.path }))
57
+ }
58
+
59
+ </script>
60
+
61
+ <template>
62
+ <div class="fixed bottom-0 top-0 left-0 right-0 p-4">
63
+ <div class="relative flex size-full flex-col overflow-hidden">
64
+ <ChatConversation :messages="messages" :status="status" />
65
+ <ChatPromptInputProvider :status="status" @submit="handleSubmit" :uploadImages="uploadImages" />
66
+ </div>
67
+ </div>
68
+ </template>