@assistant-ui/react-markdown 0.7.13 → 0.7.15

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 (50) hide show
  1. package/dist/index.d.ts +1 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +3 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/index.mjs +2 -0
  6. package/dist/index.mjs.map +1 -1
  7. package/dist/memoization.d.ts +22 -0
  8. package/dist/memoization.d.ts.map +1 -0
  9. package/dist/memoization.js +60 -0
  10. package/dist/memoization.js.map +1 -0
  11. package/dist/memoization.mjs +33 -0
  12. package/dist/memoization.mjs.map +1 -0
  13. package/dist/overrides/CodeBlock.d.ts +0 -2
  14. package/dist/overrides/CodeBlock.d.ts.map +1 -1
  15. package/dist/overrides/CodeBlock.js +2 -4
  16. package/dist/overrides/CodeBlock.js.map +1 -1
  17. package/dist/overrides/CodeBlock.mjs +2 -4
  18. package/dist/overrides/CodeBlock.mjs.map +1 -1
  19. package/dist/overrides/CodeOverride.d.ts +2 -2
  20. package/dist/overrides/CodeOverride.d.ts.map +1 -1
  21. package/dist/overrides/CodeOverride.js +10 -8
  22. package/dist/overrides/CodeOverride.js.map +1 -1
  23. package/dist/overrides/CodeOverride.mjs +15 -10
  24. package/dist/overrides/CodeOverride.mjs.map +1 -1
  25. package/dist/overrides/PreOverride.d.ts +3 -2
  26. package/dist/overrides/PreOverride.d.ts.map +1 -1
  27. package/dist/overrides/PreOverride.js +3 -1
  28. package/dist/overrides/PreOverride.js.map +1 -1
  29. package/dist/overrides/PreOverride.mjs +8 -2
  30. package/dist/overrides/PreOverride.mjs.map +1 -1
  31. package/dist/overrides/defaultComponents.d.ts +0 -2
  32. package/dist/overrides/defaultComponents.d.ts.map +1 -1
  33. package/dist/overrides/defaultComponents.js +1 -1
  34. package/dist/overrides/defaultComponents.js.map +1 -1
  35. package/dist/overrides/defaultComponents.mjs +1 -1
  36. package/dist/overrides/defaultComponents.mjs.map +1 -1
  37. package/dist/primitives/MarkdownText.d.ts +2 -3
  38. package/dist/primitives/MarkdownText.d.ts.map +1 -1
  39. package/dist/primitives/MarkdownText.js +53 -32
  40. package/dist/primitives/MarkdownText.js.map +1 -1
  41. package/dist/primitives/MarkdownText.mjs +55 -33
  42. package/dist/primitives/MarkdownText.mjs.map +1 -1
  43. package/package.json +3 -3
  44. package/src/index.ts +2 -0
  45. package/src/memoization.tsx +47 -0
  46. package/src/overrides/CodeBlock.tsx +0 -4
  47. package/src/overrides/CodeOverride.tsx +20 -8
  48. package/src/overrides/PreOverride.tsx +10 -2
  49. package/src/overrides/defaultComponents.tsx +3 -5
  50. package/src/primitives/MarkdownText.tsx +64 -36
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/overrides/defaultComponents.tsx"],"sourcesContent":["import type { ComponentType, ReactNode } from \"react\";\nimport { Element } from \"hast\";\nimport { PreComponent, CodeComponent, CodeHeaderProps } from \"./types\";\n\nexport const DefaultPre: PreComponent = ({ node, ...rest }) => (\n <pre {...rest} />\n);\n\nexport const DefaultCode: CodeComponent = ({ node, ...rest }) => (\n <code {...rest} />\n);\n\nexport const DefaultCodeBlockContent: ComponentType<{\n components: { Pre: PreComponent; Code: CodeComponent };\n code: string | ReactNode | undefined;\n node: Element | undefined;\n}> = ({ components: { Pre, Code }, code, node }) => (\n <Pre node={node}>\n <Code node={node}>{code}</Code>\n </Pre>\n);\n\nexport const DefaultCodeHeader: ComponentType<CodeHeaderProps> = () => null;\n"],"mappings":";AAKE;AADK,IAAM,aAA2B,CAAC,EAAE,MAAM,GAAG,KAAK,MACvD,oBAAC,SAAK,GAAG,MAAM;AAGV,IAAM,cAA6B,CAAC,EAAE,MAAM,GAAG,KAAK,MACzD,oBAAC,UAAM,GAAG,MAAM;AAGX,IAAM,0BAIR,CAAC,EAAE,YAAY,EAAE,KAAK,KAAK,GAAG,MAAM,KAAK,MAC5C,oBAAC,OAAI,MACH,8BAAC,QAAK,MAAa,gBAAK,GAC1B;AAGK,IAAM,oBAAoD,MAAM;","names":[]}
1
+ {"version":3,"sources":["../../src/overrides/defaultComponents.tsx"],"sourcesContent":["import type { ComponentType, ReactNode } from \"react\";\nimport { PreComponent, CodeComponent, CodeHeaderProps } from \"./types\";\n\nexport const DefaultPre: PreComponent = ({ node, ...rest }) => (\n <pre {...rest} />\n);\n\nexport const DefaultCode: CodeComponent = ({ node, ...rest }) => (\n <code {...rest} />\n);\n\nexport const DefaultCodeBlockContent: ComponentType<{\n components: { Pre: PreComponent; Code: CodeComponent };\n code: string | ReactNode | undefined;\n}> = ({ components: { Pre, Code }, code }) => (\n <Pre>\n <Code>{code}</Code>\n </Pre>\n);\n\nexport const DefaultCodeHeader: ComponentType<CodeHeaderProps> = () => null;\n"],"mappings":";AAIE;AADK,IAAM,aAA2B,CAAC,EAAE,MAAM,GAAG,KAAK,MACvD,oBAAC,SAAK,GAAG,MAAM;AAGV,IAAM,cAA6B,CAAC,EAAE,MAAM,GAAG,KAAK,MACzD,oBAAC,UAAM,GAAG,MAAM;AAGX,IAAM,0BAGR,CAAC,EAAE,YAAY,EAAE,KAAK,KAAK,GAAG,KAAK,MACtC,oBAAC,OACC,8BAAC,QAAM,gBAAK,GACd;AAGK,IAAM,oBAAoD,MAAM;","names":[]}
@@ -1,8 +1,7 @@
1
- import { ComponentRef, ElementType, ForwardRefExoticComponent, RefAttributes, type ComponentPropsWithoutRef, type ComponentType } from "react";
1
+ import { ElementType, ForwardRefExoticComponent, RefAttributes, type ComponentPropsWithoutRef, type ComponentType } from "react";
2
2
  import { type Options } from "react-markdown";
3
3
  import { SyntaxHighlighterProps, CodeHeaderProps } from "../overrides/types";
4
4
  import { Primitive } from "@radix-ui/react-primitive";
5
- type MarkdownTextPrimitiveElement = ComponentRef<typeof Primitive.div>;
6
5
  type PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;
7
6
  export type MarkdownTextPrimitiveProps = Omit<Options, "components" | "children"> & {
8
7
  containerProps?: Omit<PrimitiveDivProps, "children" | "asChild"> | undefined;
@@ -21,6 +20,6 @@ export type MarkdownTextPrimitiveProps = Omit<Options, "components" | "children"
21
20
  }> | undefined;
22
21
  smooth?: boolean | undefined;
23
22
  };
24
- export declare const MarkdownTextPrimitive: ForwardRefExoticComponent<MarkdownTextPrimitiveProps> & RefAttributes<MarkdownTextPrimitiveElement>;
23
+ export declare const MarkdownTextPrimitive: ForwardRefExoticComponent<MarkdownTextPrimitiveProps> & RefAttributes<HTMLDivElement>;
25
24
  export {};
26
25
  //# sourceMappingURL=MarkdownText.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MarkdownText.d.ts","sourceRoot":"","sources":["../../src/primitives/MarkdownText.tsx"],"names":[],"mappings":"AAGA,OAAO,EACL,YAAY,EACZ,WAAW,EAEX,yBAAyB,EACzB,aAAa,EACb,KAAK,wBAAwB,EAC7B,KAAK,aAAa,EACnB,MAAM,OAAO,CAAC;AACf,OAAsB,EAAE,KAAK,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAU7E,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAKtD,KAAK,4BAA4B,GAAG,YAAY,CAAC,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;AACvE,KAAK,iBAAiB,GAAG,wBAAwB,CAAC,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;AAExE,MAAM,MAAM,0BAA0B,GAAG,IAAI,CAC3C,OAAO,EACP,YAAY,GAAG,UAAU,CAC1B,GAAG;IACF,cAAc,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,UAAU,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC;IAC7E,kBAAkB,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IAC7C,UAAU,CAAC,EACP,CAAC,WAAW,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,GAAG;QACpC,iBAAiB,CAAC,EAAE,aAAa,CAAC,sBAAsB,CAAC,GAAG,SAAS,CAAC;QACtE,UAAU,CAAC,EAAE,aAAa,CAAC,eAAe,CAAC,GAAG,SAAS,CAAC;QACxD;;YAEI;QACJ,WAAW,CAAC,EAAE,SAAS,CAAC;KACzB,CAAC,GACF,SAAS,CAAC;IACd,oBAAoB,CAAC,EACjB,MAAM,CACJ,MAAM,EACN;QACE,UAAU,CAAC,EAAE,aAAa,CAAC,eAAe,CAAC,GAAG,SAAS,CAAC;QACxD,iBAAiB,CAAC,EAAE,aAAa,CAAC,sBAAsB,CAAC,GAAG,SAAS,CAAC;KACvE,CACF,GACD,SAAS,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC9B,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,yBAAyB,CAAC,0BAA0B,CAAC,GACvF,aAAa,CAAC,4BAA4B,CAwD3C,CAAC"}
1
+ {"version":3,"file":"MarkdownText.d.ts","sourceRoot":"","sources":["../../src/primitives/MarkdownText.tsx"],"names":[],"mappings":"AAGA,OAAO,EAEL,WAAW,EAGX,yBAAyB,EACzB,aAAa,EAEb,KAAK,wBAAwB,EAC7B,KAAK,aAAa,EACnB,MAAM,OAAO,CAAC;AACf,OAAsB,EAAE,KAAK,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAU7E,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAMtD,KAAK,iBAAiB,GAAG,wBAAwB,CAAC,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;AAExE,MAAM,MAAM,0BAA0B,GAAG,IAAI,CAC3C,OAAO,EACP,YAAY,GAAG,UAAU,CAC1B,GAAG;IACF,cAAc,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,UAAU,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC;IAC7E,kBAAkB,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IAC7C,UAAU,CAAC,EACP,CAAC,WAAW,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,GAAG;QACpC,iBAAiB,CAAC,EAAE,aAAa,CAAC,sBAAsB,CAAC,GAAG,SAAS,CAAC;QACtE,UAAU,CAAC,EAAE,aAAa,CAAC,eAAe,CAAC,GAAG,SAAS,CAAC;QACxD;;YAEI;QACJ,WAAW,CAAC,EAAE,SAAS,CAAC;KACzB,CAAC,GACF,SAAS,CAAC;IACd,oBAAoB,CAAC,EACjB,MAAM,CACJ,MAAM,EACN;QACE,UAAU,CAAC,EAAE,aAAa,CAAC,eAAe,CAAC,GAAG,SAAS,CAAC;QACxD,iBAAiB,CAAC,EAAE,aAAa,CAAC,sBAAsB,CAAC,GAAG,SAAS,CAAC;KACvE,CACF,GACD,SAAS,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC9B,CAAC;AAqFF,eAAO,MAAM,qBAAqB,uFAEjC,CAAC"}
@@ -43,43 +43,61 @@ var import_react_use_callback_ref = require("@radix-ui/react-use-callback-ref");
43
43
  var import_CodeOverride = require("../overrides/CodeOverride.js");
44
44
  var import_classnames = __toESM(require("classnames"));
45
45
  var import_jsx_runtime = require("react/jsx-runtime");
46
- var { useSmooth } = import_react.INTERNAL;
47
- var MarkdownTextPrimitive = (0, import_react2.forwardRef)(
48
- ({
49
- components: userComponents,
50
- componentsByLanguage = userComponents?.by_language,
51
- className,
52
- containerProps,
53
- containerComponent: Container = "div",
54
- smooth = true,
55
- ...rest
56
- }, forwardedRef) => {
57
- const { text, status } = useSmooth((0, import_react.useContentPartText)(), smooth);
46
+ var { useSmooth, useSmoothStatus, withSmoothContextProvider } = import_react.INTERNAL;
47
+ var MarkdownTextInner = ({
48
+ components: userComponents,
49
+ componentsByLanguage = userComponents?.by_language,
50
+ smooth = true,
51
+ ...rest
52
+ }) => {
53
+ const { text } = useSmooth((0, import_react.useContentPartText)(), smooth);
54
+ const {
55
+ pre = import_defaultComponents.DefaultPre,
56
+ code = import_defaultComponents.DefaultCode,
57
+ SyntaxHighlighter = import_defaultComponents.DefaultCodeBlockContent,
58
+ CodeHeader = import_defaultComponents.DefaultCodeHeader
59
+ } = userComponents ?? {};
60
+ const useCodeOverrideComponents = (0, import_react2.useMemo)(() => {
61
+ return {
62
+ Pre: pre,
63
+ Code: code,
64
+ SyntaxHighlighter,
65
+ CodeHeader
66
+ };
67
+ }, [pre, code, SyntaxHighlighter, CodeHeader]);
68
+ const CodeComponent = (0, import_react_use_callback_ref.useCallbackRef)((props) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
69
+ import_CodeOverride.CodeOverride,
70
+ {
71
+ components: useCodeOverrideComponents,
72
+ componentsByLanguage,
73
+ ...props
74
+ }
75
+ ));
76
+ const components = (0, import_react2.useMemo)(() => {
58
77
  const {
59
- pre = import_defaultComponents.DefaultPre,
60
- code = import_defaultComponents.DefaultCode,
61
- SyntaxHighlighter = import_defaultComponents.DefaultCodeBlockContent,
62
- CodeHeader = import_defaultComponents.DefaultCodeHeader,
78
+ pre: pre2 = import_defaultComponents.DefaultPre,
79
+ code: code2 = import_defaultComponents.DefaultCode,
80
+ SyntaxHighlighter: SyntaxHighlighter2 = import_defaultComponents.DefaultCodeBlockContent,
81
+ CodeHeader: CodeHeader2 = import_defaultComponents.DefaultCodeHeader,
63
82
  by_language,
64
83
  ...componentsRest
65
84
  } = userComponents ?? {};
66
- const components = {
85
+ return {
67
86
  ...componentsRest,
68
87
  pre: import_PreOverride.PreOverride,
69
- code: (0, import_react_use_callback_ref.useCallbackRef)((props) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
70
- import_CodeOverride.CodeOverride,
71
- {
72
- components: {
73
- Pre: pre,
74
- Code: code,
75
- SyntaxHighlighter,
76
- CodeHeader
77
- },
78
- componentsByLanguage,
79
- ...props
80
- }
81
- ))
88
+ code: CodeComponent
82
89
  };
90
+ }, [CodeComponent, userComponents, componentsByLanguage]);
91
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_markdown.default, { components, ...rest, children: text });
92
+ };
93
+ var MarkdownTextPrimitiveImpl = (0, import_react2.forwardRef)(
94
+ ({
95
+ className,
96
+ containerProps,
97
+ containerComponent: Container = "div",
98
+ ...rest
99
+ }, forwardedRef) => {
100
+ const status = useSmoothStatus();
83
101
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
84
102
  Container,
85
103
  {
@@ -87,12 +105,15 @@ var MarkdownTextPrimitive = (0, import_react2.forwardRef)(
87
105
  ...containerProps,
88
106
  className: (0, import_classnames.default)(className, containerProps?.className),
89
107
  ref: forwardedRef,
90
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_markdown.default, { components, ...rest, children: text })
108
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(MarkdownTextInner, { ...rest })
91
109
  }
92
110
  );
93
111
  }
94
112
  );
95
- MarkdownTextPrimitive.displayName = "MarkdownTextPrimitive";
113
+ MarkdownTextPrimitiveImpl.displayName = "MarkdownTextPrimitive";
114
+ var MarkdownTextPrimitive = withSmoothContextProvider(
115
+ MarkdownTextPrimitiveImpl
116
+ );
96
117
  // Annotate the CommonJS export names for ESM import in node:
97
118
  0 && (module.exports = {
98
119
  MarkdownTextPrimitive
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/primitives/MarkdownText.tsx"],"sourcesContent":["\"use client\";\n\nimport { INTERNAL, useContentPartText } from \"@assistant-ui/react\";\nimport {\n ComponentRef,\n ElementType,\n forwardRef,\n ForwardRefExoticComponent,\n RefAttributes,\n type ComponentPropsWithoutRef,\n type ComponentType,\n} from \"react\";\nimport ReactMarkdown, { type Options } from \"react-markdown\";\nimport { SyntaxHighlighterProps, CodeHeaderProps } from \"../overrides/types\";\nimport { PreOverride } from \"../overrides/PreOverride\";\nimport {\n DefaultPre,\n DefaultCode,\n DefaultCodeBlockContent,\n DefaultCodeHeader,\n} from \"../overrides/defaultComponents\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { CodeOverride } from \"../overrides/CodeOverride\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport classNames from \"classnames\";\n\nconst { useSmooth } = INTERNAL;\n\ntype MarkdownTextPrimitiveElement = ComponentRef<typeof Primitive.div>;\ntype PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;\n\nexport type MarkdownTextPrimitiveProps = Omit<\n Options,\n \"components\" | \"children\"\n> & {\n containerProps?: Omit<PrimitiveDivProps, \"children\" | \"asChild\"> | undefined;\n containerComponent?: ElementType | undefined;\n components?:\n | (NonNullable<Options[\"components\"]> & {\n SyntaxHighlighter?: ComponentType<SyntaxHighlighterProps> | undefined;\n CodeHeader?: ComponentType<CodeHeaderProps> | undefined;\n /**\n * @deprecated Use `componentsByLanguage` instead of `components.by_language`. This will be removed in the next major version.\n **/\n by_language?: undefined;\n })\n | undefined;\n componentsByLanguage?:\n | Record<\n string,\n {\n CodeHeader?: ComponentType<CodeHeaderProps> | undefined;\n SyntaxHighlighter?: ComponentType<SyntaxHighlighterProps> | undefined;\n }\n >\n | undefined;\n smooth?: boolean | undefined;\n};\n\nexport const MarkdownTextPrimitive: ForwardRefExoticComponent<MarkdownTextPrimitiveProps> &\n RefAttributes<MarkdownTextPrimitiveElement> = forwardRef<\n MarkdownTextPrimitiveElement,\n MarkdownTextPrimitiveProps\n>(\n (\n {\n components: userComponents,\n componentsByLanguage = userComponents?.by_language,\n className,\n containerProps,\n containerComponent: Container = \"div\",\n smooth = true,\n ...rest\n },\n forwardedRef,\n ) => {\n const { text, status } = useSmooth(useContentPartText(), smooth);\n\n const {\n pre = DefaultPre,\n code = DefaultCode,\n SyntaxHighlighter = DefaultCodeBlockContent,\n CodeHeader = DefaultCodeHeader,\n by_language,\n ...componentsRest\n } = userComponents ?? {};\n const components: Options[\"components\"] = {\n ...componentsRest,\n pre: PreOverride,\n code: useCallbackRef((props) => (\n <CodeOverride\n components={{\n Pre: pre,\n Code: code,\n SyntaxHighlighter,\n CodeHeader,\n }}\n componentsByLanguage={componentsByLanguage}\n {...props}\n />\n )),\n };\n\n return (\n <Container\n data-status={status.type}\n {...containerProps}\n className={classNames(className, containerProps?.className)}\n ref={forwardedRef}\n >\n <ReactMarkdown components={components} {...rest}>\n {text}\n </ReactMarkdown>\n </Container>\n );\n },\n);\n\nMarkdownTextPrimitive.displayName = \"MarkdownTextPrimitive\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,mBAA6C;AAC7C,IAAAA,gBAQO;AACP,4BAA4C;AAE5C,yBAA4B;AAC5B,+BAKO;AACP,oCAA+B;AAC/B,0BAA6B;AAE7B,wBAAuB;AAkEf;AAhER,IAAM,EAAE,UAAU,IAAI;AAiCf,IAAM,4BACmC;AAAA,EAI9C,CACE;AAAA,IACE,YAAY;AAAA,IACZ,uBAAuB,gBAAgB;AAAA,IACvC;AAAA,IACA;AAAA,IACA,oBAAoB,YAAY;AAAA,IAChC,SAAS;AAAA,IACT,GAAG;AAAA,EACL,GACA,iBACG;AACH,UAAM,EAAE,MAAM,OAAO,IAAI,cAAU,iCAAmB,GAAG,MAAM;AAE/D,UAAM;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,MACP,oBAAoB;AAAA,MACpB,aAAa;AAAA,MACb;AAAA,MACA,GAAG;AAAA,IACL,IAAI,kBAAkB,CAAC;AACvB,UAAM,aAAoC;AAAA,MACxC,GAAG;AAAA,MACH,KAAK;AAAA,MACL,UAAM,8CAAe,CAAC,UACpB;AAAA,QAAC;AAAA;AAAA,UACC,YAAY;AAAA,YACV,KAAK;AAAA,YACL,MAAM;AAAA,YACN;AAAA,YACA;AAAA,UACF;AAAA,UACA;AAAA,UACC,GAAG;AAAA;AAAA,MACN,CACD;AAAA,IACH;AAEA,WACE;AAAA,MAAC;AAAA;AAAA,QACC,eAAa,OAAO;AAAA,QACnB,GAAG;AAAA,QACJ,eAAW,kBAAAC,SAAW,WAAW,gBAAgB,SAAS;AAAA,QAC1D,KAAK;AAAA,QAEL,sDAAC,sBAAAC,SAAA,EAAc,YAAyB,GAAG,MACxC,gBACH;AAAA;AAAA,IACF;AAAA,EAEJ;AACF;AAEA,sBAAsB,cAAc;","names":["import_react","classNames","ReactMarkdown"]}
1
+ {"version":3,"sources":["../../src/primitives/MarkdownText.tsx"],"sourcesContent":["\"use client\";\n\nimport { INTERNAL, useContentPartText } from \"@assistant-ui/react\";\nimport {\n ComponentRef,\n ElementType,\n FC,\n forwardRef,\n ForwardRefExoticComponent,\n RefAttributes,\n useMemo,\n type ComponentPropsWithoutRef,\n type ComponentType,\n} from \"react\";\nimport ReactMarkdown, { type Options } from \"react-markdown\";\nimport { SyntaxHighlighterProps, CodeHeaderProps } from \"../overrides/types\";\nimport { PreOverride } from \"../overrides/PreOverride\";\nimport {\n DefaultPre,\n DefaultCode,\n DefaultCodeBlockContent,\n DefaultCodeHeader,\n} from \"../overrides/defaultComponents\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { CodeOverride } from \"../overrides/CodeOverride\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport classNames from \"classnames\";\n\nconst { useSmooth, useSmoothStatus, withSmoothContextProvider } = INTERNAL;\n\ntype MarkdownTextPrimitiveElement = ComponentRef<typeof Primitive.div>;\ntype PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;\n\nexport type MarkdownTextPrimitiveProps = Omit<\n Options,\n \"components\" | \"children\"\n> & {\n containerProps?: Omit<PrimitiveDivProps, \"children\" | \"asChild\"> | undefined;\n containerComponent?: ElementType | undefined;\n components?:\n | (NonNullable<Options[\"components\"]> & {\n SyntaxHighlighter?: ComponentType<SyntaxHighlighterProps> | undefined;\n CodeHeader?: ComponentType<CodeHeaderProps> | undefined;\n /**\n * @deprecated Use `componentsByLanguage` instead of `components.by_language`. This will be removed in the next major version.\n **/\n by_language?: undefined;\n })\n | undefined;\n componentsByLanguage?:\n | Record<\n string,\n {\n CodeHeader?: ComponentType<CodeHeaderProps> | undefined;\n SyntaxHighlighter?: ComponentType<SyntaxHighlighterProps> | undefined;\n }\n >\n | undefined;\n smooth?: boolean | undefined;\n};\n\nconst MarkdownTextInner: FC<MarkdownTextPrimitiveProps> = ({\n components: userComponents,\n componentsByLanguage = userComponents?.by_language,\n smooth = true,\n ...rest\n}) => {\n const { text } = useSmooth(useContentPartText(), smooth);\n\n const {\n pre = DefaultPre,\n code = DefaultCode,\n SyntaxHighlighter = DefaultCodeBlockContent,\n CodeHeader = DefaultCodeHeader,\n } = userComponents ?? {};\n const useCodeOverrideComponents = useMemo(() => {\n return {\n Pre: pre,\n Code: code,\n SyntaxHighlighter,\n CodeHeader,\n };\n }, [pre, code, SyntaxHighlighter, CodeHeader]);\n const CodeComponent = useCallbackRef((props) => (\n <CodeOverride\n components={useCodeOverrideComponents}\n componentsByLanguage={componentsByLanguage}\n {...props}\n />\n ));\n\n const components: Options[\"components\"] = useMemo(() => {\n const {\n pre = DefaultPre,\n code = DefaultCode,\n SyntaxHighlighter = DefaultCodeBlockContent,\n CodeHeader = DefaultCodeHeader,\n by_language,\n ...componentsRest\n } = userComponents ?? {};\n return {\n ...componentsRest,\n pre: PreOverride,\n code: CodeComponent,\n };\n }, [CodeComponent, userComponents, componentsByLanguage]);\n\n return (\n <ReactMarkdown components={components} {...rest}>\n {text}\n </ReactMarkdown>\n );\n};\n\nconst MarkdownTextPrimitiveImpl: ForwardRefExoticComponent<MarkdownTextPrimitiveProps> &\n RefAttributes<MarkdownTextPrimitiveElement> = forwardRef<\n MarkdownTextPrimitiveElement,\n MarkdownTextPrimitiveProps\n>(\n (\n {\n className,\n containerProps,\n containerComponent: Container = \"div\",\n ...rest\n },\n forwardedRef,\n ) => {\n const status = useSmoothStatus();\n return (\n <Container\n data-status={status.type}\n {...containerProps}\n className={classNames(className, containerProps?.className)}\n ref={forwardedRef}\n >\n <MarkdownTextInner {...rest}></MarkdownTextInner>\n </Container>\n );\n },\n);\n\nMarkdownTextPrimitiveImpl.displayName = \"MarkdownTextPrimitive\";\n\nexport const MarkdownTextPrimitive = withSmoothContextProvider(\n MarkdownTextPrimitiveImpl,\n);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,mBAA6C;AAC7C,IAAAA,gBAUO;AACP,4BAA4C;AAE5C,yBAA4B;AAC5B,+BAKO;AACP,oCAA+B;AAC/B,0BAA6B;AAE7B,wBAAuB;AA0DnB;AAxDJ,IAAM,EAAE,WAAW,iBAAiB,0BAA0B,IAAI;AAiClE,IAAM,oBAAoD,CAAC;AAAA,EACzD,YAAY;AAAA,EACZ,uBAAuB,gBAAgB;AAAA,EACvC,SAAS;AAAA,EACT,GAAG;AACL,MAAM;AACJ,QAAM,EAAE,KAAK,IAAI,cAAU,iCAAmB,GAAG,MAAM;AAEvD,QAAM;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,oBAAoB;AAAA,IACpB,aAAa;AAAA,EACf,IAAI,kBAAkB,CAAC;AACvB,QAAM,gCAA4B,uBAAQ,MAAM;AAC9C,WAAO;AAAA,MACL,KAAK;AAAA,MACL,MAAM;AAAA,MACN;AAAA,MACA;AAAA,IACF;AAAA,EACF,GAAG,CAAC,KAAK,MAAM,mBAAmB,UAAU,CAAC;AAC7C,QAAM,oBAAgB,8CAAe,CAAC,UACpC;AAAA,IAAC;AAAA;AAAA,MACC,YAAY;AAAA,MACZ;AAAA,MACC,GAAG;AAAA;AAAA,EACN,CACD;AAED,QAAM,iBAAoC,uBAAQ,MAAM;AACtD,UAAM;AAAA,MACJ,KAAAC,OAAM;AAAA,MACN,MAAAC,QAAO;AAAA,MACP,mBAAAC,qBAAoB;AAAA,MACpB,YAAAC,cAAa;AAAA,MACb;AAAA,MACA,GAAG;AAAA,IACL,IAAI,kBAAkB,CAAC;AACvB,WAAO;AAAA,MACL,GAAG;AAAA,MACH,KAAK;AAAA,MACL,MAAM;AAAA,IACR;AAAA,EACF,GAAG,CAAC,eAAe,gBAAgB,oBAAoB,CAAC;AAExD,SACE,4CAAC,sBAAAC,SAAA,EAAc,YAAyB,GAAG,MACxC,gBACH;AAEJ;AAEA,IAAM,gCAC0C;AAAA,EAI9C,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA,oBAAoB,YAAY;AAAA,IAChC,GAAG;AAAA,EACL,GACA,iBACG;AACH,UAAM,SAAS,gBAAgB;AAC/B,WACE;AAAA,MAAC;AAAA;AAAA,QACC,eAAa,OAAO;AAAA,QACnB,GAAG;AAAA,QACJ,eAAW,kBAAAC,SAAW,WAAW,gBAAgB,SAAS;AAAA,QAC1D,KAAK;AAAA,QAEL,sDAAC,qBAAmB,GAAG,MAAM;AAAA;AAAA,IAC/B;AAAA,EAEJ;AACF;AAEA,0BAA0B,cAAc;AAEjC,IAAM,wBAAwB;AAAA,EACnC;AACF;","names":["import_react","pre","code","SyntaxHighlighter","CodeHeader","ReactMarkdown","classNames"]}
@@ -3,7 +3,8 @@
3
3
  // src/primitives/MarkdownText.tsx
4
4
  import { INTERNAL, useContentPartText } from "@assistant-ui/react";
5
5
  import {
6
- forwardRef
6
+ forwardRef,
7
+ useMemo
7
8
  } from "react";
8
9
  import ReactMarkdown from "react-markdown";
9
10
  import { PreOverride } from "../overrides/PreOverride.mjs";
@@ -17,43 +18,61 @@ import { useCallbackRef } from "@radix-ui/react-use-callback-ref";
17
18
  import { CodeOverride } from "../overrides/CodeOverride.mjs";
18
19
  import classNames from "classnames";
19
20
  import { jsx } from "react/jsx-runtime";
20
- var { useSmooth } = INTERNAL;
21
- var MarkdownTextPrimitive = forwardRef(
22
- ({
23
- components: userComponents,
24
- componentsByLanguage = userComponents?.by_language,
25
- className,
26
- containerProps,
27
- containerComponent: Container = "div",
28
- smooth = true,
29
- ...rest
30
- }, forwardedRef) => {
31
- const { text, status } = useSmooth(useContentPartText(), smooth);
21
+ var { useSmooth, useSmoothStatus, withSmoothContextProvider } = INTERNAL;
22
+ var MarkdownTextInner = ({
23
+ components: userComponents,
24
+ componentsByLanguage = userComponents?.by_language,
25
+ smooth = true,
26
+ ...rest
27
+ }) => {
28
+ const { text } = useSmooth(useContentPartText(), smooth);
29
+ const {
30
+ pre = DefaultPre,
31
+ code = DefaultCode,
32
+ SyntaxHighlighter = DefaultCodeBlockContent,
33
+ CodeHeader = DefaultCodeHeader
34
+ } = userComponents ?? {};
35
+ const useCodeOverrideComponents = useMemo(() => {
36
+ return {
37
+ Pre: pre,
38
+ Code: code,
39
+ SyntaxHighlighter,
40
+ CodeHeader
41
+ };
42
+ }, [pre, code, SyntaxHighlighter, CodeHeader]);
43
+ const CodeComponent = useCallbackRef((props) => /* @__PURE__ */ jsx(
44
+ CodeOverride,
45
+ {
46
+ components: useCodeOverrideComponents,
47
+ componentsByLanguage,
48
+ ...props
49
+ }
50
+ ));
51
+ const components = useMemo(() => {
32
52
  const {
33
- pre = DefaultPre,
34
- code = DefaultCode,
35
- SyntaxHighlighter = DefaultCodeBlockContent,
36
- CodeHeader = DefaultCodeHeader,
53
+ pre: pre2 = DefaultPre,
54
+ code: code2 = DefaultCode,
55
+ SyntaxHighlighter: SyntaxHighlighter2 = DefaultCodeBlockContent,
56
+ CodeHeader: CodeHeader2 = DefaultCodeHeader,
37
57
  by_language,
38
58
  ...componentsRest
39
59
  } = userComponents ?? {};
40
- const components = {
60
+ return {
41
61
  ...componentsRest,
42
62
  pre: PreOverride,
43
- code: useCallbackRef((props) => /* @__PURE__ */ jsx(
44
- CodeOverride,
45
- {
46
- components: {
47
- Pre: pre,
48
- Code: code,
49
- SyntaxHighlighter,
50
- CodeHeader
51
- },
52
- componentsByLanguage,
53
- ...props
54
- }
55
- ))
63
+ code: CodeComponent
56
64
  };
65
+ }, [CodeComponent, userComponents, componentsByLanguage]);
66
+ return /* @__PURE__ */ jsx(ReactMarkdown, { components, ...rest, children: text });
67
+ };
68
+ var MarkdownTextPrimitiveImpl = forwardRef(
69
+ ({
70
+ className,
71
+ containerProps,
72
+ containerComponent: Container = "div",
73
+ ...rest
74
+ }, forwardedRef) => {
75
+ const status = useSmoothStatus();
57
76
  return /* @__PURE__ */ jsx(
58
77
  Container,
59
78
  {
@@ -61,12 +80,15 @@ var MarkdownTextPrimitive = forwardRef(
61
80
  ...containerProps,
62
81
  className: classNames(className, containerProps?.className),
63
82
  ref: forwardedRef,
64
- children: /* @__PURE__ */ jsx(ReactMarkdown, { components, ...rest, children: text })
83
+ children: /* @__PURE__ */ jsx(MarkdownTextInner, { ...rest })
65
84
  }
66
85
  );
67
86
  }
68
87
  );
69
- MarkdownTextPrimitive.displayName = "MarkdownTextPrimitive";
88
+ MarkdownTextPrimitiveImpl.displayName = "MarkdownTextPrimitive";
89
+ var MarkdownTextPrimitive = withSmoothContextProvider(
90
+ MarkdownTextPrimitiveImpl
91
+ );
70
92
  export {
71
93
  MarkdownTextPrimitive
72
94
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/primitives/MarkdownText.tsx"],"sourcesContent":["\"use client\";\n\nimport { INTERNAL, useContentPartText } from \"@assistant-ui/react\";\nimport {\n ComponentRef,\n ElementType,\n forwardRef,\n ForwardRefExoticComponent,\n RefAttributes,\n type ComponentPropsWithoutRef,\n type ComponentType,\n} from \"react\";\nimport ReactMarkdown, { type Options } from \"react-markdown\";\nimport { SyntaxHighlighterProps, CodeHeaderProps } from \"../overrides/types\";\nimport { PreOverride } from \"../overrides/PreOverride\";\nimport {\n DefaultPre,\n DefaultCode,\n DefaultCodeBlockContent,\n DefaultCodeHeader,\n} from \"../overrides/defaultComponents\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { CodeOverride } from \"../overrides/CodeOverride\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport classNames from \"classnames\";\n\nconst { useSmooth } = INTERNAL;\n\ntype MarkdownTextPrimitiveElement = ComponentRef<typeof Primitive.div>;\ntype PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;\n\nexport type MarkdownTextPrimitiveProps = Omit<\n Options,\n \"components\" | \"children\"\n> & {\n containerProps?: Omit<PrimitiveDivProps, \"children\" | \"asChild\"> | undefined;\n containerComponent?: ElementType | undefined;\n components?:\n | (NonNullable<Options[\"components\"]> & {\n SyntaxHighlighter?: ComponentType<SyntaxHighlighterProps> | undefined;\n CodeHeader?: ComponentType<CodeHeaderProps> | undefined;\n /**\n * @deprecated Use `componentsByLanguage` instead of `components.by_language`. This will be removed in the next major version.\n **/\n by_language?: undefined;\n })\n | undefined;\n componentsByLanguage?:\n | Record<\n string,\n {\n CodeHeader?: ComponentType<CodeHeaderProps> | undefined;\n SyntaxHighlighter?: ComponentType<SyntaxHighlighterProps> | undefined;\n }\n >\n | undefined;\n smooth?: boolean | undefined;\n};\n\nexport const MarkdownTextPrimitive: ForwardRefExoticComponent<MarkdownTextPrimitiveProps> &\n RefAttributes<MarkdownTextPrimitiveElement> = forwardRef<\n MarkdownTextPrimitiveElement,\n MarkdownTextPrimitiveProps\n>(\n (\n {\n components: userComponents,\n componentsByLanguage = userComponents?.by_language,\n className,\n containerProps,\n containerComponent: Container = \"div\",\n smooth = true,\n ...rest\n },\n forwardedRef,\n ) => {\n const { text, status } = useSmooth(useContentPartText(), smooth);\n\n const {\n pre = DefaultPre,\n code = DefaultCode,\n SyntaxHighlighter = DefaultCodeBlockContent,\n CodeHeader = DefaultCodeHeader,\n by_language,\n ...componentsRest\n } = userComponents ?? {};\n const components: Options[\"components\"] = {\n ...componentsRest,\n pre: PreOverride,\n code: useCallbackRef((props) => (\n <CodeOverride\n components={{\n Pre: pre,\n Code: code,\n SyntaxHighlighter,\n CodeHeader,\n }}\n componentsByLanguage={componentsByLanguage}\n {...props}\n />\n )),\n };\n\n return (\n <Container\n data-status={status.type}\n {...containerProps}\n className={classNames(className, containerProps?.className)}\n ref={forwardedRef}\n >\n <ReactMarkdown components={components} {...rest}>\n {text}\n </ReactMarkdown>\n </Container>\n );\n },\n);\n\nMarkdownTextPrimitive.displayName = \"MarkdownTextPrimitive\";\n"],"mappings":";;;AAEA,SAAS,UAAU,0BAA0B;AAC7C;AAAA,EAGE;AAAA,OAKK;AACP,OAAO,mBAAqC;AAE5C,SAAS,mBAAmB;AAC5B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,sBAAsB;AAC/B,SAAS,oBAAoB;AAE7B,OAAO,gBAAgB;AAkEf;AAhER,IAAM,EAAE,UAAU,IAAI;AAiCf,IAAM,wBACmC;AAAA,EAI9C,CACE;AAAA,IACE,YAAY;AAAA,IACZ,uBAAuB,gBAAgB;AAAA,IACvC;AAAA,IACA;AAAA,IACA,oBAAoB,YAAY;AAAA,IAChC,SAAS;AAAA,IACT,GAAG;AAAA,EACL,GACA,iBACG;AACH,UAAM,EAAE,MAAM,OAAO,IAAI,UAAU,mBAAmB,GAAG,MAAM;AAE/D,UAAM;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,MACP,oBAAoB;AAAA,MACpB,aAAa;AAAA,MACb;AAAA,MACA,GAAG;AAAA,IACL,IAAI,kBAAkB,CAAC;AACvB,UAAM,aAAoC;AAAA,MACxC,GAAG;AAAA,MACH,KAAK;AAAA,MACL,MAAM,eAAe,CAAC,UACpB;AAAA,QAAC;AAAA;AAAA,UACC,YAAY;AAAA,YACV,KAAK;AAAA,YACL,MAAM;AAAA,YACN;AAAA,YACA;AAAA,UACF;AAAA,UACA;AAAA,UACC,GAAG;AAAA;AAAA,MACN,CACD;AAAA,IACH;AAEA,WACE;AAAA,MAAC;AAAA;AAAA,QACC,eAAa,OAAO;AAAA,QACnB,GAAG;AAAA,QACJ,WAAW,WAAW,WAAW,gBAAgB,SAAS;AAAA,QAC1D,KAAK;AAAA,QAEL,8BAAC,iBAAc,YAAyB,GAAG,MACxC,gBACH;AAAA;AAAA,IACF;AAAA,EAEJ;AACF;AAEA,sBAAsB,cAAc;","names":[]}
1
+ {"version":3,"sources":["../../src/primitives/MarkdownText.tsx"],"sourcesContent":["\"use client\";\n\nimport { INTERNAL, useContentPartText } from \"@assistant-ui/react\";\nimport {\n ComponentRef,\n ElementType,\n FC,\n forwardRef,\n ForwardRefExoticComponent,\n RefAttributes,\n useMemo,\n type ComponentPropsWithoutRef,\n type ComponentType,\n} from \"react\";\nimport ReactMarkdown, { type Options } from \"react-markdown\";\nimport { SyntaxHighlighterProps, CodeHeaderProps } from \"../overrides/types\";\nimport { PreOverride } from \"../overrides/PreOverride\";\nimport {\n DefaultPre,\n DefaultCode,\n DefaultCodeBlockContent,\n DefaultCodeHeader,\n} from \"../overrides/defaultComponents\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { CodeOverride } from \"../overrides/CodeOverride\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport classNames from \"classnames\";\n\nconst { useSmooth, useSmoothStatus, withSmoothContextProvider } = INTERNAL;\n\ntype MarkdownTextPrimitiveElement = ComponentRef<typeof Primitive.div>;\ntype PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;\n\nexport type MarkdownTextPrimitiveProps = Omit<\n Options,\n \"components\" | \"children\"\n> & {\n containerProps?: Omit<PrimitiveDivProps, \"children\" | \"asChild\"> | undefined;\n containerComponent?: ElementType | undefined;\n components?:\n | (NonNullable<Options[\"components\"]> & {\n SyntaxHighlighter?: ComponentType<SyntaxHighlighterProps> | undefined;\n CodeHeader?: ComponentType<CodeHeaderProps> | undefined;\n /**\n * @deprecated Use `componentsByLanguage` instead of `components.by_language`. This will be removed in the next major version.\n **/\n by_language?: undefined;\n })\n | undefined;\n componentsByLanguage?:\n | Record<\n string,\n {\n CodeHeader?: ComponentType<CodeHeaderProps> | undefined;\n SyntaxHighlighter?: ComponentType<SyntaxHighlighterProps> | undefined;\n }\n >\n | undefined;\n smooth?: boolean | undefined;\n};\n\nconst MarkdownTextInner: FC<MarkdownTextPrimitiveProps> = ({\n components: userComponents,\n componentsByLanguage = userComponents?.by_language,\n smooth = true,\n ...rest\n}) => {\n const { text } = useSmooth(useContentPartText(), smooth);\n\n const {\n pre = DefaultPre,\n code = DefaultCode,\n SyntaxHighlighter = DefaultCodeBlockContent,\n CodeHeader = DefaultCodeHeader,\n } = userComponents ?? {};\n const useCodeOverrideComponents = useMemo(() => {\n return {\n Pre: pre,\n Code: code,\n SyntaxHighlighter,\n CodeHeader,\n };\n }, [pre, code, SyntaxHighlighter, CodeHeader]);\n const CodeComponent = useCallbackRef((props) => (\n <CodeOverride\n components={useCodeOverrideComponents}\n componentsByLanguage={componentsByLanguage}\n {...props}\n />\n ));\n\n const components: Options[\"components\"] = useMemo(() => {\n const {\n pre = DefaultPre,\n code = DefaultCode,\n SyntaxHighlighter = DefaultCodeBlockContent,\n CodeHeader = DefaultCodeHeader,\n by_language,\n ...componentsRest\n } = userComponents ?? {};\n return {\n ...componentsRest,\n pre: PreOverride,\n code: CodeComponent,\n };\n }, [CodeComponent, userComponents, componentsByLanguage]);\n\n return (\n <ReactMarkdown components={components} {...rest}>\n {text}\n </ReactMarkdown>\n );\n};\n\nconst MarkdownTextPrimitiveImpl: ForwardRefExoticComponent<MarkdownTextPrimitiveProps> &\n RefAttributes<MarkdownTextPrimitiveElement> = forwardRef<\n MarkdownTextPrimitiveElement,\n MarkdownTextPrimitiveProps\n>(\n (\n {\n className,\n containerProps,\n containerComponent: Container = \"div\",\n ...rest\n },\n forwardedRef,\n ) => {\n const status = useSmoothStatus();\n return (\n <Container\n data-status={status.type}\n {...containerProps}\n className={classNames(className, containerProps?.className)}\n ref={forwardedRef}\n >\n <MarkdownTextInner {...rest}></MarkdownTextInner>\n </Container>\n );\n },\n);\n\nMarkdownTextPrimitiveImpl.displayName = \"MarkdownTextPrimitive\";\n\nexport const MarkdownTextPrimitive = withSmoothContextProvider(\n MarkdownTextPrimitiveImpl,\n);\n"],"mappings":";;;AAEA,SAAS,UAAU,0BAA0B;AAC7C;AAAA,EAIE;AAAA,EAGA;AAAA,OAGK;AACP,OAAO,mBAAqC;AAE5C,SAAS,mBAAmB;AAC5B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,sBAAsB;AAC/B,SAAS,oBAAoB;AAE7B,OAAO,gBAAgB;AA0DnB;AAxDJ,IAAM,EAAE,WAAW,iBAAiB,0BAA0B,IAAI;AAiClE,IAAM,oBAAoD,CAAC;AAAA,EACzD,YAAY;AAAA,EACZ,uBAAuB,gBAAgB;AAAA,EACvC,SAAS;AAAA,EACT,GAAG;AACL,MAAM;AACJ,QAAM,EAAE,KAAK,IAAI,UAAU,mBAAmB,GAAG,MAAM;AAEvD,QAAM;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,oBAAoB;AAAA,IACpB,aAAa;AAAA,EACf,IAAI,kBAAkB,CAAC;AACvB,QAAM,4BAA4B,QAAQ,MAAM;AAC9C,WAAO;AAAA,MACL,KAAK;AAAA,MACL,MAAM;AAAA,MACN;AAAA,MACA;AAAA,IACF;AAAA,EACF,GAAG,CAAC,KAAK,MAAM,mBAAmB,UAAU,CAAC;AAC7C,QAAM,gBAAgB,eAAe,CAAC,UACpC;AAAA,IAAC;AAAA;AAAA,MACC,YAAY;AAAA,MACZ;AAAA,MACC,GAAG;AAAA;AAAA,EACN,CACD;AAED,QAAM,aAAoC,QAAQ,MAAM;AACtD,UAAM;AAAA,MACJ,KAAAA,OAAM;AAAA,MACN,MAAAC,QAAO;AAAA,MACP,mBAAAC,qBAAoB;AAAA,MACpB,YAAAC,cAAa;AAAA,MACb;AAAA,MACA,GAAG;AAAA,IACL,IAAI,kBAAkB,CAAC;AACvB,WAAO;AAAA,MACL,GAAG;AAAA,MACH,KAAK;AAAA,MACL,MAAM;AAAA,IACR;AAAA,EACF,GAAG,CAAC,eAAe,gBAAgB,oBAAoB,CAAC;AAExD,SACE,oBAAC,iBAAc,YAAyB,GAAG,MACxC,gBACH;AAEJ;AAEA,IAAM,4BAC0C;AAAA,EAI9C,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA,oBAAoB,YAAY;AAAA,IAChC,GAAG;AAAA,EACL,GACA,iBACG;AACH,UAAM,SAAS,gBAAgB;AAC/B,WACE;AAAA,MAAC;AAAA;AAAA,QACC,eAAa,OAAO;AAAA,QACnB,GAAG;AAAA,QACJ,WAAW,WAAW,WAAW,gBAAgB,SAAS;AAAA,QAC1D,KAAK;AAAA,QAEL,8BAAC,qBAAmB,GAAG,MAAM;AAAA;AAAA,IAC/B;AAAA,EAEJ;AACF;AAEA,0BAA0B,cAAc;AAEjC,IAAM,wBAAwB;AAAA,EACnC;AACF;","names":["pre","code","SyntaxHighlighter","CodeHeader"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@assistant-ui/react-markdown",
3
- "version": "0.7.13",
3
+ "version": "0.7.15",
4
4
  "license": "MIT",
5
5
  "exports": {
6
6
  ".": {
@@ -41,7 +41,7 @@
41
41
  "react-markdown": "^9.0.3"
42
42
  },
43
43
  "peerDependencies": {
44
- "@assistant-ui/react": "^0.7.61",
44
+ "@assistant-ui/react": "^0.7.62",
45
45
  "@types/react": "*",
46
46
  "react": "^18 || ^19 || ^19.0.0-rc",
47
47
  "tailwindcss": "^3.4.4"
@@ -65,7 +65,7 @@
65
65
  "tailwindcss": "^3.4.17",
66
66
  "tailwindcss-animate": "^1.0.7",
67
67
  "tsx": "^4.19.2",
68
- "@assistant-ui/react": "0.7.61",
68
+ "@assistant-ui/react": "0.7.62",
69
69
  "@assistant-ui/tailwindcss-transformer": "0.1.0",
70
70
  "@assistant-ui/tsbuildutils": "^0.0.1",
71
71
  "@assistant-ui/tsconfig": "0.0.0"
package/src/index.ts CHANGED
@@ -16,3 +16,5 @@ export {
16
16
  } from "./ui/markdown-text";
17
17
 
18
18
  export { CodeHeader } from "./ui/code-header";
19
+
20
+ export { memoizeMarkdownComponents as unstable_memoizeMarkdownComponents } from "./memoization";
@@ -0,0 +1,47 @@
1
+ import { Element } from "hast";
2
+ import { ComponentProps, ComponentType, ElementType, memo } from "react";
3
+ import { CodeHeaderProps, SyntaxHighlighterProps } from "./overrides/types";
4
+
5
+ type Components = {
6
+ [Key in Extract<ElementType, string>]?: ComponentType<ComponentProps<Key>>;
7
+ } & {
8
+ SyntaxHighlighter?: ComponentType<SyntaxHighlighterProps> | undefined;
9
+ CodeHeader?: ComponentType<CodeHeaderProps> | undefined;
10
+ };
11
+
12
+ const areChildrenEqual = (prev: string | unknown, next: string | unknown) => {
13
+ if (typeof prev === "string") return prev === next;
14
+ return JSON.stringify(prev) === JSON.stringify(next);
15
+ };
16
+
17
+ export const areNodesEqual = (
18
+ prev: Element | undefined,
19
+ next: Element | undefined,
20
+ ) => {
21
+ if (!prev || !next) return prev === next;
22
+ const isEqual =
23
+ JSON.stringify(prev?.properties) === JSON.stringify(next?.properties) &&
24
+ areChildrenEqual(prev?.children, next?.children);
25
+ return isEqual;
26
+ };
27
+
28
+ export const memoCompareNodes = (
29
+ prev: { node?: Element | undefined },
30
+ next: { node?: Element | undefined },
31
+ ) => {
32
+ return areNodesEqual(prev.node, next.node);
33
+ };
34
+
35
+ export const memoizeMarkdownComponents = (components: Components = {}) => {
36
+ return Object.fromEntries(
37
+ Object.entries(components ?? {}).map(([key, value]) => {
38
+ if (!value) return [key, value];
39
+
40
+ const Component = value as ComponentType;
41
+ const WithoutNode = ({ node, ...props }: { node?: Element }) => {
42
+ return <Component {...props} />;
43
+ };
44
+ return [key, memo(WithoutNode, memoCompareNodes)];
45
+ }),
46
+ );
47
+ };
@@ -7,7 +7,6 @@ import {
7
7
  SyntaxHighlighterProps,
8
8
  } from "./types";
9
9
  import { DefaultCodeBlockContent } from "./defaultComponents";
10
- import { Element } from "hast";
11
10
 
12
11
  export type CodeBlockProps = {
13
12
  language: string;
@@ -18,14 +17,12 @@ export type CodeBlockProps = {
18
17
  CodeHeader: ComponentType<CodeHeaderProps>;
19
18
  SyntaxHighlighter: ComponentType<SyntaxHighlighterProps>;
20
19
  };
21
- node: Element | undefined;
22
20
  };
23
21
 
24
22
  export const DefaultCodeBlock: FC<CodeBlockProps> = ({
25
23
  components: { Pre, Code, SyntaxHighlighter, CodeHeader },
26
24
  language,
27
25
  code,
28
- node,
29
26
  }) => {
30
27
  const components = useMemo(() => ({ Pre, Code }), [Pre, Code]);
31
28
 
@@ -38,7 +35,6 @@ export const DefaultCodeBlock: FC<CodeBlockProps> = ({
38
35
  components={components}
39
36
  language={language ?? "unknown"}
40
37
  code={code}
41
- node={node}
42
38
  />
43
39
  </>
44
40
  );
@@ -1,5 +1,11 @@
1
- import { ComponentPropsWithoutRef, ComponentType, FC, useContext } from "react";
2
- import { PreContext } from "./PreOverride";
1
+ import {
2
+ ComponentPropsWithoutRef,
3
+ ComponentType,
4
+ FC,
5
+ memo,
6
+ useContext,
7
+ } from "react";
8
+ import { PreContext, useIsMarkdownCodeBlock } from "./PreOverride";
3
9
  import {
4
10
  CodeComponent,
5
11
  CodeHeaderProps,
@@ -10,6 +16,7 @@ import { DefaultCodeBlock } from "./CodeBlock";
10
16
  import { useCallbackRef } from "@radix-ui/react-use-callback-ref";
11
17
  import { withDefaultProps } from "./withDefaults";
12
18
  import { DefaultCodeBlockContent } from "./defaultComponents";
19
+ import { memoCompareNodes } from "../memoization";
13
20
 
14
21
  const CodeBlockOverride: FC<CodeOverrideProps> = ({
15
22
  components: {
@@ -20,7 +27,6 @@ const CodeBlockOverride: FC<CodeOverrideProps> = ({
20
27
  },
21
28
  componentsByLanguage = {},
22
29
  children,
23
- node,
24
30
  ...codeProps
25
31
  }) => {
26
32
  const preProps = useContext(PreContext)!;
@@ -42,7 +48,6 @@ const CodeBlockOverride: FC<CodeOverrideProps> = ({
42
48
  <DefaultCodeBlockContent
43
49
  components={{ Pre: WrappedPre, Code: WrappedCode }}
44
50
  code={children}
45
- node={node}
46
51
  />
47
52
  );
48
53
  }
@@ -64,7 +69,6 @@ const CodeBlockOverride: FC<CodeOverrideProps> = ({
64
69
  }}
65
70
  language={language || "unknown"}
66
71
  code={children}
67
- node={node}
68
72
  />
69
73
  );
70
74
  };
@@ -87,13 +91,13 @@ export type CodeOverrideProps = ComponentPropsWithoutRef<CodeComponent> & {
87
91
  | undefined;
88
92
  };
89
93
 
90
- export const CodeOverride: FC<CodeOverrideProps> = ({
94
+ const CodeOverrideImpl: FC<CodeOverrideProps> = ({
91
95
  components,
92
96
  componentsByLanguage,
93
97
  ...props
94
98
  }) => {
95
- const preProps = useContext(PreContext);
96
- if (!preProps) return <components.Code {...props} />;
99
+ const isCodeBlock = useIsMarkdownCodeBlock();
100
+ if (!isCodeBlock) return <components.Code {...props} />;
97
101
  return (
98
102
  <CodeBlockOverride
99
103
  components={components}
@@ -102,3 +106,11 @@ export const CodeOverride: FC<CodeOverrideProps> = ({
102
106
  />
103
107
  );
104
108
  };
109
+
110
+ export const CodeOverride = memo(CodeOverrideImpl, (prev, next) => {
111
+ const isEqual =
112
+ prev.components === next.components &&
113
+ prev.componentsByLanguage === next.componentsByLanguage &&
114
+ memoCompareNodes(prev, next);
115
+ return isEqual;
116
+ });
@@ -1,5 +1,11 @@
1
- import { createContext, ComponentPropsWithoutRef, useContext } from "react";
1
+ import {
2
+ createContext,
3
+ ComponentPropsWithoutRef,
4
+ useContext,
5
+ memo,
6
+ } from "react";
2
7
  import { PreComponent } from "./types";
8
+ import { memoCompareNodes } from "../memoization";
3
9
 
4
10
  export const PreContext = createContext<Omit<
5
11
  ComponentPropsWithoutRef<PreComponent>,
@@ -10,6 +16,8 @@ export const useIsMarkdownCodeBlock = () => {
10
16
  return useContext(PreContext) !== null;
11
17
  };
12
18
 
13
- export const PreOverride: PreComponent = ({ children, ...rest }) => {
19
+ const PreOverrideImpl: PreComponent = ({ children, ...rest }) => {
14
20
  return <PreContext.Provider value={rest}>{children}</PreContext.Provider>;
15
21
  };
22
+
23
+ export const PreOverride = memo(PreOverrideImpl, memoCompareNodes);
@@ -1,5 +1,4 @@
1
1
  import type { ComponentType, ReactNode } from "react";
2
- import { Element } from "hast";
3
2
  import { PreComponent, CodeComponent, CodeHeaderProps } from "./types";
4
3
 
5
4
  export const DefaultPre: PreComponent = ({ node, ...rest }) => (
@@ -13,10 +12,9 @@ export const DefaultCode: CodeComponent = ({ node, ...rest }) => (
13
12
  export const DefaultCodeBlockContent: ComponentType<{
14
13
  components: { Pre: PreComponent; Code: CodeComponent };
15
14
  code: string | ReactNode | undefined;
16
- node: Element | undefined;
17
- }> = ({ components: { Pre, Code }, code, node }) => (
18
- <Pre node={node}>
19
- <Code node={node}>{code}</Code>
15
+ }> = ({ components: { Pre, Code }, code }) => (
16
+ <Pre>
17
+ <Code>{code}</Code>
20
18
  </Pre>
21
19
  );
22
20