@copilotkit/react-ui 1.10.0-next.1 → 1.10.0-next.11

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 (108) hide show
  1. package/CHANGELOG.md +112 -0
  2. package/dist/{chunk-O7KTFUAN.mjs → chunk-226ZMOE3.mjs} +2 -2
  3. package/dist/{chunk-WHDNKXMP.mjs → chunk-BJHJBS5M.mjs} +46 -6
  4. package/dist/chunk-BJHJBS5M.mjs.map +1 -0
  5. package/dist/{chunk-FOSKS7AI.mjs → chunk-FFJHOZX6.mjs} +5 -5
  6. package/dist/{chunk-QELAC6XJ.mjs → chunk-GBP47ONN.mjs} +2 -2
  7. package/dist/chunk-GBP47ONN.mjs.map +1 -0
  8. package/dist/{chunk-7CAK2CNK.mjs → chunk-GDSZGYCE.mjs} +2 -2
  9. package/dist/{chunk-O7PYQO73.mjs → chunk-GJ4SX4JE.mjs} +153 -37
  10. package/dist/chunk-GJ4SX4JE.mjs.map +1 -0
  11. package/dist/{chunk-TCIZDWPC.mjs → chunk-J5ZZR6YB.mjs} +2 -2
  12. package/dist/chunk-J5ZZR6YB.mjs.map +1 -0
  13. package/dist/{chunk-QN7T3GWI.mjs → chunk-JY2CSDKN.mjs} +4 -6
  14. package/dist/chunk-JY2CSDKN.mjs.map +1 -0
  15. package/dist/chunk-MIVUCSGO.mjs +126 -0
  16. package/dist/chunk-MIVUCSGO.mjs.map +1 -0
  17. package/dist/{chunk-OQM7D3Z3.mjs → chunk-T5QU6KSB.mjs} +8 -4
  18. package/dist/chunk-T5QU6KSB.mjs.map +1 -0
  19. package/dist/{chunk-Q2467VHZ.mjs → chunk-W26XFBEG.mjs} +2 -2
  20. package/dist/chunk-W26XFBEG.mjs.map +1 -0
  21. package/dist/chunk-Y44VLEUH.mjs +222 -0
  22. package/dist/chunk-Y44VLEUH.mjs.map +1 -0
  23. package/dist/components/chat/Chat.d.ts +52 -15
  24. package/dist/components/chat/Chat.js +1136 -869
  25. package/dist/components/chat/Chat.js.map +1 -1
  26. package/dist/components/chat/Chat.mjs +9 -8
  27. package/dist/components/chat/Header.js +6 -8
  28. package/dist/components/chat/Header.js.map +1 -1
  29. package/dist/components/chat/Header.mjs +4 -4
  30. package/dist/components/chat/Messages.d.ts +1 -1
  31. package/dist/components/chat/Messages.js +984 -23
  32. package/dist/components/chat/Messages.js.map +1 -1
  33. package/dist/components/chat/Messages.mjs +9 -1
  34. package/dist/components/chat/Modal.d.ts +2 -2
  35. package/dist/components/chat/Modal.js +1267 -931
  36. package/dist/components/chat/Modal.js.map +1 -1
  37. package/dist/components/chat/Modal.mjs +14 -13
  38. package/dist/components/chat/Popup.d.ts +1 -1
  39. package/dist/components/chat/Popup.js +1269 -933
  40. package/dist/components/chat/Popup.js.map +1 -1
  41. package/dist/components/chat/Popup.mjs +15 -14
  42. package/dist/components/chat/Sidebar.d.ts +1 -1
  43. package/dist/components/chat/Sidebar.js +1269 -933
  44. package/dist/components/chat/Sidebar.js.map +1 -1
  45. package/dist/components/chat/Sidebar.mjs +15 -14
  46. package/dist/components/chat/Suggestion.js +1 -1
  47. package/dist/components/chat/Suggestion.js.map +1 -1
  48. package/dist/components/chat/Suggestion.mjs +1 -1
  49. package/dist/components/chat/Suggestions.js +1 -1
  50. package/dist/components/chat/Suggestions.js.map +1 -1
  51. package/dist/components/chat/Suggestions.mjs +2 -2
  52. package/dist/components/chat/index.d.ts +2 -2
  53. package/dist/components/chat/index.js +1271 -935
  54. package/dist/components/chat/index.js.map +1 -1
  55. package/dist/components/chat/index.mjs +22 -21
  56. package/dist/components/chat/messages/LegacyRenderMessage.d.ts +28 -0
  57. package/dist/components/chat/messages/LegacyRenderMessage.js +980 -0
  58. package/dist/components/chat/messages/LegacyRenderMessage.js.map +1 -0
  59. package/dist/components/chat/messages/LegacyRenderMessage.mjs +17 -0
  60. package/dist/components/chat/messages/LegacyRenderMessage.mjs.map +1 -0
  61. package/dist/components/chat/messages/RenderMessage.js +4 -0
  62. package/dist/components/chat/messages/RenderMessage.js.map +1 -1
  63. package/dist/components/chat/messages/RenderMessage.mjs +2 -2
  64. package/dist/components/chat/props.d.ts +94 -2
  65. package/dist/components/chat/props.js.map +1 -1
  66. package/dist/components/dev-console/console.d.ts +1 -0
  67. package/dist/components/dev-console/console.js +6 -8
  68. package/dist/components/dev-console/console.js.map +1 -1
  69. package/dist/components/dev-console/console.mjs +3 -3
  70. package/dist/components/dev-console/index.d.ts +1 -3
  71. package/dist/components/dev-console/index.js +7 -9
  72. package/dist/components/dev-console/index.js.map +1 -1
  73. package/dist/components/dev-console/index.mjs +5 -5
  74. package/dist/components/dev-console/utils.d.ts +2 -2
  75. package/dist/components/dev-console/utils.js +2 -4
  76. package/dist/components/dev-console/utils.js.map +1 -1
  77. package/dist/components/dev-console/utils.mjs +1 -1
  78. package/dist/components/index.d.ts +3 -5
  79. package/dist/components/index.js +1272 -936
  80. package/dist/components/index.js.map +1 -1
  81. package/dist/components/index.mjs +24 -23
  82. package/dist/index.d.ts +3 -5
  83. package/dist/index.js +1303 -967
  84. package/dist/index.js.map +1 -1
  85. package/dist/index.mjs +24 -23
  86. package/package.json +6 -6
  87. package/src/components/chat/Chat.tsx +241 -23
  88. package/src/components/chat/Messages.tsx +58 -5
  89. package/src/components/chat/Modal.tsx +128 -41
  90. package/src/components/chat/Popup.tsx +20 -0
  91. package/src/components/chat/Sidebar.tsx +22 -0
  92. package/src/components/chat/Suggestion.tsx +1 -1
  93. package/src/components/chat/messages/LegacyRenderMessage.tsx +143 -0
  94. package/src/components/chat/messages/RenderMessage.tsx +3 -0
  95. package/src/components/chat/props.ts +110 -1
  96. package/src/components/dev-console/utils.ts +1 -6
  97. package/dist/chunk-7RNOT3GM.mjs +0 -144
  98. package/dist/chunk-7RNOT3GM.mjs.map +0 -1
  99. package/dist/chunk-O7PYQO73.mjs.map +0 -1
  100. package/dist/chunk-OQM7D3Z3.mjs.map +0 -1
  101. package/dist/chunk-Q2467VHZ.mjs.map +0 -1
  102. package/dist/chunk-QELAC6XJ.mjs.map +0 -1
  103. package/dist/chunk-QN7T3GWI.mjs.map +0 -1
  104. package/dist/chunk-TCIZDWPC.mjs.map +0 -1
  105. package/dist/chunk-WHDNKXMP.mjs.map +0 -1
  106. /package/dist/{chunk-O7KTFUAN.mjs.map → chunk-226ZMOE3.mjs.map} +0 -0
  107. /package/dist/{chunk-FOSKS7AI.mjs.map → chunk-FFJHOZX6.mjs.map} +0 -0
  108. /package/dist/{chunk-7CAK2CNK.mjs.map → chunk-GDSZGYCE.mjs.map} +0 -0
@@ -1,10 +1,39 @@
1
1
  "use strict";
2
2
  var __create = Object.create;
3
3
  var __defProp = Object.defineProperty;
4
+ var __defProps = Object.defineProperties;
4
5
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
5
7
  var __getOwnPropNames = Object.getOwnPropertyNames;
8
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
6
9
  var __getProtoOf = Object.getPrototypeOf;
7
10
  var __hasOwnProp = Object.prototype.hasOwnProperty;
11
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
12
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
13
+ var __spreadValues = (a, b) => {
14
+ for (var prop in b || (b = {}))
15
+ if (__hasOwnProp.call(b, prop))
16
+ __defNormalProp(a, prop, b[prop]);
17
+ if (__getOwnPropSymbols)
18
+ for (var prop of __getOwnPropSymbols(b)) {
19
+ if (__propIsEnum.call(b, prop))
20
+ __defNormalProp(a, prop, b[prop]);
21
+ }
22
+ return a;
23
+ };
24
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
25
+ var __objRest = (source, exclude) => {
26
+ var target = {};
27
+ for (var prop in source)
28
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
29
+ target[prop] = source[prop];
30
+ if (source != null && __getOwnPropSymbols)
31
+ for (var prop of __getOwnPropSymbols(source)) {
32
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
33
+ target[prop] = source[prop];
34
+ }
35
+ return target;
36
+ };
8
37
  var __export = (target, all) => {
9
38
  for (var name in all)
10
39
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -34,11 +63,72 @@ __export(Messages_exports, {
34
63
  useScrollToBottom: () => useScrollToBottom
35
64
  });
36
65
  module.exports = __toCommonJS(Messages_exports);
37
- var import_react2 = require("react");
66
+ var import_react6 = require("react");
38
67
 
39
68
  // src/components/chat/ChatContext.tsx
40
69
  var import_react = __toESM(require("react"));
70
+
71
+ // src/components/chat/Icons.tsx
41
72
  var import_jsx_runtime = require("react/jsx-runtime");
73
+ var CopyIcon = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
74
+ "svg",
75
+ {
76
+ xmlns: "http://www.w3.org/2000/svg",
77
+ fill: "none",
78
+ viewBox: "0 0 24 24",
79
+ strokeWidth: "2",
80
+ stroke: "currentColor",
81
+ width: "16",
82
+ height: "16",
83
+ style: { minWidth: "16px", minHeight: "16px" },
84
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
85
+ "path",
86
+ {
87
+ strokeLinecap: "round",
88
+ strokeLinejoin: "round",
89
+ d: "M15.75 17.25v3.375c0 .621-.504 1.125-1.125 1.125h-9.75a1.125 1.125 0 01-1.125-1.125V7.875c0-.621.504-1.125 1.125-1.125H6.75a9.06 9.06 0 011.5.124m7.5 10.376h3.375c.621 0 1.125-.504 1.125-1.125V11.25c0-4.46-3.243-8.161-7.5-8.876a9.06 9.06 0 00-1.5-.124H9.375c-.621 0-1.125.504-1.125 1.125v3.5m7.5 10.375H9.375a1.125 1.125 0 01-1.125-1.125v-9.25m12 6.625v-1.875a3.375 3.375 0 00-3.375-3.375h-1.5a1.125 1.125 0 01-1.125-1.125v-1.5a3.375 3.375 0 00-3.375-3.375H9.75"
90
+ }
91
+ )
92
+ }
93
+ );
94
+ var DownloadIcon = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
95
+ "svg",
96
+ {
97
+ xmlns: "http://www.w3.org/2000/svg",
98
+ fill: "none",
99
+ viewBox: "0 0 24 24",
100
+ strokeWidth: "2",
101
+ stroke: "currentColor",
102
+ width: "16",
103
+ height: "16",
104
+ style: { minWidth: "16px", minHeight: "16px" },
105
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
106
+ "path",
107
+ {
108
+ strokeLinecap: "round",
109
+ strokeLinejoin: "round",
110
+ d: "M3 16.5v2.25A2.25 2.25 0 005.25 21h13.5A2.25 2.25 0 0021 18.75V16.5M16.5 12L12 16.5m0 0L7.5 12m4.5 4.5V3"
111
+ }
112
+ )
113
+ }
114
+ );
115
+ var CheckIcon = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
116
+ "svg",
117
+ {
118
+ xmlns: "http://www.w3.org/2000/svg",
119
+ fill: "none",
120
+ viewBox: "0 0 24 24",
121
+ strokeWidth: "2",
122
+ stroke: "currentColor",
123
+ width: "16",
124
+ height: "16",
125
+ style: { minWidth: "16px", minHeight: "16px" },
126
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M4.5 12.75l6 6 9-13.5" })
127
+ }
128
+ );
129
+
130
+ // src/components/chat/ChatContext.tsx
131
+ var import_jsx_runtime2 = require("react/jsx-runtime");
42
132
  var ChatContext = import_react.default.createContext(void 0);
43
133
  function useChatContext() {
44
134
  const context = import_react.default.useContext(ChatContext);
@@ -52,37 +142,908 @@ function useChatContext() {
52
142
 
53
143
  // src/components/chat/Messages.tsx
54
144
  var import_react_core = require("@copilotkit/react-core");
55
- var import_jsx_runtime2 = require("react/jsx-runtime");
145
+
146
+ // src/components/chat/messages/UserMessage.tsx
147
+ var import_jsx_runtime3 = require("react/jsx-runtime");
148
+ var UserMessage = (props) => {
149
+ const { message, ImageRenderer: ImageRenderer2 } = props;
150
+ const isImageMessage = message && "image" in message && message.image;
151
+ if (isImageMessage) {
152
+ const imageMessage = message;
153
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "copilotKitMessage copilotKitUserMessage", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(ImageRenderer2, { image: imageMessage.image, content: imageMessage.content }) });
154
+ }
155
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "copilotKitMessage copilotKitUserMessage", children: message == null ? void 0 : message.content });
156
+ };
157
+
158
+ // src/components/chat/Markdown.tsx
159
+ var import_react3 = require("react");
160
+ var import_react_markdown = __toESM(require("react-markdown"));
161
+
162
+ // src/components/chat/CodeBlock.tsx
163
+ var import_react2 = require("react");
164
+ var import_react_syntax_highlighter = require("react-syntax-highlighter");
165
+
166
+ // src/hooks/use-copy-to-clipboard.tsx
167
+ var React2 = __toESM(require("react"));
168
+ function useCopyToClipboard({ timeout = 2e3 }) {
169
+ const [isCopied, setIsCopied] = React2.useState(false);
170
+ const copyToClipboard = (value) => {
171
+ var _a;
172
+ if (typeof window === "undefined" || !((_a = navigator.clipboard) == null ? void 0 : _a.writeText)) {
173
+ return;
174
+ }
175
+ if (!value) {
176
+ return;
177
+ }
178
+ navigator.clipboard.writeText(value).then(() => {
179
+ setIsCopied(true);
180
+ setTimeout(() => {
181
+ setIsCopied(false);
182
+ }, timeout);
183
+ });
184
+ };
185
+ return { isCopied, copyToClipboard };
186
+ }
187
+
188
+ // src/components/chat/CodeBlock.tsx
189
+ var import_jsx_runtime4 = require("react/jsx-runtime");
190
+ var programmingLanguages = {
191
+ javascript: ".js",
192
+ python: ".py",
193
+ java: ".java",
194
+ c: ".c",
195
+ cpp: ".cpp",
196
+ "c++": ".cpp",
197
+ "c#": ".cs",
198
+ ruby: ".rb",
199
+ php: ".php",
200
+ swift: ".swift",
201
+ "objective-c": ".m",
202
+ kotlin: ".kt",
203
+ typescript: ".ts",
204
+ go: ".go",
205
+ perl: ".pl",
206
+ rust: ".rs",
207
+ scala: ".scala",
208
+ haskell: ".hs",
209
+ lua: ".lua",
210
+ shell: ".sh",
211
+ sql: ".sql",
212
+ html: ".html",
213
+ css: ".css"
214
+ // add more file extensions here, make sure the key is same as language prop in CodeBlock.tsx component
215
+ };
216
+ var generateRandomString = (length, lowercase = false) => {
217
+ const chars = "ABCDEFGHJKLMNPQRSTUVWXY3456789";
218
+ let result = "";
219
+ for (let i = 0; i < length; i++) {
220
+ result += chars.charAt(Math.floor(Math.random() * chars.length));
221
+ }
222
+ return lowercase ? result.toLowerCase() : result;
223
+ };
224
+ var CodeBlock = (0, import_react2.memo)(({ language, value }) => {
225
+ const { isCopied, copyToClipboard } = useCopyToClipboard({ timeout: 2e3 });
226
+ const downloadAsFile = () => {
227
+ if (typeof window === "undefined") {
228
+ return;
229
+ }
230
+ const fileExtension = programmingLanguages[language] || ".file";
231
+ const suggestedFileName = `file-${generateRandomString(3, true)}${fileExtension}`;
232
+ const fileName = window.prompt("Enter file name", suggestedFileName);
233
+ if (!fileName) {
234
+ return;
235
+ }
236
+ const blob = new Blob([value], { type: "text/plain" });
237
+ const url = URL.createObjectURL(blob);
238
+ const link = document.createElement("a");
239
+ link.download = fileName;
240
+ link.href = url;
241
+ link.style.display = "none";
242
+ document.body.appendChild(link);
243
+ link.click();
244
+ document.body.removeChild(link);
245
+ URL.revokeObjectURL(url);
246
+ };
247
+ const onCopy = () => {
248
+ if (isCopied)
249
+ return;
250
+ copyToClipboard(value);
251
+ };
252
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "copilotKitCodeBlock", children: [
253
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "copilotKitCodeBlockToolbar", children: [
254
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "copilotKitCodeBlockToolbarLanguage", children: language }),
255
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "copilotKitCodeBlockToolbarButtons", children: [
256
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { className: "copilotKitCodeBlockToolbarButton", onClick: downloadAsFile, children: DownloadIcon }),
257
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { className: "copilotKitCodeBlockToolbarButton", onClick: onCopy, children: isCopied ? CheckIcon : CopyIcon })
258
+ ] })
259
+ ] }),
260
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
261
+ import_react_syntax_highlighter.Prism,
262
+ {
263
+ language,
264
+ style: highlightStyle,
265
+ PreTag: "div",
266
+ customStyle: {
267
+ margin: 0,
268
+ borderBottomLeftRadius: "0.375rem",
269
+ borderBottomRightRadius: "0.375rem"
270
+ },
271
+ children: value
272
+ }
273
+ )
274
+ ] });
275
+ });
276
+ CodeBlock.displayName = "CodeBlock";
277
+ var highlightStyle = {
278
+ 'pre[class*="language-"]': {
279
+ color: "#d4d4d4",
280
+ fontSize: "13px",
281
+ textShadow: "none",
282
+ fontFamily: 'Menlo, Monaco, Consolas, "Andale Mono", "Ubuntu Mono", "Courier New", monospace',
283
+ direction: "ltr",
284
+ textAlign: "left",
285
+ whiteSpace: "pre",
286
+ wordSpacing: "normal",
287
+ wordBreak: "normal",
288
+ lineHeight: "1.5",
289
+ MozTabSize: "4",
290
+ OTabSize: "4",
291
+ tabSize: "4",
292
+ WebkitHyphens: "none",
293
+ MozHyphens: "none",
294
+ msHyphens: "none",
295
+ hyphens: "none",
296
+ padding: "1em",
297
+ margin: ".5em 0",
298
+ overflow: "auto",
299
+ background: "#1e1e1e"
300
+ },
301
+ 'code[class*="language-"]': {
302
+ color: "#d4d4d4",
303
+ fontSize: "13px",
304
+ textShadow: "none",
305
+ fontFamily: 'Menlo, Monaco, Consolas, "Andale Mono", "Ubuntu Mono", "Courier New", monospace',
306
+ direction: "ltr",
307
+ textAlign: "left",
308
+ whiteSpace: "pre",
309
+ wordSpacing: "normal",
310
+ wordBreak: "normal",
311
+ lineHeight: "1.5",
312
+ MozTabSize: "4",
313
+ OTabSize: "4",
314
+ tabSize: "4",
315
+ WebkitHyphens: "none",
316
+ MozHyphens: "none",
317
+ msHyphens: "none",
318
+ hyphens: "none"
319
+ },
320
+ 'pre[class*="language-"]::selection': {
321
+ textShadow: "none",
322
+ background: "#264F78"
323
+ },
324
+ 'code[class*="language-"]::selection': {
325
+ textShadow: "none",
326
+ background: "#264F78"
327
+ },
328
+ 'pre[class*="language-"] *::selection': {
329
+ textShadow: "none",
330
+ background: "#264F78"
331
+ },
332
+ 'code[class*="language-"] *::selection': {
333
+ textShadow: "none",
334
+ background: "#264F78"
335
+ },
336
+ ':not(pre) > code[class*="language-"]': {
337
+ padding: ".1em .3em",
338
+ borderRadius: ".3em",
339
+ color: "#db4c69",
340
+ background: "#1e1e1e"
341
+ },
342
+ ".namespace": {
343
+ Opacity: ".7"
344
+ },
345
+ "doctype.doctype-tag": {
346
+ color: "#569CD6"
347
+ },
348
+ "doctype.name": {
349
+ color: "#9cdcfe"
350
+ },
351
+ comment: {
352
+ color: "#6a9955"
353
+ },
354
+ prolog: {
355
+ color: "#6a9955"
356
+ },
357
+ punctuation: {
358
+ color: "#d4d4d4"
359
+ },
360
+ ".language-html .language-css .token.punctuation": {
361
+ color: "#d4d4d4"
362
+ },
363
+ ".language-html .language-javascript .token.punctuation": {
364
+ color: "#d4d4d4"
365
+ },
366
+ property: {
367
+ color: "#9cdcfe"
368
+ },
369
+ tag: {
370
+ color: "#569cd6"
371
+ },
372
+ boolean: {
373
+ color: "#569cd6"
374
+ },
375
+ number: {
376
+ color: "#b5cea8"
377
+ },
378
+ constant: {
379
+ color: "#9cdcfe"
380
+ },
381
+ symbol: {
382
+ color: "#b5cea8"
383
+ },
384
+ inserted: {
385
+ color: "#b5cea8"
386
+ },
387
+ unit: {
388
+ color: "#b5cea8"
389
+ },
390
+ selector: {
391
+ color: "#d7ba7d"
392
+ },
393
+ "attr-name": {
394
+ color: "#9cdcfe"
395
+ },
396
+ string: {
397
+ color: "#ce9178"
398
+ },
399
+ char: {
400
+ color: "#ce9178"
401
+ },
402
+ builtin: {
403
+ color: "#ce9178"
404
+ },
405
+ deleted: {
406
+ color: "#ce9178"
407
+ },
408
+ ".language-css .token.string.url": {
409
+ textDecoration: "underline"
410
+ },
411
+ operator: {
412
+ color: "#d4d4d4"
413
+ },
414
+ entity: {
415
+ color: "#569cd6"
416
+ },
417
+ "operator.arrow": {
418
+ color: "#569CD6"
419
+ },
420
+ atrule: {
421
+ color: "#ce9178"
422
+ },
423
+ "atrule.rule": {
424
+ color: "#c586c0"
425
+ },
426
+ "atrule.url": {
427
+ color: "#9cdcfe"
428
+ },
429
+ "atrule.url.function": {
430
+ color: "#dcdcaa"
431
+ },
432
+ "atrule.url.punctuation": {
433
+ color: "#d4d4d4"
434
+ },
435
+ keyword: {
436
+ color: "#569CD6"
437
+ },
438
+ "keyword.module": {
439
+ color: "#c586c0"
440
+ },
441
+ "keyword.control-flow": {
442
+ color: "#c586c0"
443
+ },
444
+ function: {
445
+ color: "#dcdcaa"
446
+ },
447
+ "function.maybe-class-name": {
448
+ color: "#dcdcaa"
449
+ },
450
+ regex: {
451
+ color: "#d16969"
452
+ },
453
+ important: {
454
+ color: "#569cd6"
455
+ },
456
+ italic: {
457
+ fontStyle: "italic"
458
+ },
459
+ "class-name": {
460
+ color: "#4ec9b0"
461
+ },
462
+ "maybe-class-name": {
463
+ color: "#4ec9b0"
464
+ },
465
+ console: {
466
+ color: "#9cdcfe"
467
+ },
468
+ parameter: {
469
+ color: "#9cdcfe"
470
+ },
471
+ interpolation: {
472
+ color: "#9cdcfe"
473
+ },
474
+ "punctuation.interpolation-punctuation": {
475
+ color: "#569cd6"
476
+ },
477
+ variable: {
478
+ color: "#9cdcfe"
479
+ },
480
+ "imports.maybe-class-name": {
481
+ color: "#9cdcfe"
482
+ },
483
+ "exports.maybe-class-name": {
484
+ color: "#9cdcfe"
485
+ },
486
+ escape: {
487
+ color: "#d7ba7d"
488
+ },
489
+ "tag.punctuation": {
490
+ color: "#808080"
491
+ },
492
+ cdata: {
493
+ color: "#808080"
494
+ },
495
+ "attr-value": {
496
+ color: "#ce9178"
497
+ },
498
+ "attr-value.punctuation": {
499
+ color: "#ce9178"
500
+ },
501
+ "attr-value.punctuation.attr-equals": {
502
+ color: "#d4d4d4"
503
+ },
504
+ namespace: {
505
+ color: "#4ec9b0"
506
+ },
507
+ 'pre[class*="language-javascript"]': {
508
+ color: "#9cdcfe"
509
+ },
510
+ 'code[class*="language-javascript"]': {
511
+ color: "#9cdcfe"
512
+ },
513
+ 'pre[class*="language-jsx"]': {
514
+ color: "#9cdcfe"
515
+ },
516
+ 'code[class*="language-jsx"]': {
517
+ color: "#9cdcfe"
518
+ },
519
+ 'pre[class*="language-typescript"]': {
520
+ color: "#9cdcfe"
521
+ },
522
+ 'code[class*="language-typescript"]': {
523
+ color: "#9cdcfe"
524
+ },
525
+ 'pre[class*="language-tsx"]': {
526
+ color: "#9cdcfe"
527
+ },
528
+ 'code[class*="language-tsx"]': {
529
+ color: "#9cdcfe"
530
+ },
531
+ 'pre[class*="language-css"]': {
532
+ color: "#ce9178"
533
+ },
534
+ 'code[class*="language-css"]': {
535
+ color: "#ce9178"
536
+ },
537
+ 'pre[class*="language-html"]': {
538
+ color: "#d4d4d4"
539
+ },
540
+ 'code[class*="language-html"]': {
541
+ color: "#d4d4d4"
542
+ },
543
+ ".language-regex .token.anchor": {
544
+ color: "#dcdcaa"
545
+ },
546
+ ".language-html .token.punctuation": {
547
+ color: "#808080"
548
+ },
549
+ 'pre[class*="language-"] > code[class*="language-"]': {
550
+ position: "relative",
551
+ zIndex: "1"
552
+ },
553
+ ".line-highlight.line-highlight": {
554
+ background: "#f7ebc6",
555
+ boxShadow: "inset 5px 0 0 #f7d87c",
556
+ zIndex: "0"
557
+ }
558
+ };
559
+
560
+ // src/components/chat/Markdown.tsx
561
+ var import_remark_gfm = __toESM(require("remark-gfm"));
562
+ var import_remark_math = __toESM(require("remark-math"));
563
+ var import_rehype_raw = __toESM(require("rehype-raw"));
564
+ var import_jsx_runtime5 = require("react/jsx-runtime");
565
+ var defaultComponents = {
566
+ a(_a) {
567
+ var _b = _a, { children } = _b, props = __objRest(_b, ["children"]);
568
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("a", __spreadProps(__spreadValues({ className: "copilotKitMarkdownElement" }, props), { target: "_blank", rel: "noopener noreferrer", children }));
569
+ },
570
+ // @ts-expect-error -- inline
571
+ code(_c) {
572
+ var _d = _c, { children, className, inline } = _d, props = __objRest(_d, ["children", "className", "inline"]);
573
+ if (Array.isArray(children) && children.length) {
574
+ if (children[0] == "\u258D") {
575
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
576
+ "span",
577
+ {
578
+ style: {
579
+ animation: "pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite",
580
+ marginTop: "0.25rem"
581
+ },
582
+ children: "\u258D"
583
+ }
584
+ );
585
+ }
586
+ children[0] = (children == null ? void 0 : children[0]).replace("`\u258D`", "\u258D");
587
+ }
588
+ const match = /language-(\w+)/.exec(className || "");
589
+ const hasLanguage = match && match[1];
590
+ const content = String(children);
591
+ const hasNewlines = content.includes("\n");
592
+ const isInline = !hasLanguage && !hasNewlines;
593
+ if (isInline) {
594
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
595
+ "code",
596
+ __spreadProps(__spreadValues({
597
+ className: `copilotKitMarkdownElement copilotKitInlineCode ${className || ""}`
598
+ }, props), {
599
+ children
600
+ })
601
+ );
602
+ }
603
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
604
+ CodeBlock,
605
+ __spreadValues({
606
+ language: match && match[1] || "",
607
+ value: String(children).replace(/\n$/, "")
608
+ }, props),
609
+ Math.random()
610
+ );
611
+ },
612
+ h1: (_e) => {
613
+ var _f = _e, { children } = _f, props = __objRest(_f, ["children"]);
614
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("h1", __spreadProps(__spreadValues({ className: "copilotKitMarkdownElement" }, props), { children }));
615
+ },
616
+ h2: (_g) => {
617
+ var _h = _g, { children } = _h, props = __objRest(_h, ["children"]);
618
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("h2", __spreadProps(__spreadValues({ className: "copilotKitMarkdownElement" }, props), { children }));
619
+ },
620
+ h3: (_i) => {
621
+ var _j = _i, { children } = _j, props = __objRest(_j, ["children"]);
622
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("h3", __spreadProps(__spreadValues({ className: "copilotKitMarkdownElement" }, props), { children }));
623
+ },
624
+ h4: (_k) => {
625
+ var _l = _k, { children } = _l, props = __objRest(_l, ["children"]);
626
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("h4", __spreadProps(__spreadValues({ className: "copilotKitMarkdownElement" }, props), { children }));
627
+ },
628
+ h5: (_m) => {
629
+ var _n = _m, { children } = _n, props = __objRest(_n, ["children"]);
630
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("h5", __spreadProps(__spreadValues({ className: "copilotKitMarkdownElement" }, props), { children }));
631
+ },
632
+ h6: (_o) => {
633
+ var _p = _o, { children } = _p, props = __objRest(_p, ["children"]);
634
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("h6", __spreadProps(__spreadValues({ className: "copilotKitMarkdownElement" }, props), { children }));
635
+ },
636
+ p: (_q) => {
637
+ var _r = _q, { children } = _r, props = __objRest(_r, ["children"]);
638
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", __spreadProps(__spreadValues({ className: "copilotKitMarkdownElement" }, props), { children }));
639
+ },
640
+ pre: (_s) => {
641
+ var _t = _s, { children } = _t, props = __objRest(_t, ["children"]);
642
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("pre", __spreadProps(__spreadValues({ className: "copilotKitMarkdownElement" }, props), { children }));
643
+ },
644
+ blockquote: (_u) => {
645
+ var _v = _u, { children } = _v, props = __objRest(_v, ["children"]);
646
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("blockquote", __spreadProps(__spreadValues({ className: "copilotKitMarkdownElement" }, props), { children }));
647
+ },
648
+ ul: (_w) => {
649
+ var _x = _w, { children } = _x, props = __objRest(_x, ["children"]);
650
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("ul", __spreadProps(__spreadValues({ className: "copilotKitMarkdownElement" }, props), { children }));
651
+ },
652
+ li: (_y) => {
653
+ var _z = _y, { children } = _z, props = __objRest(_z, ["children"]);
654
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("li", __spreadProps(__spreadValues({ className: "copilotKitMarkdownElement" }, props), { children }));
655
+ }
656
+ };
657
+ var MemoizedReactMarkdown = (0, import_react3.memo)(
658
+ import_react_markdown.default,
659
+ (prevProps, nextProps) => prevProps.children === nextProps.children && prevProps.components === nextProps.components
660
+ );
661
+ var Markdown = ({ content, components }) => {
662
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "copilotKitMarkdown", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
663
+ MemoizedReactMarkdown,
664
+ {
665
+ components: __spreadValues(__spreadValues({}, defaultComponents), components),
666
+ remarkPlugins: [import_remark_gfm.default, import_remark_math.default],
667
+ rehypePlugins: [import_rehype_raw.default],
668
+ children: content
669
+ }
670
+ ) });
671
+ };
672
+
673
+ // src/components/chat/messages/AssistantMessage.tsx
674
+ var import_react4 = require("react");
675
+ var import_jsx_runtime6 = require("react/jsx-runtime");
676
+ var AssistantMessage = (props) => {
677
+ var _a;
678
+ const { icons, labels } = useChatContext();
679
+ const {
680
+ message,
681
+ isLoading,
682
+ onRegenerate,
683
+ onCopy,
684
+ onThumbsUp,
685
+ onThumbsDown,
686
+ isCurrentMessage,
687
+ markdownTagRenderers
688
+ } = props;
689
+ const [copied, setCopied] = (0, import_react4.useState)(false);
690
+ const handleCopy = () => {
691
+ const content2 = (message == null ? void 0 : message.content) || "";
692
+ if (content2 && onCopy) {
693
+ navigator.clipboard.writeText(content2);
694
+ setCopied(true);
695
+ onCopy(content2);
696
+ setTimeout(() => setCopied(false), 2e3);
697
+ } else if (content2) {
698
+ navigator.clipboard.writeText(content2);
699
+ setCopied(true);
700
+ setTimeout(() => setCopied(false), 2e3);
701
+ }
702
+ };
703
+ const handleRegenerate = () => {
704
+ if (onRegenerate)
705
+ onRegenerate();
706
+ };
707
+ const handleThumbsUp = () => {
708
+ if (onThumbsUp && message)
709
+ onThumbsUp(message);
710
+ };
711
+ const handleThumbsDown = () => {
712
+ if (onThumbsDown && message)
713
+ onThumbsDown(message);
714
+ };
715
+ const LoadingIcon = () => /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { children: icons.activityIcon });
716
+ const content = (message == null ? void 0 : message.content) || "";
717
+ const subComponent = (_a = message == null ? void 0 : message.generativeUI) == null ? void 0 : _a.call(message);
718
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(import_jsx_runtime6.Fragment, { children: [
719
+ content && /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "copilotKitMessage copilotKitAssistantMessage", children: [
720
+ content && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(Markdown, { content, components: markdownTagRenderers }),
721
+ content && !isLoading && /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
722
+ "div",
723
+ {
724
+ className: `copilotKitMessageControls ${isCurrentMessage ? "currentMessage" : ""}`,
725
+ children: [
726
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
727
+ "button",
728
+ {
729
+ className: "copilotKitMessageControlButton",
730
+ onClick: handleRegenerate,
731
+ "aria-label": labels.regenerateResponse,
732
+ title: labels.regenerateResponse,
733
+ children: icons.regenerateIcon
734
+ }
735
+ ),
736
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
737
+ "button",
738
+ {
739
+ className: "copilotKitMessageControlButton",
740
+ onClick: handleCopy,
741
+ "aria-label": labels.copyToClipboard,
742
+ title: labels.copyToClipboard,
743
+ children: copied ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { style: { fontSize: "10px", fontWeight: "bold" }, children: "\u2713" }) : icons.copyIcon
744
+ }
745
+ ),
746
+ onThumbsUp && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
747
+ "button",
748
+ {
749
+ className: "copilotKitMessageControlButton",
750
+ onClick: handleThumbsUp,
751
+ "aria-label": labels.thumbsUp,
752
+ title: labels.thumbsUp,
753
+ children: icons.thumbsUpIcon
754
+ }
755
+ ),
756
+ onThumbsDown && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
757
+ "button",
758
+ {
759
+ className: "copilotKitMessageControlButton",
760
+ onClick: handleThumbsDown,
761
+ "aria-label": labels.thumbsDown,
762
+ title: labels.thumbsDown,
763
+ children: icons.thumbsDownIcon
764
+ }
765
+ )
766
+ ]
767
+ }
768
+ )
769
+ ] }),
770
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { style: { marginBottom: "0.5rem" }, children: subComponent }),
771
+ isLoading && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(LoadingIcon, {})
772
+ ] });
773
+ };
774
+
775
+ // src/components/chat/messages/ImageRenderer.tsx
776
+ var import_react5 = require("react");
777
+ var import_jsx_runtime7 = require("react/jsx-runtime");
778
+ var ImageRenderer = ({ image, content, className = "" }) => {
779
+ const [imageError, setImageError] = (0, import_react5.useState)(false);
780
+ const imageSrc = `data:image/${image.format};base64,${image.bytes}`;
781
+ const altText = content || "User uploaded image";
782
+ const handleImageError = () => {
783
+ setImageError(true);
784
+ };
785
+ if (imageError) {
786
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: `copilotKitImageRendering copilotKitImageRenderingError ${className}`, children: [
787
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "copilotKitImageRenderingErrorMessage", children: "Failed to load image" }),
788
+ content && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "copilotKitImageRenderingContent", children: content })
789
+ ] });
790
+ }
791
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: `copilotKitImageRendering ${className}`, children: [
792
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
793
+ "img",
794
+ {
795
+ src: imageSrc,
796
+ alt: altText,
797
+ className: "copilotKitImageRenderingImage",
798
+ onError: handleImageError
799
+ }
800
+ ),
801
+ content && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "copilotKitImageRenderingContent", children: content })
802
+ ] });
803
+ };
804
+
805
+ // src/components/chat/messages/RenderMessage.tsx
806
+ var import_jsx_runtime8 = require("react/jsx-runtime");
807
+ function RenderMessage(_a) {
808
+ var _b = _a, {
809
+ UserMessage: UserMessage2 = UserMessage,
810
+ AssistantMessage: AssistantMessage2 = AssistantMessage,
811
+ ImageRenderer: ImageRenderer2 = ImageRenderer
812
+ } = _b, props = __objRest(_b, [
813
+ "UserMessage",
814
+ "AssistantMessage",
815
+ "ImageRenderer"
816
+ ]);
817
+ var _a2;
818
+ const {
819
+ message,
820
+ inProgress,
821
+ index,
822
+ isCurrentMessage,
823
+ onRegenerate,
824
+ onCopy,
825
+ onThumbsUp,
826
+ onThumbsDown,
827
+ markdownTagRenderers
828
+ } = props;
829
+ switch (message.role) {
830
+ case "user":
831
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
832
+ UserMessage2,
833
+ {
834
+ rawData: message,
835
+ "data-message-role": "user",
836
+ message,
837
+ ImageRenderer: ImageRenderer2
838
+ },
839
+ index
840
+ );
841
+ case "assistant":
842
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
843
+ AssistantMessage2,
844
+ {
845
+ "data-message-role": "assistant",
846
+ subComponent: (_a2 = message.generativeUI) == null ? void 0 : _a2.call(message),
847
+ rawData: message,
848
+ message,
849
+ isLoading: inProgress && isCurrentMessage && !message.content,
850
+ isGenerating: inProgress && isCurrentMessage && !!message.content,
851
+ isCurrentMessage,
852
+ onRegenerate: () => onRegenerate == null ? void 0 : onRegenerate(message.id),
853
+ onCopy,
854
+ onThumbsUp,
855
+ onThumbsDown,
856
+ markdownTagRenderers,
857
+ ImageRenderer: ImageRenderer2
858
+ },
859
+ index
860
+ );
861
+ }
862
+ }
863
+
864
+ // src/components/chat/messages/LegacyRenderMessage.tsx
865
+ var import_runtime_client_gql = require("@copilotkit/runtime-client-gql");
866
+ var import_jsx_runtime9 = require("react/jsx-runtime");
867
+ var LegacyRenderMessage = ({
868
+ message,
869
+ inProgress,
870
+ index,
871
+ isCurrentMessage,
872
+ actionResult,
873
+ AssistantMessage: AssistantMessage2,
874
+ UserMessage: UserMessage2,
875
+ ImageRenderer: ImageRenderer2,
876
+ onRegenerate,
877
+ onCopy,
878
+ onThumbsUp,
879
+ onThumbsDown,
880
+ markdownTagRenderers,
881
+ legacyProps
882
+ }) => {
883
+ var _a;
884
+ const {
885
+ RenderTextMessage,
886
+ RenderActionExecutionMessage,
887
+ RenderAgentStateMessage,
888
+ RenderResultMessage,
889
+ RenderImageMessage
890
+ } = legacyProps;
891
+ const deprecatedMessage = (_a = (0, import_runtime_client_gql.aguiToGQL)(message)[0]) != null ? _a : void 0;
892
+ if (deprecatedMessage.isTextMessage() && RenderTextMessage) {
893
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
894
+ RenderTextMessage,
895
+ {
896
+ message,
897
+ inProgress,
898
+ index,
899
+ isCurrentMessage,
900
+ AssistantMessage: AssistantMessage2,
901
+ UserMessage: UserMessage2,
902
+ onRegenerate,
903
+ onCopy,
904
+ onThumbsUp,
905
+ onThumbsDown,
906
+ markdownTagRenderers
907
+ }
908
+ );
909
+ }
910
+ if (deprecatedMessage.isActionExecutionMessage() && RenderActionExecutionMessage) {
911
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
912
+ RenderActionExecutionMessage,
913
+ {
914
+ message,
915
+ inProgress,
916
+ index,
917
+ isCurrentMessage,
918
+ actionResult,
919
+ AssistantMessage: AssistantMessage2,
920
+ UserMessage: UserMessage2
921
+ }
922
+ );
923
+ }
924
+ if (deprecatedMessage.isAgentStateMessage() && RenderAgentStateMessage) {
925
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
926
+ RenderAgentStateMessage,
927
+ {
928
+ message,
929
+ inProgress,
930
+ index,
931
+ isCurrentMessage,
932
+ AssistantMessage: AssistantMessage2,
933
+ UserMessage: UserMessage2
934
+ }
935
+ );
936
+ }
937
+ if (deprecatedMessage.isResultMessage() && RenderResultMessage) {
938
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
939
+ RenderResultMessage,
940
+ {
941
+ message,
942
+ inProgress,
943
+ index,
944
+ isCurrentMessage,
945
+ AssistantMessage: AssistantMessage2,
946
+ UserMessage: UserMessage2
947
+ }
948
+ );
949
+ }
950
+ if (deprecatedMessage.isImageMessage() && RenderImageMessage) {
951
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
952
+ RenderImageMessage,
953
+ {
954
+ message,
955
+ inProgress,
956
+ index,
957
+ isCurrentMessage,
958
+ AssistantMessage: AssistantMessage2,
959
+ UserMessage: UserMessage2
960
+ }
961
+ );
962
+ }
963
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
964
+ RenderMessage,
965
+ {
966
+ message,
967
+ inProgress,
968
+ index,
969
+ isCurrentMessage,
970
+ AssistantMessage: AssistantMessage2,
971
+ UserMessage: UserMessage2,
972
+ ImageRenderer: ImageRenderer2,
973
+ onRegenerate,
974
+ onCopy,
975
+ onThumbsUp,
976
+ onThumbsDown,
977
+ markdownTagRenderers
978
+ }
979
+ );
980
+ };
981
+
982
+ // src/components/chat/Messages.tsx
983
+ var import_jsx_runtime10 = require("react/jsx-runtime");
56
984
  var Messages = ({
57
985
  inProgress,
58
986
  children,
59
- RenderMessage,
60
- AssistantMessage,
61
- UserMessage,
987
+ RenderMessage: RenderMessage2,
988
+ AssistantMessage: AssistantMessage2,
989
+ UserMessage: UserMessage2,
990
+ ImageRenderer: ImageRenderer2,
62
991
  onRegenerate,
63
992
  onCopy,
64
993
  onThumbsUp,
65
994
  onThumbsDown,
66
- markdownTagRenderers
995
+ markdownTagRenderers,
996
+ // Legacy props
997
+ RenderTextMessage,
998
+ RenderActionExecutionMessage,
999
+ RenderAgentStateMessage,
1000
+ RenderResultMessage,
1001
+ RenderImageMessage
67
1002
  }) => {
68
1003
  const { labels } = useChatContext();
69
- const { visibleMessages, interrupt } = (0, import_react_core.useCopilotChat)();
70
- const initialMessages = (0, import_react2.useMemo)(() => makeInitialMessages(labels.initial), [labels.initial]);
1004
+ const { messages: visibleMessages, interrupt } = (0, import_react_core.useCopilotChatInternal)();
1005
+ const initialMessages = (0, import_react6.useMemo)(() => makeInitialMessages(labels.initial), [labels.initial]);
71
1006
  const messages = [...initialMessages, ...visibleMessages];
72
1007
  const { messagesContainerRef, messagesEndRef } = useScrollToBottom(messages);
73
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { className: "copilotKitMessages", ref: messagesContainerRef, children: [
74
- /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { className: "copilotKitMessagesContainer", children: [
1008
+ const hasLegacyProps = !!(RenderTextMessage || RenderActionExecutionMessage || RenderAgentStateMessage || RenderResultMessage || RenderImageMessage);
1009
+ (0, import_react6.useEffect)(() => {
1010
+ if (hasLegacyProps) {
1011
+ console.warn(
1012
+ "[CopilotKit] Legacy message render props (RenderTextMessage, RenderActionExecutionMessage, etc.) are deprecated. Please use the unified 'RenderMessage' prop instead. See migration guide: https://docs.copilotkit.ai/migration/render-message"
1013
+ );
1014
+ }
1015
+ }, [hasLegacyProps]);
1016
+ const legacyProps = (0, import_react6.useMemo)(
1017
+ () => ({
1018
+ RenderTextMessage,
1019
+ RenderActionExecutionMessage,
1020
+ RenderAgentStateMessage,
1021
+ RenderResultMessage,
1022
+ RenderImageMessage
1023
+ }),
1024
+ [
1025
+ RenderTextMessage,
1026
+ RenderActionExecutionMessage,
1027
+ RenderAgentStateMessage,
1028
+ RenderResultMessage,
1029
+ RenderImageMessage
1030
+ ]
1031
+ );
1032
+ const MessageRenderer = hasLegacyProps ? (props) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(LegacyRenderMessage, __spreadProps(__spreadValues({}, props), { legacyProps })) : RenderMessage2;
1033
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "copilotKitMessages", ref: messagesContainerRef, children: [
1034
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "copilotKitMessagesContainer", children: [
75
1035
  messages.map((message, index) => {
76
1036
  const isCurrentMessage = index === messages.length - 1;
77
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
78
- RenderMessage,
1037
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1038
+ MessageRenderer,
79
1039
  {
80
1040
  message,
81
1041
  inProgress,
82
1042
  index,
83
1043
  isCurrentMessage,
84
- AssistantMessage,
85
- UserMessage,
1044
+ AssistantMessage: AssistantMessage2,
1045
+ UserMessage: UserMessage2,
1046
+ ImageRenderer: ImageRenderer2,
86
1047
  onRegenerate,
87
1048
  onCopy,
88
1049
  onThumbsUp,
@@ -94,7 +1055,7 @@ var Messages = ({
94
1055
  }),
95
1056
  interrupt
96
1057
  ] }),
97
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("footer", { className: "copilotKitMessagesFooter", ref: messagesEndRef, children })
1058
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("footer", { className: "copilotKitMessagesFooter", ref: messagesEndRef, children })
98
1059
  ] });
99
1060
  };
100
1061
  function makeInitialMessages(initial) {
@@ -112,16 +1073,16 @@ function makeInitialMessages(initial) {
112
1073
  return [
113
1074
  {
114
1075
  id: initial,
115
- role: "system",
1076
+ role: "assistant",
116
1077
  content: initial
117
1078
  }
118
1079
  ];
119
1080
  }
120
1081
  function useScrollToBottom(messages) {
121
- const messagesEndRef = (0, import_react2.useRef)(null);
122
- const messagesContainerRef = (0, import_react2.useRef)(null);
123
- const isProgrammaticScrollRef = (0, import_react2.useRef)(false);
124
- const isUserScrollUpRef = (0, import_react2.useRef)(false);
1082
+ const messagesEndRef = (0, import_react6.useRef)(null);
1083
+ const messagesContainerRef = (0, import_react6.useRef)(null);
1084
+ const isProgrammaticScrollRef = (0, import_react6.useRef)(false);
1085
+ const isUserScrollUpRef = (0, import_react6.useRef)(false);
125
1086
  const scrollToBottom = () => {
126
1087
  if (messagesContainerRef.current && messagesEndRef.current) {
127
1088
  isProgrammaticScrollRef.current = true;
@@ -138,7 +1099,7 @@ function useScrollToBottom(messages) {
138
1099
  isUserScrollUpRef.current = scrollTop + clientHeight < scrollHeight;
139
1100
  }
140
1101
  };
141
- (0, import_react2.useEffect)(() => {
1102
+ (0, import_react6.useEffect)(() => {
142
1103
  const container = messagesContainerRef.current;
143
1104
  if (container) {
144
1105
  container.addEventListener("scroll", handleScroll);
@@ -149,7 +1110,7 @@ function useScrollToBottom(messages) {
149
1110
  }
150
1111
  };
151
1112
  }, []);
152
- (0, import_react2.useEffect)(() => {
1113
+ (0, import_react6.useEffect)(() => {
153
1114
  const container = messagesContainerRef.current;
154
1115
  if (!container) {
155
1116
  return;
@@ -168,7 +1129,7 @@ function useScrollToBottom(messages) {
168
1129
  mutationObserver.disconnect();
169
1130
  };
170
1131
  }, []);
171
- (0, import_react2.useEffect)(() => {
1132
+ (0, import_react6.useEffect)(() => {
172
1133
  isUserScrollUpRef.current = false;
173
1134
  scrollToBottom();
174
1135
  }, [messages.filter((m) => m.role === "user").length]);