@copilotkit/react-ui 1.8.13-next.1 → 1.8.13-next.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/{chunk-RVLCPPEL.mjs → chunk-5INP2EWU.mjs} +6 -4
  3. package/dist/chunk-5INP2EWU.mjs.map +1 -0
  4. package/dist/{chunk-XFCMZH2H.mjs → chunk-6VUDBDUN.mjs} +2 -2
  5. package/dist/{chunk-24TDU7MY.mjs → chunk-ALWZ35SI.mjs} +2 -2
  6. package/dist/{chunk-IIRQWGWV.mjs → chunk-B3D7U7TJ.mjs} +5 -3
  7. package/dist/chunk-B3D7U7TJ.mjs.map +1 -0
  8. package/dist/{chunk-KQ44Z255.mjs → chunk-EMIYIMQ6.mjs} +4 -4
  9. package/dist/{chunk-ZDKVXAL3.mjs → chunk-FWKHST6I.mjs} +75 -39
  10. package/dist/chunk-FWKHST6I.mjs.map +1 -0
  11. package/dist/{chunk-NWE7CLTB.mjs → chunk-IAHSHPRJ.mjs} +22 -21
  12. package/dist/chunk-IAHSHPRJ.mjs.map +1 -0
  13. package/dist/{chunk-XZNY26GH.mjs → chunk-IMBPSLL4.mjs} +3 -3
  14. package/dist/chunk-IMBPSLL4.mjs.map +1 -0
  15. package/dist/{chunk-MDMNZ6JL.mjs → chunk-JU3HNL5N.mjs} +2 -2
  16. package/dist/{chunk-DSQGQJI4.mjs → chunk-MPZAMNCN.mjs} +2 -2
  17. package/dist/{chunk-K7SXHJRT.mjs → chunk-QEZ3YYLO.mjs} +2 -2
  18. package/dist/chunk-QGSPTXOV.mjs +24 -0
  19. package/dist/chunk-QGSPTXOV.mjs.map +1 -0
  20. package/dist/chunk-SC6JRFAJ.mjs +1 -0
  21. package/dist/{chunk-LUPGADWY.mjs → chunk-UKWBNVMQ.mjs} +2 -2
  22. package/dist/{chunk-OZXUB3V7.mjs → chunk-XMNTLIK5.mjs} +5 -4
  23. package/dist/chunk-XMNTLIK5.mjs.map +1 -0
  24. package/dist/chunk-YTXEWDNC.mjs +117 -0
  25. package/dist/chunk-YTXEWDNC.mjs.map +1 -0
  26. package/dist/components/chat/Button.d.ts +2 -0
  27. package/dist/components/chat/Chat.d.ts +11 -2
  28. package/dist/components/chat/Chat.js +117 -50
  29. package/dist/components/chat/Chat.js.map +1 -1
  30. package/dist/components/chat/Chat.mjs +13 -12
  31. package/dist/components/chat/Header.d.ts +2 -0
  32. package/dist/components/chat/Input.d.ts +2 -0
  33. package/dist/components/chat/Input.mjs +2 -2
  34. package/dist/components/chat/Markdown.d.ts +3 -1
  35. package/dist/components/chat/Markdown.js +65 -20
  36. package/dist/components/chat/Markdown.js.map +1 -1
  37. package/dist/components/chat/Markdown.mjs +1 -1
  38. package/dist/components/chat/Messages.d.ts +2 -1
  39. package/dist/components/chat/Messages.js +4 -2
  40. package/dist/components/chat/Messages.js.map +1 -1
  41. package/dist/components/chat/Messages.mjs +1 -1
  42. package/dist/components/chat/Modal.d.ts +2 -2
  43. package/dist/components/chat/Modal.js +186 -88
  44. package/dist/components/chat/Modal.js.map +1 -1
  45. package/dist/components/chat/Modal.mjs +19 -18
  46. package/dist/components/chat/Popup.d.ts +1 -1
  47. package/dist/components/chat/Popup.js +188 -90
  48. package/dist/components/chat/Popup.js.map +1 -1
  49. package/dist/components/chat/Popup.mjs +20 -19
  50. package/dist/components/chat/Sidebar.d.ts +1 -1
  51. package/dist/components/chat/Sidebar.js +188 -90
  52. package/dist/components/chat/Sidebar.js.map +1 -1
  53. package/dist/components/chat/Sidebar.mjs +20 -19
  54. package/dist/components/chat/Suggestion.d.ts +8 -3
  55. package/dist/components/chat/Suggestion.js +2 -2
  56. package/dist/components/chat/Suggestion.js.map +1 -1
  57. package/dist/components/chat/Suggestion.mjs +1 -1
  58. package/dist/components/chat/Suggestions.d.ts +9 -0
  59. package/dist/components/chat/Suggestions.js +73 -0
  60. package/dist/components/chat/Suggestions.js.map +1 -0
  61. package/dist/components/chat/Suggestions.mjs +10 -0
  62. package/dist/components/chat/Suggestions.mjs.map +1 -0
  63. package/dist/components/chat/Window.d.ts +2 -0
  64. package/dist/components/chat/index.d.ts +6 -3
  65. package/dist/components/chat/index.js +194 -92
  66. package/dist/components/chat/index.js.map +1 -1
  67. package/dist/components/chat/index.mjs +31 -24
  68. package/dist/components/chat/messages/AssistantMessage.d.ts +2 -0
  69. package/dist/components/chat/messages/AssistantMessage.js +68 -22
  70. package/dist/components/chat/messages/AssistantMessage.js.map +1 -1
  71. package/dist/components/chat/messages/AssistantMessage.mjs +2 -2
  72. package/dist/components/chat/messages/RenderActionExecutionMessage.d.ts +2 -0
  73. package/dist/components/chat/messages/RenderActionExecutionMessage.js +68 -22
  74. package/dist/components/chat/messages/RenderActionExecutionMessage.js.map +1 -1
  75. package/dist/components/chat/messages/RenderActionExecutionMessage.mjs +3 -3
  76. package/dist/components/chat/messages/RenderAgentStateMessage.d.ts +2 -0
  77. package/dist/components/chat/messages/RenderAgentStateMessage.js +68 -22
  78. package/dist/components/chat/messages/RenderAgentStateMessage.js.map +1 -1
  79. package/dist/components/chat/messages/RenderAgentStateMessage.mjs +3 -3
  80. package/dist/components/chat/messages/RenderImageMessage.d.ts +2 -0
  81. package/dist/components/chat/messages/RenderImageMessage.js +68 -22
  82. package/dist/components/chat/messages/RenderImageMessage.js.map +1 -1
  83. package/dist/components/chat/messages/RenderImageMessage.mjs +3 -3
  84. package/dist/components/chat/messages/RenderResultMessage.d.ts +2 -0
  85. package/dist/components/chat/messages/RenderResultMessage.js +68 -22
  86. package/dist/components/chat/messages/RenderResultMessage.js.map +1 -1
  87. package/dist/components/chat/messages/RenderResultMessage.mjs +3 -3
  88. package/dist/components/chat/messages/RenderTextMessage.d.ts +2 -0
  89. package/dist/components/chat/messages/RenderTextMessage.js +72 -24
  90. package/dist/components/chat/messages/RenderTextMessage.js.map +1 -1
  91. package/dist/components/chat/messages/RenderTextMessage.mjs +3 -3
  92. package/dist/components/chat/messages/UserMessage.d.ts +2 -0
  93. package/dist/components/chat/props.d.ts +27 -1
  94. package/dist/components/chat/props.js.map +1 -1
  95. package/dist/components/index.d.ts +6 -3
  96. package/dist/components/index.js +194 -92
  97. package/dist/components/index.js.map +1 -1
  98. package/dist/components/index.mjs +35 -28
  99. package/dist/index.css +32 -28
  100. package/dist/index.css.map +1 -1
  101. package/dist/index.d.ts +6 -3
  102. package/dist/index.js +194 -92
  103. package/dist/index.js.map +1 -1
  104. package/dist/index.mjs +35 -28
  105. package/dist/types/index.d.ts +1 -0
  106. package/dist/types/index.js.map +1 -1
  107. package/package.json +11 -10
  108. package/src/components/chat/Chat.tsx +21 -13
  109. package/src/components/chat/Markdown.tsx +86 -29
  110. package/src/components/chat/Messages.tsx +2 -0
  111. package/src/components/chat/Modal.tsx +4 -0
  112. package/src/components/chat/Suggestion.tsx +10 -3
  113. package/src/components/chat/Suggestions.tsx +20 -0
  114. package/src/components/chat/index.tsx +2 -0
  115. package/src/components/chat/messages/AssistantMessage.tsx +2 -1
  116. package/src/components/chat/messages/RenderTextMessage.tsx +2 -0
  117. package/src/components/chat/props.ts +29 -0
  118. package/src/css/markdown.css +33 -28
  119. package/src/types/index.ts +1 -0
  120. package/dist/chunk-ABHUX6T6.mjs +0 -72
  121. package/dist/chunk-ABHUX6T6.mjs.map +0 -1
  122. package/dist/chunk-IIRQWGWV.mjs.map +0 -1
  123. package/dist/chunk-NWE7CLTB.mjs.map +0 -1
  124. package/dist/chunk-OZXUB3V7.mjs.map +0 -1
  125. package/dist/chunk-PXEVB7IK.mjs +0 -1
  126. package/dist/chunk-RVLCPPEL.mjs.map +0 -1
  127. package/dist/chunk-XZNY26GH.mjs.map +0 -1
  128. package/dist/chunk-ZDKVXAL3.mjs.map +0 -1
  129. /package/dist/{chunk-XFCMZH2H.mjs.map → chunk-6VUDBDUN.mjs.map} +0 -0
  130. /package/dist/{chunk-24TDU7MY.mjs.map → chunk-ALWZ35SI.mjs.map} +0 -0
  131. /package/dist/{chunk-KQ44Z255.mjs.map → chunk-EMIYIMQ6.mjs.map} +0 -0
  132. /package/dist/{chunk-MDMNZ6JL.mjs.map → chunk-JU3HNL5N.mjs.map} +0 -0
  133. /package/dist/{chunk-DSQGQJI4.mjs.map → chunk-MPZAMNCN.mjs.map} +0 -0
  134. /package/dist/{chunk-K7SXHJRT.mjs.map → chunk-QEZ3YYLO.mjs.map} +0 -0
  135. /package/dist/{chunk-PXEVB7IK.mjs.map → chunk-SC6JRFAJ.mjs.map} +0 -0
  136. /package/dist/{chunk-LUPGADWY.mjs.map → chunk-UKWBNVMQ.mjs.map} +0 -0
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  Markdown
3
- } from "./chunk-ABHUX6T6.mjs";
3
+ } from "./chunk-YTXEWDNC.mjs";
4
4
  import {
5
5
  useChatContext
6
6
  } from "./chunk-IEMQ2SQW.mjs";
@@ -18,7 +18,8 @@ var AssistantMessage = (props) => {
18
18
  onCopy,
19
19
  onThumbsUp,
20
20
  onThumbsDown,
21
- isCurrentMessage
21
+ isCurrentMessage,
22
+ markdownTagRenderers
22
23
  } = props;
23
24
  const [copied, setCopied] = useState(false);
24
25
  const handleCopy = () => {
@@ -51,7 +52,7 @@ var AssistantMessage = (props) => {
51
52
  const LoadingIcon = () => /* @__PURE__ */ jsx("span", { children: icons.activityIcon });
52
53
  return /* @__PURE__ */ jsxs(Fragment, { children: [
53
54
  (message || isLoading) && /* @__PURE__ */ jsxs("div", { className: "copilotKitMessage copilotKitAssistantMessage", children: [
54
- message && /* @__PURE__ */ jsx(Markdown, { content: message || "" }),
55
+ message && /* @__PURE__ */ jsx(Markdown, { content: message || "", components: markdownTagRenderers }),
55
56
  isLoading && /* @__PURE__ */ jsx(LoadingIcon, {}),
56
57
  message && !isLoading && /* @__PURE__ */ jsxs(
57
58
  "div",
@@ -109,4 +110,4 @@ var AssistantMessage = (props) => {
109
110
  export {
110
111
  AssistantMessage
111
112
  };
112
- //# sourceMappingURL=chunk-OZXUB3V7.mjs.map
113
+ //# sourceMappingURL=chunk-XMNTLIK5.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 subComponent,\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 if (message && onCopy) {\n navigator.clipboard.writeText(message);\n setCopied(true);\n onCopy(message);\n setTimeout(() => setCopied(false), 2000);\n } else if (message) {\n navigator.clipboard.writeText(message);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n }\n };\n\n const handleRegenerate = () => {\n if (onRegenerate) {\n onRegenerate();\n }\n };\n\n const handleThumbsUp = () => {\n if (onThumbsUp && message) {\n onThumbsUp(message);\n }\n };\n\n const handleThumbsDown = () => {\n if (onThumbsDown && message) {\n onThumbsDown(message);\n }\n };\n\n const LoadingIcon = () => <span>{icons.activityIcon}</span>;\n\n return (\n <>\n {(message || isLoading) && (\n <div className=\"copilotKitMessage copilotKitAssistantMessage\">\n {message && <Markdown content={message || \"\"} components={markdownTagRenderers} />}\n {isLoading && <LoadingIcon />}\n\n {message && !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 </>\n );\n};\n"],"mappings":";;;;;;;;AAGA,SAAS,gBAAgB;AAgDG,SAGxB,UAHwB,KAUhB,YAVgB;AA9CrB,IAAM,mBAAmB,CAAC,UAAiC;AAChE,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,IACA;AAAA,EACF,IAAI;AACJ,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAS,KAAK;AAE1C,QAAM,aAAa,MAAM;AACvB,QAAI,WAAW,QAAQ;AACrB,gBAAU,UAAU,UAAU,OAAO;AACrC,gBAAU,IAAI;AACd,aAAO,OAAO;AACd,iBAAW,MAAM,UAAU,KAAK,GAAG,GAAI;AAAA,IACzC,WAAW,SAAS;AAClB,gBAAU,UAAU,UAAU,OAAO;AACrC,gBAAU,IAAI;AACd,iBAAW,MAAM,UAAU,KAAK,GAAG,GAAI;AAAA,IACzC;AAAA,EACF;AAEA,QAAM,mBAAmB,MAAM;AAC7B,QAAI,cAAc;AAChB,mBAAa;AAAA,IACf;AAAA,EACF;AAEA,QAAM,iBAAiB,MAAM;AAC3B,QAAI,cAAc,SAAS;AACzB,iBAAW,OAAO;AAAA,IACpB;AAAA,EACF;AAEA,QAAM,mBAAmB,MAAM;AAC7B,QAAI,gBAAgB,SAAS;AAC3B,mBAAa,OAAO;AAAA,IACtB;AAAA,EACF;AAEA,QAAM,cAAc,MAAM,oBAAC,UAAM,gBAAM,cAAa;AAEpD,SACE,iCACI;AAAA,gBAAW,cACX,qBAAC,SAAI,WAAU,gDACZ;AAAA,iBAAW,oBAAC,YAAS,SAAS,WAAW,IAAI,YAAY,sBAAsB;AAAA,MAC/E,aAAa,oBAAC,eAAY;AAAA,MAE1B,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,KACxD;AAEJ;","names":[]}
@@ -0,0 +1,117 @@
1
+ import {
2
+ CodeBlock
3
+ } from "./chunk-KENCH7RN.mjs";
4
+ import {
5
+ __objRest,
6
+ __spreadProps,
7
+ __spreadValues
8
+ } from "./chunk-MRXNTQOX.mjs";
9
+
10
+ // src/components/chat/Markdown.tsx
11
+ import { memo } from "react";
12
+ import ReactMarkdown from "react-markdown";
13
+ import remarkGfm from "remark-gfm";
14
+ import remarkMath from "remark-math";
15
+ import rehypeRaw from "rehype-raw";
16
+ import { jsx } from "react/jsx-runtime";
17
+ var defaultComponents = {
18
+ a(_a) {
19
+ var _b = _a, { children } = _b, props = __objRest(_b, ["children"]);
20
+ return /* @__PURE__ */ jsx("a", __spreadProps(__spreadValues({ className: "copilotKitMarkdownElement" }, props), { target: "_blank", rel: "noopener noreferrer", children }));
21
+ },
22
+ // @ts-expect-error -- inline
23
+ code(_c) {
24
+ var _d = _c, { children, className, inline } = _d, props = __objRest(_d, ["children", "className", "inline"]);
25
+ if (Array.isArray(children) && children.length) {
26
+ if (children[0] == "\u258D") {
27
+ return /* @__PURE__ */ jsx(
28
+ "span",
29
+ {
30
+ style: {
31
+ animation: "pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite",
32
+ marginTop: "0.25rem"
33
+ },
34
+ children: "\u258D"
35
+ }
36
+ );
37
+ }
38
+ children[0] = (children == null ? void 0 : children[0]).replace("`\u258D`", "\u258D");
39
+ }
40
+ const match = /language-(\w+)/.exec(className || "");
41
+ if (inline) {
42
+ return /* @__PURE__ */ jsx("code", __spreadProps(__spreadValues({ className }, props), { children }));
43
+ }
44
+ return /* @__PURE__ */ jsx(
45
+ CodeBlock,
46
+ __spreadValues({
47
+ language: match && match[1] || "",
48
+ value: String(children).replace(/\n$/, "")
49
+ }, props),
50
+ Math.random()
51
+ );
52
+ },
53
+ h1: (_e) => {
54
+ var _f = _e, { children } = _f, props = __objRest(_f, ["children"]);
55
+ return /* @__PURE__ */ jsx("h1", __spreadProps(__spreadValues({ className: "copilotKitMarkdownElement" }, props), { children }));
56
+ },
57
+ h2: (_g) => {
58
+ var _h = _g, { children } = _h, props = __objRest(_h, ["children"]);
59
+ return /* @__PURE__ */ jsx("h2", __spreadProps(__spreadValues({ className: "copilotKitMarkdownElement" }, props), { children }));
60
+ },
61
+ h3: (_i) => {
62
+ var _j = _i, { children } = _j, props = __objRest(_j, ["children"]);
63
+ return /* @__PURE__ */ jsx("h3", __spreadProps(__spreadValues({ className: "copilotKitMarkdownElement" }, props), { children }));
64
+ },
65
+ h4: (_k) => {
66
+ var _l = _k, { children } = _l, props = __objRest(_l, ["children"]);
67
+ return /* @__PURE__ */ jsx("h4", __spreadProps(__spreadValues({ className: "copilotKitMarkdownElement" }, props), { children }));
68
+ },
69
+ h5: (_m) => {
70
+ var _n = _m, { children } = _n, props = __objRest(_n, ["children"]);
71
+ return /* @__PURE__ */ jsx("h5", __spreadProps(__spreadValues({ className: "copilotKitMarkdownElement" }, props), { children }));
72
+ },
73
+ h6: (_o) => {
74
+ var _p = _o, { children } = _p, props = __objRest(_p, ["children"]);
75
+ return /* @__PURE__ */ jsx("h6", __spreadProps(__spreadValues({ className: "copilotKitMarkdownElement" }, props), { children }));
76
+ },
77
+ p: (_q) => {
78
+ var _r = _q, { children } = _r, props = __objRest(_r, ["children"]);
79
+ return /* @__PURE__ */ jsx("p", __spreadProps(__spreadValues({ className: "copilotKitMarkdownElement" }, props), { children }));
80
+ },
81
+ pre: (_s) => {
82
+ var _t = _s, { children } = _t, props = __objRest(_t, ["children"]);
83
+ return /* @__PURE__ */ jsx("pre", __spreadProps(__spreadValues({ className: "copilotKitMarkdownElement" }, props), { children }));
84
+ },
85
+ blockquote: (_u) => {
86
+ var _v = _u, { children } = _v, props = __objRest(_v, ["children"]);
87
+ return /* @__PURE__ */ jsx("blockquote", __spreadProps(__spreadValues({ className: "copilotKitMarkdownElement" }, props), { children }));
88
+ },
89
+ ul: (_w) => {
90
+ var _x = _w, { children } = _x, props = __objRest(_x, ["children"]);
91
+ return /* @__PURE__ */ jsx("ul", __spreadProps(__spreadValues({ className: "copilotKitMarkdownElement" }, props), { children }));
92
+ },
93
+ li: (_y) => {
94
+ var _z = _y, { children } = _z, props = __objRest(_z, ["children"]);
95
+ return /* @__PURE__ */ jsx("li", __spreadProps(__spreadValues({ className: "copilotKitMarkdownElement" }, props), { children }));
96
+ }
97
+ };
98
+ var MemoizedReactMarkdown = memo(
99
+ ReactMarkdown,
100
+ (prevProps, nextProps) => prevProps.children === nextProps.children && prevProps.components === nextProps.components
101
+ );
102
+ var Markdown = ({ content, components }) => {
103
+ return /* @__PURE__ */ jsx("div", { className: "copilotKitMarkdown", children: /* @__PURE__ */ jsx(
104
+ MemoizedReactMarkdown,
105
+ {
106
+ components: __spreadValues(__spreadValues({}, defaultComponents), components),
107
+ remarkPlugins: [remarkGfm, remarkMath],
108
+ rehypePlugins: [rehypeRaw],
109
+ children: content
110
+ }
111
+ ) });
112
+ };
113
+
114
+ export {
115
+ Markdown
116
+ };
117
+ //# sourceMappingURL=chunk-YTXEWDNC.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 if (inline) {\n return (\n <code className={className} {...props}>\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":";;;;;;;;;;AAAA,SAAa,YAAY;AACzB,OAAO,mBAA4C;AAEnD,OAAO,eAAe;AACtB,OAAO,gBAAgB;AACvB,OAAO,eAAe;AAKhB;AAHN,IAAM,oBAAgC;AAAA,EACpC,EAAE,IAAwB;AAAxB,iBAAE,WARN,IAQI,IAAe,kBAAf,IAAe,CAAb;AACF,WACE,oBAAC,oCAAE,WAAU,+BAAgC,QAA5C,EAAmD,QAAO,UAAS,KAAI,uBACrE,WACH;AAAA,EAEJ;AAAA;AAAA,EAEA,KAAK,IAA2C;AAA3C,iBAAE,YAAU,WAAW,OAhB9B,IAgBO,IAAkC,kBAAlC,IAAkC,CAAhC,YAAU,aAAW;AAC1B,QAAI,MAAM,QAAQ,QAAQ,KAAK,SAAS,QAAQ;AAC9C,UAAI,SAAS,CAAC,KAAK,UAAK;AACtB,eACE;AAAA,UAAC;AAAA;AAAA,YACC,OAAO;AAAA,cACL,WAAW;AAAA,cACX,WAAW;AAAA,YACb;AAAA,YACD;AAAA;AAAA,QAED;AAAA,MAEJ;AAEA,eAAS,CAAC,KAAK,qCAAW,IAAc,QAAQ,YAAO,QAAG;AAAA,IAC5D;AAEA,UAAM,QAAQ,iBAAiB,KAAK,aAAa,EAAE;AAEnD,QAAI,QAAQ;AACV,aACE,oBAAC,uCAAK,aAA0B,QAA/B,EACE,WACH;AAAA,IAEJ;AAEA,WACE;AAAA,MAAC;AAAA;AAAA,QAEC,UAAW,SAAS,MAAM,CAAC,KAAM;AAAA,QACjC,OAAO,OAAO,QAAQ,EAAE,QAAQ,OAAO,EAAE;AAAA,SACrC;AAAA,MAHC,KAAK,OAAO;AAAA,IAInB;AAAA,EAEJ;AAAA,EACA,IAAI,CAAC,OAAwB;AAAxB,iBAAE,WArDT,IAqDO,IAAe,kBAAf,IAAe,CAAb;AACL,+BAAC,qCAAG,WAAU,+BAAgC,QAA7C,EACE,WACH;AAAA;AAAA,EAEF,IAAI,CAAC,OAAwB;AAAxB,iBAAE,WA1DT,IA0DO,IAAe,kBAAf,IAAe,CAAb;AACL,+BAAC,qCAAG,WAAU,+BAAgC,QAA7C,EACE,WACH;AAAA;AAAA,EAEF,IAAI,CAAC,OAAwB;AAAxB,iBAAE,WA/DT,IA+DO,IAAe,kBAAf,IAAe,CAAb;AACL,+BAAC,qCAAG,WAAU,+BAAgC,QAA7C,EACE,WACH;AAAA;AAAA,EAEF,IAAI,CAAC,OAAwB;AAAxB,iBAAE,WApET,IAoEO,IAAe,kBAAf,IAAe,CAAb;AACL,+BAAC,qCAAG,WAAU,+BAAgC,QAA7C,EACE,WACH;AAAA;AAAA,EAEF,IAAI,CAAC,OAAwB;AAAxB,iBAAE,WAzET,IAyEO,IAAe,kBAAf,IAAe,CAAb;AACL,+BAAC,qCAAG,WAAU,+BAAgC,QAA7C,EACE,WACH;AAAA;AAAA,EAEF,IAAI,CAAC,OAAwB;AAAxB,iBAAE,WA9ET,IA8EO,IAAe,kBAAf,IAAe,CAAb;AACL,+BAAC,qCAAG,WAAU,+BAAgC,QAA7C,EACE,WACH;AAAA;AAAA,EAEF,GAAG,CAAC,OAAwB;AAAxB,iBAAE,WAnFR,IAmFM,IAAe,kBAAf,IAAe,CAAb;AACJ,+BAAC,oCAAE,WAAU,+BAAgC,QAA5C,EACE,WACH;AAAA;AAAA,EAEF,KAAK,CAAC,OAAwB;AAAxB,iBAAE,WAxFV,IAwFQ,IAAe,kBAAf,IAAe,CAAb;AACN,+BAAC,sCAAI,WAAU,+BAAgC,QAA9C,EACE,WACH;AAAA;AAAA,EAEF,YAAY,CAAC,OAAwB;AAAxB,iBAAE,WA7FjB,IA6Fe,IAAe,kBAAf,IAAe,CAAb;AACb,+BAAC,6CAAW,WAAU,+BAAgC,QAArD,EACE,WACH;AAAA;AAAA,EAEF,IAAI,CAAC,OAAwB;AAAxB,iBAAE,WAlGT,IAkGO,IAAe,kBAAf,IAAe,CAAb;AACL,+BAAC,qCAAG,WAAU,+BAAgC,QAA7C,EACE,WACH;AAAA;AAAA,EAEF,IAAI,CAAC,OAAwB;AAAxB,iBAAE,WAvGT,IAuGO,IAAe,kBAAf,IAAe,CAAb;AACL,+BAAC,qCAAG,WAAU,+BAAgC,QAA7C,EACE,WACH;AAAA;AAEJ;AAEA,IAAM,wBAAqC;AAAA,EACzC;AAAA,EACA,CAAC,WAAW,cACV,UAAU,aAAa,UAAU,YAAY,UAAU,eAAe,UAAU;AACpF;AAOO,IAAM,WAAW,CAAC,EAAE,SAAS,WAAW,MAAqB;AAClE,SACE,oBAAC,SAAI,WAAU,sBACb;AAAA,IAAC;AAAA;AAAA,MACC,YAAY,kCAAK,oBAAsB;AAAA,MACvC,eAAe,CAAC,WAAW,UAAU;AAAA,MACrC,eAAe,CAAC,SAAS;AAAA,MAExB;AAAA;AAAA,EACH,GACF;AAEJ;","names":[]}
@@ -1,6 +1,8 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { ButtonProps } from './props.js';
3
3
  import '@copilotkit/runtime-client-gql';
4
+ import '../../types/suggestions.js';
5
+ import 'react';
4
6
 
5
7
  declare const Button: ({}: ButtonProps) => react_jsx_runtime.JSX.Element;
6
8
 
@@ -4,7 +4,7 @@ import React__default from 'react';
4
4
  import { SystemMessageFunction, HintFunction } from '@copilotkit/react-core';
5
5
  import { CopilotChatSuggestion } from '../../types/suggestions.js';
6
6
  import { Message } from '@copilotkit/runtime-client-gql';
7
- import { AssistantMessageProps, UserMessageProps, MessagesProps, RenderMessageProps, InputProps } from './props.js';
7
+ import { ComponentsMap, AssistantMessageProps, UserMessageProps, MessagesProps, RenderMessageProps, RenderSuggestionsListProps, InputProps } from './props.js';
8
8
 
9
9
  /**
10
10
  * Props for CopilotChat component.
@@ -51,6 +51,11 @@ interface CopilotChatProps {
51
51
  * A callback function for thumbs down feedback
52
52
  */
53
53
  onThumbsDown?: (message: string) => void;
54
+ /**
55
+ * A list of markdown components to render in assistant message.
56
+ * Useful when you want to render custom elements in the message (e.g a reference tag element)
57
+ */
58
+ markdownTagRenderers?: ComponentsMap;
54
59
  /**
55
60
  * Icons can be used to set custom icons for the chat window.
56
61
  */
@@ -107,6 +112,10 @@ interface CopilotChatProps {
107
112
  * A custom RenderImageMessage component to use instead of the default.
108
113
  */
109
114
  RenderImageMessage?: React__default.ComponentType<RenderMessageProps>;
115
+ /**
116
+ * A custom suggestions list component to use instead of the default.
117
+ */
118
+ RenderSuggestionsList?: React__default.ComponentType<RenderSuggestionsListProps>;
110
119
  /**
111
120
  * A custom Input component to use instead of the default.
112
121
  */
@@ -166,7 +175,7 @@ type ImageUpload = {
166
175
  contentType: string;
167
176
  bytes: string;
168
177
  };
169
- declare function CopilotChat({ instructions, onSubmitMessage, makeSystemMessage, onInProgress, onStopGeneration, onReloadMessages, onRegenerate, onCopy, onThumbsUp, onThumbsDown, Messages, RenderTextMessage, RenderActionExecutionMessage, RenderAgentStateMessage, RenderResultMessage, RenderImageMessage, Input, className, icons, labels, AssistantMessage, UserMessage, imageUploadsEnabled, inputFileAccept, }: CopilotChatProps): react_jsx_runtime.JSX.Element;
178
+ declare function CopilotChat({ instructions, onSubmitMessage, makeSystemMessage, onInProgress, onStopGeneration, onReloadMessages, onRegenerate, onCopy, onThumbsUp, onThumbsDown, markdownTagRenderers, Messages, RenderTextMessage, RenderActionExecutionMessage, RenderAgentStateMessage, RenderResultMessage, RenderImageMessage, RenderSuggestionsList, Input, className, icons, labels, AssistantMessage, UserMessage, imageUploadsEnabled, inputFileAccept, }: CopilotChatProps): react_jsx_runtime.JSX.Element;
170
179
  declare function WrappedCopilotChat({ children, icons, labels, className, }: {
171
180
  children: React__default.ReactNode;
172
181
  icons?: CopilotChatIcons;
@@ -413,7 +413,8 @@ var Messages = ({
413
413
  onRegenerate,
414
414
  onCopy,
415
415
  onThumbsUp,
416
- onThumbsDown
416
+ onThumbsDown,
417
+ markdownTagRenderers
417
418
  }) => {
418
419
  const context = useChatContext();
419
420
  const initialMessages = (0, import_react2.useMemo)(
@@ -452,7 +453,8 @@ var Messages = ({
452
453
  onRegenerate,
453
454
  onCopy,
454
455
  onThumbsUp,
455
- onThumbsDown
456
+ onThumbsDown,
457
+ markdownTagRenderers
456
458
  },
457
459
  index
458
460
  );
@@ -1281,31 +1283,17 @@ var highlightStyle = {
1281
1283
  // src/components/chat/Markdown.tsx
1282
1284
  var import_remark_gfm = __toESM(require("remark-gfm"));
1283
1285
  var import_remark_math = __toESM(require("remark-math"));
1286
+ var import_rehype_raw = __toESM(require("rehype-raw"));
1284
1287
  var import_jsx_runtime9 = require("react/jsx-runtime");
1285
- var MemoizedReactMarkdown = (0, import_react7.memo)(
1286
- import_react_markdown.default,
1287
- (prevProps, nextProps) => prevProps.children === nextProps.children && prevProps.className === nextProps.className
1288
- );
1289
- var Markdown = ({ content }) => {
1290
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "copilotKitMarkdown", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(MemoizedReactMarkdown, { components, remarkPlugins: [import_remark_gfm.default, import_remark_math.default], children: content }) });
1291
- };
1292
- var components = {
1288
+ var defaultComponents = {
1293
1289
  a(_a) {
1294
1290
  var _b = _a, { children } = _b, props = __objRest(_b, ["children"]);
1295
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1296
- "a",
1297
- __spreadProps(__spreadValues({
1298
- style: { color: "blue", textDecoration: "underline" }
1299
- }, props), {
1300
- target: "_blank",
1301
- rel: "noopener noreferrer",
1302
- children
1303
- })
1304
- );
1291
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("a", __spreadProps(__spreadValues({ className: "copilotKitMarkdownElement" }, props), { target: "_blank", rel: "noopener noreferrer", children }));
1305
1292
  },
1293
+ // @ts-expect-error -- inline
1306
1294
  code(_c) {
1307
1295
  var _d = _c, { children, className, inline } = _d, props = __objRest(_d, ["children", "className", "inline"]);
1308
- if (children.length) {
1296
+ if (Array.isArray(children) && children.length) {
1309
1297
  if (children[0] == "\u258D") {
1310
1298
  return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1311
1299
  "span",
@@ -1318,7 +1306,7 @@ var components = {
1318
1306
  }
1319
1307
  );
1320
1308
  }
1321
- children[0] = children[0].replace("`\u258D`", "\u258D");
1309
+ children[0] = (children == null ? void 0 : children[0]).replace("`\u258D`", "\u258D");
1322
1310
  }
1323
1311
  const match = /language-(\w+)/.exec(className || "");
1324
1312
  if (inline) {
@@ -1332,8 +1320,67 @@ var components = {
1332
1320
  }, props),
1333
1321
  Math.random()
1334
1322
  );
1323
+ },
1324
+ h1: (_e) => {
1325
+ var _f = _e, { children } = _f, props = __objRest(_f, ["children"]);
1326
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("h1", __spreadProps(__spreadValues({ className: "copilotKitMarkdownElement" }, props), { children }));
1327
+ },
1328
+ h2: (_g) => {
1329
+ var _h = _g, { children } = _h, props = __objRest(_h, ["children"]);
1330
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("h2", __spreadProps(__spreadValues({ className: "copilotKitMarkdownElement" }, props), { children }));
1331
+ },
1332
+ h3: (_i) => {
1333
+ var _j = _i, { children } = _j, props = __objRest(_j, ["children"]);
1334
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("h3", __spreadProps(__spreadValues({ className: "copilotKitMarkdownElement" }, props), { children }));
1335
+ },
1336
+ h4: (_k) => {
1337
+ var _l = _k, { children } = _l, props = __objRest(_l, ["children"]);
1338
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("h4", __spreadProps(__spreadValues({ className: "copilotKitMarkdownElement" }, props), { children }));
1339
+ },
1340
+ h5: (_m) => {
1341
+ var _n = _m, { children } = _n, props = __objRest(_n, ["children"]);
1342
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("h5", __spreadProps(__spreadValues({ className: "copilotKitMarkdownElement" }, props), { children }));
1343
+ },
1344
+ h6: (_o) => {
1345
+ var _p = _o, { children } = _p, props = __objRest(_p, ["children"]);
1346
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("h6", __spreadProps(__spreadValues({ className: "copilotKitMarkdownElement" }, props), { children }));
1347
+ },
1348
+ p: (_q) => {
1349
+ var _r = _q, { children } = _r, props = __objRest(_r, ["children"]);
1350
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("p", __spreadProps(__spreadValues({ className: "copilotKitMarkdownElement" }, props), { children }));
1351
+ },
1352
+ pre: (_s) => {
1353
+ var _t = _s, { children } = _t, props = __objRest(_t, ["children"]);
1354
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("pre", __spreadProps(__spreadValues({ className: "copilotKitMarkdownElement" }, props), { children }));
1355
+ },
1356
+ blockquote: (_u) => {
1357
+ var _v = _u, { children } = _v, props = __objRest(_v, ["children"]);
1358
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("blockquote", __spreadProps(__spreadValues({ className: "copilotKitMarkdownElement" }, props), { children }));
1359
+ },
1360
+ ul: (_w) => {
1361
+ var _x = _w, { children } = _x, props = __objRest(_x, ["children"]);
1362
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("ul", __spreadProps(__spreadValues({ className: "copilotKitMarkdownElement" }, props), { children }));
1363
+ },
1364
+ li: (_y) => {
1365
+ var _z = _y, { children } = _z, props = __objRest(_z, ["children"]);
1366
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("li", __spreadProps(__spreadValues({ className: "copilotKitMarkdownElement" }, props), { children }));
1335
1367
  }
1336
1368
  };
1369
+ var MemoizedReactMarkdown = (0, import_react7.memo)(
1370
+ import_react_markdown.default,
1371
+ (prevProps, nextProps) => prevProps.children === nextProps.children && prevProps.components === nextProps.components
1372
+ );
1373
+ var Markdown = ({ content, components }) => {
1374
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "copilotKitMarkdown", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1375
+ MemoizedReactMarkdown,
1376
+ {
1377
+ components: __spreadValues(__spreadValues({}, defaultComponents), components),
1378
+ remarkPlugins: [import_remark_gfm.default, import_remark_math.default],
1379
+ rehypePlugins: [import_rehype_raw.default],
1380
+ children: content
1381
+ }
1382
+ ) });
1383
+ };
1337
1384
 
1338
1385
  // src/components/chat/messages/AssistantMessage.tsx
1339
1386
  var import_react8 = require("react");
@@ -1348,7 +1395,8 @@ var AssistantMessage = (props) => {
1348
1395
  onCopy,
1349
1396
  onThumbsUp,
1350
1397
  onThumbsDown,
1351
- isCurrentMessage
1398
+ isCurrentMessage,
1399
+ markdownTagRenderers
1352
1400
  } = props;
1353
1401
  const [copied, setCopied] = (0, import_react8.useState)(false);
1354
1402
  const handleCopy = () => {
@@ -1381,7 +1429,7 @@ var AssistantMessage = (props) => {
1381
1429
  const LoadingIcon = () => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { children: icons.activityIcon });
1382
1430
  return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
1383
1431
  (message || isLoading) && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "copilotKitMessage copilotKitAssistantMessage", children: [
1384
- message && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Markdown, { content: message || "" }),
1432
+ message && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Markdown, { content: message || "", components: markdownTagRenderers }),
1385
1433
  isLoading && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(LoadingIcon, {}),
1386
1434
  message && !isLoading && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
1387
1435
  "div",
@@ -1454,7 +1502,8 @@ function RenderTextMessage(_a) {
1454
1502
  onRegenerate,
1455
1503
  onCopy,
1456
1504
  onThumbsUp,
1457
- onThumbsDown
1505
+ onThumbsDown,
1506
+ markdownTagRenderers
1458
1507
  } = props;
1459
1508
  if (message.isTextMessage()) {
1460
1509
  if (message.role === "user") {
@@ -1480,7 +1529,8 @@ function RenderTextMessage(_a) {
1480
1529
  onRegenerate: () => onRegenerate == null ? void 0 : onRegenerate(message.id),
1481
1530
  onCopy,
1482
1531
  onThumbsUp,
1483
- onThumbsDown
1532
+ onThumbsDown,
1533
+ markdownTagRenderers
1484
1534
  },
1485
1535
  index
1486
1536
  );
@@ -1791,19 +1841,23 @@ function RenderImageMessage(_a) {
1791
1841
  return null;
1792
1842
  }
1793
1843
 
1844
+ // src/components/chat/Chat.tsx
1845
+ var import_react9 = __toESM(require("react"));
1846
+ var import_react_core7 = require("@copilotkit/react-core");
1847
+
1794
1848
  // src/components/chat/Suggestion.tsx
1795
1849
  var import_react_core6 = require("@copilotkit/react-core");
1796
1850
  var import_shared = require("@copilotkit/shared");
1797
1851
  var import_runtime_client_gql3 = require("@copilotkit/runtime-client-gql");
1798
1852
  var import_jsx_runtime16 = require("react/jsx-runtime");
1799
- function Suggestion({ title, message, onClick, partial, className }) {
1853
+ function Suggestion({ title, onClick, partial, className }) {
1800
1854
  return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1801
1855
  "button",
1802
1856
  {
1803
1857
  disabled: partial,
1804
1858
  onClick: (e) => {
1805
1859
  e.preventDefault();
1806
- onClick(message);
1860
+ onClick();
1807
1861
  },
1808
1862
  className: className || (partial ? "suggestion loading" : "suggestion"),
1809
1863
  "data-test-id": "suggestion",
@@ -1882,8 +1936,6 @@ var reloadSuggestions = (context, chatSuggestionConfiguration, setCurrentSuggest
1882
1936
  });
1883
1937
 
1884
1938
  // src/components/chat/Chat.tsx
1885
- var import_react9 = __toESM(require("react"));
1886
- var import_react_core7 = require("@copilotkit/react-core");
1887
1939
  var import_runtime_client_gql4 = require("@copilotkit/runtime-client-gql");
1888
1940
  var import_shared2 = require("@copilotkit/shared");
1889
1941
  var import_react_core8 = require("@copilotkit/react-core");
@@ -1966,8 +2018,24 @@ var ImageUploadQueue = ({
1966
2018
  );
1967
2019
  };
1968
2020
 
1969
- // src/components/chat/Chat.tsx
2021
+ // src/components/chat/Suggestions.tsx
1970
2022
  var import_jsx_runtime18 = require("react/jsx-runtime");
2023
+ function Suggestions({ suggestions, onSuggestionClick }) {
2024
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "suggestions", children: suggestions.map((suggestion, index) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
2025
+ Suggestion,
2026
+ {
2027
+ title: suggestion.title,
2028
+ message: suggestion.message,
2029
+ partial: suggestion.partial,
2030
+ className: suggestion.className,
2031
+ onClick: () => onSuggestionClick(suggestion.message)
2032
+ },
2033
+ index
2034
+ )) });
2035
+ }
2036
+
2037
+ // src/components/chat/Chat.tsx
2038
+ var import_jsx_runtime19 = require("react/jsx-runtime");
1971
2039
  function CopilotChat({
1972
2040
  instructions,
1973
2041
  onSubmitMessage,
@@ -1979,12 +2047,14 @@ function CopilotChat({
1979
2047
  onCopy,
1980
2048
  onThumbsUp,
1981
2049
  onThumbsDown,
2050
+ markdownTagRenderers,
1982
2051
  Messages: Messages2 = Messages,
1983
2052
  RenderTextMessage: RenderTextMessage2 = RenderTextMessage,
1984
2053
  RenderActionExecutionMessage: RenderActionExecutionMessage2 = RenderActionExecutionMessage,
1985
2054
  RenderAgentStateMessage: RenderAgentStateMessage2 = RenderAgentStateMessage,
1986
2055
  RenderResultMessage: RenderResultMessage2 = RenderResultMessage,
1987
2056
  RenderImageMessage: RenderImageMessage2 = RenderImageMessage,
2057
+ RenderSuggestionsList = Suggestions,
1988
2058
  Input: Input2 = Input,
1989
2059
  className,
1990
2060
  icons,
@@ -2124,8 +2194,8 @@ function CopilotChat({
2124
2194
  const removeSelectedImage = (index) => {
2125
2195
  setSelectedImages((prev) => prev.filter((_, i) => i !== index));
2126
2196
  };
2127
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(WrappedCopilotChat, { icons, labels, className, children: [
2128
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
2197
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(WrappedCopilotChat, { icons, labels, className, children: [
2198
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
2129
2199
  Messages2,
2130
2200
  {
2131
2201
  AssistantMessage: AssistantMessage2,
@@ -2141,22 +2211,19 @@ function CopilotChat({
2141
2211
  onCopy: handleCopy,
2142
2212
  onThumbsUp,
2143
2213
  onThumbsDown,
2144
- children: currentSuggestions.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "suggestions", children: currentSuggestions.map((suggestion, index) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
2145
- Suggestion,
2214
+ markdownTagRenderers,
2215
+ children: currentSuggestions.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
2216
+ RenderSuggestionsList,
2146
2217
  {
2147
- title: suggestion.title,
2148
- message: suggestion.message,
2149
- partial: suggestion.partial,
2150
- className: suggestion.className,
2151
- onClick: (message) => handleSendMessage(message)
2152
- },
2153
- index
2154
- )) })
2218
+ onSuggestionClick: handleSendMessage,
2219
+ suggestions: currentSuggestions
2220
+ }
2221
+ )
2155
2222
  }
2156
2223
  ),
2157
- imageUploadsEnabled && /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_jsx_runtime18.Fragment, { children: [
2158
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(ImageUploadQueue, { images: selectedImages, onRemoveImage: removeSelectedImage }),
2159
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
2224
+ imageUploadsEnabled && /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_jsx_runtime19.Fragment, { children: [
2225
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(ImageUploadQueue, { images: selectedImages, onRemoveImage: removeSelectedImage }),
2226
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
2160
2227
  "input",
2161
2228
  {
2162
2229
  type: "file",
@@ -2168,7 +2235,7 @@ function CopilotChat({
2168
2235
  }
2169
2236
  )
2170
2237
  ] }),
2171
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
2238
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
2172
2239
  Input2,
2173
2240
  {
2174
2241
  inProgress: isLoading,
@@ -2191,10 +2258,10 @@ function WrappedCopilotChat({
2191
2258
  }) {
2192
2259
  const chatContext = import_react9.default.useContext(ChatContext);
2193
2260
  if (!chatContext) {
2194
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(ChatContextProvider, { icons, labels, open: true, setOpen: () => {
2195
- }, children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: `copilotKitChat ${className != null ? className : ""}`, children }) });
2261
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(ChatContextProvider, { icons, labels, open: true, setOpen: () => {
2262
+ }, children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: `copilotKitChat ${className != null ? className : ""}`, children }) });
2196
2263
  }
2197
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_jsx_runtime18.Fragment, { children });
2264
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_jsx_runtime19.Fragment, { children });
2198
2265
  }
2199
2266
  var SUGGESTIONS_DEBOUNCE_TIMEOUT = 1e3;
2200
2267
  var useCopilotChatLogic = (makeSystemMessage, onInProgress, onSubmitMessage, onStopGeneration, onReloadMessages) => {