@copilotkit/react-ui 1.51.3-next.5 → 1.51.3-next.7

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 (67) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/{chunk-O4PPO3K3.mjs → chunk-7CMZ7YPQ.mjs} +2 -2
  3. package/dist/{chunk-PKSW6ZMQ.mjs → chunk-F2CDEOFX.mjs} +2 -2
  4. package/dist/{chunk-XOBQLKUU.mjs → chunk-JZ3RFQQ6.mjs} +13 -3
  5. package/dist/chunk-JZ3RFQQ6.mjs.map +1 -0
  6. package/dist/{chunk-XEZ5ODJS.mjs → chunk-LBR23XXF.mjs} +2 -2
  7. package/dist/{chunk-SLM2AOHF.mjs → chunk-LYYDXL2G.mjs} +9 -5
  8. package/dist/chunk-LYYDXL2G.mjs.map +1 -0
  9. package/dist/{chunk-HKZL4P3F.mjs → chunk-OHGUQZJT.mjs} +4 -4
  10. package/dist/{chunk-YQOESY4Y.mjs → chunk-PD36EMOZ.mjs} +4 -4
  11. package/dist/{chunk-4S4ZEKE6.mjs → chunk-RKQM2AE5.mjs} +2 -2
  12. package/dist/{chunk-UH5GQ7QF.mjs → chunk-WNX755OE.mjs} +2 -2
  13. package/dist/components/chat/Chat.js +74 -60
  14. package/dist/components/chat/Chat.js.map +1 -1
  15. package/dist/components/chat/Chat.mjs +6 -6
  16. package/dist/components/chat/Markdown.d.ts +2 -4
  17. package/dist/components/chat/Markdown.js +12 -2
  18. package/dist/components/chat/Markdown.js.map +1 -1
  19. package/dist/components/chat/Markdown.mjs +1 -1
  20. package/dist/components/chat/Messages.js +34 -20
  21. package/dist/components/chat/Messages.js.map +1 -1
  22. package/dist/components/chat/Messages.mjs +5 -5
  23. package/dist/components/chat/Modal.js +81 -67
  24. package/dist/components/chat/Modal.js.map +1 -1
  25. package/dist/components/chat/Modal.mjs +7 -7
  26. package/dist/components/chat/Popup.js +81 -67
  27. package/dist/components/chat/Popup.js.map +1 -1
  28. package/dist/components/chat/Popup.mjs +8 -8
  29. package/dist/components/chat/Sidebar.js +83 -69
  30. package/dist/components/chat/Sidebar.js.map +1 -1
  31. package/dist/components/chat/Sidebar.mjs +8 -8
  32. package/dist/components/chat/index.d.ts +1 -1
  33. package/dist/components/chat/index.js +83 -69
  34. package/dist/components/chat/index.js.map +1 -1
  35. package/dist/components/chat/index.mjs +9 -9
  36. package/dist/components/chat/messages/AssistantMessage.js +21 -7
  37. package/dist/components/chat/messages/AssistantMessage.js.map +1 -1
  38. package/dist/components/chat/messages/AssistantMessage.mjs +2 -2
  39. package/dist/components/chat/messages/ErrorMessage.js +14 -4
  40. package/dist/components/chat/messages/ErrorMessage.js.map +1 -1
  41. package/dist/components/chat/messages/ErrorMessage.mjs +1 -1
  42. package/dist/components/chat/messages/LegacyRenderMessage.js +23 -9
  43. package/dist/components/chat/messages/LegacyRenderMessage.js.map +1 -1
  44. package/dist/components/chat/messages/LegacyRenderMessage.mjs +4 -4
  45. package/dist/components/chat/messages/RenderMessage.js +23 -9
  46. package/dist/components/chat/messages/RenderMessage.js.map +1 -1
  47. package/dist/components/chat/messages/RenderMessage.mjs +3 -3
  48. package/dist/components/index.d.ts +1 -1
  49. package/dist/components/index.js +83 -69
  50. package/dist/components/index.js.map +1 -1
  51. package/dist/components/index.mjs +9 -9
  52. package/dist/index.d.ts +1 -1
  53. package/dist/index.js +83 -69
  54. package/dist/index.js.map +1 -1
  55. package/dist/index.mjs +9 -9
  56. package/package.json +8 -5
  57. package/src/components/chat/Markdown.tsx +17 -8
  58. package/src/components/chat/messages/AssistantMessage.tsx +6 -2
  59. package/dist/chunk-SLM2AOHF.mjs.map +0 -1
  60. package/dist/chunk-XOBQLKUU.mjs.map +0 -1
  61. /package/dist/{chunk-O4PPO3K3.mjs.map → chunk-7CMZ7YPQ.mjs.map} +0 -0
  62. /package/dist/{chunk-PKSW6ZMQ.mjs.map → chunk-F2CDEOFX.mjs.map} +0 -0
  63. /package/dist/{chunk-XEZ5ODJS.mjs.map → chunk-LBR23XXF.mjs.map} +0 -0
  64. /package/dist/{chunk-HKZL4P3F.mjs.map → chunk-OHGUQZJT.mjs.map} +0 -0
  65. /package/dist/{chunk-YQOESY4Y.mjs.map → chunk-PD36EMOZ.mjs.map} +0 -0
  66. /package/dist/{chunk-4S4ZEKE6.mjs.map → chunk-RKQM2AE5.mjs.map} +0 -0
  67. /package/dist/{chunk-UH5GQ7QF.mjs.map → chunk-WNX755OE.mjs.map} +0 -0
package/dist/index.mjs CHANGED
@@ -5,11 +5,11 @@ import "./chunk-SC6JRFAJ.mjs";
5
5
  import "./chunk-WB3YULQ4.mjs";
6
6
  import {
7
7
  CopilotPopup
8
- } from "./chunk-O4PPO3K3.mjs";
8
+ } from "./chunk-7CMZ7YPQ.mjs";
9
9
  import {
10
10
  CopilotSidebar
11
- } from "./chunk-4S4ZEKE6.mjs";
12
- import "./chunk-HKZL4P3F.mjs";
11
+ } from "./chunk-RKQM2AE5.mjs";
12
+ import "./chunk-OHGUQZJT.mjs";
13
13
  import "./chunk-C3GSYRC3.mjs";
14
14
  import "./chunk-GDSZGYCE.mjs";
15
15
  import "./chunk-V7W6IM2V.mjs";
@@ -26,7 +26,7 @@ import "./chunk-BH6PCAAL.mjs";
26
26
  import "./chunk-UFN2VWSR.mjs";
27
27
  import {
28
28
  CopilotChat
29
- } from "./chunk-YQOESY4Y.mjs";
29
+ } from "./chunk-PD36EMOZ.mjs";
30
30
  import {
31
31
  Suggestions
32
32
  } from "./chunk-VHKHX7GV.mjs";
@@ -37,12 +37,12 @@ import "./chunk-PLHTVHUW.mjs";
37
37
  import "./chunk-3W6J75HS.mjs";
38
38
  import "./chunk-ELGRNEAO.mjs";
39
39
  import "./chunk-QIOJXTIQ.mjs";
40
- import "./chunk-UH5GQ7QF.mjs";
41
- import "./chunk-PKSW6ZMQ.mjs";
42
- import "./chunk-XEZ5ODJS.mjs";
40
+ import "./chunk-WNX755OE.mjs";
41
+ import "./chunk-F2CDEOFX.mjs";
42
+ import "./chunk-LBR23XXF.mjs";
43
43
  import {
44
44
  AssistantMessage
45
- } from "./chunk-SLM2AOHF.mjs";
45
+ } from "./chunk-LYYDXL2G.mjs";
46
46
  import {
47
47
  ImageRenderer
48
48
  } from "./chunk-DBKRAOH7.mjs";
@@ -51,7 +51,7 @@ import {
51
51
  } from "./chunk-RYUCX3ZK.mjs";
52
52
  import {
53
53
  Markdown
54
- } from "./chunk-XOBQLKUU.mjs";
54
+ } from "./chunk-JZ3RFQQ6.mjs";
55
55
  import "./chunk-IK2BPURM.mjs";
56
56
  import {
57
57
  useChatContext
package/package.json CHANGED
@@ -9,7 +9,7 @@
9
9
  "publishConfig": {
10
10
  "access": "public"
11
11
  },
12
- "version": "1.51.3-next.5",
12
+ "version": "1.51.3-next.7",
13
13
  "sideEffects": [
14
14
  "**/*.css"
15
15
  ],
@@ -47,11 +47,14 @@
47
47
  },
48
48
  "dependencies": {
49
49
  "@headlessui/react": "^2.2.9",
50
+ "react-markdown": "^10.1.0",
50
51
  "react-syntax-highlighter": "^15.6.1",
51
- "streamdown": "^1.6.10",
52
- "@copilotkit/react-core": "1.51.3-next.5",
53
- "@copilotkit/runtime-client-gql": "1.51.3-next.5",
54
- "@copilotkit/shared": "1.51.3-next.5"
52
+ "rehype-raw": "^7.0.0",
53
+ "remark-gfm": "^4.0.1",
54
+ "remark-math": "^6.0.0",
55
+ "@copilotkit/react-core": "1.51.3-next.7",
56
+ "@copilotkit/runtime-client-gql": "1.51.3-next.7",
57
+ "@copilotkit/shared": "1.51.3-next.7"
55
58
  },
56
59
  "keywords": [
57
60
  "copilotkit",
@@ -1,10 +1,11 @@
1
- import { ComponentProps, FC, memo } from "react";
2
- import { Streamdown } from "streamdown";
1
+ import { FC, memo } from "react";
2
+ import ReactMarkdown, { Options, Components } from "react-markdown";
3
3
  import { CodeBlock } from "./CodeBlock";
4
+ import remarkGfm from "remark-gfm";
5
+ import remarkMath from "remark-math";
6
+ import rehypeRaw from "rehype-raw";
4
7
 
5
- type Options = ComponentProps<typeof Streamdown>;
6
-
7
- const defaultComponents: Options["components"] = {
8
+ const defaultComponents: Components = {
8
9
  a({ children, ...props }) {
9
10
  return (
10
11
  <a className="copilotKitMarkdownElement" {...props} target="_blank" rel="noopener noreferrer">
@@ -117,19 +118,27 @@ const defaultComponents: Options["components"] = {
117
118
  ),
118
119
  };
119
120
 
121
+ const MemoizedReactMarkdown: FC<Options> = memo(
122
+ ReactMarkdown,
123
+ (prevProps, nextProps) =>
124
+ prevProps.children === nextProps.children && prevProps.components === nextProps.components,
125
+ );
126
+
120
127
  type MarkdownProps = {
121
128
  content: string;
122
- components?: Options["components"];
129
+ components?: Components;
123
130
  };
124
131
 
125
132
  export const Markdown = ({ content, components }: MarkdownProps) => {
126
133
  return (
127
134
  <div className="copilotKitMarkdown">
128
- <Streamdown
135
+ <MemoizedReactMarkdown
129
136
  components={{ ...defaultComponents, ...components }}
137
+ remarkPlugins={[remarkGfm, [remarkMath, { singleDollarTextMath: false }]]}
138
+ rehypePlugins={[rehypeRaw]}
130
139
  >
131
140
  {content}
132
- </Streamdown>
141
+ </MemoizedReactMarkdown>
133
142
  </div>
134
143
  );
135
144
  };
@@ -51,10 +51,14 @@ export const AssistantMessage = (props: AssistantMessageProps) => {
51
51
 
52
52
  const LoadingIcon = () => <span>{icons.activityIcon}</span>;
53
53
  const content = message?.content || "";
54
- const subComponent = message?.generativeUI?.();
54
+ const subComponent = message?.generativeUI?.() ?? props.subComponent;
55
+ const subComponentPosition = message?.generativeUIPosition ?? "after";
56
+ const renderBefore = subComponent && subComponentPosition === "before";
57
+ const renderAfter = subComponent && subComponentPosition !== "before";
55
58
 
56
59
  return (
57
60
  <>
61
+ {renderBefore ? <div style={{ marginBottom: "0.5rem" }}>{subComponent}</div> : null}
58
62
  {content && (
59
63
  <div className="copilotKitMessage copilotKitAssistantMessage">
60
64
  {content && <Markdown content={content} components={markdownTagRenderers} />}
@@ -111,7 +115,7 @@ export const AssistantMessage = (props: AssistantMessageProps) => {
111
115
  )}
112
116
  </div>
113
117
  )}
114
- <div style={{ marginBottom: "0.5rem" }}>{subComponent}</div>
118
+ {renderAfter ? <div style={{ marginBottom: "0.5rem" }}>{subComponent}</div> : null}
115
119
  {isLoading && <LoadingIcon />}
116
120
  </>
117
121
  );
@@ -1 +0,0 @@
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\";\nimport React 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 feedback,\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) {\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 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 feedback === \"thumbsUp\" ? \"active\" : \"\"\n }`}\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 feedback === \"thumbsDown\" ? \"active\" : \"\"\n }`}\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;AAgDG,SAKxB,UALwB,KAWhB,YAXgB;AA7CrB,IAAM,mBAAmB,CAAC,UAAiC;AANlE;AAOE,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,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,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;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,WAAW,kCACT,aAAa,aAAa,WAAW;AAAA,gBAEvC,SAAS;AAAA,gBACT,cAAY,OAAO;AAAA,gBACnB,OAAO,OAAO;AAAA,gBAEb,gBAAM;AAAA;AAAA,YACT;AAAA,YAED,gBACC;AAAA,cAAC;AAAA;AAAA,gBACC,WAAW,kCACT,aAAa,eAAe,WAAW;AAAA,gBAEzC,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"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/chat/Markdown.tsx"],"sourcesContent":["import { ComponentProps, FC, memo } from \"react\";\nimport { Streamdown } from \"streamdown\";\nimport { CodeBlock } from \"./CodeBlock\";\n\ntype Options = ComponentProps<typeof Streamdown>;\n\nconst defaultComponents: Options[\"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\ntype MarkdownProps = {\n content: string;\n components?: Options[\"components\"];\n};\n\nexport const Markdown = ({ content, components }: MarkdownProps) => {\n return (\n <div className=\"copilotKitMarkdown\">\n <Streamdown\n components={{ ...defaultComponents, ...components }}\n >\n {content}\n </Streamdown>\n </div>\n );\n};\n"],"mappings":"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","names":[]}