@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
@@ -4,9 +4,11 @@ import { INTERNAL, useContentPartText } from "@assistant-ui/react";
4
4
  import {
5
5
  ComponentRef,
6
6
  ElementType,
7
+ FC,
7
8
  forwardRef,
8
9
  ForwardRefExoticComponent,
9
10
  RefAttributes,
11
+ useMemo,
10
12
  type ComponentPropsWithoutRef,
11
13
  type ComponentType,
12
14
  } from "react";
@@ -24,7 +26,7 @@ import { CodeOverride } from "../overrides/CodeOverride";
24
26
  import { Primitive } from "@radix-ui/react-primitive";
25
27
  import classNames from "classnames";
26
28
 
27
- const { useSmooth } = INTERNAL;
29
+ const { useSmooth, useSmoothStatus, withSmoothContextProvider } = INTERNAL;
28
30
 
29
31
  type MarkdownTextPrimitiveElement = ComponentRef<typeof Primitive.div>;
30
32
  type PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;
@@ -57,25 +59,37 @@ export type MarkdownTextPrimitiveProps = Omit<
57
59
  smooth?: boolean | undefined;
58
60
  };
59
61
 
60
- export const MarkdownTextPrimitive: ForwardRefExoticComponent<MarkdownTextPrimitiveProps> &
61
- RefAttributes<MarkdownTextPrimitiveElement> = forwardRef<
62
- MarkdownTextPrimitiveElement,
63
- MarkdownTextPrimitiveProps
64
- >(
65
- (
66
- {
67
- components: userComponents,
68
- componentsByLanguage = userComponents?.by_language,
69
- className,
70
- containerProps,
71
- containerComponent: Container = "div",
72
- smooth = true,
73
- ...rest
74
- },
75
- forwardedRef,
76
- ) => {
77
- const { text, status } = useSmooth(useContentPartText(), smooth);
62
+ const MarkdownTextInner: FC<MarkdownTextPrimitiveProps> = ({
63
+ components: userComponents,
64
+ componentsByLanguage = userComponents?.by_language,
65
+ smooth = true,
66
+ ...rest
67
+ }) => {
68
+ const { text } = useSmooth(useContentPartText(), smooth);
69
+
70
+ const {
71
+ pre = DefaultPre,
72
+ code = DefaultCode,
73
+ SyntaxHighlighter = DefaultCodeBlockContent,
74
+ CodeHeader = DefaultCodeHeader,
75
+ } = userComponents ?? {};
76
+ const useCodeOverrideComponents = useMemo(() => {
77
+ return {
78
+ Pre: pre,
79
+ Code: code,
80
+ SyntaxHighlighter,
81
+ CodeHeader,
82
+ };
83
+ }, [pre, code, SyntaxHighlighter, CodeHeader]);
84
+ const CodeComponent = useCallbackRef((props) => (
85
+ <CodeOverride
86
+ components={useCodeOverrideComponents}
87
+ componentsByLanguage={componentsByLanguage}
88
+ {...props}
89
+ />
90
+ ));
78
91
 
92
+ const components: Options["components"] = useMemo(() => {
79
93
  const {
80
94
  pre = DefaultPre,
81
95
  code = DefaultCode,
@@ -84,23 +98,35 @@ export const MarkdownTextPrimitive: ForwardRefExoticComponent<MarkdownTextPrimit
84
98
  by_language,
85
99
  ...componentsRest
86
100
  } = userComponents ?? {};
87
- const components: Options["components"] = {
101
+ return {
88
102
  ...componentsRest,
89
103
  pre: PreOverride,
90
- code: useCallbackRef((props) => (
91
- <CodeOverride
92
- components={{
93
- Pre: pre,
94
- Code: code,
95
- SyntaxHighlighter,
96
- CodeHeader,
97
- }}
98
- componentsByLanguage={componentsByLanguage}
99
- {...props}
100
- />
101
- )),
104
+ code: CodeComponent,
102
105
  };
106
+ }, [CodeComponent, userComponents, componentsByLanguage]);
107
+
108
+ return (
109
+ <ReactMarkdown components={components} {...rest}>
110
+ {text}
111
+ </ReactMarkdown>
112
+ );
113
+ };
103
114
 
115
+ const MarkdownTextPrimitiveImpl: ForwardRefExoticComponent<MarkdownTextPrimitiveProps> &
116
+ RefAttributes<MarkdownTextPrimitiveElement> = forwardRef<
117
+ MarkdownTextPrimitiveElement,
118
+ MarkdownTextPrimitiveProps
119
+ >(
120
+ (
121
+ {
122
+ className,
123
+ containerProps,
124
+ containerComponent: Container = "div",
125
+ ...rest
126
+ },
127
+ forwardedRef,
128
+ ) => {
129
+ const status = useSmoothStatus();
104
130
  return (
105
131
  <Container
106
132
  data-status={status.type}
@@ -108,12 +134,14 @@ export const MarkdownTextPrimitive: ForwardRefExoticComponent<MarkdownTextPrimit
108
134
  className={classNames(className, containerProps?.className)}
109
135
  ref={forwardedRef}
110
136
  >
111
- <ReactMarkdown components={components} {...rest}>
112
- {text}
113
- </ReactMarkdown>
137
+ <MarkdownTextInner {...rest}></MarkdownTextInner>
114
138
  </Container>
115
139
  );
116
140
  },
117
141
  );
118
142
 
119
- MarkdownTextPrimitive.displayName = "MarkdownTextPrimitive";
143
+ MarkdownTextPrimitiveImpl.displayName = "MarkdownTextPrimitive";
144
+
145
+ export const MarkdownTextPrimitive = withSmoothContextProvider(
146
+ MarkdownTextPrimitiveImpl,
147
+ );