@dxos/react-ui-markdown 0.8.4-main.3c1ae3b → 0.8.4-main.422d1c7879
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/lib/browser/index.mjs +29 -29
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +31 -32
- package/src/MarkdownViewer/MarkdownViewer.stories.tsx +6 -6
- package/src/MarkdownViewer/MarkdownViewer.tsx +16 -11
|
@@ -1,52 +1,46 @@
|
|
|
1
1
|
// src/MarkdownViewer/MarkdownViewer.tsx
|
|
2
|
-
import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
|
|
3
2
|
import React from "react";
|
|
4
3
|
import ReactMarkdown from "react-markdown";
|
|
5
4
|
import remarkGfm from "remark-gfm";
|
|
6
5
|
import { SyntaxHighlighter } from "@dxos/react-ui-syntax-highlighter";
|
|
7
|
-
import { mx } from "@dxos/
|
|
6
|
+
import { mx } from "@dxos/ui-theme";
|
|
8
7
|
var MarkdownViewer = ({ classNames, children, components, content = "" }) => {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
components
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
}
|
|
22
|
-
}, content), children);
|
|
23
|
-
} finally {
|
|
24
|
-
_effect.f();
|
|
25
|
-
}
|
|
8
|
+
return /* @__PURE__ */ React.createElement("div", {
|
|
9
|
+
className: mx(classNames)
|
|
10
|
+
}, /* @__PURE__ */ React.createElement(ReactMarkdown, {
|
|
11
|
+
remarkPlugins: [
|
|
12
|
+
remarkGfm
|
|
13
|
+
],
|
|
14
|
+
skipHtml: true,
|
|
15
|
+
components: {
|
|
16
|
+
...defaultComponents,
|
|
17
|
+
...components
|
|
18
|
+
}
|
|
19
|
+
}, content), children);
|
|
26
20
|
};
|
|
27
21
|
var defaultComponents = {
|
|
28
22
|
h1: ({ children }) => {
|
|
29
23
|
return /* @__PURE__ */ React.createElement("h1", {
|
|
30
|
-
className: "
|
|
24
|
+
className: "pt-1 pb-1 text-accent-text text-xl"
|
|
31
25
|
}, children);
|
|
32
26
|
},
|
|
33
27
|
h2: ({ children }) => {
|
|
34
28
|
return /* @__PURE__ */ React.createElement("h2", {
|
|
35
|
-
className: "
|
|
29
|
+
className: "pt-1 pb-1 text-accent-text text-lg"
|
|
36
30
|
}, children);
|
|
37
31
|
},
|
|
38
32
|
h3: ({ children }) => {
|
|
39
33
|
return /* @__PURE__ */ React.createElement("h3", {
|
|
40
|
-
className: "
|
|
34
|
+
className: "pt-1 pb-1 text-accent-text text-base"
|
|
41
35
|
}, children);
|
|
42
36
|
},
|
|
43
37
|
blockquote: ({ children, ...props }) => /* @__PURE__ */ React.createElement("blockquote", {
|
|
44
|
-
className: "
|
|
38
|
+
className: "ps-4 mt-2 mb-2 pt-2 pb-2 border-l-4 border-accent-text text-accent-text",
|
|
45
39
|
...props
|
|
46
40
|
}, children),
|
|
47
41
|
p: ({ children }) => {
|
|
48
42
|
return /* @__PURE__ */ React.createElement("div", {
|
|
49
|
-
className: "
|
|
43
|
+
className: "pt-1 pb-1"
|
|
50
44
|
}, children);
|
|
51
45
|
},
|
|
52
46
|
a: ({ children, href, ...props }) => /* @__PURE__ */ React.createElement("a", {
|
|
@@ -57,11 +51,11 @@ var defaultComponents = {
|
|
|
57
51
|
...props
|
|
58
52
|
}, children),
|
|
59
53
|
ol: ({ children, ...props }) => /* @__PURE__ */ React.createElement("ol", {
|
|
60
|
-
className: "
|
|
54
|
+
className: "pt-1 pb-1 ps-6 leading-tight list-decimal",
|
|
61
55
|
...props
|
|
62
56
|
}, children),
|
|
63
57
|
ul: ({ children, ...props }) => /* @__PURE__ */ React.createElement("ul", {
|
|
64
|
-
className: "
|
|
58
|
+
className: "pt-1 pb-1 ps-6 leading-tight list-disc",
|
|
65
59
|
...props
|
|
66
60
|
}, children),
|
|
67
61
|
li: ({ children, ...props }) => /* @__PURE__ */ React.createElement("li", {
|
|
@@ -69,12 +63,18 @@ var defaultComponents = {
|
|
|
69
63
|
...props
|
|
70
64
|
}, children),
|
|
71
65
|
pre: ({ children }) => children,
|
|
72
|
-
|
|
73
|
-
code: ({ children, className }) => {
|
|
66
|
+
code: ({ children, className, node }) => {
|
|
74
67
|
const [, language] = /language-(\w+)/.exec(className || "") || [];
|
|
68
|
+
const inline = !className && node?.position?.start.line === node?.position?.end.line;
|
|
69
|
+
if (inline) {
|
|
70
|
+
return /* @__PURE__ */ React.createElement("code", {
|
|
71
|
+
className: "rounded-xs bg-group-surface px-1 py-0.5 text-sm text-info-text"
|
|
72
|
+
}, children);
|
|
73
|
+
}
|
|
75
74
|
return /* @__PURE__ */ React.createElement(SyntaxHighlighter, {
|
|
76
75
|
language,
|
|
77
|
-
classNames: "
|
|
76
|
+
classNames: "mt-2 mb-2 p-2 border border-separator rounded-xs text-sm bg-group-surface",
|
|
77
|
+
copyButton: true,
|
|
78
78
|
PreTag: "pre"
|
|
79
79
|
}, children);
|
|
80
80
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/MarkdownViewer/MarkdownViewer.tsx"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type PropsWithChildren } from 'react';\nimport ReactMarkdown, { type Options as ReactMarkdownOptions } from 'react-markdown';\nimport remarkGfm from 'remark-gfm';\n\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { SyntaxHighlighter } from '@dxos/react-ui-syntax-highlighter';\nimport { mx } from '@dxos/
|
|
5
|
-
"mappings": "
|
|
6
|
-
"names": ["React", "ReactMarkdown", "remarkGfm", "SyntaxHighlighter", "mx", "MarkdownViewer", "classNames", "children", "components", "content", "div", "className", "mx", "ReactMarkdown", "remarkPlugins", "remarkGfm", "skipHtml", "defaultComponents", "h1", "h2", "h3", "blockquote", "props", "p", "a", "href", "target", "rel", "ol", "ul", "li", "pre", "code", "language", "exec", "SyntaxHighlighter", "PreTag"]
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type PropsWithChildren } from 'react';\nimport ReactMarkdown, { type Options as ReactMarkdownOptions } from 'react-markdown';\nimport remarkGfm from 'remark-gfm';\n\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { SyntaxHighlighter } from '@dxos/react-ui-syntax-highlighter';\nimport { mx } from '@dxos/ui-theme';\n\nexport type MarkdownViewerProps = ThemedClassName<\n PropsWithChildren<{\n content?: string;\n components?: ReactMarkdownOptions['components'];\n }>\n>;\n\n/**\n * Transforms markdown text into react elements.\n * https://github.com/remarkjs/react-markdown\n * markdown -> remark -> [mdast -> remark plugins] -> [hast -> rehype plugins] -> components -> react elements.\n * Consider using @dxos/react-ui-editor.\n */\nexport const MarkdownViewer = ({ classNames, children, components, content = '' }: MarkdownViewerProps) => {\n return (\n <div className={mx(classNames)}>\n <ReactMarkdown remarkPlugins={[remarkGfm]} skipHtml components={{ ...defaultComponents, ...components }}>\n {content}\n </ReactMarkdown>\n {children}\n </div>\n );\n};\n\nconst defaultComponents: ReactMarkdownOptions['components'] = {\n h1: ({ children }) => {\n return <h1 className='pt-1 pb-1 text-accent-text text-xl'>{children}</h1>;\n },\n h2: ({ children }) => {\n return <h2 className='pt-1 pb-1 text-accent-text text-lg'>{children}</h2>;\n },\n h3: ({ children }) => {\n return <h3 className='pt-1 pb-1 text-accent-text text-base'>{children}</h3>;\n },\n blockquote: ({ children, ...props }) => (\n <blockquote className='ps-4 mt-2 mb-2 pt-2 pb-2 border-l-4 border-accent-text text-accent-text' {...props}>\n {children}\n </blockquote>\n ),\n p: ({ children }) => {\n return <div className='pt-1 pb-1'>{children}</div>;\n },\n a: ({ children, href, ...props }) => (\n <a\n href={href}\n className='text-primary-500 hover:text-primary-500' // TODO(burdon): Use link token.\n target='_blank'\n rel='noopener noreferrer'\n {...props}\n >\n {children}\n </a>\n ),\n ol: ({ children, ...props }) => (\n <ol className='pt-1 pb-1 ps-6 leading-tight list-decimal' {...props}>\n {children}\n </ol>\n ),\n ul: ({ children, ...props }) => (\n <ul className='pt-1 pb-1 ps-6 leading-tight list-disc' {...props}>\n {children}\n </ul>\n ),\n li: ({ children, ...props }) => (\n <li className='' {...props}>\n {children}\n </li>\n ),\n pre: ({ children }) => children,\n code: ({ children, className, node }) => {\n const [, language] = /language-(\\w+)/.exec(className || '') || [];\n const inline = !className && node?.position?.start.line === node?.position?.end.line;\n if (inline) {\n return <code className='rounded-xs bg-group-surface px-1 py-0.5 text-sm text-info-text'>{children}</code>;\n }\n\n return (\n <SyntaxHighlighter\n language={language}\n classNames='mt-2 mb-2 p-2 border border-separator rounded-xs text-sm bg-group-surface'\n copyButton\n PreTag='pre'\n >\n {children}\n </SyntaxHighlighter>\n );\n },\n};\n"],
|
|
5
|
+
"mappings": ";AAIA,OAAOA,WAAuC;AAC9C,OAAOC,mBAA6D;AACpE,OAAOC,eAAe;AAGtB,SAASC,yBAAyB;AAClC,SAASC,UAAU;AAeZ,IAAMC,iBAAiB,CAAC,EAAEC,YAAYC,UAAUC,YAAYC,UAAU,GAAE,MAAuB;AACpG,SACE,sBAAA,cAACC,OAAAA;IAAIC,WAAWC,GAAGN,UAAAA;KACjB,sBAAA,cAACO,eAAAA;IAAcC,eAAe;MAACC;;IAAYC,UAAAA;IAASR,YAAY;MAAE,GAAGS;MAAmB,GAAGT;IAAW;KACnGC,OAAAA,GAEFF,QAAAA;AAGP;AAEA,IAAMU,oBAAwD;EAC5DC,IAAI,CAAC,EAAEX,SAAQ,MAAE;AACf,WAAO,sBAAA,cAACW,MAAAA;MAAGP,WAAU;OAAsCJ,QAAAA;EAC7D;EACAY,IAAI,CAAC,EAAEZ,SAAQ,MAAE;AACf,WAAO,sBAAA,cAACY,MAAAA;MAAGR,WAAU;OAAsCJ,QAAAA;EAC7D;EACAa,IAAI,CAAC,EAAEb,SAAQ,MAAE;AACf,WAAO,sBAAA,cAACa,MAAAA;MAAGT,WAAU;OAAwCJ,QAAAA;EAC/D;EACAc,YAAY,CAAC,EAAEd,UAAU,GAAGe,MAAAA,MAC1B,sBAAA,cAACD,cAAAA;IAAWV,WAAU;IAA2E,GAAGW;KACjGf,QAAAA;EAGLgB,GAAG,CAAC,EAAEhB,SAAQ,MAAE;AACd,WAAO,sBAAA,cAACG,OAAAA;MAAIC,WAAU;OAAaJ,QAAAA;EACrC;EACAiB,GAAG,CAAC,EAAEjB,UAAUkB,MAAM,GAAGH,MAAAA,MACvB,sBAAA,cAACE,KAAAA;IACCC;IACAd,WAAU;IACVe,QAAO;IACPC,KAAI;IACH,GAAGL;KAEHf,QAAAA;EAGLqB,IAAI,CAAC,EAAErB,UAAU,GAAGe,MAAAA,MAClB,sBAAA,cAACM,MAAAA;IAAGjB,WAAU;IAA6C,GAAGW;KAC3Df,QAAAA;EAGLsB,IAAI,CAAC,EAAEtB,UAAU,GAAGe,MAAAA,MAClB,sBAAA,cAACO,MAAAA;IAAGlB,WAAU;IAA0C,GAAGW;KACxDf,QAAAA;EAGLuB,IAAI,CAAC,EAAEvB,UAAU,GAAGe,MAAAA,MAClB,sBAAA,cAACQ,MAAAA;IAAGnB,WAAU;IAAI,GAAGW;KAClBf,QAAAA;EAGLwB,KAAK,CAAC,EAAExB,SAAQ,MAAOA;EACvByB,MAAM,CAAC,EAAEzB,UAAUI,WAAWsB,KAAI,MAAE;AAClC,UAAM,CAAA,EAAGC,QAAAA,IAAY,iBAAiBC,KAAKxB,aAAa,EAAA,KAAO,CAAA;AAC/D,UAAMyB,SAAS,CAACzB,aAAasB,MAAMI,UAAUC,MAAMC,SAASN,MAAMI,UAAUG,IAAID;AAChF,QAAIH,QAAQ;AACV,aAAO,sBAAA,cAACJ,QAAAA;QAAKrB,WAAU;SAAkEJ,QAAAA;IAC3F;AAEA,WACE,sBAAA,cAACkC,mBAAAA;MACCP;MACA5B,YAAW;MACXoC,YAAAA;MACAC,QAAO;OAENpC,QAAAA;EAGP;AACF;",
|
|
6
|
+
"names": ["React", "ReactMarkdown", "remarkGfm", "SyntaxHighlighter", "mx", "MarkdownViewer", "classNames", "children", "components", "content", "div", "className", "mx", "ReactMarkdown", "remarkPlugins", "remarkGfm", "skipHtml", "defaultComponents", "h1", "h2", "h3", "blockquote", "props", "p", "a", "href", "target", "rel", "ol", "ul", "li", "pre", "code", "node", "language", "exec", "inline", "position", "start", "line", "end", "SyntaxHighlighter", "copyButton", "PreTag"]
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"inputs":{"src/MarkdownViewer/MarkdownViewer.tsx":{"bytes":
|
|
1
|
+
{"inputs":{"src/MarkdownViewer/MarkdownViewer.tsx":{"bytes":10639,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"react-markdown","kind":"import-statement","external":true},{"path":"remark-gfm","kind":"import-statement","external":true},{"path":"@dxos/react-ui-syntax-highlighter","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true}],"format":"esm"},"src/MarkdownViewer/index.ts":{"bytes":489,"imports":[{"path":"src/MarkdownViewer/MarkdownViewer.tsx","kind":"import-statement","original":"./MarkdownViewer"}],"format":"esm"},"src/index.ts":{"bytes":474,"imports":[{"path":"src/MarkdownViewer/index.ts","kind":"import-statement","original":"./MarkdownViewer"}],"format":"esm"}},"outputs":{"dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":5464},"dist/lib/browser/index.mjs":{"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"react-markdown","kind":"import-statement","external":true},{"path":"remark-gfm","kind":"import-statement","external":true},{"path":"@dxos/react-ui-syntax-highlighter","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true}],"exports":["MarkdownViewer"],"entryPoint":"src/index.ts","inputs":{"src/MarkdownViewer/MarkdownViewer.tsx":{"bytesInOutput":2815},"src/MarkdownViewer/index.ts":{"bytesInOutput":0},"src/index.ts":{"bytesInOutput":0}},"bytes":2920}}}
|