@assistant-ui/react-markdown 0.2.5 → 0.2.6
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 +8 -4
- package/dist/index.d.ts +8 -4
- package/dist/index.js +69 -53
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +70 -49
- package/dist/index.mjs.map +1 -1
- package/dist/styles/markdown.css +63 -63
- package/dist/styles/tailwindcss/markdown.css +39 -46
- package/package.json +7 -6
package/dist/index.d.mts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
|
-
import { ComponentType, FC } from 'react';
|
|
2
|
+
import { ElementType, ComponentType, ForwardRefExoticComponent, RefAttributes, ElementRef, ComponentPropsWithoutRef, FC } from 'react';
|
|
3
3
|
import { Options } from 'react-markdown';
|
|
4
|
-
import {
|
|
4
|
+
import { Primitive } from '@radix-ui/react-primitive';
|
|
5
5
|
|
|
6
6
|
type PreComponent = NonNullable<NonNullable<Options["components"]>["pre"]>;
|
|
7
7
|
type CodeComponent = NonNullable<NonNullable<Options["components"]>["code"]>;
|
|
@@ -18,7 +18,11 @@ type SyntaxHighlighterProps = {
|
|
|
18
18
|
code: string;
|
|
19
19
|
};
|
|
20
20
|
|
|
21
|
+
type MarkdownTextPrimitiveElement = ElementRef<typeof Primitive.div>;
|
|
22
|
+
type PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;
|
|
21
23
|
type MarkdownTextPrimitiveProps = Omit<Options, "components" | "children"> & {
|
|
24
|
+
containerProps?: Omit<PrimitiveDivProps, "children" | "asChild">;
|
|
25
|
+
containerComponent?: ElementType;
|
|
22
26
|
components?: NonNullable<Options["components"]> & {
|
|
23
27
|
SyntaxHighlighter?: ComponentType<SyntaxHighlighterProps>;
|
|
24
28
|
CodeHeader?: ComponentType<CodeHeaderProps>;
|
|
@@ -29,12 +33,12 @@ type MarkdownTextPrimitiveProps = Omit<Options, "components" | "children"> & {
|
|
|
29
33
|
};
|
|
30
34
|
smooth?: boolean;
|
|
31
35
|
};
|
|
32
|
-
declare const MarkdownTextPrimitive:
|
|
36
|
+
declare const MarkdownTextPrimitive: ForwardRefExoticComponent<MarkdownTextPrimitiveProps> & RefAttributes<MarkdownTextPrimitiveElement>;
|
|
33
37
|
|
|
34
38
|
declare const useIsMarkdownCodeBlock: () => boolean;
|
|
35
39
|
|
|
36
40
|
type MakeMarkdownTextProps = MarkdownTextPrimitiveProps;
|
|
37
|
-
declare const makeMarkdownText: ({ className, components: userComponents, ...rest }?: MakeMarkdownTextProps) => react.NamedExoticComponent<
|
|
41
|
+
declare const makeMarkdownText: ({ className, components: userComponents, ...rest }?: MakeMarkdownTextProps) => react.NamedExoticComponent<{}>;
|
|
38
42
|
|
|
39
43
|
declare const CodeHeader: FC<CodeHeaderProps>;
|
|
40
44
|
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
|
-
import { ComponentType, FC } from 'react';
|
|
2
|
+
import { ElementType, ComponentType, ForwardRefExoticComponent, RefAttributes, ElementRef, ComponentPropsWithoutRef, FC } from 'react';
|
|
3
3
|
import { Options } from 'react-markdown';
|
|
4
|
-
import {
|
|
4
|
+
import { Primitive } from '@radix-ui/react-primitive';
|
|
5
5
|
|
|
6
6
|
type PreComponent = NonNullable<NonNullable<Options["components"]>["pre"]>;
|
|
7
7
|
type CodeComponent = NonNullable<NonNullable<Options["components"]>["code"]>;
|
|
@@ -18,7 +18,11 @@ type SyntaxHighlighterProps = {
|
|
|
18
18
|
code: string;
|
|
19
19
|
};
|
|
20
20
|
|
|
21
|
+
type MarkdownTextPrimitiveElement = ElementRef<typeof Primitive.div>;
|
|
22
|
+
type PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;
|
|
21
23
|
type MarkdownTextPrimitiveProps = Omit<Options, "components" | "children"> & {
|
|
24
|
+
containerProps?: Omit<PrimitiveDivProps, "children" | "asChild">;
|
|
25
|
+
containerComponent?: ElementType;
|
|
22
26
|
components?: NonNullable<Options["components"]> & {
|
|
23
27
|
SyntaxHighlighter?: ComponentType<SyntaxHighlighterProps>;
|
|
24
28
|
CodeHeader?: ComponentType<CodeHeaderProps>;
|
|
@@ -29,12 +33,12 @@ type MarkdownTextPrimitiveProps = Omit<Options, "components" | "children"> & {
|
|
|
29
33
|
};
|
|
30
34
|
smooth?: boolean;
|
|
31
35
|
};
|
|
32
|
-
declare const MarkdownTextPrimitive:
|
|
36
|
+
declare const MarkdownTextPrimitive: ForwardRefExoticComponent<MarkdownTextPrimitiveProps> & RefAttributes<MarkdownTextPrimitiveElement>;
|
|
33
37
|
|
|
34
38
|
declare const useIsMarkdownCodeBlock: () => boolean;
|
|
35
39
|
|
|
36
40
|
type MakeMarkdownTextProps = MarkdownTextPrimitiveProps;
|
|
37
|
-
declare const makeMarkdownText: ({ className, components: userComponents, ...rest }?: MakeMarkdownTextProps) => react.NamedExoticComponent<
|
|
41
|
+
declare const makeMarkdownText: ({ className, components: userComponents, ...rest }?: MakeMarkdownTextProps) => react.NamedExoticComponent<{}>;
|
|
38
42
|
|
|
39
43
|
declare const CodeHeader: FC<CodeHeaderProps>;
|
|
40
44
|
|
package/dist/index.js
CHANGED
|
@@ -40,6 +40,7 @@ module.exports = __toCommonJS(src_exports);
|
|
|
40
40
|
|
|
41
41
|
// src/primitives/MarkdownText.tsx
|
|
42
42
|
var import_react4 = require("@assistant-ui/react");
|
|
43
|
+
var import_react5 = require("react");
|
|
43
44
|
var import_react_markdown = __toESM(require("react-markdown"));
|
|
44
45
|
|
|
45
46
|
// src/overrides/PreOverride.tsx
|
|
@@ -159,58 +160,74 @@ var CodeOverride = ({
|
|
|
159
160
|
};
|
|
160
161
|
|
|
161
162
|
// src/primitives/MarkdownText.tsx
|
|
163
|
+
var import_internal = require("@assistant-ui/react/internal");
|
|
164
|
+
var import_classnames2 = __toESM(require("classnames"));
|
|
162
165
|
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
163
|
-
var
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
166
|
+
var MarkdownTextPrimitive = (0, import_react5.forwardRef)(
|
|
167
|
+
({
|
|
168
|
+
components: userComponents,
|
|
169
|
+
className,
|
|
170
|
+
containerProps,
|
|
171
|
+
containerComponent: Container = "div",
|
|
172
|
+
...rest
|
|
173
|
+
}, forwardedRef, smooth = true) => {
|
|
174
|
+
const {
|
|
175
|
+
part: { text },
|
|
176
|
+
status
|
|
177
|
+
} = (0, import_internal.useSmooth)((0, import_react4.useContentPartText)(), smooth);
|
|
178
|
+
const {
|
|
179
|
+
pre = DefaultPre,
|
|
180
|
+
code = DefaultCode,
|
|
181
|
+
SyntaxHighlighter = DefaultCodeBlockContent,
|
|
182
|
+
CodeHeader: CodeHeader2 = DefaultCodeHeader,
|
|
183
|
+
by_language,
|
|
184
|
+
...componentsRest
|
|
185
|
+
} = userComponents ?? {};
|
|
186
|
+
const components = {
|
|
187
|
+
...componentsRest,
|
|
188
|
+
pre: PreOverride,
|
|
189
|
+
code: (0, import_react_use_callback_ref2.useCallbackRef)((props) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
190
|
+
CodeOverride,
|
|
191
|
+
{
|
|
192
|
+
components: {
|
|
193
|
+
Pre: pre,
|
|
194
|
+
Code: code,
|
|
195
|
+
SyntaxHighlighter,
|
|
196
|
+
CodeHeader: CodeHeader2,
|
|
197
|
+
by_language
|
|
198
|
+
},
|
|
199
|
+
...props
|
|
200
|
+
}
|
|
201
|
+
))
|
|
202
|
+
};
|
|
203
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
204
|
+
Container,
|
|
186
205
|
{
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
by_language
|
|
193
|
-
},
|
|
194
|
-
...props
|
|
206
|
+
"data-status": status.type,
|
|
207
|
+
...containerProps,
|
|
208
|
+
className: (0, import_classnames2.default)(className, containerProps?.className),
|
|
209
|
+
ref: forwardedRef,
|
|
210
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_react_markdown.default, { components, ...rest, children: text })
|
|
195
211
|
}
|
|
196
|
-
)
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
|
|
212
|
+
);
|
|
213
|
+
}
|
|
214
|
+
);
|
|
215
|
+
MarkdownTextPrimitive.displayName = "MarkdownTextPrimitive";
|
|
200
216
|
|
|
201
217
|
// src/ui/markdown-text.tsx
|
|
202
|
-
var
|
|
218
|
+
var import_react8 = require("react");
|
|
203
219
|
|
|
204
220
|
// src/ui/code-header.tsx
|
|
205
221
|
var import_lucide_react = require("lucide-react");
|
|
206
|
-
var
|
|
222
|
+
var import_react7 = require("@assistant-ui/react");
|
|
223
|
+
var import_internal2 = require("@assistant-ui/react/internal");
|
|
207
224
|
|
|
208
225
|
// src/ui/useCopyToClipboard.tsx
|
|
209
|
-
var
|
|
226
|
+
var import_react6 = require("react");
|
|
210
227
|
var useCopyToClipboard = ({
|
|
211
228
|
copiedDuration = 3e3
|
|
212
229
|
} = {}) => {
|
|
213
|
-
const [isCopied, setIsCopied] = (0,
|
|
230
|
+
const [isCopied, setIsCopied] = (0, import_react6.useState)(false);
|
|
214
231
|
const copyToClipboard = (value) => {
|
|
215
232
|
if (!value) return;
|
|
216
233
|
navigator.clipboard.writeText(value).then(() => {
|
|
@@ -223,13 +240,12 @@ var useCopyToClipboard = ({
|
|
|
223
240
|
|
|
224
241
|
// src/ui/code-header.tsx
|
|
225
242
|
var import_jsx_runtime6 = require("react/jsx-runtime");
|
|
226
|
-
var { TooltipIconButton } = import_react6.INTERNAL;
|
|
227
243
|
var CodeHeader = ({ language, code }) => {
|
|
228
244
|
const {
|
|
229
245
|
strings: {
|
|
230
246
|
code: { header: { copy: { tooltip = "Copy" } = {} } = {} } = {}
|
|
231
247
|
} = {}
|
|
232
|
-
} = (0,
|
|
248
|
+
} = (0, import_react7.useThreadConfig)();
|
|
233
249
|
const { isCopied, copyToClipboard } = useCopyToClipboard();
|
|
234
250
|
const onCopy = () => {
|
|
235
251
|
if (!code || isCopied) return;
|
|
@@ -237,7 +253,7 @@ var CodeHeader = ({ language, code }) => {
|
|
|
237
253
|
};
|
|
238
254
|
return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "aui-code-header-root", children: [
|
|
239
255
|
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "aui-code-header-language", children: language }),
|
|
240
|
-
/* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(TooltipIconButton, { tooltip, onClick: onCopy, children: [
|
|
256
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(import_internal2.TooltipIconButton, { tooltip, onClick: onCopy, children: [
|
|
241
257
|
!isCopied && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_lucide_react.CopyIcon, {}),
|
|
242
258
|
isCopied && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_lucide_react.CheckIcon, {})
|
|
243
259
|
] })
|
|
@@ -245,7 +261,8 @@ var CodeHeader = ({ language, code }) => {
|
|
|
245
261
|
};
|
|
246
262
|
|
|
247
263
|
// src/ui/markdown-text.tsx
|
|
248
|
-
var
|
|
264
|
+
var import_classnames3 = __toESM(require("classnames"));
|
|
265
|
+
var import_internal3 = require("@assistant-ui/react/internal");
|
|
249
266
|
var import_jsx_runtime7 = require("react/jsx-runtime");
|
|
250
267
|
var makeMarkdownText = ({
|
|
251
268
|
className,
|
|
@@ -256,24 +273,23 @@ var makeMarkdownText = ({
|
|
|
256
273
|
...userComponents,
|
|
257
274
|
CodeHeader: userComponents?.CodeHeader ?? CodeHeader
|
|
258
275
|
};
|
|
259
|
-
const MarkdownTextImpl = (
|
|
276
|
+
const MarkdownTextImpl = () => {
|
|
277
|
+
const status = (0, import_internal3.useSmoothStatus)();
|
|
260
278
|
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
261
|
-
|
|
279
|
+
MarkdownTextPrimitive,
|
|
262
280
|
{
|
|
263
|
-
|
|
281
|
+
components,
|
|
282
|
+
...rest,
|
|
283
|
+
className: (0, import_classnames3.default)(
|
|
264
284
|
"aui-md-root",
|
|
265
|
-
status.type === "running" && "aui-md-
|
|
285
|
+
status.type === "running" && "aui-md-running",
|
|
266
286
|
className
|
|
267
|
-
)
|
|
268
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(MarkdownTextPrimitive, { components, ...rest })
|
|
287
|
+
)
|
|
269
288
|
}
|
|
270
289
|
);
|
|
271
290
|
};
|
|
272
291
|
MarkdownTextImpl.displayName = "MarkdownText";
|
|
273
|
-
return (0,
|
|
274
|
-
MarkdownTextImpl,
|
|
275
|
-
(prev, next) => prev.status.type === next.status.type
|
|
276
|
-
);
|
|
292
|
+
return (0, import_react8.memo)((0, import_internal3.withSmoothContextProvider)(MarkdownTextImpl), () => true);
|
|
277
293
|
};
|
|
278
294
|
// Annotate the CommonJS export names for ESM import in node:
|
|
279
295
|
0 && (module.exports = {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/primitives/MarkdownText.tsx","../src/overrides/PreOverride.tsx","../src/overrides/defaultComponents.tsx","../src/overrides/CodeOverride.tsx","../src/overrides/CodeBlock.tsx","../src/overrides/withDefaults.tsx","../src/ui/markdown-text.tsx","../src/ui/code-header.tsx","../src/ui/useCopyToClipboard.tsx"],"sourcesContent":["export {\n MarkdownTextPrimitive,\n type MarkdownTextPrimitiveProps,\n} from \"./primitives/MarkdownText\";\n\nexport type {\n CodeHeaderProps,\n SyntaxHighlighterProps,\n} from \"./overrides/types\";\n\nexport { useIsMarkdownCodeBlock } from \"./overrides/PreOverride\";\n\nexport {\n makeMarkdownText,\n type MakeMarkdownTextProps,\n} from \"./ui/markdown-text\";\n\nexport { CodeHeader } from \"./ui/code-header\";\n","\"use client\";\n\nimport { INTERNAL, useContentPartText } from \"@assistant-ui/react\";\nimport type { ComponentType, FC } 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\";\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 by_language?: Record<\n string,\n {\n CodeHeader?: ComponentType<CodeHeaderProps>;\n SyntaxHighlighter?: ComponentType<SyntaxHighlighterProps>;\n }\n >;\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); // TODO loading indicator disappears before smooth animation ends\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: typeof userComponents = {\n ...componentsRest,\n pre: PreOverride,\n code: useCallbackRef((props) => (\n <CodeOverride\n components={{\n Pre: pre,\n Code: code,\n SyntaxHighlighter,\n CodeHeader,\n by_language,\n }}\n {...props}\n />\n )),\n };\n\n return (\n <ReactMarkdown components={components} {...rest}>\n {smoothText}\n </ReactMarkdown>\n );\n};\n","import { createContext, ComponentPropsWithoutRef, useContext } from \"react\";\nimport { PreComponent } from \"./types\";\n\nexport const PreContext = createContext<Omit<\n ComponentPropsWithoutRef<PreComponent>,\n \"children\"\n> | null>(null);\n\nexport const useIsMarkdownCodeBlock = () => {\n return useContext(PreContext) !== null;\n};\n\nexport const PreOverride: PreComponent = ({ children, ...rest }) => {\n return <PreContext.Provider value={rest}>{children}</PreContext.Provider>;\n};\n","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","import { ComponentPropsWithoutRef, ComponentType, FC, useContext } from \"react\";\nimport { PreContext } from \"./PreOverride\";\nimport {\n CodeComponent,\n CodeHeaderProps,\n PreComponent,\n SyntaxHighlighterProps,\n} from \"./types\";\nimport { DefaultCodeBlock } from \"./CodeBlock\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { withDefaultProps } from \"./withDefaults\";\nimport { DefaultCodeBlockContent } from \"./defaultComponents\";\n\nconst CodeBlockOverride: FC<CodeOverrideProps> = ({\n components: {\n Pre,\n Code,\n SyntaxHighlighter: FallbackSyntaxHighlighter,\n CodeHeader: FallbackCodeHeader,\n by_language = {},\n },\n children,\n ...codeProps\n}) => {\n const preProps = useContext(PreContext)!;\n const getPreProps = withDefaultProps<any>(preProps);\n const WrappedPre: PreComponent = useCallbackRef((props) => (\n <Pre {...getPreProps(props)} />\n ));\n\n const getCodeProps = withDefaultProps<any>(codeProps);\n const WrappedCode: CodeComponent = useCallbackRef((props) => (\n <Code {...getCodeProps(props)} />\n ));\n\n const language = /language-(\\w+)/.exec(codeProps.className || \"\")?.[1] ?? \"\";\n\n // if the code content is not string (due to rehype plugins), return a default code block\n if (typeof children !== \"string\") {\n return (\n <DefaultCodeBlockContent\n components={{ Pre: WrappedPre, Code: WrappedCode }}\n code={children}\n />\n );\n }\n\n const SyntaxHighlighter: ComponentType<SyntaxHighlighterProps> =\n by_language[language]?.SyntaxHighlighter ?? FallbackSyntaxHighlighter;\n\n const CodeHeader: ComponentType<CodeHeaderProps> =\n by_language[language]?.CodeHeader ?? FallbackCodeHeader;\n\n return (\n <DefaultCodeBlock\n components={{\n Pre: WrappedPre,\n Code: WrappedCode,\n SyntaxHighlighter,\n CodeHeader,\n }}\n language={language || \"unknown\"}\n code={children}\n />\n );\n};\n\nexport type CodeOverrideProps = ComponentPropsWithoutRef<CodeComponent> & {\n components: {\n Pre: PreComponent;\n Code: CodeComponent;\n CodeHeader: ComponentType<CodeHeaderProps>;\n SyntaxHighlighter: ComponentType<SyntaxHighlighterProps>;\n by_language?: Record<\n string,\n {\n CodeHeader?: ComponentType<CodeHeaderProps>;\n SyntaxHighlighter?: ComponentType<SyntaxHighlighterProps>;\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","import { ComponentType, FC, useMemo } from \"react\";\n\nimport {\n CodeComponent,\n CodeHeaderProps,\n PreComponent,\n SyntaxHighlighterProps,\n} from \"./types\";\nimport { DefaultCodeBlockContent } from \"./defaultComponents\";\n\nexport type CodeBlockProps = {\n language: string;\n code: string;\n components: {\n Pre: PreComponent;\n Code: CodeComponent;\n CodeHeader: ComponentType<CodeHeaderProps>;\n SyntaxHighlighter: ComponentType<SyntaxHighlighterProps>;\n };\n};\n\nexport const DefaultCodeBlock: FC<CodeBlockProps> = ({\n components: { Pre, Code, SyntaxHighlighter, CodeHeader },\n language,\n code,\n}) => {\n const components = useMemo(() => ({ Pre, Code }), [Pre, Code]);\n\n const SH = !!language ? SyntaxHighlighter : DefaultCodeBlockContent;\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","import classNames from \"classnames\";\n\nexport const withDefaultProps =\n <TProps extends { className?: string | undefined }>({\n className,\n ...defaultProps\n }: Partial<TProps>) =>\n ({ className: classNameProp, ...props }: TProps) => {\n return {\n className: classNames(className, classNameProp),\n ...defaultProps,\n ...props,\n } as TProps;\n };\n","import { TextContentPartProps } from \"@assistant-ui/react\";\nimport { FC, memo } from \"react\";\nimport { CodeHeader } from \"./code-header\";\nimport classNames from \"classnames\";\nimport {\n MarkdownTextPrimitive,\n MarkdownTextPrimitiveProps,\n} from \"../primitives/MarkdownText\";\n\nexport type MakeMarkdownTextProps = MarkdownTextPrimitiveProps;\n\nexport const makeMarkdownText = ({\n className,\n components: userComponents,\n ...rest\n}: MakeMarkdownTextProps = {}) => {\n const components = {\n ...userComponents,\n CodeHeader: userComponents?.CodeHeader ?? CodeHeader,\n };\n\n const MarkdownTextImpl: FC<TextContentPartProps> = ({ status }) => {\n return (\n <div\n className={classNames(\n \"aui-md-root\",\n status.type === \"running\" && \"aui-md-in-progress\",\n className,\n )}\n >\n <MarkdownTextPrimitive components={components} {...rest} />\n </div>\n );\n };\n MarkdownTextImpl.displayName = \"MarkdownText\";\n\n return memo(\n MarkdownTextImpl,\n (prev, next) => prev.status.type === next.status.type,\n );\n};\n","import { FC } from \"react\";\nimport { CheckIcon, CopyIcon } from \"lucide-react\";\nimport { useThreadConfig, INTERNAL } from \"@assistant-ui/react\";\n\nimport { CodeHeaderProps } from \"../overrides/types\";\nimport { useCopyToClipboard } from \"./useCopyToClipboard\";\n\nconst { TooltipIconButton } = INTERNAL;\n\nexport const CodeHeader: FC<CodeHeaderProps> = ({ language, code }) => {\n const {\n strings: {\n code: { header: { copy: { tooltip = \"Copy\" } = {} } = {} } = {},\n } = {},\n } = useThreadConfig();\n\n const { isCopied, copyToClipboard } = useCopyToClipboard();\n const onCopy = () => {\n if (!code || isCopied) return;\n copyToClipboard(code);\n };\n\n return (\n <div className=\"aui-code-header-root\">\n <span className=\"aui-code-header-language\">{language}</span>\n <TooltipIconButton tooltip={tooltip} onClick={onCopy}>\n {!isCopied && <CopyIcon />}\n {isCopied && <CheckIcon />}\n </TooltipIconButton>\n </div>\n );\n};\n","import { useState } from \"react\";\nimport { UseActionBarCopyProps } from \"@assistant-ui/react\";\n\nexport type useCopyToClipboardProps = UseActionBarCopyProps;\n\nexport const useCopyToClipboard = ({\n copiedDuration = 3000,\n}: useCopyToClipboardProps = {}) => {\n const [isCopied, setIsCopied] = useState<boolean>(false);\n\n const copyToClipboard = (value: string) => {\n if (!value) return;\n\n navigator.clipboard.writeText(value).then(() => {\n setIsCopied(true);\n setTimeout(() => setIsCopied(false), copiedDuration);\n });\n };\n\n return { isCopied, copyToClipboard };\n};\n"],"mappings":"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","names":["import_react","import_jsx_runtime","import_react_use_callback_ref","import_react","import_react","import_jsx_runtime","CodeHeader","classNames","import_jsx_runtime","CodeHeader","import_jsx_runtime","CodeHeader","ReactMarkdown","import_react","import_react","import_react","import_jsx_runtime","import_classnames","import_jsx_runtime","classNames"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/primitives/MarkdownText.tsx","../src/overrides/PreOverride.tsx","../src/overrides/defaultComponents.tsx","../src/overrides/CodeOverride.tsx","../src/overrides/CodeBlock.tsx","../src/overrides/withDefaults.tsx","../src/ui/markdown-text.tsx","../src/ui/code-header.tsx","../src/ui/useCopyToClipboard.tsx"],"sourcesContent":["export {\n MarkdownTextPrimitive,\n type MarkdownTextPrimitiveProps,\n} from \"./primitives/MarkdownText\";\n\nexport type {\n CodeHeaderProps,\n SyntaxHighlighterProps,\n} from \"./overrides/types\";\n\nexport { useIsMarkdownCodeBlock } from \"./overrides/PreOverride\";\n\nexport {\n makeMarkdownText,\n type MakeMarkdownTextProps,\n} from \"./ui/markdown-text\";\n\nexport { CodeHeader } from \"./ui/code-header\";\n","\"use client\";\n\nimport { useContentPartText } from \"@assistant-ui/react\";\nimport {\n ElementRef,\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 { useSmooth } from \"@assistant-ui/react/internal\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport classNames from \"classnames\";\n\ntype MarkdownTextPrimitiveElement = ElementRef<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\">;\n containerComponent?: ElementType;\n components?: NonNullable<Options[\"components\"]> & {\n SyntaxHighlighter?: ComponentType<SyntaxHighlighterProps>;\n CodeHeader?: ComponentType<CodeHeaderProps>;\n by_language?: Record<\n string,\n {\n CodeHeader?: ComponentType<CodeHeaderProps>;\n SyntaxHighlighter?: ComponentType<SyntaxHighlighterProps>;\n }\n >;\n };\n smooth?: boolean;\n};\n\nexport const MarkdownTextPrimitive: ForwardRefExoticComponent<MarkdownTextPrimitiveProps> &\n RefAttributes<MarkdownTextPrimitiveElement> = forwardRef<\n MarkdownTextPrimitiveElement,\n MarkdownTextPrimitiveProps\n>(\n (\n {\n components: userComponents,\n className,\n containerProps,\n containerComponent: Container = \"div\",\n ...rest\n },\n forwardedRef,\n smooth = true,\n ) => {\n const {\n part: { text },\n status,\n } = 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: typeof userComponents = {\n ...componentsRest,\n pre: PreOverride,\n code: useCallbackRef((props) => (\n <CodeOverride\n components={{\n Pre: pre,\n Code: code,\n SyntaxHighlighter,\n CodeHeader,\n by_language,\n }}\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","import { createContext, ComponentPropsWithoutRef, useContext } from \"react\";\nimport { PreComponent } from \"./types\";\n\nexport const PreContext = createContext<Omit<\n ComponentPropsWithoutRef<PreComponent>,\n \"children\"\n> | null>(null);\n\nexport const useIsMarkdownCodeBlock = () => {\n return useContext(PreContext) !== null;\n};\n\nexport const PreOverride: PreComponent = ({ children, ...rest }) => {\n return <PreContext.Provider value={rest}>{children}</PreContext.Provider>;\n};\n","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","import { ComponentPropsWithoutRef, ComponentType, FC, useContext } from \"react\";\nimport { PreContext } from \"./PreOverride\";\nimport {\n CodeComponent,\n CodeHeaderProps,\n PreComponent,\n SyntaxHighlighterProps,\n} from \"./types\";\nimport { DefaultCodeBlock } from \"./CodeBlock\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { withDefaultProps } from \"./withDefaults\";\nimport { DefaultCodeBlockContent } from \"./defaultComponents\";\n\nconst CodeBlockOverride: FC<CodeOverrideProps> = ({\n components: {\n Pre,\n Code,\n SyntaxHighlighter: FallbackSyntaxHighlighter,\n CodeHeader: FallbackCodeHeader,\n by_language = {},\n },\n children,\n ...codeProps\n}) => {\n const preProps = useContext(PreContext)!;\n const getPreProps = withDefaultProps<any>(preProps);\n const WrappedPre: PreComponent = useCallbackRef((props) => (\n <Pre {...getPreProps(props)} />\n ));\n\n const getCodeProps = withDefaultProps<any>(codeProps);\n const WrappedCode: CodeComponent = useCallbackRef((props) => (\n <Code {...getCodeProps(props)} />\n ));\n\n const language = /language-(\\w+)/.exec(codeProps.className || \"\")?.[1] ?? \"\";\n\n // if the code content is not string (due to rehype plugins), return a default code block\n if (typeof children !== \"string\") {\n return (\n <DefaultCodeBlockContent\n components={{ Pre: WrappedPre, Code: WrappedCode }}\n code={children}\n />\n );\n }\n\n const SyntaxHighlighter: ComponentType<SyntaxHighlighterProps> =\n by_language[language]?.SyntaxHighlighter ?? FallbackSyntaxHighlighter;\n\n const CodeHeader: ComponentType<CodeHeaderProps> =\n by_language[language]?.CodeHeader ?? FallbackCodeHeader;\n\n return (\n <DefaultCodeBlock\n components={{\n Pre: WrappedPre,\n Code: WrappedCode,\n SyntaxHighlighter,\n CodeHeader,\n }}\n language={language || \"unknown\"}\n code={children}\n />\n );\n};\n\nexport type CodeOverrideProps = ComponentPropsWithoutRef<CodeComponent> & {\n components: {\n Pre: PreComponent;\n Code: CodeComponent;\n CodeHeader: ComponentType<CodeHeaderProps>;\n SyntaxHighlighter: ComponentType<SyntaxHighlighterProps>;\n by_language?: Record<\n string,\n {\n CodeHeader?: ComponentType<CodeHeaderProps>;\n SyntaxHighlighter?: ComponentType<SyntaxHighlighterProps>;\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","import { ComponentType, FC, useMemo } from \"react\";\n\nimport {\n CodeComponent,\n CodeHeaderProps,\n PreComponent,\n SyntaxHighlighterProps,\n} from \"./types\";\nimport { DefaultCodeBlockContent } from \"./defaultComponents\";\n\nexport type CodeBlockProps = {\n language: string;\n code: string;\n components: {\n Pre: PreComponent;\n Code: CodeComponent;\n CodeHeader: ComponentType<CodeHeaderProps>;\n SyntaxHighlighter: ComponentType<SyntaxHighlighterProps>;\n };\n};\n\nexport const DefaultCodeBlock: FC<CodeBlockProps> = ({\n components: { Pre, Code, SyntaxHighlighter, CodeHeader },\n language,\n code,\n}) => {\n const components = useMemo(() => ({ Pre, Code }), [Pre, Code]);\n\n const SH = !!language ? SyntaxHighlighter : DefaultCodeBlockContent;\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","import classNames from \"classnames\";\n\nexport const withDefaultProps =\n <TProps extends { className?: string | undefined }>({\n className,\n ...defaultProps\n }: Partial<TProps>) =>\n ({ className: classNameProp, ...props }: TProps) => {\n return {\n className: classNames(className, classNameProp),\n ...defaultProps,\n ...props,\n } as TProps;\n };\n","import { FC, memo } from \"react\";\nimport { CodeHeader } from \"./code-header\";\nimport classNames from \"classnames\";\nimport {\n MarkdownTextPrimitive,\n MarkdownTextPrimitiveProps,\n} from \"../primitives/MarkdownText\";\nimport {\n withSmoothContextProvider,\n useSmoothStatus,\n} from \"@assistant-ui/react/internal\";\n\nexport type MakeMarkdownTextProps = MarkdownTextPrimitiveProps;\n\nexport const makeMarkdownText = ({\n className,\n components: userComponents,\n ...rest\n}: MakeMarkdownTextProps = {}) => {\n const components = {\n ...userComponents,\n CodeHeader: userComponents?.CodeHeader ?? CodeHeader,\n };\n\n const MarkdownTextImpl: FC = () => {\n const status = useSmoothStatus();\n return (\n <MarkdownTextPrimitive\n components={components}\n {...rest}\n className={classNames(\n \"aui-md-root\",\n status.type === \"running\" && \"aui-md-running\",\n className,\n )}\n />\n );\n };\n MarkdownTextImpl.displayName = \"MarkdownText\";\n\n return memo(withSmoothContextProvider(MarkdownTextImpl), () => true);\n};\n","import { FC } from \"react\";\nimport { CheckIcon, CopyIcon } from \"lucide-react\";\nimport { useThreadConfig } from \"@assistant-ui/react\";\nimport { TooltipIconButton } from \"@assistant-ui/react/internal\";\n\nimport { CodeHeaderProps } from \"../overrides/types\";\nimport { useCopyToClipboard } from \"./useCopyToClipboard\";\n\nexport const CodeHeader: FC<CodeHeaderProps> = ({ language, code }) => {\n const {\n strings: {\n code: { header: { copy: { tooltip = \"Copy\" } = {} } = {} } = {},\n } = {},\n } = useThreadConfig();\n\n const { isCopied, copyToClipboard } = useCopyToClipboard();\n const onCopy = () => {\n if (!code || isCopied) return;\n copyToClipboard(code);\n };\n\n return (\n <div className=\"aui-code-header-root\">\n <span className=\"aui-code-header-language\">{language}</span>\n <TooltipIconButton tooltip={tooltip} onClick={onCopy}>\n {!isCopied && <CopyIcon />}\n {isCopied && <CheckIcon />}\n </TooltipIconButton>\n </div>\n );\n};\n","import { useState } from \"react\";\nimport { UseActionBarCopyProps } from \"@assistant-ui/react\";\n\nexport type useCopyToClipboardProps = UseActionBarCopyProps;\n\nexport const useCopyToClipboard = ({\n copiedDuration = 3000,\n}: useCopyToClipboardProps = {}) => {\n const [isCopied, setIsCopied] = useState<boolean>(false);\n\n const copyToClipboard = (value: string) => {\n if (!value) return;\n\n navigator.clipboard.writeText(value).then(() => {\n setIsCopied(true);\n setTimeout(() => setIsCopied(false), copiedDuration);\n });\n };\n\n return { isCopied, copyToClipboard };\n};\n"],"mappings":"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","names":["import_react","import_jsx_runtime","import_react_use_callback_ref","import_react","import_react","import_jsx_runtime","CodeHeader","classNames","import_jsx_runtime","CodeHeader","import_classnames","import_jsx_runtime","CodeHeader","classNames","ReactMarkdown","import_react","import_react","import_internal","import_react","import_jsx_runtime","import_classnames","import_internal","import_jsx_runtime","classNames"]}
|
package/dist/index.mjs
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
3
|
// src/primitives/MarkdownText.tsx
|
|
4
|
-
import {
|
|
4
|
+
import { useContentPartText } from "@assistant-ui/react";
|
|
5
|
+
import {
|
|
6
|
+
forwardRef
|
|
7
|
+
} from "react";
|
|
5
8
|
import ReactMarkdown from "react-markdown";
|
|
6
9
|
|
|
7
10
|
// src/overrides/PreOverride.tsx
|
|
@@ -121,51 +124,67 @@ var CodeOverride = ({
|
|
|
121
124
|
};
|
|
122
125
|
|
|
123
126
|
// src/primitives/MarkdownText.tsx
|
|
127
|
+
import { useSmooth } from "@assistant-ui/react/internal";
|
|
128
|
+
import classNames2 from "classnames";
|
|
124
129
|
import { jsx as jsx5 } from "react/jsx-runtime";
|
|
125
|
-
var
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
130
|
+
var MarkdownTextPrimitive = forwardRef(
|
|
131
|
+
({
|
|
132
|
+
components: userComponents,
|
|
133
|
+
className,
|
|
134
|
+
containerProps,
|
|
135
|
+
containerComponent: Container = "div",
|
|
136
|
+
...rest
|
|
137
|
+
}, forwardedRef, smooth = true) => {
|
|
138
|
+
const {
|
|
139
|
+
part: { text },
|
|
140
|
+
status
|
|
141
|
+
} = useSmooth(useContentPartText(), smooth);
|
|
142
|
+
const {
|
|
143
|
+
pre = DefaultPre,
|
|
144
|
+
code = DefaultCode,
|
|
145
|
+
SyntaxHighlighter = DefaultCodeBlockContent,
|
|
146
|
+
CodeHeader: CodeHeader2 = DefaultCodeHeader,
|
|
147
|
+
by_language,
|
|
148
|
+
...componentsRest
|
|
149
|
+
} = userComponents ?? {};
|
|
150
|
+
const components = {
|
|
151
|
+
...componentsRest,
|
|
152
|
+
pre: PreOverride,
|
|
153
|
+
code: useCallbackRef2((props) => /* @__PURE__ */ jsx5(
|
|
154
|
+
CodeOverride,
|
|
155
|
+
{
|
|
156
|
+
components: {
|
|
157
|
+
Pre: pre,
|
|
158
|
+
Code: code,
|
|
159
|
+
SyntaxHighlighter,
|
|
160
|
+
CodeHeader: CodeHeader2,
|
|
161
|
+
by_language
|
|
162
|
+
},
|
|
163
|
+
...props
|
|
164
|
+
}
|
|
165
|
+
))
|
|
166
|
+
};
|
|
167
|
+
return /* @__PURE__ */ jsx5(
|
|
168
|
+
Container,
|
|
148
169
|
{
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
by_language
|
|
155
|
-
},
|
|
156
|
-
...props
|
|
170
|
+
"data-status": status.type,
|
|
171
|
+
...containerProps,
|
|
172
|
+
className: classNames2(className, containerProps?.className),
|
|
173
|
+
ref: forwardedRef,
|
|
174
|
+
children: /* @__PURE__ */ jsx5(ReactMarkdown, { components, ...rest, children: text })
|
|
157
175
|
}
|
|
158
|
-
)
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
|
|
176
|
+
);
|
|
177
|
+
}
|
|
178
|
+
);
|
|
179
|
+
MarkdownTextPrimitive.displayName = "MarkdownTextPrimitive";
|
|
162
180
|
|
|
163
181
|
// src/ui/markdown-text.tsx
|
|
164
182
|
import { memo } from "react";
|
|
165
183
|
|
|
166
184
|
// src/ui/code-header.tsx
|
|
167
185
|
import { CheckIcon, CopyIcon } from "lucide-react";
|
|
168
|
-
import { useThreadConfig
|
|
186
|
+
import { useThreadConfig } from "@assistant-ui/react";
|
|
187
|
+
import { TooltipIconButton } from "@assistant-ui/react/internal";
|
|
169
188
|
|
|
170
189
|
// src/ui/useCopyToClipboard.tsx
|
|
171
190
|
import { useState } from "react";
|
|
@@ -185,7 +204,6 @@ var useCopyToClipboard = ({
|
|
|
185
204
|
|
|
186
205
|
// src/ui/code-header.tsx
|
|
187
206
|
import { jsx as jsx6, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
188
|
-
var { TooltipIconButton } = INTERNAL2;
|
|
189
207
|
var CodeHeader = ({ language, code }) => {
|
|
190
208
|
const {
|
|
191
209
|
strings: {
|
|
@@ -207,7 +225,11 @@ var CodeHeader = ({ language, code }) => {
|
|
|
207
225
|
};
|
|
208
226
|
|
|
209
227
|
// src/ui/markdown-text.tsx
|
|
210
|
-
import
|
|
228
|
+
import classNames3 from "classnames";
|
|
229
|
+
import {
|
|
230
|
+
withSmoothContextProvider,
|
|
231
|
+
useSmoothStatus
|
|
232
|
+
} from "@assistant-ui/react/internal";
|
|
211
233
|
import { jsx as jsx7 } from "react/jsx-runtime";
|
|
212
234
|
var makeMarkdownText = ({
|
|
213
235
|
className,
|
|
@@ -218,24 +240,23 @@ var makeMarkdownText = ({
|
|
|
218
240
|
...userComponents,
|
|
219
241
|
CodeHeader: userComponents?.CodeHeader ?? CodeHeader
|
|
220
242
|
};
|
|
221
|
-
const MarkdownTextImpl = (
|
|
243
|
+
const MarkdownTextImpl = () => {
|
|
244
|
+
const status = useSmoothStatus();
|
|
222
245
|
return /* @__PURE__ */ jsx7(
|
|
223
|
-
|
|
246
|
+
MarkdownTextPrimitive,
|
|
224
247
|
{
|
|
225
|
-
|
|
248
|
+
components,
|
|
249
|
+
...rest,
|
|
250
|
+
className: classNames3(
|
|
226
251
|
"aui-md-root",
|
|
227
|
-
status.type === "running" && "aui-md-
|
|
252
|
+
status.type === "running" && "aui-md-running",
|
|
228
253
|
className
|
|
229
|
-
)
|
|
230
|
-
children: /* @__PURE__ */ jsx7(MarkdownTextPrimitive, { components, ...rest })
|
|
254
|
+
)
|
|
231
255
|
}
|
|
232
256
|
);
|
|
233
257
|
};
|
|
234
258
|
MarkdownTextImpl.displayName = "MarkdownText";
|
|
235
|
-
return memo(
|
|
236
|
-
MarkdownTextImpl,
|
|
237
|
-
(prev, next) => prev.status.type === next.status.type
|
|
238
|
-
);
|
|
259
|
+
return memo(withSmoothContextProvider(MarkdownTextImpl), () => true);
|
|
239
260
|
};
|
|
240
261
|
export {
|
|
241
262
|
CodeHeader,
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/primitives/MarkdownText.tsx","../src/overrides/PreOverride.tsx","../src/overrides/defaultComponents.tsx","../src/overrides/CodeOverride.tsx","../src/overrides/CodeBlock.tsx","../src/overrides/withDefaults.tsx","../src/ui/markdown-text.tsx","../src/ui/code-header.tsx","../src/ui/useCopyToClipboard.tsx"],"sourcesContent":["\"use client\";\n\nimport { INTERNAL, useContentPartText } from \"@assistant-ui/react\";\nimport type { ComponentType, FC } 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\";\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 by_language?: Record<\n string,\n {\n CodeHeader?: ComponentType<CodeHeaderProps>;\n SyntaxHighlighter?: ComponentType<SyntaxHighlighterProps>;\n }\n >;\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); // TODO loading indicator disappears before smooth animation ends\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: typeof userComponents = {\n ...componentsRest,\n pre: PreOverride,\n code: useCallbackRef((props) => (\n <CodeOverride\n components={{\n Pre: pre,\n Code: code,\n SyntaxHighlighter,\n CodeHeader,\n by_language,\n }}\n {...props}\n />\n )),\n };\n\n return (\n <ReactMarkdown components={components} {...rest}>\n {smoothText}\n </ReactMarkdown>\n );\n};\n","import { createContext, ComponentPropsWithoutRef, useContext } from \"react\";\nimport { PreComponent } from \"./types\";\n\nexport const PreContext = createContext<Omit<\n ComponentPropsWithoutRef<PreComponent>,\n \"children\"\n> | null>(null);\n\nexport const useIsMarkdownCodeBlock = () => {\n return useContext(PreContext) !== null;\n};\n\nexport const PreOverride: PreComponent = ({ children, ...rest }) => {\n return <PreContext.Provider value={rest}>{children}</PreContext.Provider>;\n};\n","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","import { ComponentPropsWithoutRef, ComponentType, FC, useContext } from \"react\";\nimport { PreContext } from \"./PreOverride\";\nimport {\n CodeComponent,\n CodeHeaderProps,\n PreComponent,\n SyntaxHighlighterProps,\n} from \"./types\";\nimport { DefaultCodeBlock } from \"./CodeBlock\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { withDefaultProps } from \"./withDefaults\";\nimport { DefaultCodeBlockContent } from \"./defaultComponents\";\n\nconst CodeBlockOverride: FC<CodeOverrideProps> = ({\n components: {\n Pre,\n Code,\n SyntaxHighlighter: FallbackSyntaxHighlighter,\n CodeHeader: FallbackCodeHeader,\n by_language = {},\n },\n children,\n ...codeProps\n}) => {\n const preProps = useContext(PreContext)!;\n const getPreProps = withDefaultProps<any>(preProps);\n const WrappedPre: PreComponent = useCallbackRef((props) => (\n <Pre {...getPreProps(props)} />\n ));\n\n const getCodeProps = withDefaultProps<any>(codeProps);\n const WrappedCode: CodeComponent = useCallbackRef((props) => (\n <Code {...getCodeProps(props)} />\n ));\n\n const language = /language-(\\w+)/.exec(codeProps.className || \"\")?.[1] ?? \"\";\n\n // if the code content is not string (due to rehype plugins), return a default code block\n if (typeof children !== \"string\") {\n return (\n <DefaultCodeBlockContent\n components={{ Pre: WrappedPre, Code: WrappedCode }}\n code={children}\n />\n );\n }\n\n const SyntaxHighlighter: ComponentType<SyntaxHighlighterProps> =\n by_language[language]?.SyntaxHighlighter ?? FallbackSyntaxHighlighter;\n\n const CodeHeader: ComponentType<CodeHeaderProps> =\n by_language[language]?.CodeHeader ?? FallbackCodeHeader;\n\n return (\n <DefaultCodeBlock\n components={{\n Pre: WrappedPre,\n Code: WrappedCode,\n SyntaxHighlighter,\n CodeHeader,\n }}\n language={language || \"unknown\"}\n code={children}\n />\n );\n};\n\nexport type CodeOverrideProps = ComponentPropsWithoutRef<CodeComponent> & {\n components: {\n Pre: PreComponent;\n Code: CodeComponent;\n CodeHeader: ComponentType<CodeHeaderProps>;\n SyntaxHighlighter: ComponentType<SyntaxHighlighterProps>;\n by_language?: Record<\n string,\n {\n CodeHeader?: ComponentType<CodeHeaderProps>;\n SyntaxHighlighter?: ComponentType<SyntaxHighlighterProps>;\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","import { ComponentType, FC, useMemo } from \"react\";\n\nimport {\n CodeComponent,\n CodeHeaderProps,\n PreComponent,\n SyntaxHighlighterProps,\n} from \"./types\";\nimport { DefaultCodeBlockContent } from \"./defaultComponents\";\n\nexport type CodeBlockProps = {\n language: string;\n code: string;\n components: {\n Pre: PreComponent;\n Code: CodeComponent;\n CodeHeader: ComponentType<CodeHeaderProps>;\n SyntaxHighlighter: ComponentType<SyntaxHighlighterProps>;\n };\n};\n\nexport const DefaultCodeBlock: FC<CodeBlockProps> = ({\n components: { Pre, Code, SyntaxHighlighter, CodeHeader },\n language,\n code,\n}) => {\n const components = useMemo(() => ({ Pre, Code }), [Pre, Code]);\n\n const SH = !!language ? SyntaxHighlighter : DefaultCodeBlockContent;\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","import classNames from \"classnames\";\n\nexport const withDefaultProps =\n <TProps extends { className?: string | undefined }>({\n className,\n ...defaultProps\n }: Partial<TProps>) =>\n ({ className: classNameProp, ...props }: TProps) => {\n return {\n className: classNames(className, classNameProp),\n ...defaultProps,\n ...props,\n } as TProps;\n };\n","import { TextContentPartProps } from \"@assistant-ui/react\";\nimport { FC, memo } from \"react\";\nimport { CodeHeader } from \"./code-header\";\nimport classNames from \"classnames\";\nimport {\n MarkdownTextPrimitive,\n MarkdownTextPrimitiveProps,\n} from \"../primitives/MarkdownText\";\n\nexport type MakeMarkdownTextProps = MarkdownTextPrimitiveProps;\n\nexport const makeMarkdownText = ({\n className,\n components: userComponents,\n ...rest\n}: MakeMarkdownTextProps = {}) => {\n const components = {\n ...userComponents,\n CodeHeader: userComponents?.CodeHeader ?? CodeHeader,\n };\n\n const MarkdownTextImpl: FC<TextContentPartProps> = ({ status }) => {\n return (\n <div\n className={classNames(\n \"aui-md-root\",\n status.type === \"running\" && \"aui-md-in-progress\",\n className,\n )}\n >\n <MarkdownTextPrimitive components={components} {...rest} />\n </div>\n );\n };\n MarkdownTextImpl.displayName = \"MarkdownText\";\n\n return memo(\n MarkdownTextImpl,\n (prev, next) => prev.status.type === next.status.type,\n );\n};\n","import { FC } from \"react\";\nimport { CheckIcon, CopyIcon } from \"lucide-react\";\nimport { useThreadConfig, INTERNAL } from \"@assistant-ui/react\";\n\nimport { CodeHeaderProps } from \"../overrides/types\";\nimport { useCopyToClipboard } from \"./useCopyToClipboard\";\n\nconst { TooltipIconButton } = INTERNAL;\n\nexport const CodeHeader: FC<CodeHeaderProps> = ({ language, code }) => {\n const {\n strings: {\n code: { header: { copy: { tooltip = \"Copy\" } = {} } = {} } = {},\n } = {},\n } = useThreadConfig();\n\n const { isCopied, copyToClipboard } = useCopyToClipboard();\n const onCopy = () => {\n if (!code || isCopied) return;\n copyToClipboard(code);\n };\n\n return (\n <div className=\"aui-code-header-root\">\n <span className=\"aui-code-header-language\">{language}</span>\n <TooltipIconButton tooltip={tooltip} onClick={onCopy}>\n {!isCopied && <CopyIcon />}\n {isCopied && <CheckIcon />}\n </TooltipIconButton>\n </div>\n );\n};\n","import { useState } from \"react\";\nimport { UseActionBarCopyProps } from \"@assistant-ui/react\";\n\nexport type useCopyToClipboardProps = UseActionBarCopyProps;\n\nexport const useCopyToClipboard = ({\n copiedDuration = 3000,\n}: useCopyToClipboardProps = {}) => {\n const [isCopied, setIsCopied] = useState<boolean>(false);\n\n const copyToClipboard = (value: string) => {\n if (!value) return;\n\n navigator.clipboard.writeText(value).then(() => {\n setIsCopied(true);\n setTimeout(() => setIsCopied(false), copiedDuration);\n });\n };\n\n return { isCopied, copyToClipboard };\n};\n"],"mappings":"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","names":["jsx","useCallbackRef","useContext","jsx","CodeHeader","jsx","useContext","CodeHeader","jsx","CodeHeader","useCallbackRef","INTERNAL","jsx","jsxs","INTERNAL","classNames","jsx","classNames"]}
|
|
1
|
+
{"version":3,"sources":["../src/primitives/MarkdownText.tsx","../src/overrides/PreOverride.tsx","../src/overrides/defaultComponents.tsx","../src/overrides/CodeOverride.tsx","../src/overrides/CodeBlock.tsx","../src/overrides/withDefaults.tsx","../src/ui/markdown-text.tsx","../src/ui/code-header.tsx","../src/ui/useCopyToClipboard.tsx"],"sourcesContent":["\"use client\";\n\nimport { useContentPartText } from \"@assistant-ui/react\";\nimport {\n ElementRef,\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 { useSmooth } from \"@assistant-ui/react/internal\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport classNames from \"classnames\";\n\ntype MarkdownTextPrimitiveElement = ElementRef<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\">;\n containerComponent?: ElementType;\n components?: NonNullable<Options[\"components\"]> & {\n SyntaxHighlighter?: ComponentType<SyntaxHighlighterProps>;\n CodeHeader?: ComponentType<CodeHeaderProps>;\n by_language?: Record<\n string,\n {\n CodeHeader?: ComponentType<CodeHeaderProps>;\n SyntaxHighlighter?: ComponentType<SyntaxHighlighterProps>;\n }\n >;\n };\n smooth?: boolean;\n};\n\nexport const MarkdownTextPrimitive: ForwardRefExoticComponent<MarkdownTextPrimitiveProps> &\n RefAttributes<MarkdownTextPrimitiveElement> = forwardRef<\n MarkdownTextPrimitiveElement,\n MarkdownTextPrimitiveProps\n>(\n (\n {\n components: userComponents,\n className,\n containerProps,\n containerComponent: Container = \"div\",\n ...rest\n },\n forwardedRef,\n smooth = true,\n ) => {\n const {\n part: { text },\n status,\n } = 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: typeof userComponents = {\n ...componentsRest,\n pre: PreOverride,\n code: useCallbackRef((props) => (\n <CodeOverride\n components={{\n Pre: pre,\n Code: code,\n SyntaxHighlighter,\n CodeHeader,\n by_language,\n }}\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","import { createContext, ComponentPropsWithoutRef, useContext } from \"react\";\nimport { PreComponent } from \"./types\";\n\nexport const PreContext = createContext<Omit<\n ComponentPropsWithoutRef<PreComponent>,\n \"children\"\n> | null>(null);\n\nexport const useIsMarkdownCodeBlock = () => {\n return useContext(PreContext) !== null;\n};\n\nexport const PreOverride: PreComponent = ({ children, ...rest }) => {\n return <PreContext.Provider value={rest}>{children}</PreContext.Provider>;\n};\n","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","import { ComponentPropsWithoutRef, ComponentType, FC, useContext } from \"react\";\nimport { PreContext } from \"./PreOverride\";\nimport {\n CodeComponent,\n CodeHeaderProps,\n PreComponent,\n SyntaxHighlighterProps,\n} from \"./types\";\nimport { DefaultCodeBlock } from \"./CodeBlock\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { withDefaultProps } from \"./withDefaults\";\nimport { DefaultCodeBlockContent } from \"./defaultComponents\";\n\nconst CodeBlockOverride: FC<CodeOverrideProps> = ({\n components: {\n Pre,\n Code,\n SyntaxHighlighter: FallbackSyntaxHighlighter,\n CodeHeader: FallbackCodeHeader,\n by_language = {},\n },\n children,\n ...codeProps\n}) => {\n const preProps = useContext(PreContext)!;\n const getPreProps = withDefaultProps<any>(preProps);\n const WrappedPre: PreComponent = useCallbackRef((props) => (\n <Pre {...getPreProps(props)} />\n ));\n\n const getCodeProps = withDefaultProps<any>(codeProps);\n const WrappedCode: CodeComponent = useCallbackRef((props) => (\n <Code {...getCodeProps(props)} />\n ));\n\n const language = /language-(\\w+)/.exec(codeProps.className || \"\")?.[1] ?? \"\";\n\n // if the code content is not string (due to rehype plugins), return a default code block\n if (typeof children !== \"string\") {\n return (\n <DefaultCodeBlockContent\n components={{ Pre: WrappedPre, Code: WrappedCode }}\n code={children}\n />\n );\n }\n\n const SyntaxHighlighter: ComponentType<SyntaxHighlighterProps> =\n by_language[language]?.SyntaxHighlighter ?? FallbackSyntaxHighlighter;\n\n const CodeHeader: ComponentType<CodeHeaderProps> =\n by_language[language]?.CodeHeader ?? FallbackCodeHeader;\n\n return (\n <DefaultCodeBlock\n components={{\n Pre: WrappedPre,\n Code: WrappedCode,\n SyntaxHighlighter,\n CodeHeader,\n }}\n language={language || \"unknown\"}\n code={children}\n />\n );\n};\n\nexport type CodeOverrideProps = ComponentPropsWithoutRef<CodeComponent> & {\n components: {\n Pre: PreComponent;\n Code: CodeComponent;\n CodeHeader: ComponentType<CodeHeaderProps>;\n SyntaxHighlighter: ComponentType<SyntaxHighlighterProps>;\n by_language?: Record<\n string,\n {\n CodeHeader?: ComponentType<CodeHeaderProps>;\n SyntaxHighlighter?: ComponentType<SyntaxHighlighterProps>;\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","import { ComponentType, FC, useMemo } from \"react\";\n\nimport {\n CodeComponent,\n CodeHeaderProps,\n PreComponent,\n SyntaxHighlighterProps,\n} from \"./types\";\nimport { DefaultCodeBlockContent } from \"./defaultComponents\";\n\nexport type CodeBlockProps = {\n language: string;\n code: string;\n components: {\n Pre: PreComponent;\n Code: CodeComponent;\n CodeHeader: ComponentType<CodeHeaderProps>;\n SyntaxHighlighter: ComponentType<SyntaxHighlighterProps>;\n };\n};\n\nexport const DefaultCodeBlock: FC<CodeBlockProps> = ({\n components: { Pre, Code, SyntaxHighlighter, CodeHeader },\n language,\n code,\n}) => {\n const components = useMemo(() => ({ Pre, Code }), [Pre, Code]);\n\n const SH = !!language ? SyntaxHighlighter : DefaultCodeBlockContent;\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","import classNames from \"classnames\";\n\nexport const withDefaultProps =\n <TProps extends { className?: string | undefined }>({\n className,\n ...defaultProps\n }: Partial<TProps>) =>\n ({ className: classNameProp, ...props }: TProps) => {\n return {\n className: classNames(className, classNameProp),\n ...defaultProps,\n ...props,\n } as TProps;\n };\n","import { FC, memo } from \"react\";\nimport { CodeHeader } from \"./code-header\";\nimport classNames from \"classnames\";\nimport {\n MarkdownTextPrimitive,\n MarkdownTextPrimitiveProps,\n} from \"../primitives/MarkdownText\";\nimport {\n withSmoothContextProvider,\n useSmoothStatus,\n} from \"@assistant-ui/react/internal\";\n\nexport type MakeMarkdownTextProps = MarkdownTextPrimitiveProps;\n\nexport const makeMarkdownText = ({\n className,\n components: userComponents,\n ...rest\n}: MakeMarkdownTextProps = {}) => {\n const components = {\n ...userComponents,\n CodeHeader: userComponents?.CodeHeader ?? CodeHeader,\n };\n\n const MarkdownTextImpl: FC = () => {\n const status = useSmoothStatus();\n return (\n <MarkdownTextPrimitive\n components={components}\n {...rest}\n className={classNames(\n \"aui-md-root\",\n status.type === \"running\" && \"aui-md-running\",\n className,\n )}\n />\n );\n };\n MarkdownTextImpl.displayName = \"MarkdownText\";\n\n return memo(withSmoothContextProvider(MarkdownTextImpl), () => true);\n};\n","import { FC } from \"react\";\nimport { CheckIcon, CopyIcon } from \"lucide-react\";\nimport { useThreadConfig } from \"@assistant-ui/react\";\nimport { TooltipIconButton } from \"@assistant-ui/react/internal\";\n\nimport { CodeHeaderProps } from \"../overrides/types\";\nimport { useCopyToClipboard } from \"./useCopyToClipboard\";\n\nexport const CodeHeader: FC<CodeHeaderProps> = ({ language, code }) => {\n const {\n strings: {\n code: { header: { copy: { tooltip = \"Copy\" } = {} } = {} } = {},\n } = {},\n } = useThreadConfig();\n\n const { isCopied, copyToClipboard } = useCopyToClipboard();\n const onCopy = () => {\n if (!code || isCopied) return;\n copyToClipboard(code);\n };\n\n return (\n <div className=\"aui-code-header-root\">\n <span className=\"aui-code-header-language\">{language}</span>\n <TooltipIconButton tooltip={tooltip} onClick={onCopy}>\n {!isCopied && <CopyIcon />}\n {isCopied && <CheckIcon />}\n </TooltipIconButton>\n </div>\n );\n};\n","import { useState } from \"react\";\nimport { UseActionBarCopyProps } from \"@assistant-ui/react\";\n\nexport type useCopyToClipboardProps = UseActionBarCopyProps;\n\nexport const useCopyToClipboard = ({\n copiedDuration = 3000,\n}: useCopyToClipboardProps = {}) => {\n const [isCopied, setIsCopied] = useState<boolean>(false);\n\n const copyToClipboard = (value: string) => {\n if (!value) return;\n\n navigator.clipboard.writeText(value).then(() => {\n setIsCopied(true);\n setTimeout(() => setIsCopied(false), copiedDuration);\n });\n };\n\n return { isCopied, copyToClipboard };\n};\n"],"mappings":"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","names":["jsx","useCallbackRef","useContext","jsx","CodeHeader","jsx","useContext","CodeHeader","classNames","jsx","CodeHeader","useCallbackRef","jsx","jsxs","classNames","jsx","classNames"]}
|
package/dist/styles/markdown.css
CHANGED
|
@@ -4,12 +4,12 @@
|
|
|
4
4
|
opacity: .5;
|
|
5
5
|
}
|
|
6
6
|
}
|
|
7
|
-
:where(.aui-md-
|
|
8
|
-
:where(.aui-md-
|
|
9
|
-
:where(.aui-md-
|
|
10
|
-
:where(.aui-md-
|
|
11
|
-
:where(.aui-md-
|
|
12
|
-
:where(.aui-md-
|
|
7
|
+
:where(.aui-md-running):empty::after,
|
|
8
|
+
:where(.aui-md-running) > :where(:not(ol):not(ul):not(pre)):last-child::after,
|
|
9
|
+
:where(.aui-md-running) > pre:last-child code::after,
|
|
10
|
+
:where(.aui-md-running) > :where(:is(ol, ul):last-child) > :where(li:last-child:not(:has(* > li)))::after,
|
|
11
|
+
:where(.aui-md-running) > :where(:is(ol, ul):last-child) > :where(li:last-child) > :where(:is(ol, ul):last-child) > :where(li:last-child:not(:has(* > li)))::after,
|
|
12
|
+
:where(.aui-md-running) > :where(:is(ol, ul):last-child) > :where(li:last-child) > :where(:is(ol, ul):last-child) > :where(li:last-child) > :where(:is(ol, ul):last-child) > :where(li:last-child)::after {
|
|
13
13
|
animation: aui-pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
|
|
14
14
|
font-family:
|
|
15
15
|
ui-sans-serif,
|
|
@@ -22,23 +22,23 @@
|
|
|
22
22
|
--aui-content: "\25cf";
|
|
23
23
|
content: var(--aui-content);
|
|
24
24
|
}
|
|
25
|
-
:where(.aui-md-
|
|
26
|
-
:where(.aui-md-
|
|
27
|
-
:where(.aui-md-
|
|
28
|
-
:where(.aui-md-
|
|
29
|
-
:where(.aui-md-
|
|
30
|
-
:where(.aui-md-
|
|
25
|
+
:where(.aui-md-running):empty:where([dir=ltr], [dir=ltr] *)::after,
|
|
26
|
+
:where(.aui-md-running) > :where(:not(ol):not(ul):not(pre)):last-child:where([dir=ltr], [dir=ltr] *)::after,
|
|
27
|
+
:where(.aui-md-running) > pre:last-child code:where([dir=ltr], [dir=ltr] *)::after,
|
|
28
|
+
:where(.aui-md-running) > :where(:is(ol, ul):last-child) > :where(li:last-child:not(:has(* > li))):where([dir=ltr], [dir=ltr] *)::after,
|
|
29
|
+
:where(.aui-md-running) > :where(:is(ol, ul):last-child) > :where(li:last-child) > :where(:is(ol, ul):last-child) > :where(li:last-child:not(:has(* > li))):where([dir=ltr], [dir=ltr] *)::after,
|
|
30
|
+
:where(.aui-md-running) > :where(:is(ol, ul):last-child) > :where(li:last-child) > :where(:is(ol, ul):last-child) > :where(li:last-child) > :where(:is(ol, ul):last-child) > :where(li:last-child):where([dir=ltr], [dir=ltr] *)::after {
|
|
31
31
|
margin-left: 0.25rem;
|
|
32
32
|
}
|
|
33
|
-
:where(.aui-md-
|
|
34
|
-
:where(.aui-md-
|
|
35
|
-
:where(.aui-md-
|
|
36
|
-
:where(.aui-md-
|
|
37
|
-
:where(.aui-md-
|
|
38
|
-
:where(.aui-md-
|
|
33
|
+
:where(.aui-md-running):empty:where([dir=rtl], [dir=rtl] *)::after,
|
|
34
|
+
:where(.aui-md-running) > :where(:not(ol):not(ul):not(pre)):last-child:where([dir=rtl], [dir=rtl] *)::after,
|
|
35
|
+
:where(.aui-md-running) > pre:last-child code:where([dir=rtl], [dir=rtl] *)::after,
|
|
36
|
+
:where(.aui-md-running) > :where(:is(ol, ul):last-child) > :where(li:last-child:not(:has(* > li))):where([dir=rtl], [dir=rtl] *)::after,
|
|
37
|
+
:where(.aui-md-running) > :where(:is(ol, ul):last-child) > :where(li:last-child) > :where(:is(ol, ul):last-child) > :where(li:last-child:not(:has(* > li))):where([dir=rtl], [dir=rtl] *)::after,
|
|
38
|
+
:where(.aui-md-running) > :where(:is(ol, ul):last-child) > :where(li:last-child) > :where(:is(ol, ul):last-child) > :where(li:last-child) > :where(:is(ol, ul):last-child) > :where(li:last-child):where([dir=rtl], [dir=rtl] *)::after {
|
|
39
39
|
margin-right: 0.25rem;
|
|
40
40
|
}
|
|
41
|
-
|
|
41
|
+
.aui-md-root h1 {
|
|
42
42
|
margin-bottom: 2rem;
|
|
43
43
|
scroll-margin: 5rem;
|
|
44
44
|
font-size: 2.25rem;
|
|
@@ -46,10 +46,10 @@
|
|
|
46
46
|
font-weight: 800;
|
|
47
47
|
letter-spacing: -0.025em;
|
|
48
48
|
}
|
|
49
|
-
|
|
49
|
+
.aui-md-root h1:last-child {
|
|
50
50
|
margin-bottom: 0px;
|
|
51
51
|
}
|
|
52
|
-
|
|
52
|
+
.aui-md-root h2 {
|
|
53
53
|
margin-bottom: 1rem;
|
|
54
54
|
margin-top: 2rem;
|
|
55
55
|
scroll-margin: 5rem;
|
|
@@ -58,13 +58,13 @@
|
|
|
58
58
|
font-weight: 600;
|
|
59
59
|
letter-spacing: -0.025em;
|
|
60
60
|
}
|
|
61
|
-
|
|
61
|
+
.aui-md-root h2:first-child {
|
|
62
62
|
margin-top: 0px;
|
|
63
63
|
}
|
|
64
|
-
|
|
64
|
+
.aui-md-root h2:last-child {
|
|
65
65
|
margin-bottom: 0px;
|
|
66
66
|
}
|
|
67
|
-
|
|
67
|
+
.aui-md-root h3 {
|
|
68
68
|
margin-bottom: 1rem;
|
|
69
69
|
margin-top: 1.5rem;
|
|
70
70
|
scroll-margin: 5rem;
|
|
@@ -73,13 +73,13 @@
|
|
|
73
73
|
font-weight: 600;
|
|
74
74
|
letter-spacing: -0.025em;
|
|
75
75
|
}
|
|
76
|
-
|
|
76
|
+
.aui-md-root h3:first-child {
|
|
77
77
|
margin-top: 0px;
|
|
78
78
|
}
|
|
79
|
-
|
|
79
|
+
.aui-md-root h3:last-child {
|
|
80
80
|
margin-bottom: 0px;
|
|
81
81
|
}
|
|
82
|
-
|
|
82
|
+
.aui-md-root h4 {
|
|
83
83
|
margin-bottom: 1rem;
|
|
84
84
|
margin-top: 1.5rem;
|
|
85
85
|
scroll-margin: 5rem;
|
|
@@ -88,82 +88,82 @@
|
|
|
88
88
|
font-weight: 600;
|
|
89
89
|
letter-spacing: -0.025em;
|
|
90
90
|
}
|
|
91
|
-
|
|
91
|
+
.aui-md-root h4:first-child {
|
|
92
92
|
margin-top: 0px;
|
|
93
93
|
}
|
|
94
|
-
|
|
94
|
+
.aui-md-root h4:last-child {
|
|
95
95
|
margin-bottom: 0px;
|
|
96
96
|
}
|
|
97
|
-
|
|
97
|
+
.aui-md-root h5 {
|
|
98
98
|
margin-top: 1rem;
|
|
99
99
|
margin-bottom: 1rem;
|
|
100
100
|
font-size: 1.125rem;
|
|
101
101
|
line-height: 1.75rem;
|
|
102
102
|
font-weight: 600;
|
|
103
103
|
}
|
|
104
|
-
|
|
104
|
+
.aui-md-root h5:first-child {
|
|
105
105
|
margin-top: 0px;
|
|
106
106
|
}
|
|
107
|
-
|
|
107
|
+
.aui-md-root h5:last-child {
|
|
108
108
|
margin-bottom: 0px;
|
|
109
109
|
}
|
|
110
|
-
|
|
110
|
+
.aui-md-root h6 {
|
|
111
111
|
margin-top: 1rem;
|
|
112
112
|
margin-bottom: 1rem;
|
|
113
113
|
font-weight: 600;
|
|
114
114
|
}
|
|
115
|
-
|
|
115
|
+
.aui-md-root h6:first-child {
|
|
116
116
|
margin-top: 0px;
|
|
117
117
|
}
|
|
118
|
-
|
|
118
|
+
.aui-md-root h6:last-child {
|
|
119
119
|
margin-bottom: 0px;
|
|
120
120
|
}
|
|
121
|
-
|
|
121
|
+
.aui-md-root p {
|
|
122
122
|
margin-bottom: 1.25rem;
|
|
123
123
|
margin-top: 1.25rem;
|
|
124
124
|
line-height: 1.75rem;
|
|
125
125
|
}
|
|
126
|
-
|
|
126
|
+
.aui-md-root p:first-child {
|
|
127
127
|
margin-top: 0px;
|
|
128
128
|
}
|
|
129
|
-
|
|
129
|
+
.aui-md-root p:last-child {
|
|
130
130
|
margin-bottom: 0px;
|
|
131
131
|
}
|
|
132
|
-
|
|
132
|
+
.aui-md-root a {
|
|
133
133
|
font-weight: 500;
|
|
134
134
|
color: hsl(var(--aui-primary));
|
|
135
135
|
text-decoration-line: underline;
|
|
136
136
|
text-underline-offset: 4px;
|
|
137
137
|
}
|
|
138
|
-
|
|
138
|
+
.aui-md-root blockquote {
|
|
139
139
|
border-left-width: 2px;
|
|
140
140
|
padding-left: 1.5rem;
|
|
141
141
|
font-style: italic;
|
|
142
142
|
}
|
|
143
|
-
|
|
143
|
+
.aui-md-root ul {
|
|
144
144
|
margin-top: 1.25rem;
|
|
145
145
|
margin-bottom: 1.25rem;
|
|
146
146
|
margin-left: 1.5rem;
|
|
147
147
|
list-style-type: disc;
|
|
148
148
|
}
|
|
149
|
-
|
|
149
|
+
.aui-md-root ul > li {
|
|
150
150
|
margin-top: 0.5rem;
|
|
151
151
|
}
|
|
152
|
-
|
|
152
|
+
.aui-md-root ol {
|
|
153
153
|
margin-top: 1.25rem;
|
|
154
154
|
margin-bottom: 1.25rem;
|
|
155
155
|
margin-left: 1.5rem;
|
|
156
156
|
list-style-type: decimal;
|
|
157
157
|
}
|
|
158
|
-
|
|
158
|
+
.aui-md-root ol > li {
|
|
159
159
|
margin-top: 0.5rem;
|
|
160
160
|
}
|
|
161
|
-
|
|
161
|
+
.aui-md-root hr {
|
|
162
162
|
margin-top: 1.25rem;
|
|
163
163
|
margin-bottom: 1.25rem;
|
|
164
164
|
border-bottom-width: 1px;
|
|
165
165
|
}
|
|
166
|
-
|
|
166
|
+
.aui-md-root table {
|
|
167
167
|
margin-top: 1.25rem;
|
|
168
168
|
margin-bottom: 1.25rem;
|
|
169
169
|
width: 100%;
|
|
@@ -173,7 +173,7 @@
|
|
|
173
173
|
border-spacing: var(--aui-border-spacing-x) var(--aui-border-spacing-y);
|
|
174
174
|
overflow-y: auto;
|
|
175
175
|
}
|
|
176
|
-
|
|
176
|
+
.aui-md-root th {
|
|
177
177
|
background-color: hsl(var(--aui-muted));
|
|
178
178
|
padding-left: 1rem;
|
|
179
179
|
padding-right: 1rem;
|
|
@@ -182,19 +182,19 @@
|
|
|
182
182
|
text-align: left;
|
|
183
183
|
font-weight: 700;
|
|
184
184
|
}
|
|
185
|
-
|
|
185
|
+
.aui-md-root th:first-child {
|
|
186
186
|
border-top-left-radius: var(--aui-radius);
|
|
187
187
|
}
|
|
188
|
-
|
|
188
|
+
.aui-md-root th:last-child {
|
|
189
189
|
border-top-right-radius: var(--aui-radius);
|
|
190
190
|
}
|
|
191
|
-
|
|
191
|
+
.aui-md-root th[align=center] {
|
|
192
192
|
text-align: center;
|
|
193
193
|
}
|
|
194
|
-
|
|
194
|
+
.aui-md-root th[align=right] {
|
|
195
195
|
text-align: right;
|
|
196
196
|
}
|
|
197
|
-
|
|
197
|
+
.aui-md-root td {
|
|
198
198
|
border-bottom-width: 1px;
|
|
199
199
|
border-left-width: 1px;
|
|
200
200
|
padding-left: 1rem;
|
|
@@ -203,35 +203,35 @@
|
|
|
203
203
|
padding-bottom: 0.5rem;
|
|
204
204
|
text-align: left;
|
|
205
205
|
}
|
|
206
|
-
|
|
206
|
+
.aui-md-root td:last-child {
|
|
207
207
|
border-right-width: 1px;
|
|
208
208
|
}
|
|
209
|
-
|
|
209
|
+
.aui-md-root td[align=center] {
|
|
210
210
|
text-align: center;
|
|
211
211
|
}
|
|
212
|
-
|
|
212
|
+
.aui-md-root td[align=right] {
|
|
213
213
|
text-align: right;
|
|
214
214
|
}
|
|
215
|
-
|
|
215
|
+
.aui-md-root tr {
|
|
216
216
|
margin: 0px;
|
|
217
217
|
border-bottom-width: 1px;
|
|
218
218
|
padding: 0px;
|
|
219
219
|
}
|
|
220
|
-
|
|
220
|
+
.aui-md-root tr:first-child {
|
|
221
221
|
border-top-width: 1px;
|
|
222
222
|
}
|
|
223
|
-
|
|
223
|
+
.aui-md-root tr:last-child > td:first-child {
|
|
224
224
|
border-bottom-left-radius: var(--aui-radius);
|
|
225
225
|
}
|
|
226
|
-
|
|
226
|
+
.aui-md-root tr:last-child > td:last-child {
|
|
227
227
|
border-bottom-right-radius: var(--aui-radius);
|
|
228
228
|
}
|
|
229
|
-
|
|
229
|
+
.aui-md-root sup > a {
|
|
230
230
|
font-size: 0.75rem;
|
|
231
231
|
line-height: 1rem;
|
|
232
232
|
text-decoration-line: none;
|
|
233
233
|
}
|
|
234
|
-
|
|
234
|
+
.aui-md-root pre {
|
|
235
235
|
overflow-x: auto;
|
|
236
236
|
border-bottom-right-radius: var(--aui-radius);
|
|
237
237
|
border-bottom-left-radius: var(--aui-radius);
|
|
@@ -240,8 +240,8 @@
|
|
|
240
240
|
--aui-text-opacity: 1;
|
|
241
241
|
color: rgb(255 255 255 / var(--aui-text-opacity));
|
|
242
242
|
}
|
|
243
|
-
|
|
244
|
-
|
|
243
|
+
.aui-md-root > code,
|
|
244
|
+
.aui-md-root :not(:where(pre)) code {
|
|
245
245
|
border-radius: 0.25rem;
|
|
246
246
|
border-width: 1px;
|
|
247
247
|
background-color: hsl(var(--aui-muted));
|
|
@@ -1,107 +1,100 @@
|
|
|
1
|
-
/*
|
|
2
|
-
:where(.aui-md-
|
|
3
|
-
:where(.aui-md-
|
|
4
|
-
:where(.aui-md-
|
|
5
|
-
:where(
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
)
|
|
10
|
-
:where(
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
)
|
|
17
|
-
:where(
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
> li:last-child
|
|
21
|
-
> :is(ol, ul):last-child
|
|
22
|
-
> li:last-child
|
|
23
|
-
> :is(ol, ul):last-child
|
|
24
|
-
> li:last-child
|
|
25
|
-
)::after {
|
|
1
|
+
/* running indicator */
|
|
2
|
+
:where(.aui-md-running):empty::after,
|
|
3
|
+
:where(.aui-md-running) > :where(:not(ol):not(ul):not(pre)):last-child::after,
|
|
4
|
+
:where(.aui-md-running) > pre:last-child code::after,
|
|
5
|
+
:where(.aui-md-running)
|
|
6
|
+
> :where(:is(ol, ul):last-child)
|
|
7
|
+
> :where(li:last-child:not(:has(* > li)))::after,
|
|
8
|
+
:where(.aui-md-running)
|
|
9
|
+
> :where(:is(ol, ul):last-child)
|
|
10
|
+
> :where(li:last-child)
|
|
11
|
+
> :where(:is(ol, ul):last-child)
|
|
12
|
+
> :where(li:last-child:not(:has(* > li)))::after,
|
|
13
|
+
:where(.aui-md-running)
|
|
14
|
+
> :where(:is(ol, ul):last-child)
|
|
15
|
+
> :where(li:last-child)
|
|
16
|
+
> :where(:is(ol, ul):last-child)
|
|
17
|
+
> :where(li:last-child)
|
|
18
|
+
> :where(:is(ol, ul):last-child)
|
|
19
|
+
> :where(li:last-child)::after {
|
|
26
20
|
@apply animate-pulse font-sans content-['\25CF'] ltr:ml-1 rtl:mr-1;
|
|
27
21
|
}
|
|
28
|
-
|
|
29
22
|
/* typography */
|
|
30
23
|
|
|
31
|
-
|
|
24
|
+
.aui-md-root h1 {
|
|
32
25
|
@apply mb-8 scroll-m-20 text-4xl font-extrabold tracking-tight last:mb-0;
|
|
33
26
|
}
|
|
34
27
|
|
|
35
|
-
|
|
28
|
+
.aui-md-root h2 {
|
|
36
29
|
@apply mb-4 mt-8 scroll-m-20 text-3xl font-semibold tracking-tight first:mt-0 last:mb-0;
|
|
37
30
|
}
|
|
38
31
|
|
|
39
|
-
|
|
32
|
+
.aui-md-root h3 {
|
|
40
33
|
@apply mb-4 mt-6 scroll-m-20 text-2xl font-semibold tracking-tight first:mt-0 last:mb-0;
|
|
41
34
|
}
|
|
42
35
|
|
|
43
|
-
|
|
36
|
+
.aui-md-root h4 {
|
|
44
37
|
@apply mb-4 mt-6 scroll-m-20 text-xl font-semibold tracking-tight first:mt-0 last:mb-0;
|
|
45
38
|
}
|
|
46
39
|
|
|
47
|
-
|
|
40
|
+
.aui-md-root h5 {
|
|
48
41
|
@apply my-4 text-lg font-semibold first:mt-0 last:mb-0;
|
|
49
42
|
}
|
|
50
43
|
|
|
51
|
-
|
|
44
|
+
.aui-md-root h6 {
|
|
52
45
|
@apply my-4 font-semibold first:mt-0 last:mb-0;
|
|
53
46
|
}
|
|
54
47
|
|
|
55
|
-
|
|
48
|
+
.aui-md-root p {
|
|
56
49
|
@apply mb-5 mt-5 leading-7 first:mt-0 last:mb-0;
|
|
57
50
|
}
|
|
58
51
|
|
|
59
|
-
|
|
52
|
+
.aui-md-root a {
|
|
60
53
|
@apply text-aui-primary font-medium underline underline-offset-4;
|
|
61
54
|
}
|
|
62
55
|
|
|
63
|
-
|
|
56
|
+
.aui-md-root blockquote {
|
|
64
57
|
@apply border-l-2 pl-6 italic;
|
|
65
58
|
}
|
|
66
59
|
|
|
67
|
-
|
|
60
|
+
.aui-md-root ul {
|
|
68
61
|
@apply my-5 ml-6 list-disc [&>li]:mt-2;
|
|
69
62
|
}
|
|
70
63
|
|
|
71
|
-
|
|
64
|
+
.aui-md-root ol {
|
|
72
65
|
@apply my-5 ml-6 list-decimal [&>li]:mt-2;
|
|
73
66
|
}
|
|
74
67
|
|
|
75
|
-
|
|
68
|
+
.aui-md-root hr {
|
|
76
69
|
@apply my-5 border-b;
|
|
77
70
|
}
|
|
78
71
|
|
|
79
|
-
|
|
72
|
+
.aui-md-root table {
|
|
80
73
|
@apply my-5 w-full border-separate border-spacing-0 overflow-y-auto;
|
|
81
74
|
}
|
|
82
75
|
|
|
83
|
-
|
|
76
|
+
.aui-md-root th {
|
|
84
77
|
@apply bg-aui-muted px-4 py-2 text-left font-bold first:rounded-tl-lg last:rounded-tr-lg [&[align=center]]:text-center [&[align=right]]:text-right;
|
|
85
78
|
}
|
|
86
79
|
|
|
87
|
-
|
|
80
|
+
.aui-md-root td {
|
|
88
81
|
@apply border-b border-l px-4 py-2 text-left last:border-r [&[align=center]]:text-center [&[align=right]]:text-right;
|
|
89
82
|
}
|
|
90
83
|
|
|
91
|
-
|
|
84
|
+
.aui-md-root tr {
|
|
92
85
|
@apply m-0 border-b p-0 first:border-t [&:last-child>td:first-child]:rounded-bl-lg [&:last-child>td:last-child]:rounded-br-lg;
|
|
93
86
|
}
|
|
94
87
|
|
|
95
|
-
|
|
88
|
+
.aui-md-root sup {
|
|
96
89
|
@apply [&>a]:text-xs [&>a]:no-underline;
|
|
97
90
|
}
|
|
98
91
|
|
|
99
|
-
|
|
92
|
+
.aui-md-root pre {
|
|
100
93
|
@apply overflow-x-auto rounded-b-lg bg-black p-4 text-white;
|
|
101
94
|
}
|
|
102
95
|
|
|
103
|
-
|
|
104
|
-
|
|
96
|
+
.aui-md-root > code,
|
|
97
|
+
.aui-md-root :not(:where(pre)) code {
|
|
105
98
|
@apply bg-aui-muted rounded border font-semibold;
|
|
106
99
|
}
|
|
107
100
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@assistant-ui/react-markdown",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.6",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": {
|
|
@@ -37,13 +37,14 @@
|
|
|
37
37
|
],
|
|
38
38
|
"sideEffects": false,
|
|
39
39
|
"dependencies": {
|
|
40
|
+
"@radix-ui/react-primitive": "^2.0.0",
|
|
40
41
|
"@radix-ui/react-use-callback-ref": "^1.1.0",
|
|
41
42
|
"classnames": "^2.5.1",
|
|
42
|
-
"lucide-react": "^0.
|
|
43
|
+
"lucide-react": "^0.416.0",
|
|
43
44
|
"react-markdown": "^9.0.1"
|
|
44
45
|
},
|
|
45
46
|
"peerDependencies": {
|
|
46
|
-
"@assistant-ui/react": "^0.5.
|
|
47
|
+
"@assistant-ui/react": "^0.5.20",
|
|
47
48
|
"@types/react": "*",
|
|
48
49
|
"react": "^18",
|
|
49
50
|
"tailwindcss": "^3.4.4"
|
|
@@ -61,10 +62,10 @@
|
|
|
61
62
|
"autoprefixer": "^10.4.19",
|
|
62
63
|
"eslint": "^8",
|
|
63
64
|
"eslint-config-next": "14.2.5",
|
|
64
|
-
"postcss": "^8.4.
|
|
65
|
-
"tailwindcss": "^3.4.
|
|
65
|
+
"postcss": "^8.4.40",
|
|
66
|
+
"tailwindcss": "^3.4.7",
|
|
66
67
|
"tailwindcss-animate": "^1.0.7",
|
|
67
|
-
"tsup": "8.2.
|
|
68
|
+
"tsup": "8.2.3",
|
|
68
69
|
"tsx": "^4.16.2",
|
|
69
70
|
"@assistant-ui/tailwindcss-transformer": "^0.1.0",
|
|
70
71
|
"@assistant-ui/tsconfig": "0.0.0"
|