pd-markdown 1.0.0
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/package.json +26 -0
- package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/index.d.ts +4 -0
- package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/index.d.ts.map +1 -0
- package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/index.js +5 -0
- package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/index.js.map +1 -0
- package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/plugins/index.d.ts +4 -0
- package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/plugins/index.d.ts.map +1 -0
- package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/plugins/index.js +4 -0
- package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/plugins/index.js.map +1 -0
- package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/plugins/transform/heading.d.ts +6 -0
- package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/plugins/transform/heading.d.ts.map +1 -0
- package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/plugins/transform/heading.js +36 -0
- package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/plugins/transform/heading.js.map +1 -0
- package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/plugins/transform/list.d.ts +14 -0
- package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/plugins/transform/list.d.ts.map +1 -0
- package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/plugins/transform/list.js +18 -0
- package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/plugins/transform/list.js.map +1 -0
- package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/plugins/transform/table.d.ts +27 -0
- package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/plugins/transform/table.d.ts.map +1 -0
- package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/plugins/transform/table.js +37 -0
- package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/plugins/transform/table.js.map +1 -0
- package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/processor.d.ts +22 -0
- package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/processor.d.ts.map +1 -0
- package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/processor.js +95 -0
- package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/processor.js.map +1 -0
- package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/types/index.d.ts +55 -0
- package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/types/index.d.ts.map +1 -0
- package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/types/index.js +2 -0
- package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/types/index.js.map +1 -0
- package/packages/parser/__tests__/frontmatter.test.ts +69 -0
- package/packages/parser/__tests__/gfm.test.ts +83 -0
- package/packages/parser/__tests__/processor.test.ts +136 -0
- package/packages/parser/__tests__/transform/heading.test.ts +56 -0
- package/packages/parser/__tests__/transform/list.test.ts +67 -0
- package/packages/parser/__tests__/transform/table.test.ts +85 -0
- package/packages/parser/dist/index.cjs +191 -0
- package/packages/parser/dist/index.cjs.map +1 -0
- package/packages/parser/dist/index.d.ts +4 -0
- package/packages/parser/dist/index.d.ts.map +1 -0
- package/packages/parser/dist/index.mjs +185 -0
- package/packages/parser/dist/index.mjs.map +1 -0
- package/packages/parser/dist/plugins/index.d.ts +4 -0
- package/packages/parser/dist/plugins/index.d.ts.map +1 -0
- package/packages/parser/dist/plugins/transform/heading.d.ts +6 -0
- package/packages/parser/dist/plugins/transform/heading.d.ts.map +1 -0
- package/packages/parser/dist/plugins/transform/list.d.ts +14 -0
- package/packages/parser/dist/plugins/transform/list.d.ts.map +1 -0
- package/packages/parser/dist/plugins/transform/table.d.ts +27 -0
- package/packages/parser/dist/plugins/transform/table.d.ts.map +1 -0
- package/packages/parser/dist/processor.d.ts +22 -0
- package/packages/parser/dist/processor.d.ts.map +1 -0
- package/packages/parser/dist/types/index.d.ts +55 -0
- package/packages/parser/dist/types/index.d.ts.map +1 -0
- package/packages/parser/node_modules/.bin/yaml +17 -0
- package/packages/parser/package.json +38 -0
- package/packages/parser/rollup.config.ts +38 -0
- package/packages/parser/src/index.ts +15 -0
- package/packages/parser/src/plugins/index.ts +3 -0
- package/packages/parser/src/plugins/transform/heading.ts +40 -0
- package/packages/parser/src/plugins/transform/list.ts +29 -0
- package/packages/parser/src/plugins/transform/table.ts +62 -0
- package/packages/parser/src/processor.ts +119 -0
- package/packages/parser/src/types/index.ts +60 -0
- package/packages/parser/tsconfig.json +9 -0
- package/packages/utils/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/utils/dist/ast/query.d.ts +36 -0
- package/packages/utils/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/utils/dist/ast/query.d.ts.map +1 -0
- package/packages/utils/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/utils/dist/ast/query.js +99 -0
- package/packages/utils/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/utils/dist/ast/query.js.map +1 -0
- package/packages/utils/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/utils/dist/ast/traverse.d.ts +22 -0
- package/packages/utils/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/utils/dist/ast/traverse.d.ts.map +1 -0
- package/packages/utils/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/utils/dist/ast/traverse.js +46 -0
- package/packages/utils/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/utils/dist/ast/traverse.js.map +1 -0
- package/packages/utils/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/utils/dist/index.d.ts +7 -0
- package/packages/utils/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/utils/dist/index.d.ts.map +1 -0
- package/packages/utils/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/utils/dist/index.js +8 -0
- package/packages/utils/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/utils/dist/index.js.map +1 -0
- package/packages/utils/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/utils/dist/string/sanitize.d.ts +22 -0
- package/packages/utils/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/utils/dist/string/sanitize.d.ts.map +1 -0
- package/packages/utils/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/utils/dist/string/sanitize.js +140 -0
- package/packages/utils/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/utils/dist/string/sanitize.js.map +1 -0
- package/packages/utils/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/utils/dist/string/slugify.d.ts +16 -0
- package/packages/utils/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/utils/dist/string/slugify.d.ts.map +1 -0
- package/packages/utils/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/utils/dist/string/slugify.js +39 -0
- package/packages/utils/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/utils/dist/string/slugify.js.map +1 -0
- package/packages/utils/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/utils/dist/types/index.d.ts +49 -0
- package/packages/utils/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/utils/dist/types/index.d.ts.map +1 -0
- package/packages/utils/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/utils/dist/types/index.js +19 -0
- package/packages/utils/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/utils/dist/types/index.js.map +1 -0
- package/packages/utils/__tests__/query.test.ts +155 -0
- package/packages/utils/__tests__/sanitize.test.ts +96 -0
- package/packages/utils/__tests__/slugify.test.ts +71 -0
- package/packages/utils/__tests__/traverse.test.ts +131 -0
- package/packages/utils/dist/ast/query.d.ts +36 -0
- package/packages/utils/dist/ast/query.d.ts.map +1 -0
- package/packages/utils/dist/ast/traverse.d.ts +22 -0
- package/packages/utils/dist/ast/traverse.d.ts.map +1 -0
- package/packages/utils/dist/index.cjs +358 -0
- package/packages/utils/dist/index.cjs.map +1 -0
- package/packages/utils/dist/index.d.ts +7 -0
- package/packages/utils/dist/index.d.ts.map +1 -0
- package/packages/utils/dist/index.mjs +343 -0
- package/packages/utils/dist/index.mjs.map +1 -0
- package/packages/utils/dist/string/sanitize.d.ts +22 -0
- package/packages/utils/dist/string/sanitize.d.ts.map +1 -0
- package/packages/utils/dist/string/slugify.d.ts +16 -0
- package/packages/utils/dist/string/slugify.d.ts.map +1 -0
- package/packages/utils/dist/types/index.d.ts +49 -0
- package/packages/utils/dist/types/index.d.ts.map +1 -0
- package/packages/utils/package.json +27 -0
- package/packages/utils/rollup.config.ts +26 -0
- package/packages/utils/src/ast/query.ts +127 -0
- package/packages/utils/src/ast/traverse.ts +73 -0
- package/packages/utils/src/index.ts +20 -0
- package/packages/utils/src/string/sanitize.ts +155 -0
- package/packages/utils/src/string/slugify.ts +43 -0
- package/packages/utils/src/types/index.ts +72 -0
- package/packages/utils/tsconfig.json +8 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/MarkdownRenderer.d.ts +27 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/MarkdownRenderer.d.ts.map +1 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/MarkdownRenderer.js +39 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/MarkdownRenderer.js.map +1 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/NodeRenderer.d.ts +10 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/NodeRenderer.d.ts.map +1 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/NodeRenderer.js +130 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/NodeRenderer.js.map +1 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/context.d.ts +17 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/context.d.ts.map +1 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/context.js +14 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/context.js.map +1 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Blockquote.d.ts +8 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Blockquote.d.ts.map +1 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Blockquote.js +5 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Blockquote.js.map +1 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Code.d.ts +13 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Code.d.ts.map +1 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Code.js +9 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Code.js.map +1 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Heading.d.ts +8 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Heading.d.ts.map +1 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Heading.js +7 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Heading.js.map +1 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Image.d.ts +7 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Image.d.ts.map +1 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Image.js +5 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Image.js.map +1 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Link.d.ts +8 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Link.d.ts.map +1 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Link.js +7 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Link.js.map +1 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/List.d.ts +13 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/List.d.ts.map +1 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/List.js +14 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/List.js.map +1 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Paragraph.d.ts +8 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Paragraph.d.ts.map +1 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Paragraph.js +5 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Paragraph.js.map +1 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Table.d.ts +19 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Table.d.ts.map +1 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Table.js +18 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Table.js.map +1 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/index.d.ts +34 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/index.d.ts.map +1 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/index.js +28 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/index.js.map +1 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/hooks/useMarkdown.d.ts +11 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/hooks/useMarkdown.d.ts.map +1 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/hooks/useMarkdown.js +28 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/hooks/useMarkdown.js.map +1 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/index.d.ts +6 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/index.d.ts.map +1 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/index.js +9 -0
- package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/index.js.map +1 -0
- package/packages/web/__tests__/MarkdownRenderer.test.tsx +89 -0
- package/packages/web/__tests__/NodeRenderer.test.tsx +97 -0
- package/packages/web/__tests__/components/Code.test.tsx +71 -0
- package/packages/web/__tests__/components/Heading.test.tsx +65 -0
- package/packages/web/__tests__/components/List.test.tsx +100 -0
- package/packages/web/__tests__/components/Table.test.tsx +105 -0
- package/packages/web/__tests__/useMarkdown.test.ts +63 -0
- package/packages/web/dist/components/MarkdownRenderer.d.ts +27 -0
- package/packages/web/dist/components/MarkdownRenderer.d.ts.map +1 -0
- package/packages/web/dist/components/NodeRenderer.d.ts +10 -0
- package/packages/web/dist/components/NodeRenderer.d.ts.map +1 -0
- package/packages/web/dist/components/context.d.ts +17 -0
- package/packages/web/dist/components/context.d.ts.map +1 -0
- package/packages/web/dist/components/defaults/Blockquote.d.ts +8 -0
- package/packages/web/dist/components/defaults/Blockquote.d.ts.map +1 -0
- package/packages/web/dist/components/defaults/Code.d.ts +13 -0
- package/packages/web/dist/components/defaults/Code.d.ts.map +1 -0
- package/packages/web/dist/components/defaults/Heading.d.ts +8 -0
- package/packages/web/dist/components/defaults/Heading.d.ts.map +1 -0
- package/packages/web/dist/components/defaults/Image.d.ts +7 -0
- package/packages/web/dist/components/defaults/Image.d.ts.map +1 -0
- package/packages/web/dist/components/defaults/Link.d.ts +8 -0
- package/packages/web/dist/components/defaults/Link.d.ts.map +1 -0
- package/packages/web/dist/components/defaults/List.d.ts +13 -0
- package/packages/web/dist/components/defaults/List.d.ts.map +1 -0
- package/packages/web/dist/components/defaults/Paragraph.d.ts +8 -0
- package/packages/web/dist/components/defaults/Paragraph.d.ts.map +1 -0
- package/packages/web/dist/components/defaults/Table.d.ts +19 -0
- package/packages/web/dist/components/defaults/Table.d.ts.map +1 -0
- package/packages/web/dist/components/defaults/index.d.ts +34 -0
- package/packages/web/dist/components/defaults/index.d.ts.map +1 -0
- package/packages/web/dist/hooks/useMarkdown.d.ts +11 -0
- package/packages/web/dist/hooks/useMarkdown.d.ts.map +1 -0
- package/packages/web/dist/index.cjs +306 -0
- package/packages/web/dist/index.cjs.map +1 -0
- package/packages/web/dist/index.d.ts +6 -0
- package/packages/web/dist/index.d.ts.map +1 -0
- package/packages/web/dist/index.mjs +287 -0
- package/packages/web/dist/index.mjs.map +1 -0
- package/packages/web/package.json +40 -0
- package/packages/web/rollup.config.ts +36 -0
- package/packages/web/src/components/MarkdownRenderer.tsx +70 -0
- package/packages/web/src/components/NodeRenderer.tsx +205 -0
- package/packages/web/src/components/context.ts +24 -0
- package/packages/web/src/components/defaults/Blockquote.tsx +11 -0
- package/packages/web/src/components/defaults/Code.tsx +26 -0
- package/packages/web/src/components/defaults/Heading.tsx +14 -0
- package/packages/web/src/components/defaults/Image.tsx +10 -0
- package/packages/web/src/components/defaults/Link.tsx +18 -0
- package/packages/web/src/components/defaults/List.tsx +33 -0
- package/packages/web/src/components/defaults/Paragraph.tsx +11 -0
- package/packages/web/src/components/defaults/Table.tsx +50 -0
- package/packages/web/src/components/defaults/index.tsx +80 -0
- package/packages/web/src/hooks/useMarkdown.ts +32 -0
- package/packages/web/src/index.ts +37 -0
- package/packages/web/tsconfig.json +11 -0
- package/packages/web/vitest.config.ts +9 -0
- package/pnpm-workspace.yaml +2 -0
- package/tsconfig.base.json +26 -0
- package/tsconfig.json +8 -0
- package/vitest.config.ts +28 -0
- package/vitest.setup.ts +1 -0
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import type { Node } from 'unist'
|
|
2
|
+
import type { Parent, MdNode, Visitor } from '../types'
|
|
3
|
+
import { isParent } from '../types'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Traverse AST in depth-first order
|
|
7
|
+
*
|
|
8
|
+
* @param node - Root node to start traversal
|
|
9
|
+
* @param visitor - Visitor function called for each node
|
|
10
|
+
* Return `false` to skip children of current node
|
|
11
|
+
* Return `true` or `undefined` to continue
|
|
12
|
+
*/
|
|
13
|
+
export function traverseAst<T extends Node = MdNode>(
|
|
14
|
+
node: T,
|
|
15
|
+
visitor: Visitor<T>
|
|
16
|
+
): void {
|
|
17
|
+
function visit(
|
|
18
|
+
current: T,
|
|
19
|
+
index: number | undefined,
|
|
20
|
+
parent: Parent | undefined
|
|
21
|
+
): void {
|
|
22
|
+
const result = visitor(current, index, parent)
|
|
23
|
+
|
|
24
|
+
// Skip children if visitor returns false
|
|
25
|
+
if (result === false) {
|
|
26
|
+
return
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
if (isParent(current)) {
|
|
30
|
+
const children = current.children as T[]
|
|
31
|
+
for (let i = 0; i < children.length; i++) {
|
|
32
|
+
visit(children[i], i, current as unknown as Parent)
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
visit(node, undefined, undefined)
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Traverse AST with enter and leave callbacks
|
|
42
|
+
*
|
|
43
|
+
* @param node - Root node to start traversal
|
|
44
|
+
* @param callbacks - Object with optional enter and leave functions
|
|
45
|
+
*/
|
|
46
|
+
export function traverseAstWithCallbacks<T extends Node = MdNode>(
|
|
47
|
+
node: T,
|
|
48
|
+
callbacks: {
|
|
49
|
+
enter?: Visitor<T>
|
|
50
|
+
leave?: Visitor<T>
|
|
51
|
+
}
|
|
52
|
+
): void {
|
|
53
|
+
const { enter, leave } = callbacks
|
|
54
|
+
|
|
55
|
+
function visit(
|
|
56
|
+
current: T,
|
|
57
|
+
index: number | undefined,
|
|
58
|
+
parent: Parent | undefined
|
|
59
|
+
): void {
|
|
60
|
+
const shouldSkipChildren = enter?.(current, index, parent) === false
|
|
61
|
+
|
|
62
|
+
if (!shouldSkipChildren && isParent(current)) {
|
|
63
|
+
const children = current.children as T[]
|
|
64
|
+
for (let i = 0; i < children.length; i++) {
|
|
65
|
+
visit(children[i], i, current as unknown as Parent)
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
leave?.(current, index, parent)
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
visit(node, undefined, undefined)
|
|
73
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// Types
|
|
2
|
+
export type {
|
|
3
|
+
MdNode,
|
|
4
|
+
MdRoot,
|
|
5
|
+
Parent,
|
|
6
|
+
Literal,
|
|
7
|
+
Visitor,
|
|
8
|
+
PluginOptions,
|
|
9
|
+
Position,
|
|
10
|
+
Location,
|
|
11
|
+
} from './types'
|
|
12
|
+
export { isParent, isLiteral, isNodeType } from './types'
|
|
13
|
+
|
|
14
|
+
// AST utilities
|
|
15
|
+
export { traverseAst, traverseAstWithCallbacks } from './ast/traverse'
|
|
16
|
+
export { findNodes, findNode, findNodesBy, findParent } from './ast/query'
|
|
17
|
+
|
|
18
|
+
// String utilities
|
|
19
|
+
export { slugify, uniqueSlugify } from './string/slugify'
|
|
20
|
+
export { escapeHtml, sanitizeHtml, stripHtml } from './string/sanitize'
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTML entities that need escaping
|
|
3
|
+
*/
|
|
4
|
+
const HTML_ESCAPE_MAP: Record<string, string> = {
|
|
5
|
+
'&': '&',
|
|
6
|
+
'<': '<',
|
|
7
|
+
'>': '>',
|
|
8
|
+
'"': '"',
|
|
9
|
+
"'": ''',
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Escape HTML special characters
|
|
14
|
+
*
|
|
15
|
+
* @param text - Text to escape
|
|
16
|
+
* @returns Escaped text safe for HTML insertion
|
|
17
|
+
*/
|
|
18
|
+
export function escapeHtml(text: string): string {
|
|
19
|
+
return text.replace(/[&<>"']/g, (char) => HTML_ESCAPE_MAP[char] || char)
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Allowed HTML tags for sanitization
|
|
24
|
+
*/
|
|
25
|
+
const ALLOWED_TAGS = new Set([
|
|
26
|
+
'a',
|
|
27
|
+
'abbr',
|
|
28
|
+
'b',
|
|
29
|
+
'blockquote',
|
|
30
|
+
'br',
|
|
31
|
+
'code',
|
|
32
|
+
'dd',
|
|
33
|
+
'del',
|
|
34
|
+
'div',
|
|
35
|
+
'dl',
|
|
36
|
+
'dt',
|
|
37
|
+
'em',
|
|
38
|
+
'h1',
|
|
39
|
+
'h2',
|
|
40
|
+
'h3',
|
|
41
|
+
'h4',
|
|
42
|
+
'h5',
|
|
43
|
+
'h6',
|
|
44
|
+
'hr',
|
|
45
|
+
'i',
|
|
46
|
+
'img',
|
|
47
|
+
'ins',
|
|
48
|
+
'kbd',
|
|
49
|
+
'li',
|
|
50
|
+
'ol',
|
|
51
|
+
'p',
|
|
52
|
+
'pre',
|
|
53
|
+
'q',
|
|
54
|
+
's',
|
|
55
|
+
'samp',
|
|
56
|
+
'small',
|
|
57
|
+
'span',
|
|
58
|
+
'strong',
|
|
59
|
+
'sub',
|
|
60
|
+
'sup',
|
|
61
|
+
'table',
|
|
62
|
+
'tbody',
|
|
63
|
+
'td',
|
|
64
|
+
'tfoot',
|
|
65
|
+
'th',
|
|
66
|
+
'thead',
|
|
67
|
+
'tr',
|
|
68
|
+
'u',
|
|
69
|
+
'ul',
|
|
70
|
+
])
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Allowed attributes for sanitization
|
|
74
|
+
*/
|
|
75
|
+
const ALLOWED_ATTRS = new Set([
|
|
76
|
+
'href',
|
|
77
|
+
'src',
|
|
78
|
+
'alt',
|
|
79
|
+
'title',
|
|
80
|
+
'class',
|
|
81
|
+
'id',
|
|
82
|
+
'name',
|
|
83
|
+
'target',
|
|
84
|
+
'rel',
|
|
85
|
+
'width',
|
|
86
|
+
'height',
|
|
87
|
+
'align',
|
|
88
|
+
'colspan',
|
|
89
|
+
'rowspan',
|
|
90
|
+
])
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Sanitize HTML string by removing dangerous content
|
|
94
|
+
*
|
|
95
|
+
* @param html - HTML string to sanitize
|
|
96
|
+
* @returns Sanitized HTML string
|
|
97
|
+
*/
|
|
98
|
+
export function sanitizeHtml(html: string): string {
|
|
99
|
+
let result = html
|
|
100
|
+
|
|
101
|
+
// Remove script tags first
|
|
102
|
+
result = result.replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, '')
|
|
103
|
+
|
|
104
|
+
// Remove event handlers
|
|
105
|
+
result = result.replace(/\s+on\w+\s*=\s*(?:"[^"]*"|'[^']*'|[^\s>]*)/gi, '')
|
|
106
|
+
|
|
107
|
+
// Remove disallowed tags (keep content) and sanitize attributes
|
|
108
|
+
result = result.replace(/<\/?(\w+)([^>]*)>/g, (match, tagName, attrs) => {
|
|
109
|
+
const tag = tagName.toLowerCase()
|
|
110
|
+
if (!ALLOWED_TAGS.has(tag)) {
|
|
111
|
+
return ''
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// For closing tags, just return them
|
|
115
|
+
if (match.startsWith('</')) {
|
|
116
|
+
return `</${tag}>`
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// Sanitize attributes
|
|
120
|
+
const sanitizedAttrs: string[] = []
|
|
121
|
+
const attrRegex = /\s+([\w-]+)\s*=\s*(?:"([^"]*)"|'([^']*)'|(\S+))/g
|
|
122
|
+
let attrMatch
|
|
123
|
+
|
|
124
|
+
while ((attrMatch = attrRegex.exec(attrs)) !== null) {
|
|
125
|
+
const [, attrName, v1, v2, v3] = attrMatch
|
|
126
|
+
const attr = attrName.toLowerCase()
|
|
127
|
+
|
|
128
|
+
if (ALLOWED_ATTRS.has(attr)) {
|
|
129
|
+
let value = v1 ?? v2 ?? v3 ?? ''
|
|
130
|
+
|
|
131
|
+
// Check for dangerous URLs in href/src
|
|
132
|
+
if ((attr === 'href' || attr === 'src') && /^\s*javascript\s*:/i.test(value)) {
|
|
133
|
+
value = ''
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
sanitizedAttrs.push(`${attr}="${value}"`)
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
const attrStr = sanitizedAttrs.length > 0 ? ' ' + sanitizedAttrs.join(' ') : ''
|
|
141
|
+
return `<${tag}${attrStr}>`
|
|
142
|
+
})
|
|
143
|
+
|
|
144
|
+
return result
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Strip all HTML tags from a string
|
|
149
|
+
*
|
|
150
|
+
* @param html - HTML string to strip
|
|
151
|
+
* @returns Plain text without HTML tags
|
|
152
|
+
*/
|
|
153
|
+
export function stripHtml(html: string): string {
|
|
154
|
+
return html.replace(/<[^>]*>/g, '')
|
|
155
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Convert text to URL-safe slug
|
|
3
|
+
*
|
|
4
|
+
* @param text - Text to slugify
|
|
5
|
+
* @returns URL-safe slug
|
|
6
|
+
*/
|
|
7
|
+
export function slugify(text: string): string {
|
|
8
|
+
return (
|
|
9
|
+
text
|
|
10
|
+
// Convert to lowercase
|
|
11
|
+
.toLowerCase()
|
|
12
|
+
// Replace Chinese characters with pinyin-like representation (keep as-is for simplicity)
|
|
13
|
+
// Replace spaces and special chars with hyphens
|
|
14
|
+
.replace(/[\s_]+/g, '-')
|
|
15
|
+
// Remove characters that aren't alphanumeric, hyphens, or common CJK
|
|
16
|
+
.replace(/[^\w\u4e00-\u9fff\u3040-\u309f\u30a0-\u30ff-]/g, '')
|
|
17
|
+
// Replace multiple consecutive hyphens with single hyphen
|
|
18
|
+
.replace(/-+/g, '-')
|
|
19
|
+
// Remove leading/trailing hyphens
|
|
20
|
+
.replace(/^-+|-+$/g, '')
|
|
21
|
+
)
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Generate unique slug with counter suffix for duplicates
|
|
26
|
+
*
|
|
27
|
+
* @param text - Text to slugify
|
|
28
|
+
* @param existingSlugs - Set of existing slugs to check against
|
|
29
|
+
* @returns Unique slug
|
|
30
|
+
*/
|
|
31
|
+
export function uniqueSlugify(text: string, existingSlugs: Set<string>): string {
|
|
32
|
+
const baseSlug = slugify(text)
|
|
33
|
+
let slug = baseSlug
|
|
34
|
+
let counter = 1
|
|
35
|
+
|
|
36
|
+
while (existingSlugs.has(slug)) {
|
|
37
|
+
slug = `${baseSlug}-${counter}`
|
|
38
|
+
counter++
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
existingSlugs.add(slug)
|
|
42
|
+
return slug
|
|
43
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type { Root, Content, Parent, Literal } from 'mdast'
|
|
2
|
+
import type { Node as UnistNode } from 'unist'
|
|
3
|
+
|
|
4
|
+
// Re-export mdast types
|
|
5
|
+
export type { Root, Content, Parent, Literal }
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* All possible markdown node types
|
|
9
|
+
*/
|
|
10
|
+
export type MdNode = Root | Content
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Root node of markdown AST
|
|
14
|
+
*/
|
|
15
|
+
export type MdRoot = Root
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Visitor function for AST traversal
|
|
19
|
+
*/
|
|
20
|
+
export type Visitor<T extends UnistNode = MdNode> = (
|
|
21
|
+
node: T,
|
|
22
|
+
index: number | undefined,
|
|
23
|
+
parent: Parent | undefined
|
|
24
|
+
) => void | boolean
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Plugin options base interface
|
|
28
|
+
*/
|
|
29
|
+
export interface PluginOptions {
|
|
30
|
+
[key: string]: unknown
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Position information in source
|
|
35
|
+
*/
|
|
36
|
+
export interface Position {
|
|
37
|
+
line: number
|
|
38
|
+
column: number
|
|
39
|
+
offset?: number
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Location in source
|
|
44
|
+
*/
|
|
45
|
+
export interface Location {
|
|
46
|
+
start: Position
|
|
47
|
+
end: Position
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Type guard to check if node is a parent node
|
|
52
|
+
*/
|
|
53
|
+
export function isParent(node: UnistNode): node is Parent {
|
|
54
|
+
return 'children' in node && Array.isArray((node as Parent).children)
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Type guard to check if node is a literal node
|
|
59
|
+
*/
|
|
60
|
+
export function isLiteral(node: UnistNode): node is Literal {
|
|
61
|
+
return 'value' in node && typeof (node as Literal).value === 'string'
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Type guard to check if node has specific type
|
|
66
|
+
*/
|
|
67
|
+
export function isNodeType<T extends MdNode>(
|
|
68
|
+
node: UnistNode,
|
|
69
|
+
type: T['type']
|
|
70
|
+
): node is T {
|
|
71
|
+
return node.type === type
|
|
72
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { FC, CSSProperties } from 'react';
|
|
2
|
+
import type { Root } from 'mdast';
|
|
3
|
+
import { type ParserOptions } from '@pd-markdown/parser';
|
|
4
|
+
import type { ComponentMap } from './defaults';
|
|
5
|
+
export interface MarkdownRendererProps {
|
|
6
|
+
/** Markdown source string (will be parsed) */
|
|
7
|
+
source?: string;
|
|
8
|
+
/** Pre-parsed AST (skip parsing, useful for SSR) */
|
|
9
|
+
ast?: Root;
|
|
10
|
+
/** Custom component overrides */
|
|
11
|
+
components?: Partial<ComponentMap>;
|
|
12
|
+
/** CSS class name for wrapper */
|
|
13
|
+
className?: string;
|
|
14
|
+
/** Inline styles for wrapper */
|
|
15
|
+
style?: CSSProperties;
|
|
16
|
+
/** Parser options (only used when source is provided) */
|
|
17
|
+
parserOptions?: ParserOptions;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Main markdown renderer component
|
|
21
|
+
*
|
|
22
|
+
* Supports both client-side and server-side rendering:
|
|
23
|
+
* - Pass `source` for automatic parsing
|
|
24
|
+
* - Pass `ast` for pre-parsed content (SSR optimization)
|
|
25
|
+
*/
|
|
26
|
+
export declare const MarkdownRenderer: FC<MarkdownRendererProps>;
|
|
27
|
+
//# sourceMappingURL=MarkdownRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MarkdownRenderer.d.ts","sourceRoot":"","sources":["../../src/components/MarkdownRenderer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAC9C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,OAAO,CAAA;AACjC,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAGtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C,MAAM,WAAW,qBAAqB;IACpC,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,oDAAoD;IACpD,GAAG,CAAC,EAAE,IAAI,CAAA;IACV,iCAAiC;IACjC,UAAU,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAA;IAClC,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gCAAgC;IAChC,KAAK,CAAC,EAAE,aAAa,CAAA;IACrB,yDAAyD;IACzD,aAAa,CAAC,EAAE,aAAa,CAAA;CAC9B;AAeD;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC,qBAAqB,CA2BtD,CAAA"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { createParser } from '@pd-markdown/parser';
|
|
3
|
+
import { MarkdownContext } from './context';
|
|
4
|
+
import { NodeRenderer } from './NodeRenderer';
|
|
5
|
+
// Singleton parser for client-side use
|
|
6
|
+
let defaultParser = null;
|
|
7
|
+
function getParser(options) {
|
|
8
|
+
if (options) {
|
|
9
|
+
return createParser(options);
|
|
10
|
+
}
|
|
11
|
+
if (!defaultParser) {
|
|
12
|
+
defaultParser = createParser();
|
|
13
|
+
}
|
|
14
|
+
return defaultParser;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Main markdown renderer component
|
|
18
|
+
*
|
|
19
|
+
* Supports both client-side and server-side rendering:
|
|
20
|
+
* - Pass `source` for automatic parsing
|
|
21
|
+
* - Pass `ast` for pre-parsed content (SSR optimization)
|
|
22
|
+
*/
|
|
23
|
+
export const MarkdownRenderer = ({ source, ast, components = {}, className, style, parserOptions, }) => {
|
|
24
|
+
// Use provided AST or parse source
|
|
25
|
+
let tree;
|
|
26
|
+
if (ast) {
|
|
27
|
+
tree = ast;
|
|
28
|
+
}
|
|
29
|
+
else if (source) {
|
|
30
|
+
const parser = getParser(parserOptions);
|
|
31
|
+
tree = parser.parse(source);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
// No content provided
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
return (_jsx(MarkdownContext.Provider, { value: { components }, children: _jsx("div", { className: className, style: style, children: _jsx(NodeRenderer, { node: tree }) }) }));
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=MarkdownRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MarkdownRenderer.js","sourceRoot":"","sources":["../../src/components/MarkdownRenderer.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAsB,MAAM,qBAAqB,CAAA;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAkB7C,uCAAuC;AACvC,IAAI,aAAa,GAA2C,IAAI,CAAA;AAEhE,SAAS,SAAS,CAAC,OAAuB;IACxC,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,YAAY,CAAC,OAAO,CAAC,CAAA;IAC9B,CAAC;IACD,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,aAAa,GAAG,YAAY,EAAE,CAAA;IAChC,CAAC;IACD,OAAO,aAAa,CAAA;AACtB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAA8B,CAAC,EAC1D,MAAM,EACN,GAAG,EACH,UAAU,GAAG,EAAE,EACf,SAAS,EACT,KAAK,EACL,aAAa,GACd,EAAE,EAAE;IACH,mCAAmC;IACnC,IAAI,IAAU,CAAA;IACd,IAAI,GAAG,EAAE,CAAC;QACR,IAAI,GAAG,GAAG,CAAA;IACZ,CAAC;SAAM,IAAI,MAAM,EAAE,CAAC;QAClB,MAAM,MAAM,GAAG,SAAS,CAAC,aAAa,CAAC,CAAA;QACvC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IAC7B,CAAC;SAAM,CAAC;QACN,sBAAsB;QACtB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,CACL,KAAC,eAAe,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,UAAU,EAAE,YAC7C,cAAK,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,YACrC,KAAC,YAAY,IAAC,IAAI,EAAE,IAAI,GAAI,GACxB,GACmB,CAC5B,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { FC } from 'react';
|
|
2
|
+
import type { Content, Root } from 'mdast';
|
|
3
|
+
export interface NodeRendererProps {
|
|
4
|
+
node: Content | Root;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Recursive node renderer that renders AST nodes to React elements
|
|
8
|
+
*/
|
|
9
|
+
export declare const NodeRenderer: FC<NodeRendererProps>;
|
|
10
|
+
//# sourceMappingURL=NodeRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NodeRenderer.d.ts","sourceRoot":"","sources":["../../src/components/NodeRenderer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAa,MAAM,OAAO,CAAA;AAC1C,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAA2B,MAAM,OAAO,CAAA;AAInE,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAA;CACrB;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,iBAAiB,CAgM9C,CAAA"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useMarkdownContext } from './context';
|
|
3
|
+
import { defaultComponents } from './defaults';
|
|
4
|
+
/**
|
|
5
|
+
* Recursive node renderer that renders AST nodes to React elements
|
|
6
|
+
*/
|
|
7
|
+
export const NodeRenderer = ({ node }) => {
|
|
8
|
+
const { components } = useMarkdownContext();
|
|
9
|
+
// Get the component for this node type
|
|
10
|
+
const getComponent = (type) => {
|
|
11
|
+
return components[type] || defaultComponents[type];
|
|
12
|
+
};
|
|
13
|
+
// Render children nodes
|
|
14
|
+
const renderChildren = (children) => {
|
|
15
|
+
return children.map((child, index) => (_jsx(NodeRenderer, { node: child }, index)));
|
|
16
|
+
};
|
|
17
|
+
// Render phrasing content (inline elements)
|
|
18
|
+
const renderPhrasingContent = (children) => {
|
|
19
|
+
return children.map((child, index) => {
|
|
20
|
+
switch (child.type) {
|
|
21
|
+
case 'text':
|
|
22
|
+
return child.value;
|
|
23
|
+
case 'strong':
|
|
24
|
+
return _jsx("strong", { children: renderPhrasingContent(child.children) }, index);
|
|
25
|
+
case 'emphasis':
|
|
26
|
+
return _jsx("em", { children: renderPhrasingContent(child.children) }, index);
|
|
27
|
+
case 'delete':
|
|
28
|
+
return _jsx("del", { children: renderPhrasingContent(child.children) }, index);
|
|
29
|
+
case 'inlineCode': {
|
|
30
|
+
const InlineCode = getComponent('inlineCode');
|
|
31
|
+
return InlineCode ? _jsx(InlineCode, { node: child }, index) : _jsx("code", { children: child.value }, index);
|
|
32
|
+
}
|
|
33
|
+
case 'link': {
|
|
34
|
+
const Link = getComponent('link');
|
|
35
|
+
return Link ? (_jsx(Link, { node: child, children: renderPhrasingContent(child.children) }, index)) : (_jsx("a", { href: child.url, children: renderPhrasingContent(child.children) }, index));
|
|
36
|
+
}
|
|
37
|
+
case 'image': {
|
|
38
|
+
const Image = getComponent('image');
|
|
39
|
+
return Image ? _jsx(Image, { node: child }, index) : _jsx("img", { src: child.url, alt: child.alt || '' }, index);
|
|
40
|
+
}
|
|
41
|
+
case 'break':
|
|
42
|
+
return _jsx("br", {}, index);
|
|
43
|
+
case 'html':
|
|
44
|
+
// For safety, render HTML as text in React
|
|
45
|
+
return child.value;
|
|
46
|
+
default:
|
|
47
|
+
// For unknown inline types, try to render as text if possible
|
|
48
|
+
if ('value' in child && typeof child.value === 'string') {
|
|
49
|
+
return child.value;
|
|
50
|
+
}
|
|
51
|
+
if ('children' in child) {
|
|
52
|
+
return renderPhrasingContent(child.children);
|
|
53
|
+
}
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
};
|
|
58
|
+
// Handle different node types
|
|
59
|
+
switch (node.type) {
|
|
60
|
+
case 'root':
|
|
61
|
+
return _jsx(_Fragment, { children: renderChildren(node.children) });
|
|
62
|
+
case 'heading': {
|
|
63
|
+
const Heading = getComponent('heading');
|
|
64
|
+
return Heading ? (_jsx(Heading, { node: node, children: renderPhrasingContent(node.children) })) : null;
|
|
65
|
+
}
|
|
66
|
+
case 'paragraph': {
|
|
67
|
+
const Paragraph = getComponent('paragraph');
|
|
68
|
+
return Paragraph ? (_jsx(Paragraph, { node: node, children: renderPhrasingContent(node.children) })) : null;
|
|
69
|
+
}
|
|
70
|
+
case 'list': {
|
|
71
|
+
const List = getComponent('list');
|
|
72
|
+
return List ? (_jsx(List, { node: node, children: renderChildren(node.children) })) : null;
|
|
73
|
+
}
|
|
74
|
+
case 'listItem': {
|
|
75
|
+
const ListItem = getComponent('listItem');
|
|
76
|
+
const children = node.children.map((child, index) => {
|
|
77
|
+
// Unwrap single paragraph in list item
|
|
78
|
+
if (child.type === 'paragraph' && node.children.length === 1) {
|
|
79
|
+
return renderPhrasingContent(child.children);
|
|
80
|
+
}
|
|
81
|
+
return _jsx(NodeRenderer, { node: child }, index);
|
|
82
|
+
});
|
|
83
|
+
return ListItem ? _jsx(ListItem, { node: node, children: children }) : null;
|
|
84
|
+
}
|
|
85
|
+
case 'table': {
|
|
86
|
+
const Table = getComponent('table');
|
|
87
|
+
const TableRow = getComponent('tableRow');
|
|
88
|
+
if (!Table || !TableRow)
|
|
89
|
+
return null;
|
|
90
|
+
const [headerRow, ...bodyRows] = node.children;
|
|
91
|
+
return (_jsxs(Table, { node: node, children: [headerRow && (_jsx(TableRow, { node: headerRow, isHeader: true, children: headerRow.children.map((cell, index) => (_jsx(NodeRenderer, { node: cell }, index))) })), bodyRows.length > 0 && (_jsx("tbody", { children: bodyRows.map((row, rowIndex) => (_jsx(TableRow, { node: row, children: row.children.map((cell, cellIndex) => (_jsx(NodeRenderer, { node: cell }, cellIndex))) }, rowIndex))) }))] }));
|
|
92
|
+
}
|
|
93
|
+
case 'tableCell': {
|
|
94
|
+
const TableCell = getComponent('tableCell');
|
|
95
|
+
return TableCell ? (_jsx(TableCell, { node: node, children: renderPhrasingContent(node.children) })) : null;
|
|
96
|
+
}
|
|
97
|
+
case 'code': {
|
|
98
|
+
const Code = getComponent('code');
|
|
99
|
+
return Code ? _jsx(Code, { node: node }) : null;
|
|
100
|
+
}
|
|
101
|
+
case 'blockquote': {
|
|
102
|
+
const Blockquote = getComponent('blockquote');
|
|
103
|
+
return Blockquote ? (_jsx(Blockquote, { node: node, children: renderChildren(node.children) })) : null;
|
|
104
|
+
}
|
|
105
|
+
case 'thematicBreak':
|
|
106
|
+
return _jsx("hr", {});
|
|
107
|
+
case 'html':
|
|
108
|
+
// For safety, don't render raw HTML by default
|
|
109
|
+
return null;
|
|
110
|
+
case 'yaml':
|
|
111
|
+
// Frontmatter shouldn't be rendered
|
|
112
|
+
return null;
|
|
113
|
+
default: {
|
|
114
|
+
// Try to find a custom component for unknown types
|
|
115
|
+
const CustomComponent = getComponent(node.type);
|
|
116
|
+
if (CustomComponent) {
|
|
117
|
+
const children = 'children' in node
|
|
118
|
+
? renderChildren(node.children)
|
|
119
|
+
: undefined;
|
|
120
|
+
return _jsx(CustomComponent, { node: node, children: children });
|
|
121
|
+
}
|
|
122
|
+
// Fallback: try to render children if available
|
|
123
|
+
if ('children' in node) {
|
|
124
|
+
return _jsx(_Fragment, { children: renderChildren(node.children) });
|
|
125
|
+
}
|
|
126
|
+
return null;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
//# sourceMappingURL=NodeRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NodeRenderer.js","sourceRoot":"","sources":["../../src/components/NodeRenderer.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAA;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAM9C;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAA0B,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;IAC9D,MAAM,EAAE,UAAU,EAAE,GAAG,kBAAkB,EAAE,CAAA;IAE3C,uCAAuC;IACvC,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,EAAE;QACpC,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAA;IACpD,CAAC,CAAA;IAED,wBAAwB;IACxB,MAAM,cAAc,GAAG,CAAC,QAAmB,EAAa,EAAE;QACxD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CACpC,KAAC,YAAY,IAAa,IAAI,EAAE,KAAK,IAAlB,KAAK,CAAiB,CAC1C,CAAC,CAAA;IACJ,CAAC,CAAA;IAED,4CAA4C;IAC5C,MAAM,qBAAqB,GAAG,CAAC,QAA2B,EAAa,EAAE;QACvE,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACnC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;gBACnB,KAAK,MAAM;oBACT,OAAO,KAAK,CAAC,KAAK,CAAA;gBAEpB,KAAK,QAAQ;oBACX,OAAO,2BAAqB,qBAAqB,CAAC,KAAK,CAAC,QAAQ,CAAC,IAA7C,KAAK,CAAkD,CAAA;gBAE7E,KAAK,UAAU;oBACb,OAAO,uBAAiB,qBAAqB,CAAC,KAAK,CAAC,QAAQ,CAAC,IAA7C,KAAK,CAA8C,CAAA;gBAErE,KAAK,QAAQ;oBACX,OAAO,wBAAkB,qBAAqB,CAAC,KAAK,CAAC,QAAQ,CAAC,IAA7C,KAAK,CAA+C,CAAA;gBAEvE,KAAK,YAAY,CAAC,CAAC,CAAC;oBAClB,MAAM,UAAU,GAAG,YAAY,CAAC,YAAY,CAAC,CAAA;oBAC7C,OAAO,UAAU,CAAC,CAAC,CAAC,KAAC,UAAU,IAAa,IAAI,EAAE,KAAK,IAAlB,KAAK,CAAiB,CAAC,CAAC,CAAC,yBAAmB,KAAK,CAAC,KAAK,IAAnB,KAAK,CAAsB,CAAA;gBACtG,CAAC;gBAED,KAAK,MAAM,CAAC,CAAC,CAAC;oBACZ,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,CAAA;oBACjC,OAAO,IAAI,CAAC,CAAC,CAAC,CACZ,KAAC,IAAI,IAAa,IAAI,EAAE,KAAK,YAC1B,qBAAqB,CAAC,KAAK,CAAC,QAAQ,CAAC,IAD7B,KAAK,CAET,CACR,CAAC,CAAC,CAAC,CACF,YAAe,IAAI,EAAE,KAAK,CAAC,GAAG,YAC3B,qBAAqB,CAAC,KAAK,CAAC,QAAQ,CAAC,IADhC,KAAK,CAET,CACL,CAAA;gBACH,CAAC;gBAED,KAAK,OAAO,CAAC,CAAC,CAAC;oBACb,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;oBACnC,OAAO,KAAK,CAAC,CAAC,CAAC,KAAC,KAAK,IAAa,IAAI,EAAE,KAAK,IAAlB,KAAK,CAAiB,CAAC,CAAC,CAAC,cAAiB,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,EAAE,IAA3C,KAAK,CAA0C,CAAA;gBAC/G,CAAC;gBAED,KAAK,OAAO;oBACV,OAAO,eAAS,KAAK,CAAI,CAAA;gBAE3B,KAAK,MAAM;oBACT,2CAA2C;oBAC3C,OAAO,KAAK,CAAC,KAAK,CAAA;gBAEpB;oBACE,8DAA8D;oBAC9D,IAAI,OAAO,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;wBACxD,OAAO,KAAK,CAAC,KAAK,CAAA;oBACpB,CAAC;oBACD,IAAI,UAAU,IAAI,KAAK,EAAE,CAAC;wBACxB,OAAO,qBAAqB,CAAE,KAAa,CAAC,QAAQ,CAAC,CAAA;oBACvD,CAAC;oBACD,OAAO,IAAI,CAAA;YACf,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,CAAA;IAED,8BAA8B;IAC9B,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,MAAM;YACT,OAAO,4BAAG,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAI,CAAA;QAE7C,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,OAAO,GAAG,YAAY,CAAC,SAAS,CAAC,CAAA;YACvC,OAAO,OAAO,CAAC,CAAC,CAAC,CACf,KAAC,OAAO,IAAC,IAAI,EAAE,IAAI,YAAG,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAW,CACtE,CAAC,CAAC,CAAC,IAAI,CAAA;QACV,CAAC;QAED,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,SAAS,GAAG,YAAY,CAAC,WAAW,CAAC,CAAA;YAC3C,OAAO,SAAS,CAAC,CAAC,CAAC,CACjB,KAAC,SAAS,IAAC,IAAI,EAAE,IAAI,YAAG,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAa,CAC1E,CAAC,CAAC,CAAC,IAAI,CAAA;QACV,CAAC;QAED,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,CAAA;YACjC,OAAO,IAAI,CAAC,CAAC,CAAC,CACZ,KAAC,IAAI,IAAC,IAAI,EAAE,IAAI,YAAG,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAQ,CACzD,CAAC,CAAC,CAAC,IAAI,CAAA;QACV,CAAC;QAED,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,QAAQ,GAAG,YAAY,CAAC,UAAU,CAAC,CAAA;YACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBAClD,uCAAuC;gBACvC,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC7D,OAAO,qBAAqB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;gBAC9C,CAAC;gBACD,OAAO,KAAC,YAAY,IAAa,IAAI,EAAE,KAAK,IAAlB,KAAK,CAAiB,CAAA;YAClD,CAAC,CAAC,CAAA;YACF,OAAO,QAAQ,CAAC,CAAC,CAAC,KAAC,QAAQ,IAAC,IAAI,EAAE,IAAI,YAAG,QAAQ,GAAY,CAAC,CAAC,CAAC,IAAI,CAAA;QACtE,CAAC;QAED,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;YACnC,MAAM,QAAQ,GAAG,YAAY,CAAC,UAAU,CAAC,CAAA;YAEzC,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ;gBAAE,OAAO,IAAI,CAAA;YAEpC,MAAM,CAAC,SAAS,EAAE,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAA;YAE9C,OAAO,CACL,MAAC,KAAK,IAAC,IAAI,EAAE,IAAI,aACd,SAAS,IAAI,CACZ,KAAC,QAAQ,IAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,kBAChC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CACvC,KAAC,YAAY,IAAa,IAAI,EAAE,IAAI,IAAjB,KAAK,CAAgB,CACzC,CAAC,GACO,CACZ,EACA,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CACtB,0BACG,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,CAC/B,KAAC,QAAQ,IAAgB,IAAI,EAAE,GAAG,YAC/B,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,CACrC,KAAC,YAAY,IAAiB,IAAI,EAAE,IAAI,IAArB,SAAS,CAAgB,CAC7C,CAAC,IAHW,QAAQ,CAIZ,CACZ,CAAC,GACI,CACT,IACK,CACT,CAAA;QACH,CAAC;QAED,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,SAAS,GAAG,YAAY,CAAC,WAAW,CAAC,CAAA;YAC3C,OAAO,SAAS,CAAC,CAAC,CAAC,CACjB,KAAC,SAAS,IAAC,IAAI,EAAE,IAAI,YAAG,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAa,CAC1E,CAAC,CAAC,CAAC,IAAI,CAAA;QACV,CAAC;QAED,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,CAAA;YACjC,OAAO,IAAI,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,IAAI,EAAE,IAAI,GAAI,CAAC,CAAC,CAAC,IAAI,CAAA;QAC3C,CAAC;QAED,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,MAAM,UAAU,GAAG,YAAY,CAAC,YAAY,CAAC,CAAA;YAC7C,OAAO,UAAU,CAAC,CAAC,CAAC,CAClB,KAAC,UAAU,IAAC,IAAI,EAAE,IAAI,YAAG,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAc,CACrE,CAAC,CAAC,CAAC,IAAI,CAAA;QACV,CAAC;QAED,KAAK,eAAe;YAClB,OAAO,cAAM,CAAA;QAEf,KAAK,MAAM;YACT,+CAA+C;YAC/C,OAAO,IAAI,CAAA;QAEb,KAAK,MAAM;YACT,oCAAoC;YACpC,OAAO,IAAI,CAAA;QAEb,OAAO,CAAC,CAAC,CAAC;YACR,mDAAmD;YACnD,MAAM,eAAe,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAC/C,IAAI,eAAe,EAAE,CAAC;gBACpB,MAAM,QAAQ,GAAG,UAAU,IAAI,IAAI;oBACjC,CAAC,CAAC,cAAc,CAAE,IAAe,CAAC,QAAqB,CAAC;oBACxD,CAAC,CAAC,SAAS,CAAA;gBACb,OAAO,KAAC,eAAe,IAAC,IAAI,EAAE,IAAI,YAAG,QAAQ,GAAmB,CAAA;YAClE,CAAC;YAED,gDAAgD;YAChD,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;gBACvB,OAAO,4BAAG,cAAc,CAAE,IAAe,CAAC,QAAqB,CAAC,GAAI,CAAA;YACtE,CAAC;YAED,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ComponentMap } from './defaults';
|
|
2
|
+
/**
|
|
3
|
+
* Context value for markdown renderer
|
|
4
|
+
*/
|
|
5
|
+
export interface MarkdownContextValue {
|
|
6
|
+
/** Custom component overrides */
|
|
7
|
+
components: Partial<ComponentMap>;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Context for passing configuration down the component tree
|
|
11
|
+
*/
|
|
12
|
+
export declare const MarkdownContext: import("react").Context<MarkdownContextValue>;
|
|
13
|
+
/**
|
|
14
|
+
* Hook to access markdown context
|
|
15
|
+
*/
|
|
16
|
+
export declare function useMarkdownContext(): MarkdownContextValue;
|
|
17
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/components/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,iCAAiC;IACjC,UAAU,EAAE,OAAO,CAAC,YAAY,CAAC,CAAA;CAClC;AAED;;GAEG;AACH,eAAO,MAAM,eAAe,+CAE1B,CAAA;AAEF;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,oBAAoB,CAEzD"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { createContext, useContext } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Context for passing configuration down the component tree
|
|
4
|
+
*/
|
|
5
|
+
export const MarkdownContext = createContext({
|
|
6
|
+
components: {},
|
|
7
|
+
});
|
|
8
|
+
/**
|
|
9
|
+
* Hook to access markdown context
|
|
10
|
+
*/
|
|
11
|
+
export function useMarkdownContext() {
|
|
12
|
+
return useContext(MarkdownContext);
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/components/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAWjD;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,aAAa,CAAuB;IACjE,UAAU,EAAE,EAAE;CACf,CAAC,CAAA;AAEF;;GAEG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,UAAU,CAAC,eAAe,CAAC,CAAA;AACpC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { FC, ReactNode } from 'react';
|
|
2
|
+
import type { Blockquote as BlockquoteNode } from 'mdast';
|
|
3
|
+
export interface BlockquoteProps {
|
|
4
|
+
node: BlockquoteNode;
|
|
5
|
+
children: ReactNode;
|
|
6
|
+
}
|
|
7
|
+
export declare const Blockquote: FC<BlockquoteProps>;
|
|
8
|
+
//# sourceMappingURL=Blockquote.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Blockquote.d.ts","sourceRoot":"","sources":["../../../src/components/defaults/Blockquote.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAC1C,OAAO,KAAK,EAAE,UAAU,IAAI,cAAc,EAAE,MAAM,OAAO,CAAA;AAEzD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,cAAc,CAAA;IACpB,QAAQ,EAAE,SAAS,CAAA;CACpB;AAED,eAAO,MAAM,UAAU,EAAE,EAAE,CAAC,eAAe,CAE1C,CAAA"}
|