@copilotkit/react-ui 1.9.3-next.4 → 1.10.0-next.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 (178) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/dist/{chunk-KENCH7RN.mjs → chunk-B5IFB5YJ.mjs} +1 -1
  3. package/dist/chunk-B5IFB5YJ.mjs.map +1 -0
  4. package/dist/chunk-DBKRAOH7.mjs +34 -0
  5. package/dist/chunk-DBKRAOH7.mjs.map +1 -0
  6. package/dist/{chunk-4HUXYD3B.mjs → chunk-DTRPPNSA.mjs} +2 -2
  7. package/dist/{chunk-YTXEWDNC.mjs → chunk-E6MQUIZW.mjs} +15 -4
  8. package/dist/chunk-E6MQUIZW.mjs.map +1 -0
  9. package/dist/{chunk-L3GZ7TXC.mjs → chunk-GCKKSSBU.mjs} +21 -24
  10. package/dist/chunk-GCKKSSBU.mjs.map +1 -0
  11. package/dist/{chunk-KN2GCKBE.mjs → chunk-GJ3MFNBX.mjs} +6 -6
  12. package/dist/{chunk-32MUWKL3.mjs → chunk-JHUTTP5C.mjs} +21 -17
  13. package/dist/chunk-JHUTTP5C.mjs.map +1 -0
  14. package/dist/{chunk-HKTWKCPS.mjs → chunk-LXCD3K7B.mjs} +127 -92
  15. package/dist/chunk-LXCD3K7B.mjs.map +1 -0
  16. package/dist/{chunk-S5MBUNGN.mjs → chunk-O72ZB5V3.mjs} +4 -4
  17. package/dist/chunk-O72ZB5V3.mjs.map +1 -0
  18. package/dist/{chunk-QGSPTXOV.mjs → chunk-O7KTFUAN.mjs} +2 -2
  19. package/dist/chunk-O7KTFUAN.mjs.map +1 -0
  20. package/dist/chunk-Q2467VHZ.mjs +30 -0
  21. package/dist/chunk-Q2467VHZ.mjs.map +1 -0
  22. package/dist/{chunk-H3EM63WS.mjs → chunk-VLNT34X3.mjs} +2 -2
  23. package/dist/chunk-VVL6JFCJ.mjs +16 -0
  24. package/dist/chunk-VVL6JFCJ.mjs.map +1 -0
  25. package/dist/chunk-WHDNKXMP.mjs +135 -0
  26. package/dist/chunk-WHDNKXMP.mjs.map +1 -0
  27. package/dist/{chunk-ALIBUJML.mjs → chunk-WPVTPQ7X.mjs} +2 -2
  28. package/dist/components/chat/Button.d.ts +1 -1
  29. package/dist/components/chat/Chat.d.ts +119 -28
  30. package/dist/components/chat/Chat.js +298 -658
  31. package/dist/components/chat/Chat.js.map +1 -1
  32. package/dist/components/chat/Chat.mjs +12 -15
  33. package/dist/components/chat/CodeBlock.js.map +1 -1
  34. package/dist/components/chat/CodeBlock.mjs +1 -1
  35. package/dist/components/chat/Header.d.ts +1 -1
  36. package/dist/components/chat/Input.d.ts +1 -1
  37. package/dist/components/chat/Input.js +3 -3
  38. package/dist/components/chat/Input.js.map +1 -1
  39. package/dist/components/chat/Input.mjs +2 -2
  40. package/dist/components/chat/Markdown.js +13 -2
  41. package/dist/components/chat/Markdown.js.map +1 -1
  42. package/dist/components/chat/Markdown.mjs +2 -2
  43. package/dist/components/chat/Messages.d.ts +3 -3
  44. package/dist/components/chat/Messages.js +40 -116
  45. package/dist/components/chat/Messages.js.map +1 -1
  46. package/dist/components/chat/Messages.mjs +1 -1
  47. package/dist/components/chat/Modal.d.ts +7 -2
  48. package/dist/components/chat/Modal.js +308 -668
  49. package/dist/components/chat/Modal.js.map +1 -1
  50. package/dist/components/chat/Modal.mjs +13 -16
  51. package/dist/components/chat/Popup.d.ts +7 -2
  52. package/dist/components/chat/Popup.js +310 -670
  53. package/dist/components/chat/Popup.js.map +1 -1
  54. package/dist/components/chat/Popup.mjs +14 -17
  55. package/dist/components/chat/Sidebar.d.ts +7 -2
  56. package/dist/components/chat/Sidebar.js +312 -672
  57. package/dist/components/chat/Sidebar.js.map +1 -1
  58. package/dist/components/chat/Sidebar.mjs +14 -17
  59. package/dist/components/chat/Suggestion.d.ts +2 -9
  60. package/dist/components/chat/Suggestion.js +6 -96
  61. package/dist/components/chat/Suggestion.js.map +1 -1
  62. package/dist/components/chat/Suggestion.mjs +3 -5
  63. package/dist/components/chat/Suggestions.d.ts +1 -1
  64. package/dist/components/chat/Suggestions.js +4 -3
  65. package/dist/components/chat/Suggestions.js.map +1 -1
  66. package/dist/components/chat/Suggestions.mjs +2 -2
  67. package/dist/components/chat/Window.d.ts +1 -1
  68. package/dist/components/chat/index.d.ts +8 -3
  69. package/dist/components/chat/index.js +316 -676
  70. package/dist/components/chat/index.js.map +1 -1
  71. package/dist/components/chat/index.mjs +18 -21
  72. package/dist/components/chat/messages/AssistantMessage.d.ts +1 -1
  73. package/dist/components/chat/messages/AssistantMessage.js +32 -24
  74. package/dist/components/chat/messages/AssistantMessage.js.map +1 -1
  75. package/dist/components/chat/messages/AssistantMessage.mjs +3 -3
  76. package/dist/components/chat/messages/ImageRenderer.d.ts +12 -0
  77. package/dist/components/chat/messages/ImageRenderer.js +58 -0
  78. package/dist/components/chat/messages/ImageRenderer.js.map +1 -0
  79. package/dist/components/chat/messages/ImageRenderer.mjs +8 -0
  80. package/dist/components/chat/messages/RenderMessage.d.ts +9 -0
  81. package/dist/components/chat/messages/{RenderTextMessage.js → RenderMessage.js} +92 -47
  82. package/dist/components/chat/messages/RenderMessage.js.map +1 -0
  83. package/dist/components/chat/messages/RenderMessage.mjs +16 -0
  84. package/dist/components/chat/messages/UserMessage.d.ts +1 -1
  85. package/dist/components/chat/messages/UserMessage.js +7 -1
  86. package/dist/components/chat/messages/UserMessage.js.map +1 -1
  87. package/dist/components/chat/messages/UserMessage.mjs +1 -1
  88. package/dist/components/chat/props.d.ts +32 -27
  89. package/dist/components/chat/props.js.map +1 -1
  90. package/dist/components/index.d.ts +8 -3
  91. package/dist/components/index.js +316 -676
  92. package/dist/components/index.js.map +1 -1
  93. package/dist/components/index.mjs +18 -21
  94. package/dist/hooks/use-push-to-talk.d.ts +1 -1
  95. package/dist/hooks/use-push-to-talk.js +3 -3
  96. package/dist/hooks/use-push-to-talk.js.map +1 -1
  97. package/dist/hooks/use-push-to-talk.mjs +1 -1
  98. package/dist/index.css +59 -3
  99. package/dist/index.css.map +1 -1
  100. package/dist/index.d.ts +8 -3
  101. package/dist/index.js +322 -682
  102. package/dist/index.js.map +1 -1
  103. package/dist/index.mjs +18 -21
  104. package/dist/types/css.d.ts +3 -0
  105. package/dist/types/css.js.map +1 -1
  106. package/package.json +4 -4
  107. package/src/components/chat/Chat.tsx +193 -105
  108. package/src/components/chat/CodeBlock.tsx +1 -1
  109. package/src/components/chat/Markdown.tsx +12 -2
  110. package/src/components/chat/Messages.tsx +43 -122
  111. package/src/components/chat/Suggestion.tsx +5 -108
  112. package/src/components/chat/Suggestions.tsx +0 -1
  113. package/src/components/chat/index.tsx +1 -1
  114. package/src/components/chat/messages/AssistantMessage.tsx +15 -23
  115. package/src/components/chat/messages/ImageRenderer.tsx +37 -0
  116. package/src/components/chat/messages/{RenderTextMessage.tsx → RenderMessage.tsx} +10 -9
  117. package/src/components/chat/messages/UserMessage.tsx +16 -5
  118. package/src/components/chat/props.ts +36 -28
  119. package/src/css/colors.css +10 -0
  120. package/src/css/markdown.css +8 -0
  121. package/src/css/messages.css +54 -5
  122. package/src/css/suggestions.css +1 -1
  123. package/src/hooks/use-push-to-talk.tsx +6 -5
  124. package/src/styles.css +1 -1
  125. package/src/types/css.ts +3 -0
  126. package/dist/chunk-2II3Q27P.mjs +0 -112
  127. package/dist/chunk-2II3Q27P.mjs.map +0 -1
  128. package/dist/chunk-32MUWKL3.mjs.map +0 -1
  129. package/dist/chunk-53CVDVS5.mjs +0 -127
  130. package/dist/chunk-53CVDVS5.mjs.map +0 -1
  131. package/dist/chunk-B3D7U7TJ.mjs +0 -211
  132. package/dist/chunk-B3D7U7TJ.mjs.map +0 -1
  133. package/dist/chunk-C7OB63U5.mjs +0 -36
  134. package/dist/chunk-C7OB63U5.mjs.map +0 -1
  135. package/dist/chunk-HKTWKCPS.mjs.map +0 -1
  136. package/dist/chunk-HWMFMBJC.mjs +0 -10
  137. package/dist/chunk-HWMFMBJC.mjs.map +0 -1
  138. package/dist/chunk-IMBPSLL4.mjs +0 -104
  139. package/dist/chunk-IMBPSLL4.mjs.map +0 -1
  140. package/dist/chunk-KENCH7RN.mjs.map +0 -1
  141. package/dist/chunk-L3GZ7TXC.mjs.map +0 -1
  142. package/dist/chunk-QGSPTXOV.mjs.map +0 -1
  143. package/dist/chunk-S5MBUNGN.mjs.map +0 -1
  144. package/dist/chunk-ULDQXCED.mjs +0 -78
  145. package/dist/chunk-ULDQXCED.mjs.map +0 -1
  146. package/dist/chunk-YTXEWDNC.mjs.map +0 -1
  147. package/dist/components/chat/messages/RenderActionExecutionMessage.d.ts +0 -9
  148. package/dist/components/chat/messages/RenderActionExecutionMessage.js +0 -869
  149. package/dist/components/chat/messages/RenderActionExecutionMessage.js.map +0 -1
  150. package/dist/components/chat/messages/RenderActionExecutionMessage.mjs +0 -14
  151. package/dist/components/chat/messages/RenderAgentStateMessage.d.ts +0 -9
  152. package/dist/components/chat/messages/RenderAgentStateMessage.js +0 -854
  153. package/dist/components/chat/messages/RenderAgentStateMessage.js.map +0 -1
  154. package/dist/components/chat/messages/RenderAgentStateMessage.mjs +0 -14
  155. package/dist/components/chat/messages/RenderImageMessage.d.ts +0 -9
  156. package/dist/components/chat/messages/RenderImageMessage.js +0 -823
  157. package/dist/components/chat/messages/RenderImageMessage.js.map +0 -1
  158. package/dist/components/chat/messages/RenderImageMessage.mjs +0 -15
  159. package/dist/components/chat/messages/RenderImageMessage.mjs.map +0 -1
  160. package/dist/components/chat/messages/RenderResultMessage.d.ts +0 -9
  161. package/dist/components/chat/messages/RenderResultMessage.js +0 -778
  162. package/dist/components/chat/messages/RenderResultMessage.js.map +0 -1
  163. package/dist/components/chat/messages/RenderResultMessage.mjs +0 -14
  164. package/dist/components/chat/messages/RenderResultMessage.mjs.map +0 -1
  165. package/dist/components/chat/messages/RenderTextMessage.d.ts +0 -9
  166. package/dist/components/chat/messages/RenderTextMessage.js.map +0 -1
  167. package/dist/components/chat/messages/RenderTextMessage.mjs +0 -15
  168. package/dist/components/chat/messages/RenderTextMessage.mjs.map +0 -1
  169. package/src/components/chat/messages/RenderActionExecutionMessage.tsx +0 -127
  170. package/src/components/chat/messages/RenderAgentStateMessage.tsx +0 -116
  171. package/src/components/chat/messages/RenderImageMessage.tsx +0 -64
  172. package/src/components/chat/messages/RenderResultMessage.tsx +0 -26
  173. /package/dist/{chunk-4HUXYD3B.mjs.map → chunk-DTRPPNSA.mjs.map} +0 -0
  174. /package/dist/{chunk-KN2GCKBE.mjs.map → chunk-GJ3MFNBX.mjs.map} +0 -0
  175. /package/dist/{chunk-H3EM63WS.mjs.map → chunk-VLNT34X3.mjs.map} +0 -0
  176. /package/dist/{chunk-ALIBUJML.mjs.map → chunk-WPVTPQ7X.mjs.map} +0 -0
  177. /package/dist/components/chat/messages/{RenderActionExecutionMessage.mjs.map → ImageRenderer.mjs.map} +0 -0
  178. /package/dist/components/chat/messages/{RenderAgentStateMessage.mjs.map → RenderMessage.mjs.map} +0 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,45 @@
1
1
  # ui
2
2
 
3
+ ## 1.10.0-next.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 8674da1: - refactor(headless): completely overhaul headless ui to better support agentic features
8
+
9
+ Headless UI has been in a bad state for a bit now. When we added support for different
10
+ agentic runtimes we acquired tech-debt that, with this PR, is being alleviated.
11
+
12
+ As such, the following features have been updated to be completely functional with Headless UI.
13
+
14
+ - Generative UI
15
+ - Suggestions
16
+ - Agentic Generative UI
17
+ - Interrupts
18
+
19
+ In addition, a variety of QOL changes have been made.
20
+
21
+ - New AG-UI based message types
22
+ - Inline code rendering is fixed
23
+
24
+ Signed-off-by: Tyler Slaton <tyler@copilotkit.ai>
25
+
26
+ ### Patch Changes
27
+
28
+ - Updated dependencies [8674da1]
29
+ - @copilotkit/react-core@1.10.0-next.0
30
+ - @copilotkit/shared@1.10.0-next.0
31
+ - @copilotkit/runtime-client-gql@1.10.0-next.0
32
+
33
+ ## 1.9.3
34
+
35
+ ### Patch Changes
36
+
37
+ - Updated dependencies [f83bda0]
38
+ - Updated dependencies [1bda332]
39
+ - @copilotkit/react-core@1.9.3
40
+ - @copilotkit/shared@1.9.3
41
+ - @copilotkit/runtime-client-gql@1.9.3
42
+
3
43
  ## 1.9.3-next.4
4
44
 
5
45
  ### Patch Changes
@@ -386,4 +386,4 @@ export {
386
386
  generateRandomString,
387
387
  CodeBlock
388
388
  };
389
- //# sourceMappingURL=chunk-KENCH7RN.mjs.map
389
+ //# sourceMappingURL=chunk-B5IFB5YJ.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/chat/CodeBlock.tsx"],"sourcesContent":["import { FC, memo } from \"react\";\nimport { Prism as SyntaxHighlighter } from \"react-syntax-highlighter\";\nimport { useCopyToClipboard } from \"../../hooks/use-copy-to-clipboard\";\nimport { CheckIcon, CopyIcon, DownloadIcon } from \"./Icons\";\n\ninterface CodeActionButtonProps {\n onClick: () => void;\n children: React.ReactNode;\n}\n\ninterface Props {\n language: string;\n value: string;\n}\n\ninterface languageMap {\n [key: string]: string | undefined;\n}\n\nexport const programmingLanguages: languageMap = {\n javascript: \".js\",\n python: \".py\",\n java: \".java\",\n c: \".c\",\n cpp: \".cpp\",\n \"c++\": \".cpp\",\n \"c#\": \".cs\",\n ruby: \".rb\",\n php: \".php\",\n swift: \".swift\",\n \"objective-c\": \".m\",\n kotlin: \".kt\",\n typescript: \".ts\",\n go: \".go\",\n perl: \".pl\",\n rust: \".rs\",\n scala: \".scala\",\n haskell: \".hs\",\n lua: \".lua\",\n shell: \".sh\",\n sql: \".sql\",\n html: \".html\",\n css: \".css\",\n // add more file extensions here, make sure the key is same as language prop in CodeBlock.tsx component\n};\n\nexport const generateRandomString = (length: number, lowercase = false) => {\n const chars = \"ABCDEFGHJKLMNPQRSTUVWXY3456789\"; // excluding similar looking characters like Z, 2, I, 1, O, 0\n let result = \"\";\n for (let i = 0; i < length; i++) {\n result += chars.charAt(Math.floor(Math.random() * chars.length));\n }\n return lowercase ? result.toLowerCase() : result;\n};\n\nconst CodeBlock: FC<Props> = memo(({ language, value }) => {\n const { isCopied, copyToClipboard } = useCopyToClipboard({ timeout: 2000 });\n\n const downloadAsFile = () => {\n if (typeof window === \"undefined\") {\n return;\n }\n const fileExtension = programmingLanguages[language] || \".file\";\n const suggestedFileName = `file-${generateRandomString(3, true)}${fileExtension}`;\n const fileName = window.prompt(\"Enter file name\", suggestedFileName);\n\n if (!fileName) {\n // User pressed cancel on prompt.\n return;\n }\n\n const blob = new Blob([value], { type: \"text/plain\" });\n const url = URL.createObjectURL(blob);\n const link = document.createElement(\"a\");\n link.download = fileName;\n link.href = url;\n link.style.display = \"none\";\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n };\n\n const onCopy = () => {\n if (isCopied) return;\n copyToClipboard(value);\n };\n\n return (\n <div className=\"copilotKitCodeBlock\">\n <div className=\"copilotKitCodeBlockToolbar\">\n <span className=\"copilotKitCodeBlockToolbarLanguage\">{language}</span>\n <div className=\"copilotKitCodeBlockToolbarButtons\">\n <button className=\"copilotKitCodeBlockToolbarButton\" onClick={downloadAsFile}>\n {DownloadIcon}\n </button>\n <button className=\"copilotKitCodeBlockToolbarButton\" onClick={onCopy}>\n {isCopied ? CheckIcon : CopyIcon}\n </button>\n </div>\n </div>\n <SyntaxHighlighter\n language={language}\n style={highlightStyle}\n PreTag=\"div\"\n customStyle={{\n margin: 0,\n borderBottomLeftRadius: \"0.375rem\",\n borderBottomRightRadius: \"0.375rem\",\n }}\n >\n {value}\n </SyntaxHighlighter>\n </div>\n );\n});\nCodeBlock.displayName = \"CodeBlock\";\n\nexport { CodeBlock };\n\n// import { vscDarkPlus as highlightStyle } from \"react-syntax-highlighter/dist/esm/styles/prism\";\n// As a workaround, we inline the vscDarkPlus from react-syntax-highlighter.\n// Importing it as recommended in the documentation leads to build errors in the non app router\n// (Next.js classic) setup.\nconst highlightStyle: any = {\n 'pre[class*=\"language-\"]': {\n color: \"#d4d4d4\",\n fontSize: \"13px\",\n textShadow: \"none\",\n fontFamily: 'Menlo, Monaco, Consolas, \"Andale Mono\", \"Ubuntu Mono\", \"Courier New\", monospace',\n direction: \"ltr\",\n textAlign: \"left\",\n whiteSpace: \"pre\",\n wordSpacing: \"normal\",\n wordBreak: \"normal\",\n lineHeight: \"1.5\",\n MozTabSize: \"4\",\n OTabSize: \"4\",\n tabSize: \"4\",\n WebkitHyphens: \"none\",\n MozHyphens: \"none\",\n msHyphens: \"none\",\n hyphens: \"none\",\n padding: \"1em\",\n margin: \".5em 0\",\n overflow: \"auto\",\n background: \"#1e1e1e\",\n },\n 'code[class*=\"language-\"]': {\n color: \"#d4d4d4\",\n fontSize: \"13px\",\n textShadow: \"none\",\n fontFamily: 'Menlo, Monaco, Consolas, \"Andale Mono\", \"Ubuntu Mono\", \"Courier New\", monospace',\n direction: \"ltr\",\n textAlign: \"left\",\n whiteSpace: \"pre\",\n wordSpacing: \"normal\",\n wordBreak: \"normal\",\n lineHeight: \"1.5\",\n MozTabSize: \"4\",\n OTabSize: \"4\",\n tabSize: \"4\",\n WebkitHyphens: \"none\",\n MozHyphens: \"none\",\n msHyphens: \"none\",\n hyphens: \"none\",\n },\n 'pre[class*=\"language-\"]::selection': {\n textShadow: \"none\",\n background: \"#264F78\",\n },\n 'code[class*=\"language-\"]::selection': {\n textShadow: \"none\",\n background: \"#264F78\",\n },\n 'pre[class*=\"language-\"] *::selection': {\n textShadow: \"none\",\n background: \"#264F78\",\n },\n 'code[class*=\"language-\"] *::selection': {\n textShadow: \"none\",\n background: \"#264F78\",\n },\n ':not(pre) > code[class*=\"language-\"]': {\n padding: \".1em .3em\",\n borderRadius: \".3em\",\n color: \"#db4c69\",\n background: \"#1e1e1e\",\n },\n \".namespace\": {\n Opacity: \".7\",\n },\n \"doctype.doctype-tag\": {\n color: \"#569CD6\",\n },\n \"doctype.name\": {\n color: \"#9cdcfe\",\n },\n comment: {\n color: \"#6a9955\",\n },\n prolog: {\n color: \"#6a9955\",\n },\n punctuation: {\n color: \"#d4d4d4\",\n },\n \".language-html .language-css .token.punctuation\": {\n color: \"#d4d4d4\",\n },\n \".language-html .language-javascript .token.punctuation\": {\n color: \"#d4d4d4\",\n },\n property: {\n color: \"#9cdcfe\",\n },\n tag: {\n color: \"#569cd6\",\n },\n boolean: {\n color: \"#569cd6\",\n },\n number: {\n color: \"#b5cea8\",\n },\n constant: {\n color: \"#9cdcfe\",\n },\n symbol: {\n color: \"#b5cea8\",\n },\n inserted: {\n color: \"#b5cea8\",\n },\n unit: {\n color: \"#b5cea8\",\n },\n selector: {\n color: \"#d7ba7d\",\n },\n \"attr-name\": {\n color: \"#9cdcfe\",\n },\n string: {\n color: \"#ce9178\",\n },\n char: {\n color: \"#ce9178\",\n },\n builtin: {\n color: \"#ce9178\",\n },\n deleted: {\n color: \"#ce9178\",\n },\n \".language-css .token.string.url\": {\n textDecoration: \"underline\",\n },\n operator: {\n color: \"#d4d4d4\",\n },\n entity: {\n color: \"#569cd6\",\n },\n \"operator.arrow\": {\n color: \"#569CD6\",\n },\n atrule: {\n color: \"#ce9178\",\n },\n \"atrule.rule\": {\n color: \"#c586c0\",\n },\n \"atrule.url\": {\n color: \"#9cdcfe\",\n },\n \"atrule.url.function\": {\n color: \"#dcdcaa\",\n },\n \"atrule.url.punctuation\": {\n color: \"#d4d4d4\",\n },\n keyword: {\n color: \"#569CD6\",\n },\n \"keyword.module\": {\n color: \"#c586c0\",\n },\n \"keyword.control-flow\": {\n color: \"#c586c0\",\n },\n function: {\n color: \"#dcdcaa\",\n },\n \"function.maybe-class-name\": {\n color: \"#dcdcaa\",\n },\n regex: {\n color: \"#d16969\",\n },\n important: {\n color: \"#569cd6\",\n },\n italic: {\n fontStyle: \"italic\",\n },\n \"class-name\": {\n color: \"#4ec9b0\",\n },\n \"maybe-class-name\": {\n color: \"#4ec9b0\",\n },\n console: {\n color: \"#9cdcfe\",\n },\n parameter: {\n color: \"#9cdcfe\",\n },\n interpolation: {\n color: \"#9cdcfe\",\n },\n \"punctuation.interpolation-punctuation\": {\n color: \"#569cd6\",\n },\n variable: {\n color: \"#9cdcfe\",\n },\n \"imports.maybe-class-name\": {\n color: \"#9cdcfe\",\n },\n \"exports.maybe-class-name\": {\n color: \"#9cdcfe\",\n },\n escape: {\n color: \"#d7ba7d\",\n },\n \"tag.punctuation\": {\n color: \"#808080\",\n },\n cdata: {\n color: \"#808080\",\n },\n \"attr-value\": {\n color: \"#ce9178\",\n },\n \"attr-value.punctuation\": {\n color: \"#ce9178\",\n },\n \"attr-value.punctuation.attr-equals\": {\n color: \"#d4d4d4\",\n },\n namespace: {\n color: \"#4ec9b0\",\n },\n 'pre[class*=\"language-javascript\"]': {\n color: \"#9cdcfe\",\n },\n 'code[class*=\"language-javascript\"]': {\n color: \"#9cdcfe\",\n },\n 'pre[class*=\"language-jsx\"]': {\n color: \"#9cdcfe\",\n },\n 'code[class*=\"language-jsx\"]': {\n color: \"#9cdcfe\",\n },\n 'pre[class*=\"language-typescript\"]': {\n color: \"#9cdcfe\",\n },\n 'code[class*=\"language-typescript\"]': {\n color: \"#9cdcfe\",\n },\n 'pre[class*=\"language-tsx\"]': {\n color: \"#9cdcfe\",\n },\n 'code[class*=\"language-tsx\"]': {\n color: \"#9cdcfe\",\n },\n 'pre[class*=\"language-css\"]': {\n color: \"#ce9178\",\n },\n 'code[class*=\"language-css\"]': {\n color: \"#ce9178\",\n },\n 'pre[class*=\"language-html\"]': {\n color: \"#d4d4d4\",\n },\n 'code[class*=\"language-html\"]': {\n color: \"#d4d4d4\",\n },\n \".language-regex .token.anchor\": {\n color: \"#dcdcaa\",\n },\n \".language-html .token.punctuation\": {\n color: \"#808080\",\n },\n 'pre[class*=\"language-\"] > code[class*=\"language-\"]': {\n position: \"relative\",\n zIndex: \"1\",\n },\n \".line-highlight.line-highlight\": {\n background: \"#f7ebc6\",\n boxShadow: \"inset 5px 0 0 #f7d87c\",\n zIndex: \"0\",\n },\n};\n"],"mappings":";;;;;;;;;;AAAA,SAAa,YAAY;AACzB,SAAS,SAAS,yBAAyB;AA0FnC,cACA,YADA;AAxED,IAAM,uBAAoC;AAAA,EAC/C,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,GAAG;AAAA,EACH,KAAK;AAAA,EACL,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,KAAK;AAAA,EACL,OAAO;AAAA,EACP,eAAe;AAAA,EACf,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,SAAS;AAAA,EACT,KAAK;AAAA,EACL,OAAO;AAAA,EACP,KAAK;AAAA,EACL,MAAM;AAAA,EACN,KAAK;AAAA;AAEP;AAEO,IAAM,uBAAuB,CAAC,QAAgB,YAAY,UAAU;AACzE,QAAM,QAAQ;AACd,MAAI,SAAS;AACb,WAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC/B,cAAU,MAAM,OAAO,KAAK,MAAM,KAAK,OAAO,IAAI,MAAM,MAAM,CAAC;AAAA,EACjE;AACA,SAAO,YAAY,OAAO,YAAY,IAAI;AAC5C;AAEA,IAAM,YAAuB,KAAK,CAAC,EAAE,UAAU,MAAM,MAAM;AACzD,QAAM,EAAE,UAAU,gBAAgB,IAAI,mBAAmB,EAAE,SAAS,IAAK,CAAC;AAE1E,QAAM,iBAAiB,MAAM;AAC3B,QAAI,OAAO,WAAW,aAAa;AACjC;AAAA,IACF;AACA,UAAM,gBAAgB,qBAAqB,QAAQ,KAAK;AACxD,UAAM,oBAAoB,QAAQ,qBAAqB,GAAG,IAAI,IAAI;AAClE,UAAM,WAAW,OAAO,OAAO,mBAAmB,iBAAiB;AAEnE,QAAI,CAAC,UAAU;AAEb;AAAA,IACF;AAEA,UAAM,OAAO,IAAI,KAAK,CAAC,KAAK,GAAG,EAAE,MAAM,aAAa,CAAC;AACrD,UAAM,MAAM,IAAI,gBAAgB,IAAI;AACpC,UAAM,OAAO,SAAS,cAAc,GAAG;AACvC,SAAK,WAAW;AAChB,SAAK,OAAO;AACZ,SAAK,MAAM,UAAU;AACrB,aAAS,KAAK,YAAY,IAAI;AAC9B,SAAK,MAAM;AACX,aAAS,KAAK,YAAY,IAAI;AAC9B,QAAI,gBAAgB,GAAG;AAAA,EACzB;AAEA,QAAM,SAAS,MAAM;AACnB,QAAI;AAAU;AACd,oBAAgB,KAAK;AAAA,EACvB;AAEA,SACE,qBAAC,SAAI,WAAU,uBACb;AAAA,yBAAC,SAAI,WAAU,8BACb;AAAA,0BAAC,UAAK,WAAU,sCAAsC,oBAAS;AAAA,MAC/D,qBAAC,SAAI,WAAU,qCACb;AAAA,4BAAC,YAAO,WAAU,oCAAmC,SAAS,gBAC3D,wBACH;AAAA,QACA,oBAAC,YAAO,WAAU,oCAAmC,SAAS,QAC3D,qBAAW,YAAY,UAC1B;AAAA,SACF;AAAA,OACF;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,OAAO;AAAA,QACP,QAAO;AAAA,QACP,aAAa;AAAA,UACX,QAAQ;AAAA,UACR,wBAAwB;AAAA,UACxB,yBAAyB;AAAA,QAC3B;AAAA,QAEC;AAAA;AAAA,IACH;AAAA,KACF;AAEJ,CAAC;AACD,UAAU,cAAc;AAQxB,IAAM,iBAAsB;AAAA,EAC1B,2BAA2B;AAAA,IACzB,OAAO;AAAA,IACP,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,SAAS;AAAA,IACT,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,SAAS;AAAA,IACT,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,YAAY;AAAA,EACd;AAAA,EACA,4BAA4B;AAAA,IAC1B,OAAO;AAAA,IACP,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,SAAS;AAAA,IACT,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,SAAS;AAAA,EACX;AAAA,EACA,sCAAsC;AAAA,IACpC,YAAY;AAAA,IACZ,YAAY;AAAA,EACd;AAAA,EACA,uCAAuC;AAAA,IACrC,YAAY;AAAA,IACZ,YAAY;AAAA,EACd;AAAA,EACA,wCAAwC;AAAA,IACtC,YAAY;AAAA,IACZ,YAAY;AAAA,EACd;AAAA,EACA,yCAAyC;AAAA,IACvC,YAAY;AAAA,IACZ,YAAY;AAAA,EACd;AAAA,EACA,wCAAwC;AAAA,IACtC,SAAS;AAAA,IACT,cAAc;AAAA,IACd,OAAO;AAAA,IACP,YAAY;AAAA,EACd;AAAA,EACA,cAAc;AAAA,IACZ,SAAS;AAAA,EACX;AAAA,EACA,uBAAuB;AAAA,IACrB,OAAO;AAAA,EACT;AAAA,EACA,gBAAgB;AAAA,IACd,OAAO;AAAA,EACT;AAAA,EACA,SAAS;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA,QAAQ;AAAA,IACN,OAAO;AAAA,EACT;AAAA,EACA,aAAa;AAAA,IACX,OAAO;AAAA,EACT;AAAA,EACA,mDAAmD;AAAA,IACjD,OAAO;AAAA,EACT;AAAA,EACA,0DAA0D;AAAA,IACxD,OAAO;AAAA,EACT;AAAA,EACA,UAAU;AAAA,IACR,OAAO;AAAA,EACT;AAAA,EACA,KAAK;AAAA,IACH,OAAO;AAAA,EACT;AAAA,EACA,SAAS;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA,QAAQ;AAAA,IACN,OAAO;AAAA,EACT;AAAA,EACA,UAAU;AAAA,IACR,OAAO;AAAA,EACT;AAAA,EACA,QAAQ;AAAA,IACN,OAAO;AAAA,EACT;AAAA,EACA,UAAU;AAAA,IACR,OAAO;AAAA,EACT;AAAA,EACA,MAAM;AAAA,IACJ,OAAO;AAAA,EACT;AAAA,EACA,UAAU;AAAA,IACR,OAAO;AAAA,EACT;AAAA,EACA,aAAa;AAAA,IACX,OAAO;AAAA,EACT;AAAA,EACA,QAAQ;AAAA,IACN,OAAO;AAAA,EACT;AAAA,EACA,MAAM;AAAA,IACJ,OAAO;AAAA,EACT;AAAA,EACA,SAAS;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA,SAAS;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA,mCAAmC;AAAA,IACjC,gBAAgB;AAAA,EAClB;AAAA,EACA,UAAU;AAAA,IACR,OAAO;AAAA,EACT;AAAA,EACA,QAAQ;AAAA,IACN,OAAO;AAAA,EACT;AAAA,EACA,kBAAkB;AAAA,IAChB,OAAO;AAAA,EACT;AAAA,EACA,QAAQ;AAAA,IACN,OAAO;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACb,OAAO;AAAA,EACT;AAAA,EACA,cAAc;AAAA,IACZ,OAAO;AAAA,EACT;AAAA,EACA,uBAAuB;AAAA,IACrB,OAAO;AAAA,EACT;AAAA,EACA,0BAA0B;AAAA,IACxB,OAAO;AAAA,EACT;AAAA,EACA,SAAS;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA,kBAAkB;AAAA,IAChB,OAAO;AAAA,EACT;AAAA,EACA,wBAAwB;AAAA,IACtB,OAAO;AAAA,EACT;AAAA,EACA,UAAU;AAAA,IACR,OAAO;AAAA,EACT;AAAA,EACA,6BAA6B;AAAA,IAC3B,OAAO;AAAA,EACT;AAAA,EACA,OAAO;AAAA,IACL,OAAO;AAAA,EACT;AAAA,EACA,WAAW;AAAA,IACT,OAAO;AAAA,EACT;AAAA,EACA,QAAQ;AAAA,IACN,WAAW;AAAA,EACb;AAAA,EACA,cAAc;AAAA,IACZ,OAAO;AAAA,EACT;AAAA,EACA,oBAAoB;AAAA,IAClB,OAAO;AAAA,EACT;AAAA,EACA,SAAS;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA,WAAW;AAAA,IACT,OAAO;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACb,OAAO;AAAA,EACT;AAAA,EACA,yCAAyC;AAAA,IACvC,OAAO;AAAA,EACT;AAAA,EACA,UAAU;AAAA,IACR,OAAO;AAAA,EACT;AAAA,EACA,4BAA4B;AAAA,IAC1B,OAAO;AAAA,EACT;AAAA,EACA,4BAA4B;AAAA,IAC1B,OAAO;AAAA,EACT;AAAA,EACA,QAAQ;AAAA,IACN,OAAO;AAAA,EACT;AAAA,EACA,mBAAmB;AAAA,IACjB,OAAO;AAAA,EACT;AAAA,EACA,OAAO;AAAA,IACL,OAAO;AAAA,EACT;AAAA,EACA,cAAc;AAAA,IACZ,OAAO;AAAA,EACT;AAAA,EACA,0BAA0B;AAAA,IACxB,OAAO;AAAA,EACT;AAAA,EACA,sCAAsC;AAAA,IACpC,OAAO;AAAA,EACT;AAAA,EACA,WAAW;AAAA,IACT,OAAO;AAAA,EACT;AAAA,EACA,qCAAqC;AAAA,IACnC,OAAO;AAAA,EACT;AAAA,EACA,sCAAsC;AAAA,IACpC,OAAO;AAAA,EACT;AAAA,EACA,8BAA8B;AAAA,IAC5B,OAAO;AAAA,EACT;AAAA,EACA,+BAA+B;AAAA,IAC7B,OAAO;AAAA,EACT;AAAA,EACA,qCAAqC;AAAA,IACnC,OAAO;AAAA,EACT;AAAA,EACA,sCAAsC;AAAA,IACpC,OAAO;AAAA,EACT;AAAA,EACA,8BAA8B;AAAA,IAC5B,OAAO;AAAA,EACT;AAAA,EACA,+BAA+B;AAAA,IAC7B,OAAO;AAAA,EACT;AAAA,EACA,8BAA8B;AAAA,IAC5B,OAAO;AAAA,EACT;AAAA,EACA,+BAA+B;AAAA,IAC7B,OAAO;AAAA,EACT;AAAA,EACA,+BAA+B;AAAA,IAC7B,OAAO;AAAA,EACT;AAAA,EACA,gCAAgC;AAAA,IAC9B,OAAO;AAAA,EACT;AAAA,EACA,iCAAiC;AAAA,IAC/B,OAAO;AAAA,EACT;AAAA,EACA,qCAAqC;AAAA,IACnC,OAAO;AAAA,EACT;AAAA,EACA,sDAAsD;AAAA,IACpD,UAAU;AAAA,IACV,QAAQ;AAAA,EACV;AAAA,EACA,kCAAkC;AAAA,IAChC,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,QAAQ;AAAA,EACV;AACF;","names":[]}
@@ -0,0 +1,34 @@
1
+ // src/components/chat/messages/ImageRenderer.tsx
2
+ import { useState } from "react";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ var ImageRenderer = ({ image, content, className = "" }) => {
5
+ const [imageError, setImageError] = useState(false);
6
+ const imageSrc = `data:image/${image.format};base64,${image.bytes}`;
7
+ const altText = content || "User uploaded image";
8
+ const handleImageError = () => {
9
+ setImageError(true);
10
+ };
11
+ if (imageError) {
12
+ return /* @__PURE__ */ jsxs("div", { className: `copilotKitImageRendering copilotKitImageRenderingError ${className}`, children: [
13
+ /* @__PURE__ */ jsx("div", { className: "copilotKitImageRenderingErrorMessage", children: "Failed to load image" }),
14
+ content && /* @__PURE__ */ jsx("div", { className: "copilotKitImageRenderingContent", children: content })
15
+ ] });
16
+ }
17
+ return /* @__PURE__ */ jsxs("div", { className: `copilotKitImageRendering ${className}`, children: [
18
+ /* @__PURE__ */ jsx(
19
+ "img",
20
+ {
21
+ src: imageSrc,
22
+ alt: altText,
23
+ className: "copilotKitImageRenderingImage",
24
+ onError: handleImageError
25
+ }
26
+ ),
27
+ content && /* @__PURE__ */ jsx("div", { className: "copilotKitImageRenderingContent", children: content })
28
+ ] });
29
+ };
30
+
31
+ export {
32
+ ImageRenderer
33
+ };
34
+ //# sourceMappingURL=chunk-DBKRAOH7.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/chat/messages/ImageRenderer.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport { ImageRendererProps } from \"../props\";\n\n/**\n * Default image rendering component that can be customized by users.\n * Uses CSS classes for styling so users can override styles.\n */\nexport const ImageRenderer: React.FC<ImageRendererProps> = ({ image, content, className = \"\" }) => {\n const [imageError, setImageError] = useState(false);\n const imageSrc = `data:image/${image.format};base64,${image.bytes}`;\n const altText = content || \"User uploaded image\";\n\n const handleImageError = () => {\n setImageError(true);\n };\n\n if (imageError) {\n return (\n <div className={`copilotKitImageRendering copilotKitImageRenderingError ${className}`}>\n <div className=\"copilotKitImageRenderingErrorMessage\">Failed to load image</div>\n {content && <div className=\"copilotKitImageRenderingContent\">{content}</div>}\n </div>\n );\n }\n\n return (\n <div className={`copilotKitImageRendering ${className}`}>\n <img\n src={imageSrc}\n alt={altText}\n className=\"copilotKitImageRenderingImage\"\n onError={handleImageError}\n />\n {content && <div className=\"copilotKitImageRenderingContent\">{content}</div>}\n </div>\n );\n};\n"],"mappings":";AAAA,SAAgB,gBAAgB;AAkB1B,SACE,KADF;AAXC,IAAM,gBAA8C,CAAC,EAAE,OAAO,SAAS,YAAY,GAAG,MAAM;AACjG,QAAM,CAAC,YAAY,aAAa,IAAI,SAAS,KAAK;AAClD,QAAM,WAAW,cAAc,MAAM,iBAAiB,MAAM;AAC5D,QAAM,UAAU,WAAW;AAE3B,QAAM,mBAAmB,MAAM;AAC7B,kBAAc,IAAI;AAAA,EACpB;AAEA,MAAI,YAAY;AACd,WACE,qBAAC,SAAI,WAAW,0DAA0D,aACxE;AAAA,0BAAC,SAAI,WAAU,wCAAuC,kCAAoB;AAAA,MACzE,WAAW,oBAAC,SAAI,WAAU,mCAAmC,mBAAQ;AAAA,OACxE;AAAA,EAEJ;AAEA,SACE,qBAAC,SAAI,WAAW,4BAA4B,aAC1C;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,QACL,KAAK;AAAA,QACL,WAAU;AAAA,QACV,SAAS;AAAA;AAAA,IACX;AAAA,IACC,WAAW,oBAAC,SAAI,WAAU,mCAAmC,mBAAQ;AAAA,KACxE;AAEJ;","names":[]}
@@ -9,7 +9,7 @@ import {
9
9
  } from "./chunk-IEMQ2SQW.mjs";
10
10
  import {
11
11
  usePushToTalk
12
- } from "./chunk-S5MBUNGN.mjs";
12
+ } from "./chunk-O72ZB5V3.mjs";
13
13
 
14
14
  // src/components/chat/Input.tsx
15
15
  import { useMemo, useRef, useState } from "react";
@@ -120,4 +120,4 @@ var Input = ({
120
120
  export {
121
121
  Input
122
122
  };
123
- //# sourceMappingURL=chunk-4HUXYD3B.mjs.map
123
+ //# sourceMappingURL=chunk-DTRPPNSA.mjs.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  CodeBlock
3
- } from "./chunk-KENCH7RN.mjs";
3
+ } from "./chunk-B5IFB5YJ.mjs";
4
4
  import {
5
5
  __objRest,
6
6
  __spreadProps,
@@ -38,8 +38,19 @@ var defaultComponents = {
38
38
  children[0] = (children == null ? void 0 : children[0]).replace("`\u258D`", "\u258D");
39
39
  }
40
40
  const match = /language-(\w+)/.exec(className || "");
41
- if (inline) {
42
- return /* @__PURE__ */ jsx("code", __spreadProps(__spreadValues({ className }, props), { children }));
41
+ const hasLanguage = match && match[1];
42
+ const content = String(children);
43
+ const hasNewlines = content.includes("\n");
44
+ const isInline = !hasLanguage && !hasNewlines;
45
+ if (isInline) {
46
+ return /* @__PURE__ */ jsx(
47
+ "code",
48
+ __spreadProps(__spreadValues({
49
+ className: `copilotKitMarkdownElement copilotKitInlineCode ${className || ""}`
50
+ }, props), {
51
+ children
52
+ })
53
+ );
43
54
  }
44
55
  return /* @__PURE__ */ jsx(
45
56
  CodeBlock,
@@ -114,4 +125,4 @@ var Markdown = ({ content, components }) => {
114
125
  export {
115
126
  Markdown
116
127
  };
117
- //# sourceMappingURL=chunk-YTXEWDNC.mjs.map
128
+ //# sourceMappingURL=chunk-E6MQUIZW.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/chat/Markdown.tsx"],"sourcesContent":["import { FC, memo } from \"react\";\nimport ReactMarkdown, { Options, Components } from \"react-markdown\";\nimport { CodeBlock } from \"./CodeBlock\";\nimport remarkGfm from \"remark-gfm\";\nimport remarkMath from \"remark-math\";\nimport rehypeRaw from \"rehype-raw\";\n\nconst defaultComponents: Components = {\n a({ children, ...props }) {\n return (\n <a className=\"copilotKitMarkdownElement\" {...props} target=\"_blank\" rel=\"noopener noreferrer\">\n {children}\n </a>\n );\n },\n // @ts-expect-error -- inline\n code({ children, className, inline, ...props }) {\n if (Array.isArray(children) && children.length) {\n if (children[0] == \"▍\") {\n return (\n <span\n style={{\n animation: \"pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite\",\n marginTop: \"0.25rem\",\n }}\n >\n ▍\n </span>\n );\n }\n\n children[0] = (children?.[0] as string).replace(\"`▍`\", \"▍\");\n }\n\n const match = /language-(\\w+)/.exec(className || \"\");\n\n // Detect inline code: if it has a language class or contains newlines, it's likely a code block\n // Otherwise, treat it as inline code\n const hasLanguage = match && match[1];\n const content = String(children);\n const hasNewlines = content.includes(\"\\n\");\n const isInline = !hasLanguage && !hasNewlines;\n\n if (isInline) {\n return (\n <code\n className={`copilotKitMarkdownElement copilotKitInlineCode ${className || \"\"}`}\n {...props}\n >\n {children}\n </code>\n );\n }\n\n return (\n <CodeBlock\n key={Math.random()}\n language={(match && match[1]) || \"\"}\n value={String(children).replace(/\\n$/, \"\")}\n {...props}\n />\n );\n },\n h1: ({ children, ...props }) => (\n <h1 className=\"copilotKitMarkdownElement\" {...props}>\n {children}\n </h1>\n ),\n h2: ({ children, ...props }) => (\n <h2 className=\"copilotKitMarkdownElement\" {...props}>\n {children}\n </h2>\n ),\n h3: ({ children, ...props }) => (\n <h3 className=\"copilotKitMarkdownElement\" {...props}>\n {children}\n </h3>\n ),\n h4: ({ children, ...props }) => (\n <h4 className=\"copilotKitMarkdownElement\" {...props}>\n {children}\n </h4>\n ),\n h5: ({ children, ...props }) => (\n <h5 className=\"copilotKitMarkdownElement\" {...props}>\n {children}\n </h5>\n ),\n h6: ({ children, ...props }) => (\n <h6 className=\"copilotKitMarkdownElement\" {...props}>\n {children}\n </h6>\n ),\n p: ({ children, ...props }) => (\n <p className=\"copilotKitMarkdownElement\" {...props}>\n {children}\n </p>\n ),\n pre: ({ children, ...props }) => (\n <pre className=\"copilotKitMarkdownElement\" {...props}>\n {children}\n </pre>\n ),\n blockquote: ({ children, ...props }) => (\n <blockquote className=\"copilotKitMarkdownElement\" {...props}>\n {children}\n </blockquote>\n ),\n ul: ({ children, ...props }) => (\n <ul className=\"copilotKitMarkdownElement\" {...props}>\n {children}\n </ul>\n ),\n li: ({ children, ...props }) => (\n <li className=\"copilotKitMarkdownElement\" {...props}>\n {children}\n </li>\n ),\n};\n\nconst MemoizedReactMarkdown: FC<Options> = memo(\n ReactMarkdown,\n (prevProps, nextProps) =>\n prevProps.children === nextProps.children && prevProps.components === nextProps.components,\n);\n\ntype MarkdownProps = {\n content: string;\n components?: Components;\n};\n\nexport const Markdown = ({ content, components }: MarkdownProps) => {\n return (\n <div className=\"copilotKitMarkdown\">\n <MemoizedReactMarkdown\n components={{ ...defaultComponents, ...components }}\n remarkPlugins={[remarkGfm, remarkMath]}\n rehypePlugins={[rehypeRaw]}\n >\n {content}\n </MemoizedReactMarkdown>\n </div>\n );\n};\n"],"mappings":"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","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  Markdown
3
- } from "./chunk-YTXEWDNC.mjs";
3
+ } from "./chunk-E6MQUIZW.mjs";
4
4
  import {
5
5
  useChatContext
6
6
  } from "./chunk-IEMQ2SQW.mjs";
@@ -9,55 +9,51 @@ import {
9
9
  import { useState } from "react";
10
10
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
11
11
  var AssistantMessage = (props) => {
12
+ var _a;
12
13
  const { icons, labels } = useChatContext();
13
14
  const {
14
15
  message,
15
16
  isLoading,
16
- subComponent,
17
17
  onRegenerate,
18
18
  onCopy,
19
19
  onThumbsUp,
20
20
  onThumbsDown,
21
21
  isCurrentMessage,
22
- rawData,
23
22
  markdownTagRenderers
24
23
  } = props;
25
24
  const [copied, setCopied] = useState(false);
26
25
  const handleCopy = () => {
27
- if (message && onCopy) {
28
- navigator.clipboard.writeText(message);
26
+ const content2 = (message == null ? void 0 : message.content) || "";
27
+ if (content2 && onCopy) {
28
+ navigator.clipboard.writeText(content2);
29
29
  setCopied(true);
30
- onCopy(message);
30
+ onCopy(content2);
31
31
  setTimeout(() => setCopied(false), 2e3);
32
- } else if (message) {
33
- navigator.clipboard.writeText(message);
32
+ } else if (content2) {
33
+ navigator.clipboard.writeText(content2);
34
34
  setCopied(true);
35
35
  setTimeout(() => setCopied(false), 2e3);
36
36
  }
37
37
  };
38
38
  const handleRegenerate = () => {
39
- if (onRegenerate) {
39
+ if (onRegenerate)
40
40
  onRegenerate();
41
- }
42
41
  };
43
42
  const handleThumbsUp = () => {
44
- const fullMessage = rawData;
45
- if (onThumbsUp && fullMessage) {
46
- onThumbsUp(fullMessage);
47
- }
43
+ if (onThumbsUp && message)
44
+ onThumbsUp(message);
48
45
  };
49
46
  const handleThumbsDown = () => {
50
- const fullMessage = rawData;
51
- if (onThumbsDown && fullMessage) {
52
- onThumbsDown(fullMessage);
53
- }
47
+ if (onThumbsDown && message)
48
+ onThumbsDown(message);
54
49
  };
55
50
  const LoadingIcon = () => /* @__PURE__ */ jsx("span", { children: icons.activityIcon });
51
+ const content = (message == null ? void 0 : message.content) || "";
52
+ const subComponent = (_a = message == null ? void 0 : message.generativeUI) == null ? void 0 : _a.call(message);
56
53
  return /* @__PURE__ */ jsxs(Fragment, { children: [
57
- (message || isLoading) && /* @__PURE__ */ jsxs("div", { className: "copilotKitMessage copilotKitAssistantMessage", children: [
58
- message && /* @__PURE__ */ jsx(Markdown, { content: message || "", components: markdownTagRenderers }),
59
- isLoading && /* @__PURE__ */ jsx(LoadingIcon, {}),
60
- message && !isLoading && /* @__PURE__ */ jsxs(
54
+ content && /* @__PURE__ */ jsxs("div", { className: "copilotKitMessage copilotKitAssistantMessage", children: [
55
+ content && /* @__PURE__ */ jsx(Markdown, { content, components: markdownTagRenderers }),
56
+ content && !isLoading && /* @__PURE__ */ jsxs(
61
57
  "div",
62
58
  {
63
59
  className: `copilotKitMessageControls ${isCurrentMessage ? "currentMessage" : ""}`,
@@ -106,11 +102,12 @@ var AssistantMessage = (props) => {
106
102
  }
107
103
  )
108
104
  ] }),
109
- /* @__PURE__ */ jsx("div", { style: { marginBottom: "0.5rem" }, children: subComponent })
105
+ /* @__PURE__ */ jsx("div", { style: { marginBottom: "0.5rem" }, children: subComponent }),
106
+ isLoading && /* @__PURE__ */ jsx(LoadingIcon, {})
110
107
  ] });
111
108
  };
112
109
 
113
110
  export {
114
111
  AssistantMessage
115
112
  };
116
- //# sourceMappingURL=chunk-L3GZ7TXC.mjs.map
113
+ //# sourceMappingURL=chunk-GCKKSSBU.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/chat/messages/AssistantMessage.tsx"],"sourcesContent":["import { AssistantMessageProps } from \"../props\";\nimport { useChatContext } from \"../ChatContext\";\nimport { Markdown } from \"../Markdown\";\nimport { useState } from \"react\";\n\nexport const AssistantMessage = (props: AssistantMessageProps) => {\n const { icons, labels } = useChatContext();\n const {\n message,\n isLoading,\n onRegenerate,\n onCopy,\n onThumbsUp,\n onThumbsDown,\n isCurrentMessage,\n markdownTagRenderers,\n } = props;\n const [copied, setCopied] = useState(false);\n\n const handleCopy = () => {\n const content = message?.content || \"\";\n if (content && onCopy) {\n navigator.clipboard.writeText(content);\n setCopied(true);\n onCopy(content);\n setTimeout(() => setCopied(false), 2000);\n } else if (content) {\n navigator.clipboard.writeText(content);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n }\n };\n\n const handleRegenerate = () => {\n if (onRegenerate) onRegenerate();\n };\n\n const handleThumbsUp = () => {\n if (onThumbsUp && message) onThumbsUp(message);\n };\n\n const handleThumbsDown = () => {\n if (onThumbsDown && message) onThumbsDown(message);\n };\n\n const LoadingIcon = () => <span>{icons.activityIcon}</span>;\n const content = message?.content || \"\";\n const subComponent = message?.generativeUI?.();\n\n return (\n <>\n {content && (\n <div className=\"copilotKitMessage copilotKitAssistantMessage\">\n {content && <Markdown content={content} components={markdownTagRenderers} />}\n\n {content && !isLoading && (\n <div\n className={`copilotKitMessageControls ${isCurrentMessage ? \"currentMessage\" : \"\"}`}\n >\n <button\n className=\"copilotKitMessageControlButton\"\n onClick={handleRegenerate}\n aria-label={labels.regenerateResponse}\n title={labels.regenerateResponse}\n >\n {icons.regenerateIcon}\n </button>\n <button\n className=\"copilotKitMessageControlButton\"\n onClick={handleCopy}\n aria-label={labels.copyToClipboard}\n title={labels.copyToClipboard}\n >\n {copied ? (\n <span style={{ fontSize: \"10px\", fontWeight: \"bold\" }}>✓</span>\n ) : (\n icons.copyIcon\n )}\n </button>\n {onThumbsUp && (\n <button\n className=\"copilotKitMessageControlButton\"\n onClick={handleThumbsUp}\n aria-label={labels.thumbsUp}\n title={labels.thumbsUp}\n >\n {icons.thumbsUpIcon}\n </button>\n )}\n {onThumbsDown && (\n <button\n className=\"copilotKitMessageControlButton\"\n onClick={handleThumbsDown}\n aria-label={labels.thumbsDown}\n title={labels.thumbsDown}\n >\n {icons.thumbsDownIcon}\n </button>\n )}\n </div>\n )}\n </div>\n )}\n <div style={{ marginBottom: \"0.5rem\" }}>{subComponent}</div>\n {isLoading && <LoadingIcon />}\n </>\n );\n};\n"],"mappings":";;;;;;;;AAGA,SAAS,gBAAgB;AA0CG,SAKxB,UALwB,KAWhB,YAXgB;AAxCrB,IAAM,mBAAmB,CAAC,UAAiC;AALlE;AAME,QAAM,EAAE,OAAO,OAAO,IAAI,eAAe;AACzC,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AACJ,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAS,KAAK;AAE1C,QAAM,aAAa,MAAM;AACvB,UAAMA,YAAU,mCAAS,YAAW;AACpC,QAAIA,YAAW,QAAQ;AACrB,gBAAU,UAAU,UAAUA,QAAO;AACrC,gBAAU,IAAI;AACd,aAAOA,QAAO;AACd,iBAAW,MAAM,UAAU,KAAK,GAAG,GAAI;AAAA,IACzC,WAAWA,UAAS;AAClB,gBAAU,UAAU,UAAUA,QAAO;AACrC,gBAAU,IAAI;AACd,iBAAW,MAAM,UAAU,KAAK,GAAG,GAAI;AAAA,IACzC;AAAA,EACF;AAEA,QAAM,mBAAmB,MAAM;AAC7B,QAAI;AAAc,mBAAa;AAAA,EACjC;AAEA,QAAM,iBAAiB,MAAM;AAC3B,QAAI,cAAc;AAAS,iBAAW,OAAO;AAAA,EAC/C;AAEA,QAAM,mBAAmB,MAAM;AAC7B,QAAI,gBAAgB;AAAS,mBAAa,OAAO;AAAA,EACnD;AAEA,QAAM,cAAc,MAAM,oBAAC,UAAM,gBAAM,cAAa;AACpD,QAAM,WAAU,mCAAS,YAAW;AACpC,QAAM,gBAAe,wCAAS,iBAAT;AAErB,SACE,iCACG;AAAA,eACC,qBAAC,SAAI,WAAU,gDACZ;AAAA,iBAAW,oBAAC,YAAS,SAAkB,YAAY,sBAAsB;AAAA,MAEzE,WAAW,CAAC,aACX;AAAA,QAAC;AAAA;AAAA,UACC,WAAW,6BAA6B,mBAAmB,mBAAmB;AAAA,UAE9E;AAAA;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,SAAS;AAAA,gBACT,cAAY,OAAO;AAAA,gBACnB,OAAO,OAAO;AAAA,gBAEb,gBAAM;AAAA;AAAA,YACT;AAAA,YACA;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,SAAS;AAAA,gBACT,cAAY,OAAO;AAAA,gBACnB,OAAO,OAAO;AAAA,gBAEb,mBACC,oBAAC,UAAK,OAAO,EAAE,UAAU,QAAQ,YAAY,OAAO,GAAG,oBAAC,IAExD,MAAM;AAAA;AAAA,YAEV;AAAA,YACC,cACC;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,SAAS;AAAA,gBACT,cAAY,OAAO;AAAA,gBACnB,OAAO,OAAO;AAAA,gBAEb,gBAAM;AAAA;AAAA,YACT;AAAA,YAED,gBACC;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,SAAS;AAAA,gBACT,cAAY,OAAO;AAAA,gBACnB,OAAO,OAAO;AAAA,gBAEb,gBAAM;AAAA;AAAA,YACT;AAAA;AAAA;AAAA,MAEJ;AAAA,OAEJ;AAAA,IAEF,oBAAC,SAAI,OAAO,EAAE,cAAc,SAAS,GAAI,wBAAa;AAAA,IACrD,aAAa,oBAAC,eAAY;AAAA,KAC7B;AAEJ;","names":["content"]}
@@ -9,19 +9,19 @@ import {
9
9
  } from "./chunk-UFN2VWSR.mjs";
10
10
  import {
11
11
  CopilotChat
12
- } from "./chunk-HKTWKCPS.mjs";
12
+ } from "./chunk-LXCD3K7B.mjs";
13
13
  import {
14
14
  AssistantMessage
15
- } from "./chunk-L3GZ7TXC.mjs";
15
+ } from "./chunk-GCKKSSBU.mjs";
16
16
  import {
17
17
  UserMessage
18
- } from "./chunk-HWMFMBJC.mjs";
18
+ } from "./chunk-VVL6JFCJ.mjs";
19
19
  import {
20
20
  Input
21
- } from "./chunk-4HUXYD3B.mjs";
21
+ } from "./chunk-DTRPPNSA.mjs";
22
22
  import {
23
23
  Messages
24
- } from "./chunk-B3D7U7TJ.mjs";
24
+ } from "./chunk-WHDNKXMP.mjs";
25
25
  import {
26
26
  ChatContextProvider
27
27
  } from "./chunk-IEMQ2SQW.mjs";
@@ -141,4 +141,4 @@ var CopilotModal = (_a) => {
141
141
  export {
142
142
  CopilotModal
143
143
  };
144
- //# sourceMappingURL=chunk-KN2GCKBE.mjs.map
144
+ //# sourceMappingURL=chunk-GJ3MFNBX.mjs.map
@@ -1,22 +1,27 @@
1
1
  import {
2
2
  AssistantMessage
3
- } from "./chunk-L3GZ7TXC.mjs";
3
+ } from "./chunk-GCKKSSBU.mjs";
4
+ import {
5
+ ImageRenderer
6
+ } from "./chunk-DBKRAOH7.mjs";
4
7
  import {
5
8
  UserMessage
6
- } from "./chunk-HWMFMBJC.mjs";
9
+ } from "./chunk-VVL6JFCJ.mjs";
7
10
  import {
8
11
  __objRest
9
12
  } from "./chunk-MRXNTQOX.mjs";
10
13
 
11
- // src/components/chat/messages/RenderTextMessage.tsx
14
+ // src/components/chat/messages/RenderMessage.tsx
12
15
  import { jsx } from "react/jsx-runtime";
13
- function RenderTextMessage(_a) {
16
+ function RenderMessage(_a) {
14
17
  var _b = _a, {
15
18
  UserMessage: UserMessage2 = UserMessage,
16
- AssistantMessage: AssistantMessage2 = AssistantMessage
19
+ AssistantMessage: AssistantMessage2 = AssistantMessage,
20
+ ImageRenderer: ImageRenderer2 = ImageRenderer
17
21
  } = _b, props = __objRest(_b, [
18
22
  "UserMessage",
19
- "AssistantMessage"
23
+ "AssistantMessage",
24
+ "ImageRenderer"
20
25
  ]);
21
26
  const {
22
27
  message,
@@ -29,24 +34,23 @@ function RenderTextMessage(_a) {
29
34
  onThumbsDown,
30
35
  markdownTagRenderers
31
36
  } = props;
32
- if (message.isTextMessage()) {
33
- if (message.role === "user") {
37
+ switch (message.role) {
38
+ case "user":
34
39
  return /* @__PURE__ */ jsx(
35
40
  UserMessage2,
36
41
  {
37
42
  "data-message-role": "user",
38
- message: message.content,
39
- rawData: message
43
+ message,
44
+ ImageRenderer: ImageRenderer2
40
45
  },
41
46
  index
42
47
  );
43
- } else if (message.role == "assistant") {
48
+ case "assistant":
44
49
  return /* @__PURE__ */ jsx(
45
50
  AssistantMessage2,
46
51
  {
47
52
  "data-message-role": "assistant",
48
- message: message.content,
49
- rawData: message,
53
+ message,
50
54
  isLoading: inProgress && isCurrentMessage && !message.content,
51
55
  isGenerating: inProgress && isCurrentMessage && !!message.content,
52
56
  isCurrentMessage,
@@ -54,15 +58,15 @@ function RenderTextMessage(_a) {
54
58
  onCopy,
55
59
  onThumbsUp,
56
60
  onThumbsDown,
57
- markdownTagRenderers
61
+ markdownTagRenderers,
62
+ ImageRenderer: ImageRenderer2
58
63
  },
59
64
  index
60
65
  );
61
- }
62
66
  }
63
67
  }
64
68
 
65
69
  export {
66
- RenderTextMessage
70
+ RenderMessage
67
71
  };
68
- //# sourceMappingURL=chunk-32MUWKL3.mjs.map
72
+ //# sourceMappingURL=chunk-JHUTTP5C.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/chat/messages/RenderMessage.tsx"],"sourcesContent":["import { RenderMessageProps } from \"../props\";\nimport { UserMessage as DefaultUserMessage } from \"./UserMessage\";\nimport { AssistantMessage as DefaultAssistantMessage } from \"./AssistantMessage\";\nimport { ImageRenderer as DefaultImageRenderer } from \"./ImageRenderer\";\n\nexport function RenderMessage({\n UserMessage = DefaultUserMessage,\n AssistantMessage = DefaultAssistantMessage,\n ImageRenderer = DefaultImageRenderer,\n ...props\n}: RenderMessageProps) {\n const {\n message,\n inProgress,\n index,\n isCurrentMessage,\n onRegenerate,\n onCopy,\n onThumbsUp,\n onThumbsDown,\n markdownTagRenderers,\n } = props;\n\n switch (message.role) {\n case \"user\":\n return (\n <UserMessage\n key={index}\n data-message-role=\"user\"\n message={message}\n ImageRenderer={ImageRenderer}\n />\n );\n case \"assistant\":\n return (\n <AssistantMessage\n key={index}\n data-message-role=\"assistant\"\n message={message}\n isLoading={inProgress && isCurrentMessage && !message.content}\n isGenerating={inProgress && isCurrentMessage && !!message.content}\n isCurrentMessage={isCurrentMessage}\n onRegenerate={() => onRegenerate?.(message.id)}\n onCopy={onCopy}\n onThumbsUp={onThumbsUp}\n onThumbsDown={onThumbsDown}\n markdownTagRenderers={markdownTagRenderers}\n ImageRenderer={ImageRenderer}\n />\n );\n }\n}\n"],"mappings":";;;;;;;;;;;;;;AA0BQ;AArBD,SAAS,cAAc,IAKP;AALO,eAC5B;AAAA,iBAAAA,eAAc;AAAA,IACd,kBAAAC,oBAAmB;AAAA,IACnB,eAAAC,iBAAgB;AAAA,EARlB,IAK8B,IAIzB,kBAJyB,IAIzB;AAAA,IAHH;AAAA,IACA;AAAA,IACA;AAAA;AAGA,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AAEJ,UAAQ,QAAQ,MAAM;AAAA,IACpB,KAAK;AACH,aACE;AAAA,QAACF;AAAA,QAAA;AAAA,UAEC,qBAAkB;AAAA,UAClB;AAAA,UACA,eAAeE;AAAA;AAAA,QAHV;AAAA,MAIP;AAAA,IAEJ,KAAK;AACH,aACE;AAAA,QAACD;AAAA,QAAA;AAAA,UAEC,qBAAkB;AAAA,UAClB;AAAA,UACA,WAAW,cAAc,oBAAoB,CAAC,QAAQ;AAAA,UACtD,cAAc,cAAc,oBAAoB,CAAC,CAAC,QAAQ;AAAA,UAC1D;AAAA,UACA,cAAc,MAAM,6CAAe,QAAQ;AAAA,UAC3C;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,eAAeC;AAAA;AAAA,QAXV;AAAA,MAYP;AAAA,EAEN;AACF;","names":["UserMessage","AssistantMessage","ImageRenderer"]}