@assistant-ui/react-markdown 0.0.3 → 0.0.5

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.
package/dist/index.d.mts CHANGED
@@ -1,7 +1,28 @@
1
- import { FC } from 'react';
1
+ import { ComponentType, FC } from 'react';
2
2
  import { Options } from 'react-markdown';
3
3
 
4
- type MarkdownTextPrimitiveProps = Omit<Options, "children">;
4
+ type PreComponent = NonNullable<NonNullable<Options["components"]>["pre"]>;
5
+ type CodeComponent = NonNullable<NonNullable<Options["components"]>["code"]>;
6
+ type CodeHeaderProps = {
7
+ language: string | undefined;
8
+ code: string;
9
+ };
10
+ type SyntaxHighlighterProps = {
11
+ components: {
12
+ Pre: PreComponent;
13
+ Code: CodeComponent;
14
+ };
15
+ language: string;
16
+ code: string;
17
+ };
18
+
19
+ type MarkdownTextPrimitiveProps = Omit<Options, "components" | "children"> & {
20
+ components?: NonNullable<Options["components"]> & {
21
+ SyntaxHighlighter?: ComponentType<SyntaxHighlighterProps>;
22
+ CodeHeader?: ComponentType<CodeHeaderProps>;
23
+ };
24
+ smooth?: boolean;
25
+ };
5
26
  declare const MarkdownTextPrimitive: FC<MarkdownTextPrimitiveProps>;
6
27
 
7
- export { MarkdownTextPrimitive, type MarkdownTextPrimitiveProps };
28
+ export { type CodeHeaderProps, MarkdownTextPrimitive, type MarkdownTextPrimitiveProps, type SyntaxHighlighterProps };
package/dist/index.d.ts CHANGED
@@ -1,7 +1,28 @@
1
- import { FC } from 'react';
1
+ import { ComponentType, FC } from 'react';
2
2
  import { Options } from 'react-markdown';
3
3
 
4
- type MarkdownTextPrimitiveProps = Omit<Options, "children">;
4
+ type PreComponent = NonNullable<NonNullable<Options["components"]>["pre"]>;
5
+ type CodeComponent = NonNullable<NonNullable<Options["components"]>["code"]>;
6
+ type CodeHeaderProps = {
7
+ language: string | undefined;
8
+ code: string;
9
+ };
10
+ type SyntaxHighlighterProps = {
11
+ components: {
12
+ Pre: PreComponent;
13
+ Code: CodeComponent;
14
+ };
15
+ language: string;
16
+ code: string;
17
+ };
18
+
19
+ type MarkdownTextPrimitiveProps = Omit<Options, "components" | "children"> & {
20
+ components?: NonNullable<Options["components"]> & {
21
+ SyntaxHighlighter?: ComponentType<SyntaxHighlighterProps>;
22
+ CodeHeader?: ComponentType<CodeHeaderProps>;
23
+ };
24
+ smooth?: boolean;
25
+ };
5
26
  declare const MarkdownTextPrimitive: FC<MarkdownTextPrimitiveProps>;
6
27
 
7
- export { MarkdownTextPrimitive, type MarkdownTextPrimitiveProps };
28
+ export { type CodeHeaderProps, MarkdownTextPrimitive, type MarkdownTextPrimitiveProps, type SyntaxHighlighterProps };
package/dist/index.js CHANGED
@@ -35,19 +35,99 @@ __export(src_exports, {
35
35
  module.exports = __toCommonJS(src_exports);
36
36
 
37
37
  // src/MarkdownText.tsx
38
- var import_react = require("@assistant-ui/react");
38
+ var import_react3 = require("@assistant-ui/react");
39
39
  var import_react_markdown = __toESM(require("react-markdown"));
40
+
41
+ // src/PreOverride.tsx
42
+ var import_react = require("react");
40
43
  var import_jsx_runtime = require("react/jsx-runtime");
41
- var MarkdownTextPrimitive = (options) => {
42
- const { useContentPart } = (0, import_react.useContentPartContext)();
43
- const text = useContentPart((c) => {
44
- if (c.part.type !== "text")
45
- throw new Error(
46
- "This component can only be used inside text content parts."
47
- );
48
- return c.part.text;
49
- });
50
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_markdown.default, { ...options, children: text });
44
+ var PreContext = (0, import_react.createContext)(null);
45
+ var PreOverride = ({ children, ...rest }) => {
46
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(PreContext.Provider, { value: rest, children });
47
+ };
48
+
49
+ // src/defaultComponents.tsx
50
+ var import_jsx_runtime2 = require("react/jsx-runtime");
51
+ var DefaultPre = ({ node, ...rest }) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("pre", { ...rest });
52
+ var DefaultCode = ({ node, ...rest }) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("code", { ...rest });
53
+ var DefaultSyntaxHighlighter = ({ components: { Pre, Code }, code }) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Pre, { children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Code, { children: code }) });
54
+ var DefaultCodeHeader = () => null;
55
+
56
+ // src/MarkdownText.tsx
57
+ var import_react_use_callback_ref2 = require("@radix-ui/react-use-callback-ref");
58
+
59
+ // src/CodeOverride.tsx
60
+ var import_react2 = require("react");
61
+ var import_react_slot = require("@radix-ui/react-slot");
62
+ var import_react_use_callback_ref = require("@radix-ui/react-use-callback-ref");
63
+ var import_jsx_runtime3 = require("react/jsx-runtime");
64
+ var CodeBlockOverride = ({
65
+ components: { Pre, Code, SyntaxHighlighter, CodeHeader },
66
+ children,
67
+ ...codeProps
68
+ }) => {
69
+ const preProps = (0, import_react2.useContext)(PreContext);
70
+ const WrappedPre = (0, import_react_use_callback_ref.useCallbackRef)((props) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_slot.Slot, { ...preProps, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Pre, { ...props }) }));
71
+ const WrappedCode = (0, import_react_use_callback_ref.useCallbackRef)((props) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_slot.Slot, { ...codeProps, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Code, { ...props }) }));
72
+ const components = (0, import_react2.useMemo)(
73
+ () => ({ Pre: WrappedPre, Code: WrappedCode }),
74
+ [WrappedPre, WrappedCode]
75
+ );
76
+ const language = /language-(\w+)/.exec(codeProps.className || "")?.[1];
77
+ const code = children;
78
+ const SH = language ? SyntaxHighlighter : DefaultSyntaxHighlighter;
79
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_jsx_runtime3.Fragment, { children: [
80
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(CodeHeader, { language, code }),
81
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
82
+ SH,
83
+ {
84
+ components,
85
+ language: language ?? "unknown",
86
+ code
87
+ }
88
+ )
89
+ ] });
90
+ };
91
+ var CodeOverride = ({
92
+ components,
93
+ ...props
94
+ }) => {
95
+ const preProps = (0, import_react2.useContext)(PreContext);
96
+ if (!preProps) return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(components.Code, { ...props });
97
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(CodeBlockOverride, { components, ...props });
98
+ };
99
+
100
+ // src/MarkdownText.tsx
101
+ var import_jsx_runtime4 = require("react/jsx-runtime");
102
+ var { useSmooth } = import_react3.INTERNAL;
103
+ var MarkdownTextPrimitive = ({
104
+ smooth = true,
105
+ components: userComponents,
106
+ ...rest
107
+ }) => {
108
+ const {
109
+ part: { text }
110
+ } = (0, import_react3.useContentPartText)();
111
+ const smoothText = useSmooth(text, smooth);
112
+ const {
113
+ pre = DefaultPre,
114
+ code = DefaultCode,
115
+ SyntaxHighlighter = DefaultSyntaxHighlighter,
116
+ CodeHeader = DefaultCodeHeader,
117
+ ...componentsRest
118
+ } = userComponents ?? {};
119
+ const components = {
120
+ ...componentsRest,
121
+ pre: PreOverride,
122
+ code: (0, import_react_use_callback_ref2.useCallbackRef)((props) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
123
+ CodeOverride,
124
+ {
125
+ components: { Pre: pre, Code: code, SyntaxHighlighter, CodeHeader },
126
+ ...props
127
+ }
128
+ ))
129
+ };
130
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_react_markdown.default, { components, ...rest, children: smoothText });
51
131
  };
52
132
  // Annotate the CommonJS export names for ESM import in node:
53
133
  0 && (module.exports = {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/MarkdownText.tsx"],"sourcesContent":["export {\n MarkdownTextPrimitive,\n type MarkdownTextPrimitiveProps,\n} from \"./MarkdownText\";\n","import { useContentPartContext } from \"@assistant-ui/react\";\nimport type { FC } from \"react\";\nimport ReactMarkdown, { type Options } from \"react-markdown\";\n\nexport type MarkdownTextPrimitiveProps = Omit<Options, \"children\">;\n\nexport const MarkdownTextPrimitive: FC<MarkdownTextPrimitiveProps> = (\n options,\n) => {\n const { useContentPart } = useContentPartContext();\n const text = useContentPart((c) => {\n if (c.part.type !== \"text\")\n throw new Error(\n \"This component can only be used inside text content parts.\",\n );\n\n return c.part.text;\n });\n return <ReactMarkdown {...options}>{text}</ReactMarkdown>;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,mBAAsC;AAEtC,4BAA4C;AAgBnC;AAZF,IAAM,wBAAwD,CACnE,YACG;AACH,QAAM,EAAE,eAAe,QAAI,oCAAsB;AACjD,QAAM,OAAO,eAAe,CAAC,MAAM;AACjC,QAAI,EAAE,KAAK,SAAS;AAClB,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAEF,WAAO,EAAE,KAAK;AAAA,EAChB,CAAC;AACD,SAAO,4CAAC,sBAAAA,SAAA,EAAe,GAAG,SAAU,gBAAK;AAC3C;","names":["ReactMarkdown"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/MarkdownText.tsx","../src/PreOverride.tsx","../src/defaultComponents.tsx","../src/CodeOverride.tsx"],"sourcesContent":["export {\n MarkdownTextPrimitive,\n type MarkdownTextPrimitiveProps,\n} from \"./MarkdownText\";\n\nexport type { CodeHeaderProps, SyntaxHighlighterProps } from \"./types\";\n","import { INTERNAL, useContentPartText } from \"@assistant-ui/react\";\nimport type { ComponentType, FC } from \"react\";\nimport ReactMarkdown, { type Options } from \"react-markdown\";\nimport { SyntaxHighlighterProps, CodeHeaderProps } from \"./types\";\nimport { PreOverride } from \"./PreOverride\";\nimport {\n DefaultPre,\n DefaultCode,\n DefaultSyntaxHighlighter,\n DefaultCodeHeader,\n} from \"./defaultComponents\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { CodeOverride } from \"./CodeOverride\";\n\nconst { useSmooth } = INTERNAL;\n\nexport type MarkdownTextPrimitiveProps = Omit<\n Options,\n \"components\" | \"children\"\n> & {\n components?: NonNullable<Options[\"components\"]> & {\n SyntaxHighlighter?: ComponentType<SyntaxHighlighterProps>;\n CodeHeader?: ComponentType<CodeHeaderProps>;\n };\n smooth?: boolean;\n};\nexport const MarkdownTextPrimitive: FC<MarkdownTextPrimitiveProps> = ({\n smooth = true,\n components: userComponents,\n ...rest\n}) => {\n const {\n part: { text },\n } = useContentPartText();\n const smoothText = useSmooth(text, smooth);\n\n const {\n pre = DefaultPre,\n code = DefaultCode,\n SyntaxHighlighter = DefaultSyntaxHighlighter,\n CodeHeader = DefaultCodeHeader,\n ...componentsRest\n } = userComponents ?? {};\n const components: typeof userComponents = {\n ...componentsRest,\n pre: PreOverride,\n code: useCallbackRef((props) => (\n <CodeOverride\n components={{ Pre: pre, Code: code, SyntaxHighlighter, CodeHeader }}\n {...props}\n />\n )),\n };\n\n return (\n <ReactMarkdown components={components} {...rest}>\n {smoothText}\n </ReactMarkdown>\n );\n};\n","import { createContext, ComponentPropsWithoutRef } from \"react\";\nimport { PreComponent } from \"./types\";\n\nexport const PreContext = createContext<Omit<\n ComponentPropsWithoutRef<PreComponent>,\n \"children\"\n> | null>(null);\n\nexport const PreOverride: PreComponent = ({ children, ...rest }) => {\n return <PreContext.Provider value={rest}>{children}</PreContext.Provider>;\n};\n","import type { ComponentType } from \"react\";\nimport {\n PreComponent,\n CodeComponent,\n SyntaxHighlighterProps,\n CodeHeaderProps,\n} from \"./types\";\n\nexport const DefaultPre: PreComponent = ({ node, ...rest }) => (\n <pre {...rest} />\n);\nexport const DefaultCode: CodeComponent = ({ node, ...rest }) => (\n <code {...rest} />\n);\nexport const DefaultSyntaxHighlighter: ComponentType<\n SyntaxHighlighterProps\n> = ({ components: { Pre, Code }, code }) => (\n <Pre>\n <Code>{code}</Code>\n </Pre>\n);\nexport const DefaultCodeHeader: ComponentType<CodeHeaderProps> = () => null;\n","import {\n ComponentPropsWithoutRef,\n ComponentType,\n FC,\n useContext,\n useMemo,\n} from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { PreContext } from \"./PreOverride\";\nimport {\n CodeComponent,\n CodeHeaderProps,\n PreComponent,\n SyntaxHighlighterProps,\n} from \"./types\";\nimport { DefaultSyntaxHighlighter } from \"./defaultComponents\";\n\ntype CodeOverrideProps = ComponentPropsWithoutRef<CodeComponent> & {\n components: {\n Pre: PreComponent;\n Code: CodeComponent;\n CodeHeader: ComponentType<CodeHeaderProps>;\n SyntaxHighlighter: ComponentType<SyntaxHighlighterProps>;\n };\n};\n\nconst CodeBlockOverride: FC<CodeOverrideProps> = ({\n components: { Pre, Code, SyntaxHighlighter, CodeHeader },\n children,\n ...codeProps\n}) => {\n const preProps = useContext(PreContext);\n const WrappedPre: PreComponent = useCallbackRef((props) => (\n <Slot {...(preProps as any)}>\n <Pre {...props} />\n </Slot>\n ));\n const WrappedCode: CodeComponent = useCallbackRef((props) => (\n <Slot {...(codeProps as any)}>\n <Code {...props} />\n </Slot>\n ));\n\n const components = useMemo(\n () => ({ Pre: WrappedPre, Code: WrappedCode }),\n [WrappedPre, WrappedCode],\n );\n\n const language = /language-(\\w+)/.exec(codeProps.className || \"\")?.[1];\n const code = children as string;\n const SH = language ? SyntaxHighlighter : DefaultSyntaxHighlighter;\n\n return (\n <>\n <CodeHeader language={language} code={code} />\n <SH\n components={components}\n language={language ?? \"unknown\"}\n code={code}\n />\n </>\n );\n};\n\nexport const CodeOverride: FC<CodeOverrideProps> = ({\n components,\n ...props\n}) => {\n const preProps = useContext(PreContext);\n if (!preProps) return <components.Code {...(props as any)} />;\n return <CodeBlockOverride components={components} {...props} />;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAA,gBAA6C;AAE7C,4BAA4C;;;ACF5C,mBAAwD;AAS/C;AANF,IAAM,iBAAa,4BAGhB,IAAI;AAEP,IAAM,cAA4B,CAAC,EAAE,UAAU,GAAG,KAAK,MAAM;AAClE,SAAO,4CAAC,WAAW,UAAX,EAAoB,OAAO,MAAO,UAAS;AACrD;;;ACDE,IAAAC,sBAAA;AADK,IAAM,aAA2B,CAAC,EAAE,MAAM,GAAG,KAAK,MACvD,6CAAC,SAAK,GAAG,MAAM;AAEV,IAAM,cAA6B,CAAC,EAAE,MAAM,GAAG,KAAK,MACzD,6CAAC,UAAM,GAAG,MAAM;AAEX,IAAM,2BAET,CAAC,EAAE,YAAY,EAAE,KAAK,KAAK,GAAG,KAAK,MACrC,6CAAC,OACC,uDAAC,QAAM,gBAAK,GACd;AAEK,IAAM,oBAAoD,MAAM;;;AFVvE,IAAAC,iCAA+B;;;AGX/B,IAAAC,gBAMO;AACP,wBAAqB;AACrB,oCAA+B;AA2BzB,IAAAC,sBAAA;AARN,IAAM,oBAA2C,CAAC;AAAA,EAChD,YAAY,EAAE,KAAK,MAAM,mBAAmB,WAAW;AAAA,EACvD;AAAA,EACA,GAAG;AACL,MAAM;AACJ,QAAM,eAAW,0BAAW,UAAU;AACtC,QAAM,iBAA2B,8CAAe,CAAC,UAC/C,6CAAC,0BAAM,GAAI,UACT,uDAAC,OAAK,GAAG,OAAO,GAClB,CACD;AACD,QAAM,kBAA6B,8CAAe,CAAC,UACjD,6CAAC,0BAAM,GAAI,WACT,uDAAC,QAAM,GAAG,OAAO,GACnB,CACD;AAED,QAAM,iBAAa;AAAA,IACjB,OAAO,EAAE,KAAK,YAAY,MAAM,YAAY;AAAA,IAC5C,CAAC,YAAY,WAAW;AAAA,EAC1B;AAEA,QAAM,WAAW,iBAAiB,KAAK,UAAU,aAAa,EAAE,IAAI,CAAC;AACrE,QAAM,OAAO;AACb,QAAM,KAAK,WAAW,oBAAoB;AAE1C,SACE,8EACE;AAAA,iDAAC,cAAW,UAAoB,MAAY;AAAA,IAC5C;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,UAAU,YAAY;AAAA,QACtB;AAAA;AAAA,IACF;AAAA,KACF;AAEJ;AAEO,IAAM,eAAsC,CAAC;AAAA,EAClD;AAAA,EACA,GAAG;AACL,MAAM;AACJ,QAAM,eAAW,0BAAW,UAAU;AACtC,MAAI,CAAC,SAAU,QAAO,6CAAC,WAAW,MAAX,EAAiB,GAAI,OAAe;AAC3D,SAAO,6CAAC,qBAAkB,YAAyB,GAAG,OAAO;AAC/D;;;AHzBM,IAAAC,sBAAA;AAjCN,IAAM,EAAE,UAAU,IAAI;AAYf,IAAM,wBAAwD,CAAC;AAAA,EACpE,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,GAAG;AACL,MAAM;AACJ,QAAM;AAAA,IACJ,MAAM,EAAE,KAAK;AAAA,EACf,QAAI,kCAAmB;AACvB,QAAM,aAAa,UAAU,MAAM,MAAM;AAEzC,QAAM;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,oBAAoB;AAAA,IACpB,aAAa;AAAA,IACb,GAAG;AAAA,EACL,IAAI,kBAAkB,CAAC;AACvB,QAAM,aAAoC;AAAA,IACxC,GAAG;AAAA,IACH,KAAK;AAAA,IACL,UAAM,+CAAe,CAAC,UACpB;AAAA,MAAC;AAAA;AAAA,QACC,YAAY,EAAE,KAAK,KAAK,MAAM,MAAM,mBAAmB,WAAW;AAAA,QACjE,GAAG;AAAA;AAAA,IACN,CACD;AAAA,EACH;AAEA,SACE,6CAAC,sBAAAC,SAAA,EAAc,YAAyB,GAAG,MACxC,sBACH;AAEJ;","names":["import_react","import_jsx_runtime","import_react_use_callback_ref","import_react","import_jsx_runtime","import_jsx_runtime","ReactMarkdown"]}
package/dist/index.mjs CHANGED
@@ -1,17 +1,100 @@
1
1
  // src/MarkdownText.tsx
2
- import { useContentPartContext } from "@assistant-ui/react";
2
+ import { INTERNAL, useContentPartText } from "@assistant-ui/react";
3
3
  import ReactMarkdown from "react-markdown";
4
+
5
+ // src/PreOverride.tsx
6
+ import { createContext } from "react";
4
7
  import { jsx } from "react/jsx-runtime";
5
- var MarkdownTextPrimitive = (options) => {
6
- const { useContentPart } = useContentPartContext();
7
- const text = useContentPart((c) => {
8
- if (c.part.type !== "text")
9
- throw new Error(
10
- "This component can only be used inside text content parts."
11
- );
12
- return c.part.text;
13
- });
14
- return /* @__PURE__ */ jsx(ReactMarkdown, { ...options, children: text });
8
+ var PreContext = createContext(null);
9
+ var PreOverride = ({ children, ...rest }) => {
10
+ return /* @__PURE__ */ jsx(PreContext.Provider, { value: rest, children });
11
+ };
12
+
13
+ // src/defaultComponents.tsx
14
+ import { jsx as jsx2 } from "react/jsx-runtime";
15
+ var DefaultPre = ({ node, ...rest }) => /* @__PURE__ */ jsx2("pre", { ...rest });
16
+ var DefaultCode = ({ node, ...rest }) => /* @__PURE__ */ jsx2("code", { ...rest });
17
+ var DefaultSyntaxHighlighter = ({ components: { Pre, Code }, code }) => /* @__PURE__ */ jsx2(Pre, { children: /* @__PURE__ */ jsx2(Code, { children: code }) });
18
+ var DefaultCodeHeader = () => null;
19
+
20
+ // src/MarkdownText.tsx
21
+ import { useCallbackRef as useCallbackRef2 } from "@radix-ui/react-use-callback-ref";
22
+
23
+ // src/CodeOverride.tsx
24
+ import {
25
+ useContext,
26
+ useMemo
27
+ } from "react";
28
+ import { Slot } from "@radix-ui/react-slot";
29
+ import { useCallbackRef } from "@radix-ui/react-use-callback-ref";
30
+ import { Fragment, jsx as jsx3, jsxs } from "react/jsx-runtime";
31
+ var CodeBlockOverride = ({
32
+ components: { Pre, Code, SyntaxHighlighter, CodeHeader },
33
+ children,
34
+ ...codeProps
35
+ }) => {
36
+ const preProps = useContext(PreContext);
37
+ const WrappedPre = useCallbackRef((props) => /* @__PURE__ */ jsx3(Slot, { ...preProps, children: /* @__PURE__ */ jsx3(Pre, { ...props }) }));
38
+ const WrappedCode = useCallbackRef((props) => /* @__PURE__ */ jsx3(Slot, { ...codeProps, children: /* @__PURE__ */ jsx3(Code, { ...props }) }));
39
+ const components = useMemo(
40
+ () => ({ Pre: WrappedPre, Code: WrappedCode }),
41
+ [WrappedPre, WrappedCode]
42
+ );
43
+ const language = /language-(\w+)/.exec(codeProps.className || "")?.[1];
44
+ const code = children;
45
+ const SH = language ? SyntaxHighlighter : DefaultSyntaxHighlighter;
46
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
47
+ /* @__PURE__ */ jsx3(CodeHeader, { language, code }),
48
+ /* @__PURE__ */ jsx3(
49
+ SH,
50
+ {
51
+ components,
52
+ language: language ?? "unknown",
53
+ code
54
+ }
55
+ )
56
+ ] });
57
+ };
58
+ var CodeOverride = ({
59
+ components,
60
+ ...props
61
+ }) => {
62
+ const preProps = useContext(PreContext);
63
+ if (!preProps) return /* @__PURE__ */ jsx3(components.Code, { ...props });
64
+ return /* @__PURE__ */ jsx3(CodeBlockOverride, { components, ...props });
65
+ };
66
+
67
+ // src/MarkdownText.tsx
68
+ import { jsx as jsx4 } from "react/jsx-runtime";
69
+ var { useSmooth } = INTERNAL;
70
+ var MarkdownTextPrimitive = ({
71
+ smooth = true,
72
+ components: userComponents,
73
+ ...rest
74
+ }) => {
75
+ const {
76
+ part: { text }
77
+ } = useContentPartText();
78
+ const smoothText = useSmooth(text, smooth);
79
+ const {
80
+ pre = DefaultPre,
81
+ code = DefaultCode,
82
+ SyntaxHighlighter = DefaultSyntaxHighlighter,
83
+ CodeHeader = DefaultCodeHeader,
84
+ ...componentsRest
85
+ } = userComponents ?? {};
86
+ const components = {
87
+ ...componentsRest,
88
+ pre: PreOverride,
89
+ code: useCallbackRef2((props) => /* @__PURE__ */ jsx4(
90
+ CodeOverride,
91
+ {
92
+ components: { Pre: pre, Code: code, SyntaxHighlighter, CodeHeader },
93
+ ...props
94
+ }
95
+ ))
96
+ };
97
+ return /* @__PURE__ */ jsx4(ReactMarkdown, { components, ...rest, children: smoothText });
15
98
  };
16
99
  export {
17
100
  MarkdownTextPrimitive
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/MarkdownText.tsx"],"sourcesContent":["import { useContentPartContext } from \"@assistant-ui/react\";\nimport type { FC } from \"react\";\nimport ReactMarkdown, { type Options } from \"react-markdown\";\n\nexport type MarkdownTextPrimitiveProps = Omit<Options, \"children\">;\n\nexport const MarkdownTextPrimitive: FC<MarkdownTextPrimitiveProps> = (\n options,\n) => {\n const { useContentPart } = useContentPartContext();\n const text = useContentPart((c) => {\n if (c.part.type !== \"text\")\n throw new Error(\n \"This component can only be used inside text content parts.\",\n );\n\n return c.part.text;\n });\n return <ReactMarkdown {...options}>{text}</ReactMarkdown>;\n};\n"],"mappings":";AAAA,SAAS,6BAA6B;AAEtC,OAAO,mBAAqC;AAgBnC;AAZF,IAAM,wBAAwD,CACnE,YACG;AACH,QAAM,EAAE,eAAe,IAAI,sBAAsB;AACjD,QAAM,OAAO,eAAe,CAAC,MAAM;AACjC,QAAI,EAAE,KAAK,SAAS;AAClB,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAEF,WAAO,EAAE,KAAK;AAAA,EAChB,CAAC;AACD,SAAO,oBAAC,iBAAe,GAAG,SAAU,gBAAK;AAC3C;","names":[]}
1
+ {"version":3,"sources":["../src/MarkdownText.tsx","../src/PreOverride.tsx","../src/defaultComponents.tsx","../src/CodeOverride.tsx"],"sourcesContent":["import { INTERNAL, useContentPartText } from \"@assistant-ui/react\";\nimport type { ComponentType, FC } from \"react\";\nimport ReactMarkdown, { type Options } from \"react-markdown\";\nimport { SyntaxHighlighterProps, CodeHeaderProps } from \"./types\";\nimport { PreOverride } from \"./PreOverride\";\nimport {\n DefaultPre,\n DefaultCode,\n DefaultSyntaxHighlighter,\n DefaultCodeHeader,\n} from \"./defaultComponents\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { CodeOverride } from \"./CodeOverride\";\n\nconst { useSmooth } = INTERNAL;\n\nexport type MarkdownTextPrimitiveProps = Omit<\n Options,\n \"components\" | \"children\"\n> & {\n components?: NonNullable<Options[\"components\"]> & {\n SyntaxHighlighter?: ComponentType<SyntaxHighlighterProps>;\n CodeHeader?: ComponentType<CodeHeaderProps>;\n };\n smooth?: boolean;\n};\nexport const MarkdownTextPrimitive: FC<MarkdownTextPrimitiveProps> = ({\n smooth = true,\n components: userComponents,\n ...rest\n}) => {\n const {\n part: { text },\n } = useContentPartText();\n const smoothText = useSmooth(text, smooth);\n\n const {\n pre = DefaultPre,\n code = DefaultCode,\n SyntaxHighlighter = DefaultSyntaxHighlighter,\n CodeHeader = DefaultCodeHeader,\n ...componentsRest\n } = userComponents ?? {};\n const components: typeof userComponents = {\n ...componentsRest,\n pre: PreOverride,\n code: useCallbackRef((props) => (\n <CodeOverride\n components={{ Pre: pre, Code: code, SyntaxHighlighter, CodeHeader }}\n {...props}\n />\n )),\n };\n\n return (\n <ReactMarkdown components={components} {...rest}>\n {smoothText}\n </ReactMarkdown>\n );\n};\n","import { createContext, ComponentPropsWithoutRef } from \"react\";\nimport { PreComponent } from \"./types\";\n\nexport const PreContext = createContext<Omit<\n ComponentPropsWithoutRef<PreComponent>,\n \"children\"\n> | null>(null);\n\nexport const PreOverride: PreComponent = ({ children, ...rest }) => {\n return <PreContext.Provider value={rest}>{children}</PreContext.Provider>;\n};\n","import type { ComponentType } from \"react\";\nimport {\n PreComponent,\n CodeComponent,\n SyntaxHighlighterProps,\n CodeHeaderProps,\n} from \"./types\";\n\nexport const DefaultPre: PreComponent = ({ node, ...rest }) => (\n <pre {...rest} />\n);\nexport const DefaultCode: CodeComponent = ({ node, ...rest }) => (\n <code {...rest} />\n);\nexport const DefaultSyntaxHighlighter: ComponentType<\n SyntaxHighlighterProps\n> = ({ components: { Pre, Code }, code }) => (\n <Pre>\n <Code>{code}</Code>\n </Pre>\n);\nexport const DefaultCodeHeader: ComponentType<CodeHeaderProps> = () => null;\n","import {\n ComponentPropsWithoutRef,\n ComponentType,\n FC,\n useContext,\n useMemo,\n} from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { PreContext } from \"./PreOverride\";\nimport {\n CodeComponent,\n CodeHeaderProps,\n PreComponent,\n SyntaxHighlighterProps,\n} from \"./types\";\nimport { DefaultSyntaxHighlighter } from \"./defaultComponents\";\n\ntype CodeOverrideProps = ComponentPropsWithoutRef<CodeComponent> & {\n components: {\n Pre: PreComponent;\n Code: CodeComponent;\n CodeHeader: ComponentType<CodeHeaderProps>;\n SyntaxHighlighter: ComponentType<SyntaxHighlighterProps>;\n };\n};\n\nconst CodeBlockOverride: FC<CodeOverrideProps> = ({\n components: { Pre, Code, SyntaxHighlighter, CodeHeader },\n children,\n ...codeProps\n}) => {\n const preProps = useContext(PreContext);\n const WrappedPre: PreComponent = useCallbackRef((props) => (\n <Slot {...(preProps as any)}>\n <Pre {...props} />\n </Slot>\n ));\n const WrappedCode: CodeComponent = useCallbackRef((props) => (\n <Slot {...(codeProps as any)}>\n <Code {...props} />\n </Slot>\n ));\n\n const components = useMemo(\n () => ({ Pre: WrappedPre, Code: WrappedCode }),\n [WrappedPre, WrappedCode],\n );\n\n const language = /language-(\\w+)/.exec(codeProps.className || \"\")?.[1];\n const code = children as string;\n const SH = language ? SyntaxHighlighter : DefaultSyntaxHighlighter;\n\n return (\n <>\n <CodeHeader language={language} code={code} />\n <SH\n components={components}\n language={language ?? \"unknown\"}\n code={code}\n />\n </>\n );\n};\n\nexport const CodeOverride: FC<CodeOverrideProps> = ({\n components,\n ...props\n}) => {\n const preProps = useContext(PreContext);\n if (!preProps) return <components.Code {...(props as any)} />;\n return <CodeBlockOverride components={components} {...props} />;\n};\n"],"mappings":"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","names":["jsx","useCallbackRef","jsx","jsx","useCallbackRef"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@assistant-ui/react-markdown",
3
- "version": "0.0.3",
3
+ "version": "0.0.5",
4
4
  "license": "MIT",
5
5
  "exports": {
6
6
  ".": {
@@ -24,11 +24,12 @@
24
24
  ],
25
25
  "sideEffects": false,
26
26
  "dependencies": {
27
- "react-markdown": "^9.0.1",
28
- "zod": "^3.23.8"
27
+ "@radix-ui/react-slot": "^1.1.0",
28
+ "@radix-ui/react-use-callback-ref": "^1.1.0",
29
+ "react-markdown": "^9.0.1"
29
30
  },
30
31
  "peerDependencies": {
31
- "@assistant-ui/react": "^0.3.0",
32
+ "@assistant-ui/react": "^0.3.5",
32
33
  "@types/react": "*",
33
34
  "react": "^18"
34
35
  },
@@ -38,7 +39,7 @@
38
39
  }
39
40
  },
40
41
  "devDependencies": {
41
- "@types/node": "^20.14.9",
42
+ "eslint-config-next": "14.2.4",
42
43
  "tsup": "^8.1.0",
43
44
  "@assistant-ui/tsconfig": "0.0.0"
44
45
  },
@@ -55,6 +56,6 @@
55
56
  "url": "https://github.com/Yonom/assistant-ui/issues"
56
57
  },
57
58
  "scripts": {
58
- "build": "tsup src/index.ts --format cjs,esm --dts --sourcemap"
59
+ "build": "tsup src/index.ts --format cjs,esm --dts --sourcemap --clean"
59
60
  }
60
61
  }