@wzh-/ai-chat-example 1.1.2 → 1.1.3

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.
@@ -1 +1 @@
1
- const e=require("./ChatConversation.vue_vue_type_script_setup_true_lang.js");;/* empty css */var _=require("../../_virtual/_plugin-vue_export-helper.js").default(e.default,[["__scopeId","data-v-d99ca689"]]);exports.default=_;
1
+ import e from"./ChatConversation.vue_vue_type_script_setup_true_lang.js";/* empty css */import _ from"../../_virtual/_plugin-vue_export-helper.js";var t=_(e,[["__scopeId","data-v-d99ca689"]]);export{t as default};
@@ -1 +1 @@
1
- const e=require("../../assets/xiao-mian.js");let t=require("vue");var o={class:"flex-1 overflow-hidden mb-3"},l={class:"mt-10 w-full h-full"},n={class:"flex w-full flex-col justify-center items-center"},r=["src"],a={class:"mt-5.5"},s={class:"input-value-box gap-2"},c=["onClick"],u=["alt","src"],i={key:1},p={key:3},m=(0,t.defineComponent)({__name:"ChatConversation",props:{messages:{},status:{},defaultInputs:{}},emits:["submit"],setup(m,{emit:d}){const k=m,f=d,C=(0,t.computed)(()=>k.messages),v=(0,t.computed)(()=>k.status),y=k.defaultInputs||["请帮我查询订单进度。","请帮我查询工序进度。","请帮我查询员工本月登记情况。","请帮我查询款式生产完成情况。"],B=e=>{f("submit",{text:e,files:[]})};function g(e,t){const o=C.value[C.value.length-1],l=C.value[e];if(!o||l?.id!==o.id)return!1;const n=l?.parts?.length>0&&t===l?.parts?.length-1;return"streaming"===v.value&&n}function x(e){return e.startsWith("tool-")}return(m,d)=>{const k=(0,t.resolveComponent)("MessageResponse"),f=(0,t.resolveComponent)("ReasoningTrigger"),v=(0,t.resolveComponent)("ReasoningContent"),N=(0,t.resolveComponent)("Reasoning"),V=(0,t.resolveComponent)("Source"),h=(0,t.resolveComponent)("SourcesContent"),E=(0,t.resolveComponent)("Sources"),w=(0,t.resolveComponent)("CodeBlock"),_=(0,t.resolveComponent)("ToolHeader"),S=(0,t.resolveComponent)("ToolInput"),T=(0,t.resolveComponent)("ToolOutput"),b=(0,t.resolveComponent)("ToolContent"),F=(0,t.resolveComponent)("Tool"),I=(0,t.resolveComponent)("MessageContent"),R=(0,t.resolveComponent)("Message"),$=(0,t.resolveComponent)("ConversationContent"),j=(0,t.resolveComponent)("ConversationScrollButton"),D=(0,t.resolveComponent)("Conversation");return(0,t.openBlock)(),(0,t.createElementBlock)("div",o,[(0,t.createVNode)(D,{class:"relative size-full"},{default:(0,t.withCtx)(()=>[(0,t.createVNode)($,null,{default:(0,t.withCtx)(()=>[C.value.length?((0,t.openBlock)(!0),(0,t.createElementBlock)(t.Fragment,{key:1},(0,t.renderList)(C.value,(e,o)=>((0,t.openBlock)(),(0,t.createBlock)(R,{key:e.id,from:e.role},{default:(0,t.withCtx)(()=>[(0,t.createVNode)(I,{class:(0,t.normalizeClass)(0===o?"mt-0":"")},{default:(0,t.withCtx)(()=>[((0,t.openBlock)(!0),(0,t.createElementBlock)(t.Fragment,null,(0,t.renderList)(e.parts,(l,n)=>{return(0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:`${e.id}-${l.type}-${n}`},["text"===l.type?((0,t.openBlock)(),(0,t.createBlock)(k,{key:0,content:l.text},null,8,["content"])):"reasoning"===l.type?((0,t.openBlock)(),(0,t.createBlock)(N,{key:1,class:"w-full","is-streaming":g(o,n)},{default:(0,t.withCtx)(()=>[(0,t.createVNode)(f),(0,t.createVNode)(v,{content:l.text},null,8,["content"])]),_:2},1032,["is-streaming"])):"file"===l.type?((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:2},[l.mediaType.startsWith("image/")?((0,t.openBlock)(),(0,t.createElementBlock)("img",{key:0,alt:l.filename,src:l.url},null,8,u)):((0,t.openBlock)(),(0,t.createElementBlock)("div",i,(0,t.toDisplayString)(l.filename),1))],64)):"source-document"===l.type?((0,t.openBlock)(),(0,t.createElementBlock)("div",p,(0,t.toDisplayString)(l.title),1)):"source-url"===l.type?((0,t.openBlock)(),(0,t.createBlock)(E,{key:4},{default:(0,t.withCtx)(()=>[(0,t.createVNode)(h,null,{default:(0,t.withCtx)(()=>[(0,t.createVNode)(V,{href:l.url,title:l.title??l.url},null,8,["href","title"])]),_:2},1024)]),_:2},1024)):"step-start"===l.type?((0,t.openBlock)(),(0,t.createElementBlock)(t.Fragment,{key:5},[],64)):(r=l.type,r.startsWith("data-")?((0,t.openBlock)(),(0,t.createBlock)(w,{key:6,code:JSON.stringify(l.data??{},null,2),language:"json"},null,8,["code"])):"dynamic-tool"===l.type?((0,t.openBlock)(),(0,t.createBlock)(F,{key:7,"default-open":""},{default:(0,t.withCtx)(()=>[(0,t.createVNode)(_,{state:l.state,title:l.toolName,type:"tool-dynamic-tool"},null,8,["state","title"]),(0,t.createVNode)(b,null,{default:(0,t.withCtx)(()=>[(0,t.createVNode)(S,{input:l.input},null,8,["input"]),(0,t.createVNode)(T,{output:l.output,"error-text":l.errorText},null,8,["output","error-text"])]),_:2},1024)]),_:2},1024)):x(l.type)?((0,t.openBlock)(),(0,t.createBlock)(F,{key:8,class:"w-full","default-open":!1},{default:(0,t.withCtx)(()=>[(0,t.createVNode)(_,{state:l.state,type:l.type},null,8,["state","type"]),(0,t.createVNode)(b,null,{default:(0,t.withCtx)(()=>[(0,t.createVNode)(S,{input:l.input},null,8,["input"]),(0,t.createVNode)(T,{output:l.output,"error-text":l.errorText},null,8,["output","error-text"])]),_:2},1024)]),_:2},1024)):(0,t.createCommentVNode)("",!0))],64);var r}),128))]),_:2},1032,["class"])]),_:2},1032,["from"]))),128)):(0,t.renderSlot)(m.$slots,"empty-message",{key:0,selectInputValue:B},()=>[(0,t.createElementVNode)("div",l,[(0,t.createElementVNode)("div",n,[(0,t.createElementVNode)("img",{src:(0,t.unref)(e.default),alt:"图标",class:"xiao-mian"},null,8,r),d[0]||(d[0]=(0,t.createElementVNode)("div",{class:"text-box"},"你好,我是AI助手-小棉",-1))]),(0,t.createElementVNode)("div",a,[d[1]||(d[1]=(0,t.createElementVNode)("div",{class:"text-[#999] mb-2"},"试一试~",-1)),(0,t.createElementVNode)("div",s,[((0,t.openBlock)(!0),(0,t.createElementBlock)(t.Fragment,null,(0,t.renderList)((0,t.unref)(y),e=>((0,t.openBlock)(),(0,t.createElementBlock)("div",{class:"item",key:e,onClick:t=>B(e)},(0,t.toDisplayString)(e),9,c))),128))])])])],!0)]),_:3}),(0,t.createVNode)(j,{class:"bg-[#fff]"})]),_:3})])}}});exports.default=m;
1
+ import t from"../../assets/xiao-mian.js";import{Fragment as e,computed as l,createBlock as s,createCommentVNode as a,createElementBlock as n,createElementVNode as o,createVNode as u,defineComponent as r,normalizeClass as i,openBlock as c,renderList as p,renderSlot as d,resolveComponent as f,toDisplayString as m,unref as y,withCtx as g}from"vue";var v={class:"flex-1 overflow-hidden mb-3"},k={class:"mt-10 w-full h-full"},x={class:"flex w-full flex-col justify-center items-center"},C=["src"],h={class:"mt-5.5"},_={class:"input-value-box gap-2"},T=["onClick"],b=["alt","src"],S={key:1},w={key:3},B=r({__name:"ChatConversation",props:{messages:{},status:{},defaultInputs:{}},emits:["submit"],setup(r,{emit:B}){const I=r,N=B,R=l(()=>I.messages),V=l(()=>I.status),$=I.defaultInputs||["请帮我查询订单进度。","请帮我查询工序进度。","请帮我查询员工本月登记情况。","请帮我查询款式生产完成情况。"],j=t=>{N("submit",{text:t,files:[]})};function M(t,e){const l=R.value[R.value.length-1],s=R.value[t];if(!l||s?.id!==l.id)return!1;const a=s?.parts?.length>0&&e===s?.parts?.length-1;return"streaming"===V.value&&a}function W(t){return t.startsWith("tool-")}return(l,r)=>{const B=f("MessageResponse"),I=f("ReasoningTrigger"),N=f("ReasoningContent"),V=f("Reasoning"),z=f("Source"),E=f("SourcesContent"),O=f("Sources"),A=f("CodeBlock"),D=f("ToolHeader"),F=f("ToolInput"),H=f("ToolOutput"),J=f("ToolContent"),L=f("Tool"),q=f("MessageContent"),G=f("Message"),K=f("ConversationContent"),P=f("ConversationScrollButton"),Q=f("Conversation");return c(),n("div",v,[u(Q,{class:"relative size-full"},{default:g(()=>[u(K,null,{default:g(()=>[R.value.length?(c(!0),n(e,{key:1},p(R.value,(t,l)=>(c(),s(G,{key:t.id,from:t.role},{default:g(()=>[u(q,{class:i(0===l?"mt-0":"")},{default:g(()=>[(c(!0),n(e,null,p(t.parts,(o,r)=>{return c(),n(e,{key:`${t.id}-${o.type}-${r}`},["text"===o.type?(c(),s(B,{key:0,content:o.text},null,8,["content"])):"reasoning"===o.type?(c(),s(V,{key:1,class:"w-full","is-streaming":M(l,r)},{default:g(()=>[u(I),u(N,{content:o.text},null,8,["content"])]),_:2},1032,["is-streaming"])):"file"===o.type?(c(),n(e,{key:2},[o.mediaType.startsWith("image/")?(c(),n("img",{key:0,alt:o.filename,src:o.url},null,8,b)):(c(),n("div",S,m(o.filename),1))],64)):"source-document"===o.type?(c(),n("div",w,m(o.title),1)):"source-url"===o.type?(c(),s(O,{key:4},{default:g(()=>[u(E,null,{default:g(()=>[u(z,{href:o.url,title:o.title??o.url},null,8,["href","title"])]),_:2},1024)]),_:2},1024)):"step-start"===o.type?(c(),n(e,{key:5},[],64)):(i=o.type,i.startsWith("data-")?(c(),s(A,{key:6,code:JSON.stringify(o.data??{},null,2),language:"json"},null,8,["code"])):"dynamic-tool"===o.type?(c(),s(L,{key:7,"default-open":""},{default:g(()=>[u(D,{state:o.state,title:o.toolName,type:"tool-dynamic-tool"},null,8,["state","title"]),u(J,null,{default:g(()=>[u(F,{input:o.input},null,8,["input"]),u(H,{output:o.output,"error-text":o.errorText},null,8,["output","error-text"])]),_:2},1024)]),_:2},1024)):W(o.type)?(c(),s(L,{key:8,class:"w-full","default-open":!1},{default:g(()=>[u(D,{state:o.state,type:o.type},null,8,["state","type"]),u(J,null,{default:g(()=>[u(F,{input:o.input},null,8,["input"]),u(H,{output:o.output,"error-text":o.errorText},null,8,["output","error-text"])]),_:2},1024)]),_:2},1024)):a("",!0))],64);var i}),128))]),_:2},1032,["class"])]),_:2},1032,["from"]))),128)):d(l.$slots,"empty-message",{key:0,selectInputValue:j},()=>[o("div",k,[o("div",x,[o("img",{src:y(t),alt:"图标",class:"xiao-mian"},null,8,C),r[0]||(r[0]=o("div",{class:"text-box"},"你好,我是AI助手-小棉",-1))]),o("div",h,[r[1]||(r[1]=o("div",{class:"text-[#999] mb-2"},"试一试~",-1)),o("div",_,[(c(!0),n(e,null,p(y($),t=>(c(),n("div",{class:"item",key:t,onClick:e=>j(t)},m(t),9,T))),128))])])])],!0)]),_:3}),u(P,{class:"bg-[#fff]"})]),_:3})])}}});export{B as default};
@@ -1 +1 @@
1
- require("./ChatConversation.js");
1
+ import o from"./ChatConversation.js";
@@ -1 +1 @@
1
- const e=require("../../_virtual/_plugin-vue_export-helper.js"),t=require("./ChatPromptInput.vue_vue_type_script_setup_true_lang.js");;/* empty css */var _=e.default(t.default,[["__scopeId","data-v-00e9ba09"]]);exports.default=_;
1
+ import e from"../../_virtual/_plugin-vue_export-helper.js";import t from"./ChatPromptInput.vue_vue_type_script_setup_true_lang.js";/* empty css */var _=e(t,[["__scopeId","data-v-00e9ba09"]]);export{_ as default};
@@ -1 +1 @@
1
- let t=require("vue");var e={class:"flex w-full prompt-input-content-box"},o=(0,t.defineComponent)({__name:"ChatPromptInput",props:{status:{},uploadImages:{type:Function},onSubmit:{type:Function},stop:{type:Function}},emits:["submit"],setup(o,{emit:n}){const p=o,l=(0,t.computed)(()=>p.status),a=t=>p.onSubmit?.(t);return(n,p)=>{const r=(0,t.resolveComponent)("PromptInputAttachment"),u=(0,t.resolveComponent)("PromptInputAttachments"),s=(0,t.resolveComponent)("PromptInputTextarea"),m=(0,t.resolveComponent)("PromptInputBody"),c=(0,t.resolveComponent)("PromptInputSubmit"),d=(0,t.resolveComponent)("PromptInputFooter"),i=(0,t.resolveComponent)("PromptInput"),f=(0,t.resolveComponent)("PromptInputProvider");return(0,t.openBlock)(),(0,t.createBlock)(f,{onSubmit:a,uploadImages:o.uploadImages},{default:(0,t.withCtx)(()=>[(0,t.createVNode)(i,{multiple:"","global-drop":""},{default:(0,t.withCtx)(()=>[(0,t.createVNode)(u,{class:"mb-3"},{default:(0,t.withCtx)(({file:e})=>[(0,t.createVNode)(r,{file:e},null,8,["file"])]),_:1}),(0,t.createElementVNode)("div",e,[(0,t.createVNode)(m,{class:"flex-1 flex overflow-hidden"},{default:(0,t.withCtx)(()=>[(0,t.createVNode)(s,{placeholder:"请输入发送内容~",class:"flex-1 chat-input-textarea"})]),_:1}),(0,t.createVNode)(d,{class:"shrink-0"},{default:(0,t.withCtx)(()=>[(0,t.createVNode)(c,{status:l.value,stop:o.stop},null,8,["status","stop"])]),_:1})])]),_:1})]),_:1},8,["uploadImages"])}}});exports.default=o;
1
+ import{computed as t,createBlock as e,createElementVNode as o,createVNode as a,defineComponent as p,openBlock as s,resolveComponent as u,withCtx as l}from"vue";var n={class:"flex w-full prompt-input-content-box"},m=p({__name:"ChatPromptInput",props:{status:{},uploadImages:{type:Function},onSubmit:{type:Function},stop:{type:Function}},emits:["submit"],setup(p,{emit:m}){const r=p,i=t(()=>r.status),c=t=>r.onSubmit?.(t);return(t,m)=>{const r=u("PromptInputAttachment"),d=u("PromptInputAttachments"),f=u("PromptInputTextarea"),I=u("PromptInputBody"),P=u("PromptInputSubmit"),x=u("PromptInputFooter"),b=u("PromptInput"),h=u("PromptInputProvider");return s(),e(h,{onSubmit:c,uploadImages:p.uploadImages},{default:l(()=>[a(b,{multiple:"","global-drop":""},{default:l(()=>[a(d,{class:"mb-3"},{default:l(({file:t})=>[a(r,{file:t},null,8,["file"])]),_:1}),o("div",n,[a(I,{class:"flex-1 flex overflow-hidden"},{default:l(()=>[a(f,{placeholder:"请输入发送内容~",class:"flex-1 chat-input-textarea"})]),_:1}),a(x,{class:"shrink-0"},{default:l(()=>[a(P,{status:i.value,stop:p.stop},null,8,["status","stop"])]),_:1})])]),_:1})]),_:1},8,["uploadImages"])}}});export{m as default};
@@ -1 +1 @@
1
- require("./ChatPromptInput.js");
1
+ import t from"./ChatPromptInput.js";
@@ -1 +1 @@
1
- const e=require("./useStickToBottom.js");let s=require("vue"),t=require("@ai-sdk/vue"),a=require("ai");exports.useChat=(r,o)=>{const u=new t.Chat({transport:new a.DefaultChatTransport({api:r,headers:{Authorization:o},prepareSendMessagesRequest:({messages:e,id:s})=>({body:{message:e[e.length-1],id:s}})}),onError:e=>{u.messages.push({role:"assistant",parts:[{type:"text",text:e.message}],id:(0,a.generateId)()})}}),i=(0,s.computed)(()=>u.messages),n=(0,s.computed)(()=>u.status);return{chat:u,messages:i,status:n,handleSubmit:s=>{if(["submitted","streaming"].includes(n.value))return Promise.reject();const t=!!s.text,a=s.files?.length>0;(t||a)&&(u.sendMessage(s),e.scrollToBottom.value?.())},stop:()=>{u.stop()}}};
1
+ import{scrollToBottom as s}from"./useStickToBottom.js";import{computed as e}from"vue";import{Chat as t}from"@ai-sdk/vue";import{DefaultChatTransport as a,generateId as o}from"ai";const r=(r,i)=>{const m=new t({transport:new a({api:r,headers:{Authorization:i},prepareSendMessagesRequest:({messages:s,id:e})=>({body:{message:s[s.length-1],id:e}})}),onError:s=>{m.messages.push({role:"assistant",parts:[{type:"text",text:s.message}],id:o()})}}),n=e(()=>m.messages),u=e(()=>m.status);return{chat:m,messages:n,status:u,handleSubmit:e=>{if(["submitted","streaming"].includes(u.value))return Promise.reject();const t=!!e.text,a=e.files?.length>0;(t||a)&&(m.sendMessage(e),s.value?.())},stop:()=>{m.stop()}}};export{r as useChat};
@@ -1 +1 @@
1
- require("vue-stick-to-bottom");const o=ref();exports.scrollToBottom=o;
1
+ import"vue-stick-to-bottom";const o=ref();export{o as scrollToBottom};
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- const t=require("./components/ChatConversation/ChatConversation.js");require("./components/ChatConversation/index.js");const e=require("./components/ChatPromptInput/ChatPromptInput.js");require("./components/ChatPromptInput/index.js");const o=require("./composables/useChat.js");/* empty css */exports.ChatConversation=t.default,exports.ChatPromptInputProvider=e.default,exports.useChat=o.useChat;
1
+ import t from"./components/ChatConversation/ChatConversation.js";import"./components/ChatConversation/index.js";import o from"./components/ChatPromptInput/ChatPromptInput.js";import"./components/ChatPromptInput/index.js";import{useChat as s}from"./composables/useChat.js";/* empty css */export{t as ChatConversation,o as ChatPromptInputProvider,s as useChat};
@@ -0,0 +1,5 @@
1
+ // 声明包内的 CSS 文件导出类型
2
+ declare module '@wzh-/ai-chat-example/dist/css/index.css' {
3
+ const styles: string;
4
+ export default styles;
5
+ }
package/package.json CHANGED
@@ -1,66 +1,92 @@
1
- {
2
- "name": "@wzh-/ai-chat-example",
3
- "version": "1.1.2",
4
- "type": "module",
5
- "main": "./dist/index.cjs.js",
6
- "module": "./dist/index.es.js",
7
- "types": "./dist/types/index.d.ts",
8
- "files": [
9
- "dist",
10
- "README.md"
11
- ],
12
- "peerDependencies": {
13
- "vue": "^3.2.0 || ^3.3.0 || ^3.4.0",
14
- "@ai-sdk/vue": "*",
15
- "@vue-flow/core": "*",
16
- "@vueuse/core": "*",
17
- "ai": "*",
18
- "class-variance-authority": "*",
19
- "clsx": "*",
20
- "embla-carousel-vue": "*",
21
- "lucide-vue-next": "*",
22
- "motion-v": "*",
23
- "nanoid": "*",
24
- "reka-ui": "*",
25
- "shiki": "*",
26
- "streamdown-vue": "*",
27
- "tailwind-merge": "*",
28
- "tokenlens": "*",
29
- "vue-stick-to-bottom": "*",
30
- "zod": "*"
31
- },
32
- "devDependencies": {
33
- "@rollup/plugin-terser": "^0.4.4",
34
- "@vitejs/plugin-vue": "^5.0.4",
35
- "unplugin-auto-import": "^0.17.5",
36
- "unplugin-vue-components": "^0.26.0",
37
- "vite": "^5.1.4",
38
- "vite-plugin-dts": "^3.7.3",
39
- "vue": "^3.4.21",
40
- "@ai-sdk/vue": "^0.2.0",
41
- "@vue-flow/background": "^1.3.0",
42
- "@vue-flow/controls": "^1.2.0",
43
- "@vue-flow/core": "^1.34.0",
44
- "@vue-flow/node-toolbar": "^1.2.0",
45
- "@vueuse/core": "^10.9.0",
46
- "ai": "^3.0.0",
47
- "class-variance-authority": "^0.7.0",
48
- "clsx": "^2.1.0",
49
- "embla-carousel-vue": "^8.0.0",
50
- "lucide-vue-next": "^0.344.0",
51
- "motion-v": "^0.12.0",
52
- "nanoid": "^5.0.6",
53
- "reka-ui": "^0.1.0",
54
- "shiki": "^1.2.0",
55
- "streamdown-vue": "^0.1.0",
56
- "tailwind-merge": "^2.2.1",
57
- "tokenlens": "^0.1.0",
58
- "vue-stick-to-bottom": "^1.0.0",
59
- "zod": "^3.22.4"
60
- },
61
- "scripts": {
62
- "dev": "vite",
63
- "build": "NODE_ENV=production vite build",
64
- "prepublishOnly": "npm run build"
65
- }
66
- }
1
+ {
2
+ "name": "@wzh-/ai-chat-example",
3
+ "description": "@wzh-/ai-chat-example",
4
+ "private": false,
5
+ "version": "1.1.3",
6
+ "type": "module",
7
+ "module": "./dist/js/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "import": "./dist/index.js",
12
+ "types": "./dist/types/index.d.ts"
13
+ },
14
+ "./dist/index.css": {
15
+ "import": "./dist/style.css",
16
+ "types": "./dist/types/style.d.ts"
17
+ }
18
+ },
19
+ "files": [
20
+ "dist"
21
+ ],
22
+ "scripts": {
23
+ "dev": "vite",
24
+ "build": "vue-tsc -b && vite build",
25
+ "preview": "vite preview"
26
+ },
27
+ "peerDependencies": {
28
+ "vue": "^3.2.0 || ^3.3.0 || ^3.4.0",
29
+ "@ai-sdk/vue": "*",
30
+ "@vue-flow/core": "*",
31
+ "@vueuse/core": "*",
32
+ "ai": "*",
33
+ "class-variance-authority": "*",
34
+ "clsx": "*",
35
+ "embla-carousel-vue": "*",
36
+ "lucide-vue-next": "*",
37
+ "motion-v": "*",
38
+ "nanoid": "*",
39
+ "reka-ui": "*",
40
+ "shiki": "*",
41
+ "streamdown-vue": "*",
42
+ "tailwind-merge": "*",
43
+ "tokenlens": "*",
44
+ "vue-stick-to-bottom": "*",
45
+ "zod": "*"
46
+ },
47
+ "dependencies": {
48
+ "@ai-sdk/vue": "^3.0.1",
49
+ "@vue-flow/background": "^1.3.2",
50
+ "@vue-flow/controls": "^1.1.3",
51
+ "@vue-flow/core": "^1.48.0",
52
+ "@vue-flow/node-toolbar": "^1.1.1",
53
+ "@vueuse/core": "^14.1.0",
54
+ "ai": "^6.0.1",
55
+ "class-variance-authority": "^0.7.1",
56
+ "clsx": "^2.1.1",
57
+ "embla-carousel-vue": "^8.6.0",
58
+ "lucide-vue-next": "^0.561.0",
59
+ "motion-v": "^1.7.4",
60
+ "nanoid": "^5.1.6",
61
+ "reka-ui": "^2.6.1",
62
+ "shiki": "^3.20.0",
63
+ "streamdown-vue": "^1.0.29",
64
+ "tailwind-merge": "^3.4.0",
65
+ "tokenlens": "^1.3.1",
66
+ "vue": "^3.5.24",
67
+ "vue-stick-to-bottom": "^0.1.0",
68
+ "zod": "^4.2.1"
69
+ },
70
+ "devDependencies": {
71
+ "@types/node": "^24.10.1",
72
+ "@vitejs/plugin-vue": "^6.0.1",
73
+ "@vue/tsconfig": "^0.8.1",
74
+ "autoprefixer": "^10.4.23",
75
+ "postcss": "^8.5.6",
76
+ "tailwindcss": "3",
77
+ "tw-animate-css": "^1.4.0",
78
+ "unplugin-auto-import": "^20.3.0",
79
+ "typescript": "~5.9.3",
80
+ "unplugin-vue-components": "^30.0.0",
81
+ "vite": "npm:rolldown-vite@7.2.5",
82
+ "vite-plugin-dts": "^4.5.4",
83
+ "vite-tsconfig-paths": "^6.0.1",
84
+ "vue-tsc": "^3.1.4"
85
+ },
86
+ "pnpm": {
87
+ "overrides": {
88
+ "vite": "npm:rolldown-vite@7.2.5"
89
+ }
90
+ },
91
+ "packageManager": "pnpm@10.12.1+sha512.f0dda8580f0ee9481c5c79a1d927b9164f2c478e90992ad268bbb2465a736984391d6333d2c327913578b2804af33474ca554ba29c04a8b13060a717675ae3ac"
92
+ }