@anker-in/campaign-ui 0.1.4 → 0.1.6

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 (37) hide show
  1. package/dist/cjs/components/chat/Messages.d.ts +1 -1
  2. package/dist/cjs/components/chat/index.d.ts +4 -0
  3. package/dist/cjs/components/chat/index.js +1 -1
  4. package/dist/cjs/components/chat/index.js.map +3 -3
  5. package/dist/cjs/components/chat/messages.js +1 -1
  6. package/dist/cjs/components/chat/messages.js.map +3 -3
  7. package/dist/cjs/components/chat/props.d.ts +1 -0
  8. package/dist/cjs/components/chat/props.js +1 -1
  9. package/dist/cjs/components/chat/props.js.map +1 -1
  10. package/dist/cjs/components/chat/utils.d.ts +2 -0
  11. package/dist/cjs/components/chat/utils.js +2 -0
  12. package/dist/cjs/components/chat/utils.js.map +7 -0
  13. package/dist/cjs/components/index.d.ts +1 -0
  14. package/dist/cjs/components/index.js +1 -1
  15. package/dist/cjs/components/index.js.map +3 -3
  16. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  17. package/dist/esm/components/chat/Messages.d.ts +1 -1
  18. package/dist/esm/components/chat/index.d.ts +4 -0
  19. package/dist/esm/components/chat/index.js +1 -1
  20. package/dist/esm/components/chat/index.js.map +3 -3
  21. package/dist/esm/components/chat/messages.js +1 -1
  22. package/dist/esm/components/chat/messages.js.map +3 -3
  23. package/dist/esm/components/chat/props.d.ts +1 -0
  24. package/dist/esm/components/chat/props.js.map +1 -1
  25. package/dist/esm/components/chat/utils.d.ts +2 -0
  26. package/dist/esm/components/chat/utils.js +2 -0
  27. package/dist/esm/components/chat/utils.js.map +7 -0
  28. package/dist/esm/components/index.d.ts +1 -0
  29. package/dist/esm/components/index.js +1 -1
  30. package/dist/esm/components/index.js.map +3 -3
  31. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  32. package/package.json +1 -1
  33. package/src/components/chat/index.tsx +6 -0
  34. package/src/components/chat/messages.tsx +5 -1
  35. package/src/components/chat/props.ts +1 -0
  36. package/src/components/chat/utils.ts +3 -0
  37. package/src/components/index.ts +3 -0
@@ -1,3 +1,3 @@
1
1
  import type { MessagesProps } from './props.js';
2
- declare const Messages: ({ messages, inProgress, ResponseButton, children }: MessagesProps) => import("react/jsx-runtime").JSX.Element;
2
+ declare const Messages: ({ messages, inProgress, ResponseButton, messagesCallback, children }: MessagesProps) => import("react/jsx-runtime").JSX.Element;
3
3
  export default Messages;
@@ -23,6 +23,10 @@ export interface ChatProps {
23
23
  * unfollow: ResponseButton 在聊天框底部
24
24
  */
25
25
  showResponseButton?: string | boolean;
26
+ /** messages 的回调事件
27
+ * 每次生成/接受新的messages,会将 整个 messages list 传递给外部
28
+ */
29
+ messagesCallback?: (_messages: any) => void;
26
30
  /** 通用 action 的触发事件
27
31
  */
28
32
  commonRender?: string | ((_props: any) => React.ReactElement);
@@ -1,2 +1,2 @@
1
- "use strict";var ot=Object.create;var f=Object.defineProperty;var st=Object.getOwnPropertyDescriptor;var nt=Object.getOwnPropertyNames;var rt=Object.getPrototypeOf,it=Object.prototype.hasOwnProperty;var at=(e,s)=>{for(var n in s)f(e,n,{get:s[n],enumerable:!0})},w=(e,s,n,p)=>{if(s&&typeof s=="object"||typeof s=="function")for(let i of nt(s))!it.call(e,i)&&i!==n&&f(e,i,{get:()=>s[i],enumerable:!(p=st(s,i))||p.enumerable});return e};var g=(e,s,n)=>(n=e!=null?ot(rt(e)):{},w(s||!e||!e.__esModule?f(n,"default",{value:e,enumerable:!0}):n,e)),pt=e=>w(f({},"__esModule",{value:!0}),e);var lt={};at(lt,{default:()=>ut});module.exports=pt(lt);var o=require("react/jsx-runtime"),x=require("react"),r=require("react"),O=require("@copilotkit/react-core"),b=require("@copilotkit/react-ui"),S=g(require("./button.js")),v=g(require("./messages.js")),M=g(require("./response.js")),$=g(require("./suggestions.js")),q=require("./action.js"),E=g(require("../../helpers/fetcher.js"));const ct=e=>{const{title:s,runtimeUrl:n,popup:p,shopifyDomain:i,userId:c="",account:d="",prologue:D="",locale:m="",query:u="",showResponseButton:P,gotocheckoutRender:K,commonRender:N,pointsExchangeCouponRender:H,gotocartRender:I,addtocartRender:U,productRender:G,signupRender:A,addtocartHandler:F,style:L,className:z="",lang:R}=e,[J,Q]=R?.popupTipTimeout||[3e3,6e3],[_,h]=(0,r.useState)(!1),[y,V]=(0,r.useState)(!1),[l,W]=(0,r.useState)(D),[X,C]=(0,r.useState)([]),[B,Y]=(0,r.useState)([]),T=(0,x.useMemo)(()=>({"x-user-id":c||"","x-shopify-domain":i,"x-member-ship":d,"x-user-locale":m}),[c,i,d,m]),Z=(0,r.useCallback)(async()=>{const t=await(0,E.default)({url:`${n}/copilotkit/start${u}`,method:"GET",headers:T});C(t?.suggested_questions?.map(a=>({message:a,title:a}))||[]),W(t?.opening_statement||""),Y(t?.history||[])},[c,i,d,m,u]),j=(0,r.useCallback)(async()=>{const t=await(0,E.default)({url:`${n}/copilotkit/suggested_questions${u}`,method:"GET",headers:T});C(t?.suggested_questions?.data?.map(a=>({message:a,title:a}))||[])},[c,i,d,m,u]),tt=()=>{_||h(!0),setTimeout(()=>{h(!1)},Q)};return(0,r.useEffect)(()=>{const t=setTimeout(()=>{tt()},J);return()=>{clearTimeout(t)}},[]),(0,o.jsx)("div",{className:z,style:L||{},children:c&&n&&(0,o.jsx)(O.CopilotKit,{runtimeUrl:`${n}/copilotkit/chat${u}`,showDevConsole:!1,headers:T,children:(0,o.jsx)(b.CopilotPopup,{...p,showResponseButton:P!=="follow",labels:{title:s||"DTC Live Chat",initial:l||""},instructions:l||"",onInProgress:t=>{y&&t&&C([]),y&&!t&&j()},Messages:({messages:t,inProgress:a})=>(0,o.jsx)(v.default,{messages:t,inProgress:a,ResponseButton:P==="follow"?(0,o.jsx)(M.default,{}):void 0,children:(0,o.jsx)($.default,{currentSuggestions:X})}),Button:({open:t,setOpen:a})=>{const et=p?.Button||S.default;(0,r.useEffect)(()=>{V(t)},[t]);const k=(0,r.useCallback)(()=>{a(!t),h(!1),(!l||!B?.length)&&Z()},[l]);return(0,o.jsxs)(o.Fragment,{children:[R?.popupTip&&_&&!y&&(0,o.jsx)("div",{className:"copilotKitPopup copilotKitPopupTip",children:(0,o.jsx)("button",{onClick:k,"aria-label":"Open Chat",className:"copilotKitPopupTipContent",children:R?.popupTip})}),(0,o.jsx)(et,{open:t,setOpen:k})]})},children:(0,o.jsx)(q.CopilotAction,{start:l,history:B,commonRender:N,pointsExchangeCouponRender:H,gotocartRender:I,gotocheckoutRender:K,addtocartRender:U,signupRender:A,productRender:G,addtocartHandler:F,productRenderTipMessage:R?.productRenderTipMessage})})})})};var ut=ct;
1
+ "use strict";var st=Object.create;var f=Object.defineProperty;var nt=Object.getOwnPropertyDescriptor;var rt=Object.getOwnPropertyNames;var at=Object.getPrototypeOf,it=Object.prototype.hasOwnProperty;var pt=(e,s)=>{for(var n in s)f(e,n,{get:s[n],enumerable:!0})},B=(e,s,n,p)=>{if(s&&typeof s=="object"||typeof s=="function")for(let a of rt(s))!it.call(e,a)&&a!==n&&f(e,a,{get:()=>s[a],enumerable:!(p=nt(s,a))||p.enumerable});return e};var g=(e,s,n)=>(n=e!=null?st(at(e)):{},B(s||!e||!e.__esModule?f(n,"default",{value:e,enumerable:!0}):n,e)),ct=e=>B(f({},"__esModule",{value:!0}),e);var gt={};pt(gt,{default:()=>lt});module.exports=ct(gt);var o=require("react/jsx-runtime"),w=require("react"),r=require("react"),x=require("@copilotkit/react-core"),O=require("@copilotkit/react-ui"),v=g(require("./button.js")),S=g(require("./messages.js")),M=g(require("./response.js")),$=g(require("./suggestions.js")),q=require("./action.js"),E=g(require("../../helpers/fetcher.js"));const ut=e=>{const{title:s,runtimeUrl:n,popup:p,shopifyDomain:a,userId:c="",account:d="",prologue:D="",locale:m="",query:u="",messagesCallback:K,showResponseButton:_,gotocheckoutRender:N,commonRender:H,pointsExchangeCouponRender:I,gotocartRender:U,addtocartRender:G,productRender:A,signupRender:F,addtocartHandler:L,style:z,className:J="",lang:R}=e,[Q,V]=R?.popupTipTimeout||[3e3,6e3],[P,h]=(0,r.useState)(!1),[y,W]=(0,r.useState)(!1),[l,X]=(0,r.useState)(D),[Y,C]=(0,r.useState)([]),[k,Z]=(0,r.useState)([]),T=(0,w.useMemo)(()=>({"x-user-id":c||"","x-shopify-domain":a,"x-member-ship":d,"x-user-locale":m}),[c,a,d,m]),j=(0,r.useCallback)(async()=>{const t=await(0,E.default)({url:`${n}/copilotkit/start${u}`,method:"GET",headers:T});C(t?.suggested_questions?.map(i=>({message:i,title:i}))||[]),X(t?.opening_statement||""),Z(t?.history||[])},[c,a,d,m,u]),tt=(0,r.useCallback)(async()=>{const t=await(0,E.default)({url:`${n}/copilotkit/suggested_questions${u}`,method:"GET",headers:T});C(t?.suggested_questions?.data?.map(i=>({message:i,title:i}))||[])},[c,a,d,m,u]),et=()=>{P||h(!0),setTimeout(()=>{h(!1)},V)};return(0,r.useEffect)(()=>{const t=setTimeout(()=>{et()},Q);return()=>{clearTimeout(t)}},[]),(0,o.jsx)("div",{className:J,style:z||{},children:c&&n&&(0,o.jsx)(x.CopilotKit,{runtimeUrl:`${n}/copilotkit/chat${u}`,showDevConsole:!1,headers:T,children:(0,o.jsx)(O.CopilotPopup,{...p,showResponseButton:_!=="follow",labels:{title:s||"DTC Live Chat",initial:l||""},instructions:l||"",onInProgress:t=>{y&&t&&C([]),y&&!t&&tt()},Messages:({messages:t,inProgress:i})=>(0,o.jsx)(S.default,{messages:t,inProgress:i,messagesCallback:K,ResponseButton:_==="follow"?(0,o.jsx)(M.default,{}):void 0,children:(0,o.jsx)($.default,{currentSuggestions:Y})}),Button:({open:t,setOpen:i})=>{const ot=p?.Button||v.default;(0,r.useEffect)(()=>{W(t)},[t]);const b=(0,r.useCallback)(()=>{i(!t),h(!1),(!l||!k?.length)&&j()},[l]);return(0,o.jsxs)(o.Fragment,{children:[R?.popupTip&&P&&!y&&(0,o.jsx)("div",{className:"copilotKitPopup copilotKitPopupTip",children:(0,o.jsx)("button",{onClick:b,"aria-label":"Open Chat",className:"copilotKitPopupTipContent",children:R?.popupTip})}),(0,o.jsx)(ot,{open:t,setOpen:b})]})},children:(0,o.jsx)(q.CopilotAction,{start:l,history:k,commonRender:H,pointsExchangeCouponRender:I,gotocartRender:U,gotocheckoutRender:N,addtocartRender:G,signupRender:F,productRender:A,addtocartHandler:L,productRenderTipMessage:R?.productRenderTipMessage})})})})};var lt=ut;
2
2
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/components/chat/index.tsx"],
4
- "sourcesContent": ["/* eslint-disable react-hooks/exhaustive-deps */\nimport React, { useMemo } from 'react'\nimport { useCallback, useState, useEffect } from 'react'\nimport { CopilotKit } from '@copilotkit/react-core'\nimport { CopilotPopup } from '@copilotkit/react-ui'\nimport DefaultButton from './button.js'\nimport Messages from './messages.js'\nimport ResponseButton from './response.js'\nimport Suggestions from './suggestions.js'\nimport { CopilotAction } from './action.js'\nimport fetcher from '../../helpers/fetcher.js'\n\nexport interface ChatProps {\n title: string\n runtimeUrl: string\n shopifyDomain: string\n /** GA \u7684 client id\n */\n userId: string\n /** \u662F\u5426\u767B\u9646\u7528\u6237 0 or 1\n */\n account?: string\n /** \u7528\u6237\u6D4F\u89C8\u5668\u8BED\u8A00\n */\n locale?: string\n /** \u5F00\u573A\u767D\n */\n prologue?: string\n /** ?a=1&b=2\n */\n query?: string\n /** 'follow' or 'unfollow' | true or false\n * follow: ResponseButton \u4F1A\u8DDF\u968F\u5728 messages \u7684\u540E\u8FB9\n * unfollow: ResponseButton \u5728\u804A\u5929\u6846\u5E95\u90E8\n */\n showResponseButton?: string | boolean\n /** \u901A\u7528 action \u7684\u89E6\u53D1\u4E8B\u4EF6\n */\n commonRender?: string | ((_props: any) => React.ReactElement)\n /** \u901A\u7528 \u79EF\u5206 \u6362 Coupon \u7684\u89E6\u53D1\u4E8B\u4EF6\n */\n pointsExchangeCouponRender?: string | ((_props: any) => React.ReactElement)\n /** \u8DF3\u8F6C checkout action \u5361\u7247\uFF0C\u63A5\u53D7\u53C2\u6570\uFF1A {\"status\":\"complete\",\"args\":[{\"sku\":[\"A3936031\"],\"handle\":\"space-a40-a3936031\"}],\"result\":\"\"}\n * \u540E\u7AEF\u63A5\u53E3\u6587\u6863\uFF1Ahttps://anker-in.feishu.cn/wiki/DOYJwE9oxipWmYk072ncnJNznBb\n */\n gotocheckoutRender?: string | ((_props: any) => React.ReactElement)\n /** \u6253\u5F00\u8D2D\u7269\u8F66 action \u5361\u7247\uFF0C\u63A5\u53D7\u53C2\u6570\uFF1A {\"status\":\"complete\",\"args\":[{\"sku\":[\"A3936031\"],\"handle\":\"space-a40-a3936031\"}],\"result\":\"\"}\n * \u540E\u7AEF\u63A5\u53E3\u6587\u6863\uFF1Ahttps://anker-in.feishu.cn/wiki/DOYJwE9oxipWmYk072ncnJNznBb\n */\n gotocartRender?: string | ((_props: any) => React.ReactElement)\n /** \u6253\u5F00\u8D2D\u7269\u8F66 action \u7684\u89E6\u53D1\u4E8B\u4EF6\n */\n addtocartHandler?: (_args: any) => Promise<any>\n /** \u52A0\u8D2D\u5361\u7247\uFF0C\u63A5\u53D7\u53C2\u6570\uFF1A {\"status\":\"complete\",\"args\":[{\"sku\":[\"A3936031\"],\"handle\":\"space-a40-a3936031\"}],\"result\":\"\"}\n * \u540E\u7AEF\u63A5\u53E3\u6587\u6863\uFF1Ahttps://anker-in.feishu.cn/wiki/DOYJwE9oxipWmYk072ncnJNznBb\n */\n addtocartRender?: string | ((_props: any) => React.ReactElement)\n /** \u8BA2\u9605\u5361\u7247\uFF0C\u63A5\u53D7\u53C2\u6570\uFF1A {\"status\":\"complete\",\"args\":[{\"sku\":[\"A3936031\"],\"handle\":\"space-a40-a3936031\"}],\"result\":\"\"}\n * \u540E\u7AEF\u63A5\u53E3\u6587\u6863\uFF1Ahttps://anker-in.feishu.cn/wiki/DOYJwE9oxipWmYk072ncnJNznBb\n */\n signupRender?: string | ((_props: any) => React.ReactElement)\n /** \u4EA7\u54C1\u5361\u7247\uFF0C\u63A5\u53D7\u53C2\u6570\uFF1A {\"status\":\"complete\",\"args\":[{\"sku\":[\"A3936031\"],\"handle\":\"space-a40-a3936031\"}],\"result\":\"\"}\n * \u540E\u7AEF\u63A5\u53E3\u6587\u6863\uFF1Ahttps://anker-in.feishu.cn/wiki/DOYJwE9oxipWmYk072ncnJNznBb\n */\n productRender?: string | ((_props: any) => React.ReactElement)\n /** CopilotPopup \u81EA\u5B9A\u4E49\u53C2\u6570\uFF0C\u53C2\u8003\uFF1Ahttps://docs.copilotkit.ai/reference/components/CopilotPopup */\n popup?: any\n /** \u6587\u6848\uFF0C{\"productRenderTipMessage\": \"\",\"popupTip\": \"Hi ! Welcome to soundcore Innovations live chat\uFF01\", \"popupTipTimeout\": [3000, 6000]} */\n lang?: any\n /** \u53C2\u8003\u6B64\u6587\u6863\uFF1Ahttps://docs.copilotkit.ai/concepts/customize-look-and-feel */\n style?: any\n className?: string\n}\n\nconst Chat = (props: ChatProps) => {\n const {\n title,\n runtimeUrl,\n popup,\n shopifyDomain,\n userId = '',\n account = '',\n prologue = '',\n locale = '',\n query = '',\n showResponseButton,\n gotocheckoutRender,\n commonRender,\n pointsExchangeCouponRender,\n gotocartRender,\n addtocartRender,\n productRender,\n signupRender,\n addtocartHandler,\n style,\n className = '',\n lang,\n } = props\n const [autoTipOpen, autoTipClose] = lang?.popupTipTimeout || [3000, 6000]\n\n const [openTip, setOpenTip] = useState(false)\n const [openPopup, setOpenPopup] = useState(false)\n const [start, setstart] = useState(prologue)\n const [currentSuggestions, setCurrentSuggestions] = useState([])\n const [history, sethistory] = useState<[{ content: string; role: string }] | []>([])\n\n const headers = useMemo(\n () => ({\n 'x-user-id': userId || '',\n 'x-shopify-domain': shopifyDomain,\n 'x-member-ship': account,\n 'x-user-locale': locale,\n }),\n [userId, shopifyDomain, account, locale]\n )\n\n const getStart = useCallback(async () => {\n const result = await fetcher({\n url: `${runtimeUrl}/copilotkit/start${query}`,\n method: 'GET',\n headers,\n })\n\n setCurrentSuggestions(result?.suggested_questions?.map((item: string) => ({ message: item, title: item })) || [])\n setstart(result?.opening_statement || '')\n sethistory(result?.history || [])\n }, [userId, shopifyDomain, account, locale, query])\n\n const getSuggestions = useCallback(async () => {\n const result = await fetcher({\n url: `${runtimeUrl}/copilotkit/suggested_questions${query}`,\n method: 'GET',\n headers,\n })\n\n setCurrentSuggestions(\n result?.suggested_questions?.data?.map((item: string) => ({ message: item, title: item })) || []\n )\n }, [userId, shopifyDomain, account, locale, query])\n\n const setOpenTipFn = () => {\n if (!openTip) setOpenTip(true)\n setTimeout(() => {\n setOpenTip(false)\n }, autoTipClose)\n }\n\n useEffect(() => {\n const timer = setTimeout(() => {\n setOpenTipFn()\n }, autoTipOpen)\n\n return () => {\n clearTimeout(timer)\n }\n }, [])\n\n return (\n <div className={className} style={style || {}}>\n {userId && runtimeUrl && (\n <CopilotKit runtimeUrl={`${runtimeUrl}/copilotkit/chat${query}`} showDevConsole={false} headers={headers}>\n <CopilotPopup\n {...popup}\n showResponseButton={showResponseButton !== 'follow'}\n labels={{\n title: title || 'DTC Live Chat',\n initial: start || '',\n }}\n instructions={start || ''}\n onInProgress={load => {\n if (openPopup && load) setCurrentSuggestions([])\n if (openPopup && !load) getSuggestions()\n }}\n Messages={({ messages, inProgress }) => (\n <Messages\n messages={messages}\n inProgress={inProgress}\n ResponseButton={showResponseButton === 'follow' ? <ResponseButton /> : undefined}\n >\n <Suggestions currentSuggestions={currentSuggestions} />\n </Messages>\n )}\n Button={({ open, setOpen: setOpenDefault }) => {\n const Button = popup?.Button || DefaultButton\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useEffect(() => {\n setOpenPopup(open)\n }, [open])\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const setOpen = useCallback(() => {\n setOpenDefault(!open)\n setOpenTip(false)\n if (!start || !history?.length) getStart()\n }, [start])\n\n return (\n <>\n {lang?.popupTip && openTip && !openPopup && (\n <div className=\"copilotKitPopup copilotKitPopupTip\">\n <button onClick={setOpen} aria-label=\"Open Chat\" className=\"copilotKitPopupTipContent\">\n {lang?.popupTip}\n </button>\n </div>\n )}\n <Button open={open} setOpen={setOpen} />\n </>\n )\n }}\n >\n <CopilotAction\n start={start}\n history={history}\n commonRender={commonRender}\n pointsExchangeCouponRender={pointsExchangeCouponRender}\n gotocartRender={gotocartRender}\n gotocheckoutRender={gotocheckoutRender}\n addtocartRender={addtocartRender}\n signupRender={signupRender}\n productRender={productRender}\n addtocartHandler={addtocartHandler}\n productRenderTipMessage={lang?.productRenderTipMessage}\n />\n </CopilotPopup>\n </CopilotKit>\n )}\n </div>\n )\n}\n\nexport default Chat\n"],
5
- "mappings": "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",
6
- "names": ["chat_exports", "__export", "chat_default", "__toCommonJS", "import_jsx_runtime", "import_react", "import_react_core", "import_react_ui", "import_button", "import_messages", "import_response", "import_suggestions", "import_action", "import_fetcher", "Chat", "props", "title", "runtimeUrl", "popup", "shopifyDomain", "userId", "account", "prologue", "locale", "query", "showResponseButton", "gotocheckoutRender", "commonRender", "pointsExchangeCouponRender", "gotocartRender", "addtocartRender", "productRender", "signupRender", "addtocartHandler", "style", "className", "lang", "autoTipOpen", "autoTipClose", "openTip", "setOpenTip", "openPopup", "setOpenPopup", "start", "setstart", "currentSuggestions", "setCurrentSuggestions", "history", "sethistory", "headers", "getStart", "result", "fetcher", "item", "getSuggestions", "setOpenTipFn", "timer", "load", "messages", "inProgress", "Messages", "ResponseButton", "Suggestions", "open", "setOpenDefault", "Button", "DefaultButton", "setOpen"]
4
+ "sourcesContent": ["/* eslint-disable react-hooks/exhaustive-deps */\nimport React, { useMemo } from 'react'\nimport { useCallback, useState, useEffect } from 'react'\nimport { CopilotKit } from '@copilotkit/react-core'\nimport { CopilotPopup } from '@copilotkit/react-ui'\nimport DefaultButton from './button.js'\nimport Messages from './messages.js'\nimport ResponseButton from './response.js'\nimport Suggestions from './suggestions.js'\nimport { CopilotAction } from './action.js'\nimport fetcher from '../../helpers/fetcher.js'\n\nexport interface ChatProps {\n title: string\n runtimeUrl: string\n shopifyDomain: string\n /** GA \u7684 client id\n */\n userId: string\n /** \u662F\u5426\u767B\u9646\u7528\u6237 0 or 1\n */\n account?: string\n /** \u7528\u6237\u6D4F\u89C8\u5668\u8BED\u8A00\n */\n locale?: string\n /** \u5F00\u573A\u767D\n */\n prologue?: string\n /** ?a=1&b=2\n */\n query?: string\n /** 'follow' or 'unfollow' | true or false\n * follow: ResponseButton \u4F1A\u8DDF\u968F\u5728 messages \u7684\u540E\u8FB9\n * unfollow: ResponseButton \u5728\u804A\u5929\u6846\u5E95\u90E8\n */\n showResponseButton?: string | boolean\n /** messages \u7684\u56DE\u8C03\u4E8B\u4EF6\n * \u6BCF\u6B21\u751F\u6210/\u63A5\u53D7\u65B0\u7684messages\uFF0C\u4F1A\u5C06 \u6574\u4E2A messages list \u4F20\u9012\u7ED9\u5916\u90E8\n */\n messagesCallback?: (_messages: any) => void\n /** \u901A\u7528 action \u7684\u89E6\u53D1\u4E8B\u4EF6\n */\n commonRender?: string | ((_props: any) => React.ReactElement)\n /** \u901A\u7528 \u79EF\u5206 \u6362 Coupon \u7684\u89E6\u53D1\u4E8B\u4EF6\n */\n pointsExchangeCouponRender?: string | ((_props: any) => React.ReactElement)\n /** \u8DF3\u8F6C checkout action \u5361\u7247\uFF0C\u63A5\u53D7\u53C2\u6570\uFF1A {\"status\":\"complete\",\"args\":[{\"sku\":[\"A3936031\"],\"handle\":\"space-a40-a3936031\"}],\"result\":\"\"}\n * \u540E\u7AEF\u63A5\u53E3\u6587\u6863\uFF1Ahttps://anker-in.feishu.cn/wiki/DOYJwE9oxipWmYk072ncnJNznBb\n */\n gotocheckoutRender?: string | ((_props: any) => React.ReactElement)\n /** \u6253\u5F00\u8D2D\u7269\u8F66 action \u5361\u7247\uFF0C\u63A5\u53D7\u53C2\u6570\uFF1A {\"status\":\"complete\",\"args\":[{\"sku\":[\"A3936031\"],\"handle\":\"space-a40-a3936031\"}],\"result\":\"\"}\n * \u540E\u7AEF\u63A5\u53E3\u6587\u6863\uFF1Ahttps://anker-in.feishu.cn/wiki/DOYJwE9oxipWmYk072ncnJNznBb\n */\n gotocartRender?: string | ((_props: any) => React.ReactElement)\n /** \u6253\u5F00\u8D2D\u7269\u8F66 action \u7684\u89E6\u53D1\u4E8B\u4EF6\n */\n addtocartHandler?: (_args: any) => Promise<any>\n /** \u52A0\u8D2D\u5361\u7247\uFF0C\u63A5\u53D7\u53C2\u6570\uFF1A {\"status\":\"complete\",\"args\":[{\"sku\":[\"A3936031\"],\"handle\":\"space-a40-a3936031\"}],\"result\":\"\"}\n * \u540E\u7AEF\u63A5\u53E3\u6587\u6863\uFF1Ahttps://anker-in.feishu.cn/wiki/DOYJwE9oxipWmYk072ncnJNznBb\n */\n addtocartRender?: string | ((_props: any) => React.ReactElement)\n /** \u8BA2\u9605\u5361\u7247\uFF0C\u63A5\u53D7\u53C2\u6570\uFF1A {\"status\":\"complete\",\"args\":[{\"sku\":[\"A3936031\"],\"handle\":\"space-a40-a3936031\"}],\"result\":\"\"}\n * \u540E\u7AEF\u63A5\u53E3\u6587\u6863\uFF1Ahttps://anker-in.feishu.cn/wiki/DOYJwE9oxipWmYk072ncnJNznBb\n */\n signupRender?: string | ((_props: any) => React.ReactElement)\n /** \u4EA7\u54C1\u5361\u7247\uFF0C\u63A5\u53D7\u53C2\u6570\uFF1A {\"status\":\"complete\",\"args\":[{\"sku\":[\"A3936031\"],\"handle\":\"space-a40-a3936031\"}],\"result\":\"\"}\n * \u540E\u7AEF\u63A5\u53E3\u6587\u6863\uFF1Ahttps://anker-in.feishu.cn/wiki/DOYJwE9oxipWmYk072ncnJNznBb\n */\n productRender?: string | ((_props: any) => React.ReactElement)\n /** CopilotPopup \u81EA\u5B9A\u4E49\u53C2\u6570\uFF0C\u53C2\u8003\uFF1Ahttps://docs.copilotkit.ai/reference/components/CopilotPopup */\n popup?: any\n /** \u6587\u6848\uFF0C{\"productRenderTipMessage\": \"\",\"popupTip\": \"Hi ! Welcome to soundcore Innovations live chat\uFF01\", \"popupTipTimeout\": [3000, 6000]} */\n lang?: any\n /** \u53C2\u8003\u6B64\u6587\u6863\uFF1Ahttps://docs.copilotkit.ai/concepts/customize-look-and-feel */\n style?: any\n className?: string\n}\n\nconst Chat = (props: ChatProps) => {\n const {\n title,\n runtimeUrl,\n popup,\n shopifyDomain,\n userId = '',\n account = '',\n prologue = '',\n locale = '',\n query = '',\n messagesCallback,\n showResponseButton,\n gotocheckoutRender,\n commonRender,\n pointsExchangeCouponRender,\n gotocartRender,\n addtocartRender,\n productRender,\n signupRender,\n addtocartHandler,\n style,\n className = '',\n lang,\n } = props\n const [autoTipOpen, autoTipClose] = lang?.popupTipTimeout || [3000, 6000]\n\n const [openTip, setOpenTip] = useState(false)\n const [openPopup, setOpenPopup] = useState(false)\n const [start, setstart] = useState(prologue)\n const [currentSuggestions, setCurrentSuggestions] = useState([])\n const [history, sethistory] = useState<[{ content: string; role: string }] | []>([])\n\n const headers = useMemo(\n () => ({\n 'x-user-id': userId || '',\n 'x-shopify-domain': shopifyDomain,\n 'x-member-ship': account,\n 'x-user-locale': locale,\n }),\n [userId, shopifyDomain, account, locale]\n )\n\n const getStart = useCallback(async () => {\n const result = await fetcher({\n url: `${runtimeUrl}/copilotkit/start${query}`,\n method: 'GET',\n headers,\n })\n\n setCurrentSuggestions(result?.suggested_questions?.map((item: string) => ({ message: item, title: item })) || [])\n setstart(result?.opening_statement || '')\n sethistory(result?.history || [])\n }, [userId, shopifyDomain, account, locale, query])\n\n const getSuggestions = useCallback(async () => {\n const result = await fetcher({\n url: `${runtimeUrl}/copilotkit/suggested_questions${query}`,\n method: 'GET',\n headers,\n })\n\n setCurrentSuggestions(\n result?.suggested_questions?.data?.map((item: string) => ({ message: item, title: item })) || []\n )\n }, [userId, shopifyDomain, account, locale, query])\n\n const setOpenTipFn = () => {\n if (!openTip) setOpenTip(true)\n setTimeout(() => {\n setOpenTip(false)\n }, autoTipClose)\n }\n\n useEffect(() => {\n const timer = setTimeout(() => {\n setOpenTipFn()\n }, autoTipOpen)\n\n return () => {\n clearTimeout(timer)\n }\n }, [])\n\n return (\n <div className={className} style={style || {}}>\n {userId && runtimeUrl && (\n <CopilotKit runtimeUrl={`${runtimeUrl}/copilotkit/chat${query}`} showDevConsole={false} headers={headers}>\n <CopilotPopup\n {...popup}\n showResponseButton={showResponseButton !== 'follow'}\n labels={{\n title: title || 'DTC Live Chat',\n initial: start || '',\n }}\n instructions={start || ''}\n onInProgress={load => {\n if (openPopup && load) setCurrentSuggestions([])\n if (openPopup && !load) getSuggestions()\n }}\n Messages={({ messages, inProgress }) => (\n <Messages\n messages={messages}\n inProgress={inProgress}\n messagesCallback={messagesCallback}\n ResponseButton={showResponseButton === 'follow' ? <ResponseButton /> : undefined}\n >\n <Suggestions currentSuggestions={currentSuggestions} />\n </Messages>\n )}\n Button={({ open, setOpen: setOpenDefault }) => {\n const Button = popup?.Button || DefaultButton\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useEffect(() => {\n setOpenPopup(open)\n }, [open])\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const setOpen = useCallback(() => {\n setOpenDefault(!open)\n setOpenTip(false)\n if (!start || !history?.length) getStart()\n }, [start])\n\n return (\n <>\n {lang?.popupTip && openTip && !openPopup && (\n <div className=\"copilotKitPopup copilotKitPopupTip\">\n <button onClick={setOpen} aria-label=\"Open Chat\" className=\"copilotKitPopupTipContent\">\n {lang?.popupTip}\n </button>\n </div>\n )}\n <Button open={open} setOpen={setOpen} />\n </>\n )\n }}\n >\n <CopilotAction\n start={start}\n history={history}\n commonRender={commonRender}\n pointsExchangeCouponRender={pointsExchangeCouponRender}\n gotocartRender={gotocartRender}\n gotocheckoutRender={gotocheckoutRender}\n addtocartRender={addtocartRender}\n signupRender={signupRender}\n productRender={productRender}\n addtocartHandler={addtocartHandler}\n productRenderTipMessage={lang?.productRenderTipMessage}\n />\n </CopilotPopup>\n </CopilotKit>\n )}\n </div>\n )\n}\n\nexport default Chat\n"],
5
+ "mappings": "skBAAA,IAAAA,GAAA,GAAAC,GAAAD,GAAA,aAAAE,KAAA,eAAAC,GAAAH,IAuLkE,IAAAI,EAAA,6BAtLlEC,EAA+B,iBAC/BA,EAAiD,iBACjDC,EAA2B,kCAC3BC,EAA6B,gCAC7BC,EAA0B,0BAC1BC,EAAqB,4BACrBC,EAA2B,4BAC3BC,EAAwB,+BACxBC,EAA8B,uBAC9BC,EAAoB,uCAoEpB,MAAMC,GAAQC,GAAqB,CACjC,KAAM,CACJ,MAAAC,EACA,WAAAC,EACA,MAAAC,EACA,cAAAC,EACA,OAAAC,EAAS,GACT,QAAAC,EAAU,GACV,SAAAC,EAAW,GACX,OAAAC,EAAS,GACT,MAAAC,EAAQ,GACR,iBAAAC,EACA,mBAAAC,EACA,mBAAAC,EACA,aAAAC,EACA,2BAAAC,EACA,eAAAC,EACA,gBAAAC,EACA,cAAAC,EACA,aAAAC,EACA,iBAAAC,EACA,MAAAC,EACA,UAAAC,EAAY,GACZ,KAAAC,CACF,EAAItB,EACE,CAACuB,EAAaC,CAAY,EAAIF,GAAM,iBAAmB,CAAC,IAAM,GAAI,EAElE,CAACG,EAASC,CAAU,KAAI,YAAS,EAAK,EACtC,CAACC,EAAWC,CAAY,KAAI,YAAS,EAAK,EAC1C,CAACC,EAAOC,CAAQ,KAAI,YAASvB,CAAQ,EACrC,CAACwB,EAAoBC,CAAqB,KAAI,YAAS,CAAC,CAAC,EACzD,CAACC,EAASC,CAAU,KAAI,YAAmD,CAAC,CAAC,EAE7EC,KAAU,WACd,KAAO,CACL,YAAa9B,GAAU,GACvB,mBAAoBD,EACpB,gBAAiBE,EACjB,gBAAiBE,CACnB,GACA,CAACH,EAAQD,EAAeE,EAASE,CAAM,CACzC,EAEM4B,KAAW,eAAY,SAAY,CACvC,MAAMC,EAAS,QAAM,EAAAC,SAAQ,CAC3B,IAAK,GAAGpC,CAAU,oBAAoBO,CAAK,GAC3C,OAAQ,MACR,QAAA0B,CACF,CAAC,EAEDH,EAAsBK,GAAQ,qBAAqB,IAAKE,IAAkB,CAAE,QAASA,EAAM,MAAOA,CAAK,EAAE,GAAK,CAAC,CAAC,EAChHT,EAASO,GAAQ,mBAAqB,EAAE,EACxCH,EAAWG,GAAQ,SAAW,CAAC,CAAC,CAClC,EAAG,CAAChC,EAAQD,EAAeE,EAASE,EAAQC,CAAK,CAAC,EAE5C+B,MAAiB,eAAY,SAAY,CAC7C,MAAMH,EAAS,QAAM,EAAAC,SAAQ,CAC3B,IAAK,GAAGpC,CAAU,kCAAkCO,CAAK,GACzD,OAAQ,MACR,QAAA0B,CACF,CAAC,EAEDH,EACEK,GAAQ,qBAAqB,MAAM,IAAKE,IAAkB,CAAE,QAASA,EAAM,MAAOA,CAAK,EAAE,GAAK,CAAC,CACjG,CACF,EAAG,CAAClC,EAAQD,EAAeE,EAASE,EAAQC,CAAK,CAAC,EAE5CgC,GAAe,IAAM,CACpBhB,GAASC,EAAW,EAAI,EAC7B,WAAW,IAAM,CACfA,EAAW,EAAK,CAClB,EAAGF,CAAY,CACjB,EAEA,sBAAU,IAAM,CACd,MAAMkB,EAAQ,WAAW,IAAM,CAC7BD,GAAa,CACf,EAAGlB,CAAW,EAEd,MAAO,IAAM,CACX,aAAamB,CAAK,CACpB,CACF,EAAG,CAAC,CAAC,KAGH,OAAC,OAAI,UAAWrB,EAAW,MAAOD,GAAS,CAAC,EACzC,SAAAf,GAAUH,MACT,OAAC,cAAW,WAAY,GAAGA,CAAU,mBAAmBO,CAAK,GAAI,eAAgB,GAAO,QAAS0B,EAC/F,mBAAC,gBACE,GAAGhC,EACJ,mBAAoBQ,IAAuB,SAC3C,OAAQ,CACN,MAAOV,GAAS,gBAChB,QAAS4B,GAAS,EACpB,EACA,aAAcA,GAAS,GACvB,aAAcc,GAAQ,CAChBhB,GAAagB,GAAMX,EAAsB,CAAC,CAAC,EAC3CL,GAAa,CAACgB,GAAMH,GAAe,CACzC,EACA,SAAU,CAAC,CAAE,SAAAI,EAAU,WAAAC,CAAW,OAChC,OAAC,EAAAC,QAAA,CACC,SAAUF,EACV,WAAYC,EACZ,iBAAkBnC,EAClB,eAAgBC,IAAuB,YAAW,OAAC,EAAAoC,QAAA,EAAe,EAAK,OAEvE,mBAAC,EAAAC,QAAA,CAAY,mBAAoBjB,EAAoB,EACvD,EAEF,OAAQ,CAAC,CAAE,KAAAkB,EAAM,QAASC,CAAe,IAAM,CAC7C,MAAMC,GAAShD,GAAO,QAAU,EAAAiD,WAEhC,aAAU,IAAM,CACdxB,EAAaqB,CAAI,CACnB,EAAG,CAACA,CAAI,CAAC,EAGT,MAAMI,KAAU,eAAY,IAAM,CAChCH,EAAe,CAACD,CAAI,EACpBvB,EAAW,EAAK,GACZ,CAACG,GAAS,CAACI,GAAS,SAAQG,EAAS,CAC3C,EAAG,CAACP,CAAK,CAAC,EAEV,SACE,oBACG,UAAAP,GAAM,UAAYG,GAAW,CAACE,MAC7B,OAAC,OAAI,UAAU,qCACb,mBAAC,UAAO,QAAS0B,EAAS,aAAW,YAAY,UAAU,4BACxD,SAAA/B,GAAM,SACT,EACF,KAEF,OAAC6B,GAAA,CAAO,KAAMF,EAAM,QAASI,EAAS,GACxC,CAEJ,EAEA,mBAAC,iBACC,MAAOxB,EACP,QAASI,EACT,aAAcpB,EACd,2BAA4BC,EAC5B,eAAgBC,EAChB,mBAAoBH,EACpB,gBAAiBI,EACjB,aAAcE,EACd,cAAeD,EACf,iBAAkBE,EAClB,wBAAyBG,GAAM,wBACjC,EACF,EACF,EAEJ,CAEJ,EAEA,IAAOnC,GAAQY",
6
+ "names": ["chat_exports", "__export", "chat_default", "__toCommonJS", "import_jsx_runtime", "import_react", "import_react_core", "import_react_ui", "import_button", "import_messages", "import_response", "import_suggestions", "import_action", "import_fetcher", "Chat", "props", "title", "runtimeUrl", "popup", "shopifyDomain", "userId", "account", "prologue", "locale", "query", "messagesCallback", "showResponseButton", "gotocheckoutRender", "commonRender", "pointsExchangeCouponRender", "gotocartRender", "addtocartRender", "productRender", "signupRender", "addtocartHandler", "style", "className", "lang", "autoTipOpen", "autoTipClose", "openTip", "setOpenTip", "openPopup", "setOpenPopup", "start", "setstart", "currentSuggestions", "setCurrentSuggestions", "history", "sethistory", "headers", "getStart", "result", "fetcher", "item", "getSuggestions", "setOpenTipFn", "timer", "load", "messages", "inProgress", "Messages", "ResponseButton", "Suggestions", "open", "setOpenDefault", "Button", "DefaultButton", "setOpen"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var k=Object.create;var g=Object.defineProperty;var I=Object.getOwnPropertyDescriptor;var L=Object.getOwnPropertyNames;var T=Object.getPrototypeOf,b=Object.prototype.hasOwnProperty;var w=(t,s)=>{for(var o in s)g(t,o,{get:s[o],enumerable:!0})},h=(t,s,o,d)=>{if(s&&typeof s=="object"||typeof s=="function")for(let a of L(s))!b.call(t,a)&&a!==o&&g(t,a,{get:()=>s[a],enumerable:!(d=I(s,a))||d.enumerable});return t};var H=(t,s,o)=>(o=t!=null?k(T(t)):{},h(s||!t||!t.__esModule?g(o,"default",{value:t,enumerable:!0}):o,t)),S=t=>h(g({},"__esModule",{value:!0}),t);var P={};w(P,{default:()=>D});module.exports=S(P);var n=require("react/jsx-runtime"),r=H(require("react")),A=require("@copilotkit/react-ui"),x=require("./markdown.js"),C=require("@copilotkit/react-core"),i=require("@copilotkit/runtime-client-gql");const B=({messages:t,inProgress:s,ResponseButton:o,children:d})=>{const[a,p]=(0,r.useState)(!0),{chatComponentsCache:m}=(0,C.useCopilotContext)(),u=(0,A.useChatContext)();t=[...(0,r.useMemo)(()=>F(u.labels.initial),[u.labels.initial]),...t];const y={};for(let e=0;e<t.length;e++)if(t[e]instanceof i.ActionExecutionMessage){const l=t[e].id,c=t.find(f=>f instanceof i.ResultMessage&&f.actionExecutionId===l);c&&(y[l]=i.ResultMessage.decodeResult(c.result||""))}const R=r.default.useRef(null),K=r.default.useRef(null),E=()=>{R.current&&R.current.scrollIntoView({behavior:"auto"})};return(0,r.useEffect)(()=>{E()},[t]),(0,r.useEffect)(()=>{const e=document.querySelector(".copilotKitInput textarea");e&&e.addEventListener("click",function(){e.value&&document.activeElement===e?p(!1):(p(!0),E())}),e&&e.addEventListener("input",function(){e.value&&document.activeElement===e?p(!1):(p(!0),E())})},[]),(0,r.useEffect)(()=>{const e=K.current;a&&e?(e.style.maxHeight="500px",e.style.overflow="visible"):!a&&e&&(e.style.maxHeight="0",e.style.overflow="hidden")},[a]),(0,n.jsxs)("div",{className:"copilotKitMessages",children:[t.map((e,l)=>{const c=l===t.length-1;if(e instanceof i.TextMessage&&e.role==="user")return(0,n.jsx)("div",{className:"copilotKitMessage copilotKitUserMessage",children:e.content},l);if(e instanceof i.TextMessage&&e.role=="assistant")return(0,n.jsx)("div",{className:"copilotKitMessage copilotKitAssistantMessage",children:c&&s&&!e.content?u.icons.spinnerIcon:(0,n.jsx)(x.Markdown,{content:e.content})},l);if(e instanceof i.ActionExecutionMessage)if(m.current!==null&&m.current[e.name]){const f=m.current[e.name];if(typeof f=="string")return c&&s?(0,n.jsxs)("div",{className:"copilotKitMessage copilotKitAssistantMessage",children:[u.icons.spinnerIcon," ",(0,n.jsx)("span",{className:"inProgressLabel",children:f})]},l):null;{const N=e.arguments;let M="inProgress";y[e.id]!==void 0?M="complete":e.status.code!==i.MessageStatusCode.Pending&&(M="executing");const v=f({status:M,args:N,result:y[e.id]});return!v&&M==="complete"?null:typeof v=="string"?(0,n.jsxs)("div",{className:"copilotKitMessage copilotKitAssistantMessage",children:[c&&s&&u.icons.spinnerIcon," ",v]},l):(0,n.jsx)("div",{className:"copilotKitCustomAssistantMessage",children:v},l)}}else return!s||!c?null:(0,n.jsx)("div",{className:"copilotKitMessage copilotKitAssistantMessage",children:u.icons.spinnerIcon},l)}),(0,n.jsx)("div",{className:"responseButtonBox",children:o}),(0,n.jsx)("footer",{ref:R,children:(0,n.jsx)("div",{className:"copilotKitMessagesFooter",ref:K,children:d})})]})};function F(t){let s=[];return t&&(Array.isArray(t)?s.push(...t):s.push(t)),s.map(o=>new i.TextMessage({role:i.Role.Assistant,content:o}))}var D=B;
1
+ "use strict";var k=Object.create;var g=Object.defineProperty;var L=Object.getOwnPropertyDescriptor;var T=Object.getOwnPropertyNames;var w=Object.getPrototypeOf,H=Object.prototype.hasOwnProperty;var S=(t,s)=>{for(var o in s)g(t,o,{get:s[o],enumerable:!0})},A=(t,s,o,d)=>{if(s&&typeof s=="object"||typeof s=="function")for(let c of T(s))!H.call(t,c)&&c!==o&&g(t,c,{get:()=>s[c],enumerable:!(d=L(s,c))||d.enumerable});return t};var b=(t,s,o)=>(o=t!=null?k(w(t)):{},A(s||!t||!t.__esModule?g(o,"default",{value:t,enumerable:!0}):o,t)),B=t=>A(g({},"__esModule",{value:!0}),t);var q={};S(q,{default:()=>P});module.exports=B(q);var n=require("react/jsx-runtime"),r=b(require("react")),x=require("@copilotkit/react-ui"),N=require("./markdown.js"),C=require("@copilotkit/react-core"),i=require("@copilotkit/runtime-client-gql");const F=({messages:t,inProgress:s,ResponseButton:o,messagesCallback:d,children:c})=>{const[m,p]=(0,r.useState)(!0),{chatComponentsCache:y}=(0,C.useCopilotContext)(),u=(0,x.useChatContext)();t=[...(0,r.useMemo)(()=>D(u.labels.initial),[u.labels.initial]),...t];const R={};for(let e=0;e<t.length;e++)if(t[e]instanceof i.ActionExecutionMessage){const l=t[e].id,a=t.find(f=>f instanceof i.ResultMessage&&f.actionExecutionId===l);a&&(R[l]=i.ResultMessage.decodeResult(a.result||""))}const E=r.default.useRef(null),h=r.default.useRef(null),K=()=>{E.current&&E.current.scrollIntoView({behavior:"auto"})};return(0,r.useEffect)(()=>{K()},[t]),(0,r.useEffect)(()=>{d&&d(t)},[t]),(0,r.useEffect)(()=>{const e=document.querySelector(".copilotKitInput textarea");e&&e.addEventListener("click",function(){e.value&&document.activeElement===e?p(!1):(p(!0),K())}),e&&e.addEventListener("input",function(){e.value&&document.activeElement===e?p(!1):(p(!0),K())})},[]),(0,r.useEffect)(()=>{const e=h.current;m&&e?(e.style.maxHeight="500px",e.style.overflow="visible"):!m&&e&&(e.style.maxHeight="0",e.style.overflow="hidden")},[m]),(0,n.jsxs)("div",{className:"copilotKitMessages",children:[t.map((e,l)=>{const a=l===t.length-1;if(e instanceof i.TextMessage&&e.role==="user")return(0,n.jsx)("div",{className:"copilotKitMessage copilotKitUserMessage",children:e.content},l);if(e instanceof i.TextMessage&&e.role=="assistant")return(0,n.jsx)("div",{className:"copilotKitMessage copilotKitAssistantMessage",children:a&&s&&!e.content?u.icons.spinnerIcon:(0,n.jsx)(N.Markdown,{content:e.content})},l);if(e instanceof i.ActionExecutionMessage)if(y.current!==null&&y.current[e.name]){const f=y.current[e.name];if(typeof f=="string")return a&&s?(0,n.jsxs)("div",{className:"copilotKitMessage copilotKitAssistantMessage",children:[u.icons.spinnerIcon," ",(0,n.jsx)("span",{className:"inProgressLabel",children:f})]},l):null;{const I=e.arguments;let M="inProgress";R[e.id]!==void 0?M="complete":e.status.code!==i.MessageStatusCode.Pending&&(M="executing");const v=f({status:M,args:I,result:R[e.id]});return!v&&M==="complete"?null:typeof v=="string"?(0,n.jsxs)("div",{className:"copilotKitMessage copilotKitAssistantMessage",children:[a&&s&&u.icons.spinnerIcon," ",v]},l):(0,n.jsx)("div",{className:"copilotKitCustomAssistantMessage",children:v},l)}}else return!s||!a?null:(0,n.jsx)("div",{className:"copilotKitMessage copilotKitAssistantMessage",children:u.icons.spinnerIcon},l)}),(0,n.jsx)("div",{className:"responseButtonBox",children:o}),(0,n.jsx)("footer",{ref:E,children:(0,n.jsx)("div",{className:"copilotKitMessagesFooter",ref:h,children:c})})]})};function D(t){let s=[];return t&&(Array.isArray(t)?s.push(...t):s.push(t)),s.map(o=>new i.TextMessage({role:i.Role.Assistant,content:o}))}var P=F;
2
2
  //# sourceMappingURL=messages.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/components/chat/messages.tsx"],
4
- "sourcesContent": ["import React, { useEffect, useMemo, useState } from 'react'\nimport type { MessagesProps } from './props.js'\nimport { useChatContext } from '@copilotkit/react-ui'\nimport { Markdown } from './markdown.js'\nimport { type RenderFunctionStatus, useCopilotContext } from '@copilotkit/react-core'\nimport {\n MessageStatusCode,\n ActionExecutionMessage,\n Message,\n ResultMessage,\n TextMessage,\n Role,\n} from '@copilotkit/runtime-client-gql'\n\nconst Messages = ({ messages, inProgress, ResponseButton, children }: MessagesProps) => {\n const [isExpanded, setIsExpanded] = useState(true)\n\n const { chatComponentsCache } = useCopilotContext()\n\n const context = useChatContext()\n const initialMessages = useMemo(() => makeInitialMessages(context.labels.initial), [context.labels.initial])\n messages = [...initialMessages, ...messages]\n\n const functionResults: Record<string, string> = {}\n\n for (let i = 0; i < messages.length; i++) {\n if (messages[i] instanceof ActionExecutionMessage) {\n const id = messages[i].id\n const resultMessage: ResultMessage | undefined = messages.find(\n message => message instanceof ResultMessage && message.actionExecutionId === id\n ) as ResultMessage | undefined\n\n if (resultMessage) {\n functionResults[id] = ResultMessage.decodeResult(resultMessage.result || '')\n }\n }\n }\n\n const messagesEndRef = React.useRef<HTMLDivElement>(null)\n const messagesEndChildRef = React.useRef<HTMLDivElement>(null)\n\n const scrollToBottom = () => {\n if (messagesEndRef.current) {\n messagesEndRef.current.scrollIntoView({\n behavior: 'auto',\n })\n }\n }\n\n useEffect(() => {\n scrollToBottom()\n }, [messages])\n\n useEffect(() => {\n const textarea = document.querySelector('.copilotKitInput textarea') as HTMLTextAreaElement\n\n textarea &&\n textarea.addEventListener('click', function () {\n if (textarea.value && document.activeElement === textarea) {\n setIsExpanded(false)\n } else {\n setIsExpanded(true)\n scrollToBottom()\n }\n })\n textarea &&\n textarea.addEventListener('input', function () {\n if (textarea.value && document.activeElement === textarea) {\n setIsExpanded(false)\n } else {\n setIsExpanded(true)\n scrollToBottom()\n }\n })\n }, [])\n\n useEffect(() => {\n const content = messagesEndChildRef.current\n if (isExpanded && content) {\n content.style.maxHeight = '500px'\n content.style.overflow = 'visible'\n } else if (!isExpanded && content) {\n content.style.maxHeight = '0'\n content.style.overflow = 'hidden'\n }\n }, [isExpanded])\n\n return (\n <div className=\"copilotKitMessages\">\n {messages.map((message, index) => {\n const isCurrentMessage = index === messages.length - 1\n\n if (message instanceof TextMessage && message.role === 'user') {\n return (\n <div key={index} className=\"copilotKitMessage copilotKitUserMessage\">\n {message.content}\n </div>\n )\n } else if (message instanceof TextMessage && message.role == 'assistant') {\n return (\n <div key={index} className={`copilotKitMessage copilotKitAssistantMessage`}>\n {isCurrentMessage && inProgress && !message.content ? (\n context.icons.spinnerIcon\n ) : (\n <Markdown content={message.content} />\n )}\n </div>\n )\n } else if (message instanceof ActionExecutionMessage) {\n if (chatComponentsCache.current !== null && chatComponentsCache.current[message.name]) {\n const render = chatComponentsCache.current[message.name]\n // render a static string\n if (typeof render === 'string') {\n // when render is static, we show it only when in progress\n if (isCurrentMessage && inProgress) {\n return (\n <div key={index} className={`copilotKitMessage copilotKitAssistantMessage`}>\n {context.icons.spinnerIcon} <span className=\"inProgressLabel\">{render}</span>\n </div>\n )\n }\n // Done - silent by default to avoid a series of \"done\" messages\n else {\n return null\n }\n }\n // render is a function\n else {\n const args = message.arguments\n\n let status: RenderFunctionStatus = 'inProgress'\n\n if (functionResults[message.id] !== undefined) {\n status = 'complete'\n } else if (message.status.code !== MessageStatusCode.Pending) {\n status = 'executing'\n }\n\n const toRender = render({\n status: status as any,\n args,\n result: functionResults[message.id],\n })\n\n // No result and complete: stay silent\n if (!toRender && status === 'complete') {\n return null\n }\n\n if (typeof toRender === 'string') {\n return (\n <div key={index} className={`copilotKitMessage copilotKitAssistantMessage`}>\n {isCurrentMessage && inProgress && context.icons.spinnerIcon} {toRender}\n </div>\n )\n } else {\n return (\n <div key={index} className=\"copilotKitCustomAssistantMessage\">\n {toRender}\n </div>\n )\n }\n }\n }\n // No render function found- show the default message\n else if (!inProgress || !isCurrentMessage) {\n // Done - silent by default to avoid a series of \"done\" messages\n return null\n } else {\n // In progress\n return (\n <div key={index} className={`copilotKitMessage copilotKitAssistantMessage`}>\n {context.icons.spinnerIcon}\n </div>\n )\n }\n }\n })}\n <div className=\"responseButtonBox\">{ResponseButton}</div>\n <footer ref={messagesEndRef}>\n <div className=\"copilotKitMessagesFooter\" ref={messagesEndChildRef}>\n {children}\n </div>\n </footer>\n </div>\n )\n}\n\nfunction makeInitialMessages(initial?: string | string[]): Message[] {\n let initialArray: string[] = []\n if (initial) {\n if (Array.isArray(initial)) {\n initialArray.push(...initial)\n } else {\n initialArray.push(initial)\n }\n }\n\n return initialArray.map(\n message =>\n new TextMessage({\n role: Role.Assistant,\n content: message,\n })\n )\n}\n\nexport default Messages\n"],
5
- "mappings": "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",
6
- "names": ["messages_exports", "__export", "messages_default", "__toCommonJS", "import_jsx_runtime", "import_react", "import_react_ui", "import_markdown", "import_react_core", "import_runtime_client_gql", "Messages", "messages", "inProgress", "ResponseButton", "children", "isExpanded", "setIsExpanded", "chatComponentsCache", "context", "makeInitialMessages", "functionResults", "i", "id", "resultMessage", "message", "messagesEndRef", "React", "messagesEndChildRef", "scrollToBottom", "textarea", "content", "index", "isCurrentMessage", "render", "args", "status", "toRender", "initial", "initialArray"]
4
+ "sourcesContent": ["import React, { useEffect, useMemo, useState } from 'react'\nimport type { MessagesProps } from './props.js'\nimport { useChatContext } from '@copilotkit/react-ui'\nimport { Markdown } from './markdown.js'\nimport { type RenderFunctionStatus, useCopilotContext } from '@copilotkit/react-core'\nimport {\n MessageStatusCode,\n ActionExecutionMessage,\n Message,\n ResultMessage,\n TextMessage,\n Role,\n} from '@copilotkit/runtime-client-gql'\n\nconst Messages = ({ messages, inProgress, ResponseButton, messagesCallback, children }: MessagesProps) => {\n const [isExpanded, setIsExpanded] = useState(true)\n\n const { chatComponentsCache } = useCopilotContext()\n\n const context = useChatContext()\n const initialMessages = useMemo(() => makeInitialMessages(context.labels.initial), [context.labels.initial])\n messages = [...initialMessages, ...messages]\n\n const functionResults: Record<string, string> = {}\n\n for (let i = 0; i < messages.length; i++) {\n if (messages[i] instanceof ActionExecutionMessage) {\n const id = messages[i].id\n const resultMessage: ResultMessage | undefined = messages.find(\n message => message instanceof ResultMessage && message.actionExecutionId === id\n ) as ResultMessage | undefined\n\n if (resultMessage) {\n functionResults[id] = ResultMessage.decodeResult(resultMessage.result || '')\n }\n }\n }\n\n const messagesEndRef = React.useRef<HTMLDivElement>(null)\n const messagesEndChildRef = React.useRef<HTMLDivElement>(null)\n\n const scrollToBottom = () => {\n if (messagesEndRef.current) {\n messagesEndRef.current.scrollIntoView({\n behavior: 'auto',\n })\n }\n }\n\n useEffect(() => {\n scrollToBottom()\n }, [messages])\n\n useEffect(() => {\n if (messagesCallback) messagesCallback(messages)\n }, [messages])\n\n useEffect(() => {\n const textarea = document.querySelector('.copilotKitInput textarea') as HTMLTextAreaElement\n\n textarea &&\n textarea.addEventListener('click', function () {\n if (textarea.value && document.activeElement === textarea) {\n setIsExpanded(false)\n } else {\n setIsExpanded(true)\n scrollToBottom()\n }\n })\n textarea &&\n textarea.addEventListener('input', function () {\n if (textarea.value && document.activeElement === textarea) {\n setIsExpanded(false)\n } else {\n setIsExpanded(true)\n scrollToBottom()\n }\n })\n }, [])\n\n useEffect(() => {\n const content = messagesEndChildRef.current\n if (isExpanded && content) {\n content.style.maxHeight = '500px'\n content.style.overflow = 'visible'\n } else if (!isExpanded && content) {\n content.style.maxHeight = '0'\n content.style.overflow = 'hidden'\n }\n }, [isExpanded])\n\n return (\n <div className=\"copilotKitMessages\">\n {messages.map((message, index) => {\n const isCurrentMessage = index === messages.length - 1\n\n if (message instanceof TextMessage && message.role === 'user') {\n return (\n <div key={index} className=\"copilotKitMessage copilotKitUserMessage\">\n {message.content}\n </div>\n )\n } else if (message instanceof TextMessage && message.role == 'assistant') {\n return (\n <div key={index} className={`copilotKitMessage copilotKitAssistantMessage`}>\n {isCurrentMessage && inProgress && !message.content ? (\n context.icons.spinnerIcon\n ) : (\n <Markdown content={message.content} />\n )}\n </div>\n )\n } else if (message instanceof ActionExecutionMessage) {\n if (chatComponentsCache.current !== null && chatComponentsCache.current[message.name]) {\n const render = chatComponentsCache.current[message.name]\n // render a static string\n if (typeof render === 'string') {\n // when render is static, we show it only when in progress\n if (isCurrentMessage && inProgress) {\n return (\n <div key={index} className={`copilotKitMessage copilotKitAssistantMessage`}>\n {context.icons.spinnerIcon} <span className=\"inProgressLabel\">{render}</span>\n </div>\n )\n }\n // Done - silent by default to avoid a series of \"done\" messages\n else {\n return null\n }\n }\n // render is a function\n else {\n const args = message.arguments\n\n let status: RenderFunctionStatus = 'inProgress'\n\n if (functionResults[message.id] !== undefined) {\n status = 'complete'\n } else if (message.status.code !== MessageStatusCode.Pending) {\n status = 'executing'\n }\n\n const toRender = render({\n status: status as any,\n args,\n result: functionResults[message.id],\n })\n\n // No result and complete: stay silent\n if (!toRender && status === 'complete') {\n return null\n }\n\n if (typeof toRender === 'string') {\n return (\n <div key={index} className={`copilotKitMessage copilotKitAssistantMessage`}>\n {isCurrentMessage && inProgress && context.icons.spinnerIcon} {toRender}\n </div>\n )\n } else {\n return (\n <div key={index} className=\"copilotKitCustomAssistantMessage\">\n {toRender}\n </div>\n )\n }\n }\n }\n // No render function found- show the default message\n else if (!inProgress || !isCurrentMessage) {\n // Done - silent by default to avoid a series of \"done\" messages\n return null\n } else {\n // In progress\n return (\n <div key={index} className={`copilotKitMessage copilotKitAssistantMessage`}>\n {context.icons.spinnerIcon}\n </div>\n )\n }\n }\n })}\n <div className=\"responseButtonBox\">{ResponseButton}</div>\n <footer ref={messagesEndRef}>\n <div className=\"copilotKitMessagesFooter\" ref={messagesEndChildRef}>\n {children}\n </div>\n </footer>\n </div>\n )\n}\n\nfunction makeInitialMessages(initial?: string | string[]): Message[] {\n let initialArray: string[] = []\n if (initial) {\n if (Array.isArray(initial)) {\n initialArray.push(...initial)\n } else {\n initialArray.push(initial)\n }\n }\n\n return initialArray.map(\n message =>\n new TextMessage({\n role: Role.Assistant,\n content: message,\n })\n )\n}\n\nexport default Messages\n"],
5
+ "mappings": "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",
6
+ "names": ["messages_exports", "__export", "messages_default", "__toCommonJS", "import_jsx_runtime", "import_react", "import_react_ui", "import_markdown", "import_react_core", "import_runtime_client_gql", "Messages", "messages", "inProgress", "ResponseButton", "messagesCallback", "children", "isExpanded", "setIsExpanded", "chatComponentsCache", "context", "makeInitialMessages", "functionResults", "i", "id", "resultMessage", "message", "messagesEndRef", "React", "messagesEndChildRef", "scrollToBottom", "textarea", "content", "index", "isCurrentMessage", "render", "args", "status", "toRender", "initial", "initialArray"]
7
7
  }
@@ -30,6 +30,7 @@ export interface MessagesProps {
30
30
  inProgress: boolean;
31
31
  ResponseButton?: React.ReactElement;
32
32
  children?: React.ReactNode;
33
+ messagesCallback?: (messages: any) => void;
33
34
  }
34
35
  export interface InputProps {
35
36
  inProgress: boolean;
@@ -1,2 +1,2 @@
1
- "use strict";var n=Object.defineProperty;var a=Object.getOwnPropertyDescriptor;var i=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var c=(o,e,r,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of i(e))!p.call(o,s)&&s!==r&&n(o,s,{get:()=>e[s],enumerable:!(t=a(e,s))||t.enumerable});return o};var l=o=>c(n({},"__esModule",{value:!0}),o);var g={};module.exports=l(g);var d=require("react"),u=require("@copilotkit/runtime-client-gql");
1
+ "use strict";var n=Object.defineProperty;var a=Object.getOwnPropertyDescriptor;var i=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var c=(o,e,r,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of i(e))!p.call(o,s)&&s!==r&&n(o,s,{get:()=>e[s],enumerable:!(t=a(e,s))||t.enumerable});return o};var l=o=>c(n({},"__esModule",{value:!0}),o);var g={};module.exports=l(g);var d=require("react"),m=require("@copilotkit/runtime-client-gql");
2
2
  //# sourceMappingURL=props.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/components/chat/props.ts"],
4
- "sourcesContent": ["import React from 'react'\nimport { Message } from '@copilotkit/runtime-client-gql'\n\nexport interface ButtonProps {\n open: boolean\n setOpen: () => void\n}\n\nexport interface WindowProps {\n open: boolean\n setOpen: (open: boolean) => void\n clickOutsideToClose: boolean\n hitEscapeToClose: boolean\n shortcut: string\n children?: React.ReactNode\n}\n\nexport interface HeaderProps {\n open: boolean\n setOpen: (open: boolean) => void\n}\n\nexport interface ChatSuggestions {\n currentSuggestions: SuggestionsProps[]\n}\n\nexport interface SuggestionsProps {\n title: string\n message: string\n partial?: boolean\n className?: string\n}\n\nexport interface MessagesProps {\n messages: Message[]\n inProgress: boolean\n ResponseButton?: React.ReactElement\n children?: React.ReactNode\n}\n\nexport interface InputProps {\n inProgress: boolean\n onSend: (text: string) => Promise<Message>\n isVisible?: boolean\n}\n\nexport interface ResponseButtonProps {\n onClick: () => void\n inProgress: boolean\n}\n"],
4
+ "sourcesContent": ["import React from 'react'\nimport { Message } from '@copilotkit/runtime-client-gql'\n\nexport interface ButtonProps {\n open: boolean\n setOpen: () => void\n}\n\nexport interface WindowProps {\n open: boolean\n setOpen: (open: boolean) => void\n clickOutsideToClose: boolean\n hitEscapeToClose: boolean\n shortcut: string\n children?: React.ReactNode\n}\n\nexport interface HeaderProps {\n open: boolean\n setOpen: (open: boolean) => void\n}\n\nexport interface ChatSuggestions {\n currentSuggestions: SuggestionsProps[]\n}\n\nexport interface SuggestionsProps {\n title: string\n message: string\n partial?: boolean\n className?: string\n}\n\nexport interface MessagesProps {\n messages: Message[]\n inProgress: boolean\n ResponseButton?: React.ReactElement\n children?: React.ReactNode\n messagesCallback?: (messages: any) => void\n}\n\nexport interface InputProps {\n inProgress: boolean\n onSend: (text: string) => Promise<Message>\n isVisible?: boolean\n}\n\nexport interface ResponseButtonProps {\n onClick: () => void\n inProgress: boolean\n}\n"],
5
5
  "mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD,GAAA,IAAAE,EAAkB,iBAClBC,EAAwB",
6
6
  "names": ["props_exports", "__toCommonJS", "import_react", "import_runtime_client_gql"]
7
7
  }
@@ -0,0 +1,2 @@
1
+ import { useCopilotChat, useCopilotAction, useCopilotReadable } from '@copilotkit/react-core';
2
+ export { useCopilotChat, useCopilotAction, useCopilotReadable };
@@ -0,0 +1,2 @@
1
+ "use strict";var l=Object.defineProperty;var a=Object.getOwnPropertyDescriptor;var r=Object.getOwnPropertyNames;var s=Object.prototype.hasOwnProperty;var u=(e,o)=>{for(var p in o)l(e,p,{get:o[p],enumerable:!0})},m=(e,o,p,C)=>{if(o&&typeof o=="object"||typeof o=="function")for(let i of r(o))!s.call(e,i)&&i!==p&&l(e,i,{get:()=>o[i],enumerable:!(C=a(o,i))||C.enumerable});return e};var b=e=>m(l({},"__esModule",{value:!0}),e);var c={};u(c,{useCopilotAction:()=>t.useCopilotAction,useCopilotChat:()=>t.useCopilotChat,useCopilotReadable:()=>t.useCopilotReadable});module.exports=b(c);var t=require("@copilotkit/react-core");
2
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/components/chat/utils.ts"],
4
+ "sourcesContent": ["import { useCopilotChat, useCopilotAction, useCopilotReadable } from '@copilotkit/react-core'\n\nexport { useCopilotChat, useCopilotAction, useCopilotReadable }\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,0IAAAE,EAAAF,GAAA,IAAAG,EAAqE",
6
+ "names": ["utils_exports", "__export", "__toCommonJS", "import_react_core"]
7
+ }
@@ -1 +1,2 @@
1
1
  export { default as Chat } from './chat/index.js';
2
+ export { useCopilotChat, useCopilotAction, useCopilotReadable } from './chat/utils.js';
@@ -1,2 +1,2 @@
1
- "use strict";var l=Object.create;var o=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var s=Object.getPrototypeOf,u=Object.prototype.hasOwnProperty;var x=(a,t)=>{for(var e in t)o(a,e,{get:t[e],enumerable:!0})},d=(a,t,e,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let f of p(t))!u.call(a,f)&&f!==e&&o(a,f,{get:()=>t[f],enumerable:!(r=m(t,f))||r.enumerable});return a};var C=(a,t,e)=>(e=a!=null?l(s(a)):{},d(t||!a||!a.__esModule?o(e,"default",{value:a,enumerable:!0}):e,a)),b=a=>d(o({},"__esModule",{value:!0}),a);var c={};x(c,{Chat:()=>h.default});module.exports=b(c);var h=C(require("./chat/index.js"));
1
+ "use strict";var s=Object.create;var p=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var f=Object.getOwnPropertyNames;var d=Object.getPrototypeOf,h=Object.prototype.hasOwnProperty;var m=(o,t)=>{for(var e in t)p(o,e,{get:t[e],enumerable:!0})},i=(o,t,e,C)=>{if(t&&typeof t=="object"||typeof t=="function")for(let l of f(t))!h.call(o,l)&&l!==e&&p(o,l,{get:()=>t[l],enumerable:!(C=u(t,l))||C.enumerable});return o};var x=(o,t,e)=>(e=o!=null?s(d(o)):{},i(t||!o||!o.__esModule?p(e,"default",{value:o,enumerable:!0}):e,o)),b=o=>i(p({},"__esModule",{value:!0}),o);var c={};m(c,{Chat:()=>r.default,useCopilotAction:()=>a.useCopilotAction,useCopilotChat:()=>a.useCopilotChat,useCopilotReadable:()=>a.useCopilotReadable});module.exports=b(c);var r=x(require("./chat/index.js")),a=require("./chat/utils.js");
2
2
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/index.ts"],
4
- "sourcesContent": ["// eslint-disable-next-line import/extensions\nexport { default as Chat } from './chat/index.js'\n"],
5
- "mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,qCAAAE,EAAAF,GACA,IAAAG,EAAgC",
6
- "names": ["components_exports", "__export", "__toCommonJS", "import_chat"]
4
+ "sourcesContent": ["// eslint-disable-next-line import/extensions\n\nexport { default as Chat } from './chat/index.js'\n\nexport { useCopilotChat, useCopilotAction, useCopilotReadable } from './chat/utils.js'\n"],
5
+ "mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,6JAAAE,EAAAF,GAEA,IAAAG,EAAgC,8BAEhCC,EAAqE",
6
+ "names": ["components_exports", "__export", "__toCommonJS", "import_chat", "import_utils"]
7
7
  }