@copilotkit/react-ui 0.18.0 → 0.19.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 (77) hide show
  1. package/.turbo/turbo-build.log +120 -120
  2. package/CHANGELOG.md +12 -0
  3. package/dist/{chunk-GK3O7CA2.mjs → chunk-2JGAK63B.mjs} +2 -2
  4. package/dist/{chunk-POVINPXX.mjs → chunk-54JAUBUJ.mjs} +1 -1
  5. package/dist/chunk-54JAUBUJ.mjs.map +1 -0
  6. package/dist/{chunk-KINWJDY6.mjs → chunk-BPT5B4JN.mjs} +2 -2
  7. package/dist/{chunk-6BP4OYBQ.mjs → chunk-EAKWARPJ.mjs} +7 -7
  8. package/dist/{chunk-EG2YAGBD.mjs → chunk-EIB4TGCW.mjs} +13 -10
  9. package/dist/chunk-EIB4TGCW.mjs.map +1 -0
  10. package/dist/{chunk-5O2MCJZ2.mjs → chunk-EZ3QSEI2.mjs} +2 -2
  11. package/dist/{chunk-OF66AL5Z.mjs → chunk-N37JEHLI.mjs} +1 -2
  12. package/dist/chunk-N37JEHLI.mjs.map +1 -0
  13. package/dist/{chunk-UWPFPWAW.mjs → chunk-NFMERKCE.mjs} +2 -2
  14. package/dist/{chunk-Z34F3WLK.mjs → chunk-OAIXDKPE.mjs} +2 -2
  15. package/dist/{chunk-GWGHQNRI.mjs → chunk-Q3WQ546F.mjs} +2 -2
  16. package/dist/{chunk-GIUFNX55.mjs → chunk-WBXU5YXF.mjs} +2 -2
  17. package/dist/{chunk-DPRH4HX3.mjs → chunk-ZRJSYYXC.mjs} +2 -2
  18. package/dist/chunk-ZRJSYYXC.mjs.map +1 -0
  19. package/dist/components/chat/Button.js.map +1 -1
  20. package/dist/components/chat/Button.mjs +2 -2
  21. package/dist/components/chat/Chat.js +10 -8
  22. package/dist/components/chat/Chat.js.map +1 -1
  23. package/dist/components/chat/Chat.mjs +10 -10
  24. package/dist/components/chat/ChatContext.d.ts +0 -5
  25. package/dist/components/chat/ChatContext.js +0 -1
  26. package/dist/components/chat/ChatContext.js.map +1 -1
  27. package/dist/components/chat/ChatContext.mjs +1 -1
  28. package/dist/components/chat/CodeBlock.js +0 -1
  29. package/dist/components/chat/CodeBlock.js.map +1 -1
  30. package/dist/components/chat/CodeBlock.mjs +2 -3
  31. package/dist/components/chat/Header.js.map +1 -1
  32. package/dist/components/chat/Header.mjs +2 -2
  33. package/dist/components/chat/Input.js.map +1 -1
  34. package/dist/components/chat/Input.mjs +2 -2
  35. package/dist/components/chat/Markdown.js.map +1 -1
  36. package/dist/components/chat/Markdown.mjs +3 -3
  37. package/dist/components/chat/Messages.js +10 -7
  38. package/dist/components/chat/Messages.js.map +1 -1
  39. package/dist/components/chat/Messages.mjs +5 -5
  40. package/dist/components/chat/Popup.js +10 -8
  41. package/dist/components/chat/Popup.js.map +1 -1
  42. package/dist/components/chat/Popup.mjs +11 -11
  43. package/dist/components/chat/Response.js.map +1 -1
  44. package/dist/components/chat/Response.mjs +2 -2
  45. package/dist/components/chat/Sidebar.js +10 -8
  46. package/dist/components/chat/Sidebar.js.map +1 -1
  47. package/dist/components/chat/Sidebar.mjs +11 -11
  48. package/dist/components/chat/index.js +10 -8
  49. package/dist/components/chat/index.js.map +1 -1
  50. package/dist/components/chat/index.mjs +12 -12
  51. package/dist/components/index.js +10 -8
  52. package/dist/components/index.js.map +1 -1
  53. package/dist/components/index.mjs +12 -12
  54. package/dist/hooks/use-copy-to-clipboard.js +0 -1
  55. package/dist/hooks/use-copy-to-clipboard.js.map +1 -1
  56. package/dist/hooks/use-copy-to-clipboard.mjs +1 -2
  57. package/dist/index.js +11 -8
  58. package/dist/index.js.map +1 -1
  59. package/dist/index.mjs +13 -12
  60. package/package.json +6 -6
  61. package/src/components/chat/ChatContext.tsx +0 -7
  62. package/src/components/chat/CodeBlock.tsx +0 -2
  63. package/src/components/chat/Messages.tsx +17 -95
  64. package/src/hooks/use-copy-to-clipboard.tsx +0 -2
  65. package/src/index.tsx +1 -1
  66. package/dist/chunk-DPRH4HX3.mjs.map +0 -1
  67. package/dist/chunk-EG2YAGBD.mjs.map +0 -1
  68. package/dist/chunk-OF66AL5Z.mjs.map +0 -1
  69. package/dist/chunk-POVINPXX.mjs.map +0 -1
  70. /package/dist/{chunk-GK3O7CA2.mjs.map → chunk-2JGAK63B.mjs.map} +0 -0
  71. /package/dist/{chunk-KINWJDY6.mjs.map → chunk-BPT5B4JN.mjs.map} +0 -0
  72. /package/dist/{chunk-6BP4OYBQ.mjs.map → chunk-EAKWARPJ.mjs.map} +0 -0
  73. /package/dist/{chunk-5O2MCJZ2.mjs.map → chunk-EZ3QSEI2.mjs.map} +0 -0
  74. /package/dist/{chunk-UWPFPWAW.mjs.map → chunk-NFMERKCE.mjs.map} +0 -0
  75. /package/dist/{chunk-Z34F3WLK.mjs.map → chunk-OAIXDKPE.mjs.map} +0 -0
  76. /package/dist/{chunk-GWGHQNRI.mjs.map → chunk-Q3WQ546F.mjs.map} +0 -0
  77. /package/dist/{chunk-GIUFNX55.mjs.map → chunk-WBXU5YXF.mjs.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/chat/Messages.tsx"],"sourcesContent":["import React, { useEffect, useMemo } from \"react\";\nimport { MessagesProps } from \"./props\";\nimport { useChatContext } from \"./ChatContext\";\nimport { nanoid } from \"nanoid\";\nimport { Message, decodeResult } from \"@copilotkit/shared\";\nimport { Markdown } from \"./Markdown\";\nimport { useCopilotContext } from \"@copilotkit/react-core\";\n\nexport const Messages = ({ messages, inProgress }: MessagesProps) => {\n const { entryPoints, chatComponentsCache } = useCopilotContext();\n const context = useChatContext();\n const initialMessages = useMemo(\n () => makeInitialMessages(context.labels.initial),\n [context.labels.initial],\n );\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].role === \"assistant\" && messages[i].function_call) {\n const id = messages[i].id;\n if (i + 1 < messages.length && messages[i + 1].role === \"function\") {\n functionResults[id] = decodeResult(messages[i + 1].content || \"\");\n }\n }\n }\n\n const messagesEndRef = 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 return (\n <div className=\"copilotKitMessages\">\n {messages.map((message, index) => {\n const isCurrentMessage = index === messages.length - 1;\n\n if (message.role === \"user\") {\n return (\n <div key={index} className=\"copilotKitMessage copilotKitUserMessage\">\n {message.content}\n </div>\n );\n } else if (message.role == \"assistant\") {\n if (isCurrentMessage && inProgress && !message.content && !message.partialFunctionCall) {\n // The message is in progress and there is no content- show the spinner\n return (\n <div key={index} className={`copilotKitMessage copilotKitAssistantMessage`}>\n {context.icons.spinnerIcon}\n </div>\n );\n } else if (message.function_call || message.partialFunctionCall) {\n // Find the action that corresponds to the function call if any\n const functionCallName: string = (message.function_call?.name ||\n message.partialFunctionCall?.name)!;\n if (\n chatComponentsCache.current !== null &&\n chatComponentsCache.current[functionCallName]\n ) {\n const render = chatComponentsCache.current[functionCallName];\n\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 // show done message\n else {\n return (\n <div key={index} className={`copilotKitMessage copilotKitAssistantMessage`}>\n {context.labels.done}\n </div>\n );\n }\n }\n // render is a function\n else {\n const args = message.function_call\n ? JSON.parse(message.function_call.arguments || \"{}\")\n : message.partialFunctionCall?.arguments;\n\n let status = \"inProgress\";\n\n if (functionResults[message.id] !== undefined) {\n status = \"complete\";\n } else if (message.function_call) {\n status = \"executing\";\n }\n\n const result = render({\n status,\n args,\n result: functionResults[message.id],\n });\n\n if (typeof result === \"string\") {\n return (\n <div key={index} className={`copilotKitMessage copilotKitAssistantMessage`}>\n {isCurrentMessage && inProgress && context.icons.spinnerIcon} {result}\n </div>\n );\n } else {\n return (\n <div key={index} className=\"copilotKitCustomAssistantMessage\">\n {result}\n </div>\n );\n }\n }\n }\n // No render function found- show the default message\n else if ((!inProgress || !isCurrentMessage) && message.function_call) {\n // Done\n return (\n <div key={index} className={`copilotKitMessage copilotKitAssistantMessage`}>\n {context.labels.done}\n </div>\n );\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 return (\n <div key={index} className={`copilotKitMessage copilotKitAssistantMessage`}>\n <Markdown content={message.content} />\n </div>\n );\n\n // if (isCurrentMessage && inProgress && !message.content) {\n // // let inProgressLabel = \"\";\n\n // if (message.partialFunctionCall) {\n // for (const action of Object.values(entryPoints)) {\n // if (\n // (action as any).name === message.partialFunctionCall.name &&\n // (action as any).render\n // ) {\n // // // the label is a function, call it with the arguments\n // // if (typeof action.inProgressLabel === \"function\") {\n // // inProgressLabel = action.inProgressLabel(\n // // message.partialFunctionCall.arguments as any,\n // // // if function_call is undefined, the arguments are incomplete\n // // message.function_call !== undefined,\n // // );\n // // }\n // // // the label is a string\n // // else {\n // // // (don't do an additional type check so we get a compile error if we add a new type)\n // // inProgressLabel = action.inProgressLabel;\n // // }\n // }\n // }\n // }\n // return (\n // <div key={index} className={`copilotKitMessage copilotKitAssistantMessage`}>\n // {context.icons.spinnerIcon}\n // {/* {inProgressLabel && <span className=\"inProgressLabel\">{inProgressLabel}</span>} */}\n // </div>\n // );\n // } else if (\n // (!inProgress || index != messages.length - 1) &&\n // !message.content &&\n // message.function_call\n // ) {\n // return (\n // <div key={index} className={`copilotKitMessage copilotKitAssistantMessage`}>\n // {context.labels.done}\n // </div>\n // );\n // }\n // TODO: Add back partial message\n // This shows up when the assistant is executing a function\n //\n // else if (message.status === \"partial\") {\n // return (\n // <div key={index} className={`copilotKitMessage copilotKitAssistantMessage`}>\n // {context.labels.thinking} {context.icons.spinnerIcon}\n // </div>\n // );\n // }\n // else {\n // return (\n // <div key={index} className={`copilotKitMessage copilotKitAssistantMessage`}>\n // <Markdown content={message.content} />\n // </div>\n // );\n // }\n }\n // TODO: Add back function and error messages\n //\n // else if (message.role === \"function\" && message.status === \"success\") {\n // return (\n // <div key={index} className={`copilotKitMessage copilotKitAssistantMessage`}>\n // {context.labels.done}\n // </div>\n // );\n // } else if (message.status === \"error\") {\n // return (\n // <div key={index} className={`copilotKitMessage copilotKitAssistantMessage`}>\n // {context.labels.error}\n // </div>\n // );\n // }\n })}\n <div ref={messagesEndRef} />\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((message) => ({\n id: nanoid(),\n role: \"assistant\",\n content: message,\n }));\n}\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/chat/ChatContext.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport * as DefaultIcons from \"./Icons\";\n\n/**\n * Icons for CopilotChat component.\n */\nexport interface CopilotChatIcons {\n /**\n * The icon to use for the open chat button.\n * @default <OpenIcon />\n */\n openIcon?: React.ReactNode;\n\n /**\n * The icon to use for the close chat button.\n * @default <CloseIcon />\n */\n closeIcon?: React.ReactNode;\n\n /**\n * The icon to use for the close chat button in the header.\n * @default <HeaderCloseIcon />\n */\n headerCloseIcon?: React.ReactNode;\n\n /**\n * The icon to use for the send button.\n * @default <SendIcon />\n */\n sendIcon?: React.ReactNode;\n\n /**\n * The icon to use for the activity indicator.\n * @default <ActivityIcon />\n */\n activityIcon?: React.ReactNode;\n\n /**\n * The icon to use for the spinner.\n * @default <SpinnerIcon />\n */\n spinnerIcon?: React.ReactNode;\n\n /**\n * The icon to use for the stop button.\n * @default <StopIcon />\n */\n stopIcon?: React.ReactNode;\n\n /**\n * The icon to use for the regenerate button.\n * @default <RegenerateIcon />\n */\n regenerateIcon?: React.ReactNode;\n}\n\n/**\n * Labels for CopilotChat component.\n */\nexport interface CopilotChatLabels {\n /**\n * The initial message(s) to display in the chat window.\n */\n initial?: string | string[];\n\n /**\n * The title to display in the header.\n * @default \"CopilotKit\"\n */\n title?: string;\n\n /**\n * The placeholder to display in the input.\n * @default \"Type a message...\"\n */\n placeholder?: string;\n\n /**\n * The message to display while the chat GPT is \"thinking\".\n * @default \"Thinking...\"\n */\n thinking?: string;\n\n /**\n * The message to display when the chat is done executing a function.\n * @default \"✅ Done\"\n */\n done?: string;\n\n /**\n * The message to display when an error occurs.\n * @default \"❌ An error occurred. Please try again.\"\n */\n error?: string;\n\n /**\n * The label to display on the stop button.\n * @default \"Stop generating\"\n */\n stopGenerating?: string;\n\n /**\n * The label to display on the regenerate button.\n * @default \"Regenerate response\"\n */\n regenerateResponse?: string;\n}\n\ninterface ChatContext {\n labels: Required<CopilotChatLabels>;\n icons: Required<CopilotChatIcons>;\n}\n\nexport const ChatContext = React.createContext<ChatContext | undefined>(undefined);\n\nexport function useChatContext(): ChatContext {\n const context = React.useContext(ChatContext);\n if (context === undefined) {\n throw new Error(\n \"Context not found. Did you forget to wrap your app in a <ChatContextProvider> component?\",\n );\n }\n return context;\n}\n\ninterface ChatContextProps {\n // temperature?: number;\n // instructions?: string;\n // maxFeedback?: number;\n labels?: CopilotChatLabels;\n icons?: CopilotChatIcons;\n children?: React.ReactNode;\n}\n\nexport const ChatContextProvider = ({\n // temperature,\n // instructions,\n // maxFeedback,\n labels,\n icons,\n children,\n}: ChatContextProps) => {\n const context = useMemo(\n () => ({\n labels: {\n ...{\n initial: \"\",\n title: \"CopilotKit\",\n placeholder: \"Type a message...\",\n thinking: \"Thinking...\",\n done: \"✅ Done\",\n error: \"❌ An error occurred. Please try again.\",\n stopGenerating: \"Stop generating\",\n regenerateResponse: \"Regenerate response\",\n },\n ...labels,\n },\n\n icons: {\n ...{\n openIcon: DefaultIcons.OpenIcon,\n closeIcon: DefaultIcons.CloseIcon,\n headerCloseIcon: DefaultIcons.HeaderCloseIcon,\n sendIcon: DefaultIcons.SendIcon,\n activityIcon: DefaultIcons.ActivityIcon,\n spinnerIcon: DefaultIcons.SpinnerIcon,\n stopIcon: DefaultIcons.StopIcon,\n regenerateIcon: DefaultIcons.RegenerateIcon,\n },\n icons,\n },\n }),\n [labels, icons],\n );\n return <ChatContext.Provider value={context}>{children}</ChatContext.Provider>;\n};\n"],"mappings":";;;;;;;;;;;;;;;;AAAA,OAAO,SAAS,eAAe;AA8KtB;AA7DF,IAAM,cAAc,MAAM,cAAuC,MAAS;AAE1E,SAAS,iBAA8B;AAC5C,QAAM,UAAU,MAAM,WAAW,WAAW;AAC5C,MAAI,YAAY,QAAW;AACzB,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAWO,IAAM,sBAAsB,CAAC;AAAA;AAAA;AAAA;AAAA,EAIlC;AAAA,EACA;AAAA,EACA;AACF,MAAwB;AACtB,QAAM,UAAU;AAAA,IACd,OAAO;AAAA,MACL,QAAQ,kCACH;AAAA,QACD,SAAS;AAAA,QACT,OAAO;AAAA,QACP,aAAa;AAAA,QACb,UAAU;AAAA,QACV,MAAM;AAAA,QACN,OAAO;AAAA,QACP,gBAAgB;AAAA,QAChB,oBAAoB;AAAA,MACtB,IACG;AAAA,MAGL,OAAO,iCACF;AAAA,QACD,UAAuB;AAAA,QACvB,WAAwB;AAAA,QACxB,iBAA8B;AAAA,QAC9B,UAAuB;AAAA,QACvB,cAA2B;AAAA,QAC3B,aAA0B;AAAA,QAC1B,UAAuB;AAAA,QACvB,gBAA6B;AAAA,MAC/B,IAVK;AAAA,QAWL;AAAA,MACF;AAAA,IACF;AAAA,IACA,CAAC,QAAQ,KAAK;AAAA,EAChB;AACA,SAAO,oBAAC,YAAY,UAAZ,EAAqB,OAAO,SAAU,UAAS;AACzD;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/hooks/use-copy-to-clipboard.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\n\nexport interface useCopyToClipboardProps {\n timeout?: number;\n}\n\nexport function useCopyToClipboard({ timeout = 2000 }: useCopyToClipboardProps) {\n const [isCopied, setIsCopied] = React.useState<Boolean>(false);\n\n const copyToClipboard = (value: string) => {\n if (typeof window === \"undefined\" || !navigator.clipboard?.writeText) {\n return;\n }\n\n if (!value) {\n return;\n }\n\n navigator.clipboard.writeText(value).then(() => {\n setIsCopied(true);\n\n setTimeout(() => {\n setIsCopied(false);\n }, timeout);\n });\n };\n\n return { isCopied, copyToClipboard };\n}\n"],"mappings":";AAEA,YAAY,WAAW;AAMhB,SAAS,mBAAmB,EAAE,UAAU,IAAK,GAA4B;AAC9E,QAAM,CAAC,UAAU,WAAW,IAAU,eAAkB,KAAK;AAE7D,QAAM,kBAAkB,CAAC,UAAkB;AAX7C;AAYI,QAAI,OAAO,WAAW,eAAe,GAAC,eAAU,cAAV,mBAAqB,YAAW;AACpE;AAAA,IACF;AAEA,QAAI,CAAC,OAAO;AACV;AAAA,IACF;AAEA,cAAU,UAAU,UAAU,KAAK,EAAE,KAAK,MAAM;AAC9C,kBAAY,IAAI;AAEhB,iBAAW,MAAM;AACf,oBAAY,KAAK;AAAA,MACnB,GAAG,OAAO;AAAA,IACZ,CAAC;AAAA,EACH;AAEA,SAAO,EAAE,UAAU,gBAAgB;AACrC;","names":[]}