@multiplatform.one/markdown 6.0.4 → 6.3.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/README.md +61 -0
- package/dist/cjs/Aside/index.cjs +37 -32
- package/dist/cjs/Aside/index.native.js +41 -34
- package/dist/cjs/Aside/index.native.js.map +1 -1
- package/dist/cjs/ExternalIcon/index.cjs +2 -0
- package/dist/cjs/ExternalIcon/index.native.js +2 -0
- package/dist/cjs/ExternalIcon/index.native.js.map +1 -1
- package/dist/cjs/Hr/index.cjs +3 -11
- package/dist/cjs/Hr/index.native.js +3 -11
- package/dist/cjs/Hr/index.native.js.map +1 -1
- package/dist/cjs/{SimpleTable → MarkdownSimpleTable}/index.cjs +27 -9
- package/dist/{jsx/SimpleTable → cjs/MarkdownSimpleTable}/index.native.js +32 -11
- package/dist/cjs/MarkdownSimpleTable/index.native.js.map +1 -0
- package/dist/cjs/Mdx/index.cjs +15 -7
- package/dist/cjs/Mdx/index.native.js +15 -7
- package/dist/cjs/Mdx/index.native.js.map +1 -1
- package/dist/cjs/MdxCodeBlock/index.cjs +28 -20
- package/dist/cjs/MdxCodeBlock/index.native.js +33 -22
- package/dist/cjs/MdxCodeBlock/index.native.js.map +1 -1
- package/dist/cjs/Notice/index.cjs +13 -56
- package/dist/cjs/Notice/index.native.js +13 -56
- package/dist/cjs/Notice/index.native.js.map +1 -1
- package/dist/cjs/Table/index.cjs +13 -0
- package/dist/cjs/Table/index.native.js +15 -0
- package/dist/cjs/Table/index.native.js.map +1 -1
- package/dist/cjs/Tabs/index.cjs +15 -47
- package/dist/cjs/Tabs/index.native.js +20 -52
- package/dist/cjs/Tabs/index.native.js.map +1 -1
- package/dist/cjs/Ul/index.cjs +2 -2
- package/dist/cjs/Ul/index.native.js +2 -2
- package/dist/cjs/Ul/index.native.js.map +1 -1
- package/dist/cjs/Video/index.cjs +4 -2
- package/dist/cjs/Video/index.native.js +4 -2
- package/dist/cjs/Video/index.native.js.map +1 -1
- package/dist/cjs/components/Blockquote.cjs +16 -3
- package/dist/cjs/components/Blockquote.native.js +25 -3
- package/dist/cjs/components/Blockquote.native.js.map +1 -1
- package/dist/cjs/components/Break.cjs +1 -0
- package/dist/cjs/components/Break.native.js +1 -0
- package/dist/cjs/components/Break.native.js.map +1 -1
- package/dist/cjs/components/CodeBlock.cjs +20 -60
- package/dist/cjs/components/CodeBlock.native.js +22 -64
- package/dist/cjs/components/CodeBlock.native.js.map +1 -1
- package/dist/cjs/components/Heading.cjs +23 -0
- package/dist/cjs/components/Heading.native.js +24 -0
- package/dist/cjs/components/Heading.native.js.map +1 -1
- package/dist/cjs/components/Image.cjs +3 -5
- package/dist/cjs/components/Image.native.js +6 -5
- package/dist/cjs/components/Image.native.js.map +1 -1
- package/dist/cjs/components/InlineCode.cjs +3 -6
- package/dist/cjs/components/InlineCode.native.js +3 -6
- package/dist/cjs/components/InlineCode.native.js.map +1 -1
- package/dist/cjs/components/InlineStyles.cjs +3 -0
- package/dist/cjs/components/InlineStyles.native.js +3 -0
- package/dist/cjs/components/InlineStyles.native.js.map +1 -1
- package/dist/cjs/components/Link.cjs +22 -5
- package/dist/cjs/components/Link.native.js +23 -5
- package/dist/cjs/components/Link.native.js.map +1 -1
- package/dist/cjs/components/List.cjs +87 -9
- package/dist/cjs/components/List.native.js +91 -9
- package/dist/cjs/components/List.native.js.map +1 -1
- package/dist/cjs/components/Paragraph.cjs +6 -1
- package/dist/cjs/components/Paragraph.native.js +6 -1
- package/dist/cjs/components/Paragraph.native.js.map +1 -1
- package/dist/cjs/components/Table.cjs +57 -24
- package/dist/cjs/components/Table.native.js +67 -25
- package/dist/cjs/components/Table.native.js.map +1 -1
- package/dist/cjs/hooks/useCompileMdx.cjs +61 -28
- package/dist/cjs/hooks/useCompileMdx.native.js +80 -28
- package/dist/cjs/hooks/useCompileMdx.native.js.map +1 -1
- package/dist/cjs/hooks/useEvaluateMdx.cjs +7 -1
- package/dist/cjs/hooks/useEvaluateMdx.native.js +9 -3
- package/dist/cjs/hooks/useEvaluateMdx.native.js.map +1 -1
- package/dist/cjs/icons/index.cjs +31 -101
- package/dist/cjs/icons/index.native.js +36 -116
- package/dist/cjs/icons/index.native.js.map +1 -1
- package/dist/cjs/index.cjs +6 -4
- package/dist/cjs/index.native.js +6 -4
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/mdxComponents.cjs +13 -6
- package/dist/cjs/mdxComponents.native.js +16 -6
- package/dist/cjs/mdxComponents.native.js.map +1 -1
- package/dist/cjs/mermaid/MermaidBlock.cjs +110 -0
- package/dist/cjs/mermaid/MermaidBlock.native.js +41 -0
- package/dist/cjs/mermaid/MermaidBlock.native.js.map +1 -0
- package/dist/cjs/mermaid/index.cjs +31 -0
- package/dist/cjs/mermaid/index.native.js +34 -0
- package/dist/cjs/mermaid/index.native.js.map +1 -0
- package/dist/cjs/mermaid/mountDiagramSvg.cjs +54 -0
- package/dist/cjs/mermaid/mountDiagramSvg.native.js +98 -0
- package/dist/cjs/mermaid/mountDiagramSvg.native.js.map +1 -0
- package/dist/cjs/mermaid/renderMermaidDiagram.cjs +92 -0
- package/dist/cjs/mermaid/renderMermaidDiagram.native.js +110 -0
- package/dist/cjs/mermaid/renderMermaidDiagram.native.js.map +1 -0
- package/dist/cjs/renderer.cjs +9 -1
- package/dist/cjs/renderer.native.js +10 -2
- package/dist/cjs/renderer.native.js.map +1 -1
- package/dist/cjs/shared/colorRamps.cjs +1 -11
- package/dist/cjs/shared/colorRamps.native.js +1 -11
- package/dist/cjs/shared/colorRamps.native.js.map +1 -1
- package/dist/cjs/shared/cutoffGradient.cjs +54 -0
- package/dist/cjs/shared/cutoffGradient.native.js +63 -0
- package/dist/cjs/shared/cutoffGradient.native.js.map +1 -0
- package/dist/cjs/shiki/index.cjs +1 -16
- package/dist/cjs/shiki/index.native.js +0 -15
- package/dist/cjs/shiki/index.native.js.map +1 -1
- package/dist/esm/Aside/index.mjs +39 -34
- package/dist/esm/Aside/index.mjs.map +1 -1
- package/dist/esm/Aside/index.native.js +43 -36
- package/dist/esm/Aside/index.native.js.map +1 -1
- package/dist/esm/ExternalIcon/index.mjs +2 -0
- package/dist/esm/ExternalIcon/index.mjs.map +1 -1
- package/dist/esm/ExternalIcon/index.native.js +2 -0
- package/dist/esm/ExternalIcon/index.native.js.map +1 -1
- package/dist/esm/Hr/index.mjs +4 -12
- package/dist/esm/Hr/index.mjs.map +1 -1
- package/dist/esm/Hr/index.native.js +4 -12
- package/dist/esm/Hr/index.native.js.map +1 -1
- package/dist/esm/{SimpleTable → MarkdownSimpleTable}/index.mjs +24 -6
- package/dist/esm/MarkdownSimpleTable/index.mjs.map +1 -0
- package/dist/esm/{SimpleTable → MarkdownSimpleTable}/index.native.js +29 -8
- package/dist/esm/MarkdownSimpleTable/index.native.js.map +1 -0
- package/dist/esm/Mdx/index.mjs +15 -7
- package/dist/esm/Mdx/index.mjs.map +1 -1
- package/dist/esm/Mdx/index.native.js +15 -7
- package/dist/esm/Mdx/index.native.js.map +1 -1
- package/dist/esm/MdxCodeBlock/index.mjs +30 -22
- package/dist/esm/MdxCodeBlock/index.mjs.map +1 -1
- package/dist/esm/MdxCodeBlock/index.native.js +35 -24
- package/dist/esm/MdxCodeBlock/index.native.js.map +1 -1
- package/dist/esm/Notice/index.mjs +15 -57
- package/dist/esm/Notice/index.mjs.map +1 -1
- package/dist/esm/Notice/index.native.js +15 -57
- package/dist/esm/Notice/index.native.js.map +1 -1
- package/dist/esm/Table/index.mjs +13 -0
- package/dist/esm/Table/index.mjs.map +1 -1
- package/dist/esm/Table/index.native.js +15 -0
- package/dist/esm/Table/index.native.js.map +1 -1
- package/dist/esm/Tabs/index.mjs +17 -49
- package/dist/esm/Tabs/index.mjs.map +1 -1
- package/dist/esm/Tabs/index.native.js +22 -54
- package/dist/esm/Tabs/index.native.js.map +1 -1
- package/dist/esm/Ul/index.mjs +2 -2
- package/dist/esm/Ul/index.mjs.map +1 -1
- package/dist/esm/Ul/index.native.js +2 -2
- package/dist/esm/Ul/index.native.js.map +1 -1
- package/dist/esm/Video/index.mjs +4 -2
- package/dist/esm/Video/index.mjs.map +1 -1
- package/dist/esm/Video/index.native.js +4 -2
- package/dist/esm/Video/index.native.js.map +1 -1
- package/dist/esm/components/Blockquote.mjs +17 -4
- package/dist/esm/components/Blockquote.mjs.map +1 -1
- package/dist/esm/components/Blockquote.native.js +26 -4
- package/dist/esm/components/Blockquote.native.js.map +1 -1
- package/dist/esm/components/Break.mjs +2 -1
- package/dist/esm/components/Break.mjs.map +1 -1
- package/dist/esm/components/Break.native.js +2 -1
- package/dist/esm/components/Break.native.js.map +1 -1
- package/dist/esm/components/CodeBlock.mjs +21 -61
- package/dist/esm/components/CodeBlock.mjs.map +1 -1
- package/dist/esm/components/CodeBlock.native.js +23 -65
- package/dist/esm/components/CodeBlock.native.js.map +1 -1
- package/dist/esm/components/Heading.mjs +24 -1
- package/dist/esm/components/Heading.mjs.map +1 -1
- package/dist/esm/components/Heading.native.js +25 -1
- package/dist/esm/components/Heading.native.js.map +1 -1
- package/dist/esm/components/Image.mjs +3 -5
- package/dist/esm/components/Image.mjs.map +1 -1
- package/dist/esm/components/Image.native.js +6 -5
- package/dist/esm/components/Image.native.js.map +1 -1
- package/dist/esm/components/InlineCode.mjs +3 -6
- package/dist/esm/components/InlineCode.mjs.map +1 -1
- package/dist/esm/components/InlineCode.native.js +3 -6
- package/dist/esm/components/InlineCode.native.js.map +1 -1
- package/dist/esm/components/InlineStyles.mjs +3 -0
- package/dist/esm/components/InlineStyles.mjs.map +1 -1
- package/dist/esm/components/InlineStyles.native.js +3 -0
- package/dist/esm/components/InlineStyles.native.js.map +1 -1
- package/dist/esm/components/Link.mjs +23 -6
- package/dist/esm/components/Link.mjs.map +1 -1
- package/dist/esm/components/Link.native.js +24 -6
- package/dist/esm/components/Link.native.js.map +1 -1
- package/dist/esm/components/List.mjs +88 -10
- package/dist/esm/components/List.mjs.map +1 -1
- package/dist/esm/components/List.native.js +92 -10
- package/dist/esm/components/List.native.js.map +1 -1
- package/dist/esm/components/Paragraph.mjs +6 -1
- package/dist/esm/components/Paragraph.mjs.map +1 -1
- package/dist/esm/components/Paragraph.native.js +6 -1
- package/dist/esm/components/Paragraph.native.js.map +1 -1
- package/dist/esm/components/Table.mjs +59 -26
- package/dist/esm/components/Table.mjs.map +1 -1
- package/dist/esm/components/Table.native.js +69 -27
- package/dist/esm/components/Table.native.js.map +1 -1
- package/dist/esm/hooks/useCompileMdx.mjs +61 -29
- package/dist/esm/hooks/useCompileMdx.mjs.map +1 -1
- package/dist/esm/hooks/useCompileMdx.native.js +80 -29
- package/dist/esm/hooks/useCompileMdx.native.js.map +1 -1
- package/dist/esm/hooks/useEvaluateMdx.mjs +7 -1
- package/dist/esm/hooks/useEvaluateMdx.mjs.map +1 -1
- package/dist/esm/hooks/useEvaluateMdx.native.js +9 -3
- package/dist/esm/hooks/useEvaluateMdx.native.js.map +1 -1
- package/dist/esm/icons/index.mjs +32 -100
- package/dist/esm/icons/index.mjs.map +1 -1
- package/dist/esm/icons/index.native.js +37 -115
- package/dist/esm/icons/index.native.js.map +1 -1
- package/dist/esm/index.mjs +5 -3
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js +5 -3
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/mdxComponents.mjs +14 -7
- package/dist/esm/mdxComponents.mjs.map +1 -1
- package/dist/esm/mdxComponents.native.js +17 -7
- package/dist/esm/mdxComponents.native.js.map +1 -1
- package/dist/esm/mermaid/MermaidBlock.mjs +85 -0
- package/dist/esm/mermaid/MermaidBlock.mjs.map +1 -0
- package/dist/esm/mermaid/MermaidBlock.native.js +13 -0
- package/dist/esm/mermaid/MermaidBlock.native.js.map +1 -0
- package/dist/esm/mermaid/index.mjs +4 -0
- package/dist/esm/mermaid/index.mjs.map +1 -0
- package/dist/esm/mermaid/index.native.js +4 -0
- package/dist/esm/mermaid/index.native.js.map +1 -0
- package/dist/esm/mermaid/mountDiagramSvg.mjs +29 -0
- package/dist/esm/mermaid/mountDiagramSvg.mjs.map +1 -0
- package/dist/esm/mermaid/mountDiagramSvg.native.js +70 -0
- package/dist/esm/mermaid/mountDiagramSvg.native.js.map +1 -0
- package/dist/esm/mermaid/renderMermaidDiagram.mjs +55 -0
- package/dist/esm/mermaid/renderMermaidDiagram.mjs.map +1 -0
- package/dist/esm/mermaid/renderMermaidDiagram.native.js +70 -0
- package/dist/esm/mermaid/renderMermaidDiagram.native.js.map +1 -0
- package/dist/esm/renderer.mjs +9 -1
- package/dist/esm/renderer.mjs.map +1 -1
- package/dist/esm/renderer.native.js +10 -2
- package/dist/esm/renderer.native.js.map +1 -1
- package/dist/esm/shared/colorRamps.mjs +1 -10
- package/dist/esm/shared/colorRamps.mjs.map +1 -1
- package/dist/esm/shared/colorRamps.native.js +1 -10
- package/dist/esm/shared/colorRamps.native.js.map +1 -1
- package/dist/esm/shared/cutoffGradient.mjs +28 -0
- package/dist/esm/shared/cutoffGradient.mjs.map +1 -0
- package/dist/esm/shared/cutoffGradient.native.js +34 -0
- package/dist/esm/shared/cutoffGradient.native.js.map +1 -0
- package/dist/esm/shiki/index.mjs +1 -2
- package/dist/esm/shiki/index.mjs.map +1 -1
- package/dist/esm/shiki/index.native.js +1 -2
- package/dist/esm/shiki/index.native.js.map +1 -1
- package/dist/jsx/Aside/index.mjs +39 -34
- package/dist/jsx/Aside/index.mjs.map +1 -1
- package/dist/jsx/Aside/index.native.js +41 -34
- package/dist/jsx/Aside/index.native.js.map +1 -1
- package/dist/jsx/ExternalIcon/index.mjs +2 -0
- package/dist/jsx/ExternalIcon/index.mjs.map +1 -1
- package/dist/jsx/ExternalIcon/index.native.js +2 -0
- package/dist/jsx/ExternalIcon/index.native.js.map +1 -1
- package/dist/jsx/Hr/index.mjs +4 -12
- package/dist/jsx/Hr/index.mjs.map +1 -1
- package/dist/jsx/Hr/index.native.js +3 -11
- package/dist/jsx/Hr/index.native.js.map +1 -1
- package/dist/jsx/{SimpleTable → MarkdownSimpleTable}/index.mjs +24 -6
- package/dist/jsx/MarkdownSimpleTable/index.mjs.map +1 -0
- package/dist/{cjs/SimpleTable → jsx/MarkdownSimpleTable}/index.native.js +32 -11
- package/dist/jsx/MarkdownSimpleTable/index.native.js.map +1 -0
- package/dist/jsx/Mdx/index.mjs +15 -7
- package/dist/jsx/Mdx/index.mjs.map +1 -1
- package/dist/jsx/Mdx/index.native.js +15 -7
- package/dist/jsx/Mdx/index.native.js.map +1 -1
- package/dist/jsx/MdxCodeBlock/index.mjs +30 -22
- package/dist/jsx/MdxCodeBlock/index.mjs.map +1 -1
- package/dist/jsx/MdxCodeBlock/index.native.js +33 -22
- package/dist/jsx/MdxCodeBlock/index.native.js.map +1 -1
- package/dist/jsx/Notice/index.mjs +15 -57
- package/dist/jsx/Notice/index.mjs.map +1 -1
- package/dist/jsx/Notice/index.native.js +13 -56
- package/dist/jsx/Notice/index.native.js.map +1 -1
- package/dist/jsx/Table/index.mjs +13 -0
- package/dist/jsx/Table/index.mjs.map +1 -1
- package/dist/jsx/Table/index.native.js +15 -0
- package/dist/jsx/Table/index.native.js.map +1 -1
- package/dist/jsx/Tabs/index.mjs +17 -49
- package/dist/jsx/Tabs/index.mjs.map +1 -1
- package/dist/jsx/Tabs/index.native.js +20 -52
- package/dist/jsx/Tabs/index.native.js.map +1 -1
- package/dist/jsx/Ul/index.mjs +2 -2
- package/dist/jsx/Ul/index.mjs.map +1 -1
- package/dist/jsx/Ul/index.native.js +2 -2
- package/dist/jsx/Ul/index.native.js.map +1 -1
- package/dist/jsx/Video/index.mjs +4 -2
- package/dist/jsx/Video/index.mjs.map +1 -1
- package/dist/jsx/Video/index.native.js +4 -2
- package/dist/jsx/Video/index.native.js.map +1 -1
- package/dist/jsx/components/Blockquote.mjs +17 -4
- package/dist/jsx/components/Blockquote.mjs.map +1 -1
- package/dist/jsx/components/Blockquote.native.js +25 -3
- package/dist/jsx/components/Blockquote.native.js.map +1 -1
- package/dist/jsx/components/Break.mjs +2 -1
- package/dist/jsx/components/Break.mjs.map +1 -1
- package/dist/jsx/components/Break.native.js +1 -0
- package/dist/jsx/components/Break.native.js.map +1 -1
- package/dist/jsx/components/CodeBlock.mjs +21 -61
- package/dist/jsx/components/CodeBlock.mjs.map +1 -1
- package/dist/jsx/components/CodeBlock.native.js +22 -64
- package/dist/jsx/components/CodeBlock.native.js.map +1 -1
- package/dist/jsx/components/Heading.mjs +24 -1
- package/dist/jsx/components/Heading.mjs.map +1 -1
- package/dist/jsx/components/Heading.native.js +24 -0
- package/dist/jsx/components/Heading.native.js.map +1 -1
- package/dist/jsx/components/Image.mjs +3 -5
- package/dist/jsx/components/Image.mjs.map +1 -1
- package/dist/jsx/components/Image.native.js +6 -5
- package/dist/jsx/components/Image.native.js.map +1 -1
- package/dist/jsx/components/InlineCode.mjs +3 -6
- package/dist/jsx/components/InlineCode.mjs.map +1 -1
- package/dist/jsx/components/InlineCode.native.js +3 -6
- package/dist/jsx/components/InlineCode.native.js.map +1 -1
- package/dist/jsx/components/InlineStyles.mjs +3 -0
- package/dist/jsx/components/InlineStyles.mjs.map +1 -1
- package/dist/jsx/components/InlineStyles.native.js +3 -0
- package/dist/jsx/components/InlineStyles.native.js.map +1 -1
- package/dist/jsx/components/Link.mjs +23 -6
- package/dist/jsx/components/Link.mjs.map +1 -1
- package/dist/jsx/components/Link.native.js +23 -5
- package/dist/jsx/components/Link.native.js.map +1 -1
- package/dist/jsx/components/List.mjs +88 -10
- package/dist/jsx/components/List.mjs.map +1 -1
- package/dist/jsx/components/List.native.js +91 -9
- package/dist/jsx/components/List.native.js.map +1 -1
- package/dist/jsx/components/Paragraph.mjs +6 -1
- package/dist/jsx/components/Paragraph.mjs.map +1 -1
- package/dist/jsx/components/Paragraph.native.js +6 -1
- package/dist/jsx/components/Paragraph.native.js.map +1 -1
- package/dist/jsx/components/Table.mjs +59 -26
- package/dist/jsx/components/Table.mjs.map +1 -1
- package/dist/jsx/components/Table.native.js +67 -25
- package/dist/jsx/components/Table.native.js.map +1 -1
- package/dist/jsx/hooks/useCompileMdx.mjs +61 -29
- package/dist/jsx/hooks/useCompileMdx.mjs.map +1 -1
- package/dist/jsx/hooks/useCompileMdx.native.js +80 -28
- package/dist/jsx/hooks/useCompileMdx.native.js.map +1 -1
- package/dist/jsx/hooks/useEvaluateMdx.mjs +7 -1
- package/dist/jsx/hooks/useEvaluateMdx.mjs.map +1 -1
- package/dist/jsx/hooks/useEvaluateMdx.native.js +9 -3
- package/dist/jsx/hooks/useEvaluateMdx.native.js.map +1 -1
- package/dist/jsx/icons/index.mjs +32 -100
- package/dist/jsx/icons/index.mjs.map +1 -1
- package/dist/jsx/icons/index.native.js +36 -116
- package/dist/jsx/icons/index.native.js.map +1 -1
- package/dist/jsx/index.js +5 -3
- package/dist/jsx/index.js.map +1 -1
- package/dist/jsx/index.mjs +5 -3
- package/dist/jsx/index.mjs.map +1 -1
- package/dist/jsx/index.native.js +6 -4
- package/dist/jsx/index.native.js.map +1 -1
- package/dist/jsx/mdxComponents.mjs +14 -7
- package/dist/jsx/mdxComponents.mjs.map +1 -1
- package/dist/jsx/mdxComponents.native.js +16 -6
- package/dist/jsx/mdxComponents.native.js.map +1 -1
- package/dist/jsx/mermaid/MermaidBlock.mjs +85 -0
- package/dist/jsx/mermaid/MermaidBlock.mjs.map +1 -0
- package/dist/jsx/mermaid/MermaidBlock.native.js +41 -0
- package/dist/jsx/mermaid/MermaidBlock.native.js.map +1 -0
- package/dist/jsx/mermaid/index.mjs +4 -0
- package/dist/jsx/mermaid/index.mjs.map +1 -0
- package/dist/jsx/mermaid/index.native.js +34 -0
- package/dist/jsx/mermaid/index.native.js.map +1 -0
- package/dist/jsx/mermaid/mountDiagramSvg.mjs +29 -0
- package/dist/jsx/mermaid/mountDiagramSvg.mjs.map +1 -0
- package/dist/jsx/mermaid/mountDiagramSvg.native.js +98 -0
- package/dist/jsx/mermaid/mountDiagramSvg.native.js.map +1 -0
- package/dist/jsx/mermaid/renderMermaidDiagram.mjs +55 -0
- package/dist/jsx/mermaid/renderMermaidDiagram.mjs.map +1 -0
- package/dist/jsx/mermaid/renderMermaidDiagram.native.js +110 -0
- package/dist/jsx/mermaid/renderMermaidDiagram.native.js.map +1 -0
- package/dist/jsx/renderer.mjs +9 -1
- package/dist/jsx/renderer.mjs.map +1 -1
- package/dist/jsx/renderer.native.js +10 -2
- package/dist/jsx/renderer.native.js.map +1 -1
- package/dist/jsx/shared/colorRamps.mjs +1 -10
- package/dist/jsx/shared/colorRamps.mjs.map +1 -1
- package/dist/jsx/shared/colorRamps.native.js +1 -11
- package/dist/jsx/shared/colorRamps.native.js.map +1 -1
- package/dist/jsx/shared/cutoffGradient.mjs +28 -0
- package/dist/jsx/shared/cutoffGradient.mjs.map +1 -0
- package/dist/jsx/shared/cutoffGradient.native.js +63 -0
- package/dist/jsx/shared/cutoffGradient.native.js.map +1 -0
- package/dist/jsx/shiki/index.mjs +1 -2
- package/dist/jsx/shiki/index.mjs.map +1 -1
- package/dist/jsx/shiki/index.native.js +0 -15
- package/dist/jsx/shiki/index.native.js.map +1 -1
- package/package.json +25 -14
- package/src/Aside/index.tsx +42 -35
- package/src/ExternalIcon/index.tsx +8 -1
- package/src/Hr/index.tsx +3 -6
- package/src/{SimpleTable → MarkdownSimpleTable}/index.tsx +30 -12
- package/src/MarkdownSimpleTable/markdownSimpleTable.spec.tsx +92 -0
- package/src/Mdx/index.tsx +12 -7
- package/src/MdxCodeBlock/index.tsx +33 -20
- package/src/Notice/index.tsx +12 -54
- package/src/Table/index.tsx +22 -6
- package/src/Tabs/index.tsx +26 -52
- package/src/Ul/index.ts +2 -2
- package/src/Video/index.tsx +15 -12
- package/src/components/Blockquote.tsx +29 -4
- package/src/components/Break.tsx +3 -1
- package/src/components/CodeBlock.tsx +49 -79
- package/src/components/Heading.tsx +15 -2
- package/src/components/Image.tsx +6 -3
- package/src/components/InlineCode.tsx +14 -7
- package/src/components/InlineStyles.tsx +15 -3
- package/src/components/Link.tsx +29 -6
- package/src/components/List.tsx +111 -11
- package/src/components/Paragraph.tsx +6 -1
- package/src/components/Table.tsx +56 -35
- package/src/components/markdownPrimitives.spec.tsx +121 -0
- package/src/docBlocks.spec.tsx +85 -0
- package/src/hooks/useCompileMdx.ts +75 -35
- package/src/hooks/useEvaluateMdx.ts +7 -1
- package/src/icons/index.tsx +36 -58
- package/src/index.ts +15 -3
- package/src/markdownComponent.spec.tsx +58 -0
- package/src/mdx.spec.tsx +4 -0
- package/src/mdxComponents.spec.tsx +185 -0
- package/src/mdxComponents.tsx +14 -5
- package/src/mermaid/MermaidBlock.native.tsx +15 -0
- package/src/mermaid/MermaidBlock.tsx +88 -0
- package/src/mermaid/index.ts +23 -0
- package/src/mermaid/mountDiagramSvg.ts +49 -0
- package/src/mermaid/renderMermaidDiagram.spec.ts +89 -0
- package/src/mermaid/renderMermaidDiagram.ts +78 -0
- package/src/renderer.spec.tsx +276 -0
- package/src/renderer.tsx +13 -1
- package/src/shared/colorRamps.ts +0 -10
- package/src/shared/cutoffGradient.ts +40 -0
- package/src/shiki/index.ts +7 -11
- package/src/stories/Blocks.stories.tsx +232 -0
- package/src/stories/Callouts.stories.tsx +147 -0
- package/src/stories/Code.stories.tsx +116 -0
- package/src/stories/Inline.stories.tsx +162 -0
- package/src/stories/Mdx.stories.tsx +107 -0
- package/src/stories/Media.stories.tsx +148 -0
- package/src/stories/Tables.stories.tsx +173 -0
- package/types/Aside/index.d.ts +11 -0
- package/types/Aside/index.d.ts.map +1 -0
- package/types/ExternalIcon/index.d.ts +2 -0
- package/types/ExternalIcon/index.d.ts.map +1 -0
- package/types/Hr/index.d.ts +2 -0
- package/types/Hr/index.d.ts.map +1 -0
- package/types/Li/index.d.ts +6 -0
- package/types/Li/index.d.ts.map +1 -0
- package/types/Markdown.d.ts +22 -0
- package/types/Markdown.d.ts.map +1 -0
- package/types/MarkdownSimpleTable/index.d.ts +16 -0
- package/types/MarkdownSimpleTable/index.d.ts.map +1 -0
- package/types/Mdx/index.d.ts +9 -0
- package/types/Mdx/index.d.ts.map +1 -0
- package/types/MdxCodeBlock/index.d.ts +7 -0
- package/types/MdxCodeBlock/index.d.ts.map +1 -0
- package/types/MdxCodeBlock/mdxCodeBlockContext.d.ts +13 -0
- package/types/MdxCodeBlock/mdxCodeBlockContext.d.ts.map +1 -0
- package/types/Notice/index.d.ts +12 -0
- package/types/Notice/index.d.ts.map +1 -0
- package/types/Table/index.d.ts +20 -0
- package/types/Table/index.d.ts.map +1 -0
- package/types/Tabs/index.d.ts +21 -0
- package/types/Tabs/index.d.ts.map +1 -0
- package/types/Ul/index.d.ts +6 -0
- package/types/Ul/index.d.ts.map +1 -0
- package/types/Video/index.d.ts +12 -0
- package/types/Video/index.d.ts.map +1 -0
- package/types/components/Blockquote.d.ts +3 -0
- package/types/components/Blockquote.d.ts.map +1 -0
- package/types/components/Break.d.ts +3 -0
- package/types/components/Break.d.ts.map +1 -0
- package/types/components/CodeBlock.d.ts +17 -0
- package/types/components/CodeBlock.d.ts.map +1 -0
- package/types/components/Heading.d.ts +3 -0
- package/types/components/Heading.d.ts.map +1 -0
- package/types/components/HorizontalRule.d.ts +3 -0
- package/types/components/HorizontalRule.d.ts.map +1 -0
- package/types/components/Image.d.ts +3 -0
- package/types/components/Image.d.ts.map +1 -0
- package/types/components/InlineCode.d.ts +12 -0
- package/types/components/InlineCode.d.ts.map +1 -0
- package/types/components/InlineStyles.d.ts +5 -0
- package/types/components/InlineStyles.d.ts.map +1 -0
- package/types/components/Link.d.ts +3 -0
- package/types/components/Link.d.ts.map +1 -0
- package/types/components/List.d.ts +10 -0
- package/types/components/List.d.ts.map +1 -0
- package/types/components/Paragraph.d.ts +3 -0
- package/types/components/Paragraph.d.ts.map +1 -0
- package/types/components/Table.d.ts +13 -0
- package/types/components/Table.d.ts.map +1 -0
- package/types/components/index.d.ts +13 -0
- package/types/components/index.d.ts.map +1 -0
- package/types/hooks/index.d.ts +4 -0
- package/types/hooks/index.d.ts.map +1 -0
- package/types/hooks/useCompileAndEvaluateMdx.d.ts +9 -0
- package/types/hooks/useCompileAndEvaluateMdx.d.ts.map +1 -0
- package/types/hooks/useCompileMdx.d.ts +13 -0
- package/types/hooks/useCompileMdx.d.ts.map +1 -0
- package/types/hooks/useEvaluateMdx.d.ts +5 -0
- package/types/hooks/useEvaluateMdx.d.ts.map +1 -0
- package/types/icons/index.d.ts +12 -0
- package/types/icons/index.d.ts.map +1 -0
- package/types/index.d.ts +29 -0
- package/types/index.d.ts.map +1 -0
- package/types/mdxComponents.d.ts +8 -0
- package/types/mdxComponents.d.ts.map +1 -0
- package/types/mermaid/MermaidBlock.d.ts +15 -0
- package/types/mermaid/MermaidBlock.d.ts.map +1 -0
- package/types/mermaid/MermaidBlock.native.d.ts +10 -0
- package/types/mermaid/MermaidBlock.native.d.ts.map +1 -0
- package/types/mermaid/index.d.ts +18 -0
- package/types/mermaid/index.d.ts.map +1 -0
- package/types/mermaid/mountDiagramSvg.d.ts +11 -0
- package/types/mermaid/mountDiagramSvg.d.ts.map +1 -0
- package/types/mermaid/renderMermaidDiagram.d.ts +33 -0
- package/types/mermaid/renderMermaidDiagram.d.ts.map +1 -0
- package/types/parser.d.ts +11 -0
- package/types/parser.d.ts.map +1 -0
- package/types/renderer.d.ts +32 -0
- package/types/renderer.d.ts.map +1 -0
- package/types/shared/colorRamps.d.ts +39 -0
- package/types/shared/colorRamps.d.ts.map +1 -0
- package/types/shared/cutoffGradient.d.ts +12 -0
- package/types/shared/cutoffGradient.d.ts.map +1 -0
- package/types/shared/index.d.ts +2 -0
- package/types/shared/index.d.ts.map +1 -0
- package/types/shiki/index.d.ts +8 -0
- package/types/shiki/index.d.ts.map +1 -0
- package/types/types.d.ts +160 -0
- package/types/types.d.ts.map +1 -0
- package/types/util/rehypeMetaAttributes.d.ts +2 -0
- package/types/util/rehypeMetaAttributes.d.ts.map +1 -0
- package/dist/cjs/ExternalIcon/ExternalIcon.spec.cjs +0 -37
- package/dist/cjs/ExternalIcon/ExternalIcon.spec.native.js +0 -40
- package/dist/cjs/ExternalIcon/ExternalIcon.spec.native.js.map +0 -1
- package/dist/cjs/Hr/hr.spec.cjs +0 -21
- package/dist/cjs/Hr/hr.spec.native.js +0 -24
- package/dist/cjs/Hr/hr.spec.native.js.map +0 -1
- package/dist/cjs/Li/li.spec.cjs +0 -45
- package/dist/cjs/Li/li.spec.native.js +0 -50
- package/dist/cjs/Li/li.spec.native.js.map +0 -1
- package/dist/cjs/Markdown.stories.cjs +0 -153
- package/dist/cjs/Markdown.stories.native.js +0 -162
- package/dist/cjs/Markdown.stories.native.js.map +0 -1
- package/dist/cjs/Mdx/mdx.spec.cjs +0 -139
- package/dist/cjs/Mdx/mdx.spec.native.js +0 -158
- package/dist/cjs/Mdx/mdx.spec.native.js.map +0 -1
- package/dist/cjs/MdxCodeBlock/mdxCodeBlock.spec.cjs +0 -90
- package/dist/cjs/MdxCodeBlock/mdxCodeBlock.spec.native.js +0 -122
- package/dist/cjs/MdxCodeBlock/mdxCodeBlock.spec.native.js.map +0 -1
- package/dist/cjs/SimpleTable/index.native.js.map +0 -1
- package/dist/cjs/Ul/ul.spec.cjs +0 -150
- package/dist/cjs/Ul/ul.spec.native.js +0 -153
- package/dist/cjs/Ul/ul.spec.native.js.map +0 -1
- package/dist/cjs/hooks/useCompileAndEvaluateMdx.spec.cjs +0 -34
- package/dist/cjs/hooks/useCompileAndEvaluateMdx.spec.native.js +0 -49
- package/dist/cjs/hooks/useCompileAndEvaluateMdx.spec.native.js.map +0 -1
- package/dist/cjs/mdx.spec.cjs +0 -400
- package/dist/cjs/mdx.spec.native.js +0 -465
- package/dist/cjs/mdx.spec.native.js.map +0 -1
- package/dist/cjs/parser.spec.cjs +0 -109
- package/dist/cjs/parser.spec.native.js +0 -114
- package/dist/cjs/parser.spec.native.js.map +0 -1
- package/dist/cjs/shiki/highlighter.cjs +0 -89
- package/dist/cjs/shiki/highlighter.native.js +0 -94
- package/dist/cjs/shiki/highlighter.native.js.map +0 -1
- package/dist/cjs/util/util.spec.cjs +0 -81
- package/dist/cjs/util/util.spec.native.js +0 -84
- package/dist/cjs/util/util.spec.native.js.map +0 -1
- package/dist/esm/ExternalIcon/ExternalIcon.spec.mjs +0 -38
- package/dist/esm/ExternalIcon/ExternalIcon.spec.mjs.map +0 -1
- package/dist/esm/ExternalIcon/ExternalIcon.spec.native.js +0 -38
- package/dist/esm/ExternalIcon/ExternalIcon.spec.native.js.map +0 -1
- package/dist/esm/Hr/hr.spec.mjs +0 -22
- package/dist/esm/Hr/hr.spec.mjs.map +0 -1
- package/dist/esm/Hr/hr.spec.native.js +0 -22
- package/dist/esm/Hr/hr.spec.native.js.map +0 -1
- package/dist/esm/Li/li.spec.mjs +0 -46
- package/dist/esm/Li/li.spec.mjs.map +0 -1
- package/dist/esm/Li/li.spec.native.js +0 -48
- package/dist/esm/Li/li.spec.native.js.map +0 -1
- package/dist/esm/Markdown.stories.mjs +0 -125
- package/dist/esm/Markdown.stories.mjs.map +0 -1
- package/dist/esm/Markdown.stories.native.js +0 -131
- package/dist/esm/Markdown.stories.native.js.map +0 -1
- package/dist/esm/Mdx/mdx.spec.mjs +0 -140
- package/dist/esm/Mdx/mdx.spec.mjs.map +0 -1
- package/dist/esm/Mdx/mdx.spec.native.js +0 -156
- package/dist/esm/Mdx/mdx.spec.native.js.map +0 -1
- package/dist/esm/MdxCodeBlock/mdxCodeBlock.spec.mjs +0 -91
- package/dist/esm/MdxCodeBlock/mdxCodeBlock.spec.mjs.map +0 -1
- package/dist/esm/MdxCodeBlock/mdxCodeBlock.spec.native.js +0 -96
- package/dist/esm/MdxCodeBlock/mdxCodeBlock.spec.native.js.map +0 -1
- package/dist/esm/SimpleTable/index.mjs.map +0 -1
- package/dist/esm/SimpleTable/index.native.js.map +0 -1
- package/dist/esm/Ul/ul.spec.mjs +0 -151
- package/dist/esm/Ul/ul.spec.mjs.map +0 -1
- package/dist/esm/Ul/ul.spec.native.js +0 -151
- package/dist/esm/Ul/ul.spec.native.js.map +0 -1
- package/dist/esm/hooks/useCompileAndEvaluateMdx.spec.mjs +0 -35
- package/dist/esm/hooks/useCompileAndEvaluateMdx.spec.mjs.map +0 -1
- package/dist/esm/hooks/useCompileAndEvaluateMdx.spec.native.js +0 -47
- package/dist/esm/hooks/useCompileAndEvaluateMdx.spec.native.js.map +0 -1
- package/dist/esm/mdx.spec.mjs +0 -377
- package/dist/esm/mdx.spec.mjs.map +0 -1
- package/dist/esm/mdx.spec.native.js +0 -439
- package/dist/esm/mdx.spec.native.js.map +0 -1
- package/dist/esm/parser.spec.mjs +0 -110
- package/dist/esm/parser.spec.mjs.map +0 -1
- package/dist/esm/parser.spec.native.js +0 -112
- package/dist/esm/parser.spec.native.js.map +0 -1
- package/dist/esm/shiki/highlighter.mjs +0 -59
- package/dist/esm/shiki/highlighter.mjs.map +0 -1
- package/dist/esm/shiki/highlighter.native.js +0 -61
- package/dist/esm/shiki/highlighter.native.js.map +0 -1
- package/dist/esm/util/util.spec.mjs +0 -82
- package/dist/esm/util/util.spec.mjs.map +0 -1
- package/dist/esm/util/util.spec.native.js +0 -82
- package/dist/esm/util/util.spec.native.js.map +0 -1
- package/dist/jsx/ExternalIcon/ExternalIcon.spec.mjs +0 -38
- package/dist/jsx/ExternalIcon/ExternalIcon.spec.mjs.map +0 -1
- package/dist/jsx/ExternalIcon/ExternalIcon.spec.native.js +0 -40
- package/dist/jsx/ExternalIcon/ExternalIcon.spec.native.js.map +0 -1
- package/dist/jsx/Hr/hr.spec.mjs +0 -22
- package/dist/jsx/Hr/hr.spec.mjs.map +0 -1
- package/dist/jsx/Hr/hr.spec.native.js +0 -24
- package/dist/jsx/Hr/hr.spec.native.js.map +0 -1
- package/dist/jsx/Li/li.spec.mjs +0 -46
- package/dist/jsx/Li/li.spec.mjs.map +0 -1
- package/dist/jsx/Li/li.spec.native.js +0 -50
- package/dist/jsx/Li/li.spec.native.js.map +0 -1
- package/dist/jsx/Markdown.stories.mjs +0 -125
- package/dist/jsx/Markdown.stories.mjs.map +0 -1
- package/dist/jsx/Markdown.stories.native.js +0 -162
- package/dist/jsx/Markdown.stories.native.js.map +0 -1
- package/dist/jsx/Mdx/mdx.spec.mjs +0 -140
- package/dist/jsx/Mdx/mdx.spec.mjs.map +0 -1
- package/dist/jsx/Mdx/mdx.spec.native.js +0 -158
- package/dist/jsx/Mdx/mdx.spec.native.js.map +0 -1
- package/dist/jsx/MdxCodeBlock/mdxCodeBlock.spec.mjs +0 -91
- package/dist/jsx/MdxCodeBlock/mdxCodeBlock.spec.mjs.map +0 -1
- package/dist/jsx/MdxCodeBlock/mdxCodeBlock.spec.native.js +0 -122
- package/dist/jsx/MdxCodeBlock/mdxCodeBlock.spec.native.js.map +0 -1
- package/dist/jsx/SimpleTable/index.mjs.map +0 -1
- package/dist/jsx/SimpleTable/index.native.js.map +0 -1
- package/dist/jsx/Ul/ul.spec.mjs +0 -151
- package/dist/jsx/Ul/ul.spec.mjs.map +0 -1
- package/dist/jsx/Ul/ul.spec.native.js +0 -153
- package/dist/jsx/Ul/ul.spec.native.js.map +0 -1
- package/dist/jsx/hooks/useCompileAndEvaluateMdx.spec.mjs +0 -35
- package/dist/jsx/hooks/useCompileAndEvaluateMdx.spec.mjs.map +0 -1
- package/dist/jsx/hooks/useCompileAndEvaluateMdx.spec.native.js +0 -49
- package/dist/jsx/hooks/useCompileAndEvaluateMdx.spec.native.js.map +0 -1
- package/dist/jsx/mdx.spec.mjs +0 -377
- package/dist/jsx/mdx.spec.mjs.map +0 -1
- package/dist/jsx/mdx.spec.native.js +0 -465
- package/dist/jsx/mdx.spec.native.js.map +0 -1
- package/dist/jsx/parser.spec.mjs +0 -110
- package/dist/jsx/parser.spec.mjs.map +0 -1
- package/dist/jsx/parser.spec.native.js +0 -114
- package/dist/jsx/parser.spec.native.js.map +0 -1
- package/dist/jsx/shiki/highlighter.mjs +0 -59
- package/dist/jsx/shiki/highlighter.mjs.map +0 -1
- package/dist/jsx/shiki/highlighter.native.js +0 -94
- package/dist/jsx/shiki/highlighter.native.js.map +0 -1
- package/dist/jsx/util/util.spec.mjs +0 -82
- package/dist/jsx/util/util.spec.mjs.map +0 -1
- package/dist/jsx/util/util.spec.native.js +0 -84
- package/dist/jsx/util/util.spec.native.js.map +0 -1
- package/src/shiki/highlighter.ts +0 -148
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Renderer contract specs — the mdast → React pipeline consumers hit through
|
|
3
|
+
* `<Markdown>` / `renderMarkdown`. Locks down: every markdown construct maps
|
|
4
|
+
* to real DOM semantics, custom component overrides win over the built-ins,
|
|
5
|
+
* unsafe link protocols are stripped, and unknown nodes degrade gracefully.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
9
|
+
import { Text, View } from "tamagui";
|
|
10
|
+
import { describe, expect, it } from "vitest";
|
|
11
|
+
import { parseMarkdown } from "./parser";
|
|
12
|
+
import { renderMarkdown, renderNode } from "./renderer";
|
|
13
|
+
import type { MarkdownComponents } from "./types";
|
|
14
|
+
|
|
15
|
+
function renderDoc(markdown: string, components?: Partial<MarkdownComponents>) {
|
|
16
|
+
const ast = parseMarkdown(markdown);
|
|
17
|
+
return renderWithProviders(<>{renderMarkdown(ast, { components })}</>);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
describe("renderMarkdown — default component semantics", () => {
|
|
21
|
+
it("renders headings at every depth as real h1–h6 elements", () => {
|
|
22
|
+
const { container } = renderDoc(
|
|
23
|
+
["# one", "## two", "### three", "#### four", "##### five", "###### six"].join("\n\n"),
|
|
24
|
+
);
|
|
25
|
+
for (const [tag, text] of [
|
|
26
|
+
["h1", "one"],
|
|
27
|
+
["h2", "two"],
|
|
28
|
+
["h3", "three"],
|
|
29
|
+
["h4", "four"],
|
|
30
|
+
["h5", "five"],
|
|
31
|
+
["h6", "six"],
|
|
32
|
+
] as const) {
|
|
33
|
+
const el = container.querySelector(tag);
|
|
34
|
+
expect(el, tag).toBeTruthy();
|
|
35
|
+
expect(el!.textContent).toBe(text);
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
it("renders paragraph text with strong/em/del inline semantics", () => {
|
|
40
|
+
const { container } = renderDoc("plain **bold** *italic* ~~gone~~");
|
|
41
|
+
expect(container.querySelector("strong")?.textContent).toBe("bold");
|
|
42
|
+
expect(container.querySelector("em")?.textContent).toBe("italic");
|
|
43
|
+
expect(container.querySelector("del")?.textContent).toBe("gone");
|
|
44
|
+
expect(container.textContent).toContain("plain");
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
it("renders inline code through a real <code> element", () => {
|
|
48
|
+
const { container } = renderDoc("run `pnpm test` now");
|
|
49
|
+
const code = container.querySelector("code");
|
|
50
|
+
expect(code).toBeTruthy();
|
|
51
|
+
expect(code!.textContent).toBe("pnpm test");
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
it("renders links as anchors with href and external target/rel", () => {
|
|
55
|
+
const { container } = renderDoc('[docs](https://example.com "Docs")');
|
|
56
|
+
const anchor = container.querySelector("a");
|
|
57
|
+
expect(anchor).toBeTruthy();
|
|
58
|
+
expect(anchor!.getAttribute("href")).toBe("https://example.com");
|
|
59
|
+
expect(anchor!.getAttribute("target")).toBe("_blank");
|
|
60
|
+
expect(anchor!.getAttribute("rel")).toBe("noopener noreferrer");
|
|
61
|
+
expect(anchor!.getAttribute("title")).toBe("Docs");
|
|
62
|
+
expect(anchor!.textContent).toBe("docs");
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
it("keeps relative links same-tab without target/rel", () => {
|
|
66
|
+
const { container } = renderDoc("[guide](/docs/guide)");
|
|
67
|
+
const anchor = container.querySelector("a");
|
|
68
|
+
expect(anchor!.getAttribute("href")).toBe("/docs/guide");
|
|
69
|
+
expect(anchor!.getAttribute("target")).toBeNull();
|
|
70
|
+
expect(anchor!.getAttribute("rel")).toBeNull();
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
it("strips unsafe link protocols instead of emitting them (XSS guard)", () => {
|
|
74
|
+
const { container } = renderDoc("[evil](javascript:alert(1))");
|
|
75
|
+
const anchor = container.querySelector("a");
|
|
76
|
+
expect(anchor).toBeTruthy();
|
|
77
|
+
expect(anchor!.getAttribute("href")).toBeNull();
|
|
78
|
+
expect(anchor!.textContent).toBe("evil");
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
it("renders images with alt text exposed for accessibility", () => {
|
|
82
|
+
const { container } = renderDoc("");
|
|
83
|
+
const labeled = container.querySelector('[aria-label="a kitten"]');
|
|
84
|
+
expect(labeled).toBeTruthy();
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
it("renders unordered lists as ul > li with bullet markers", () => {
|
|
88
|
+
const { container } = renderDoc("- alpha\n- beta");
|
|
89
|
+
const ul = container.querySelector("ul");
|
|
90
|
+
expect(ul).toBeTruthy();
|
|
91
|
+
const items = ul!.querySelectorAll("li");
|
|
92
|
+
expect(items).toHaveLength(2);
|
|
93
|
+
expect(items[0].textContent).toContain("alpha");
|
|
94
|
+
expect(items[0].textContent).toContain("•");
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
it("renders ordered lists with a custom start offset in the markers", () => {
|
|
98
|
+
const { container } = renderDoc("3. third\n4. fourth");
|
|
99
|
+
const ol = container.querySelector("ol");
|
|
100
|
+
expect(ol).toBeTruthy();
|
|
101
|
+
const items = ol!.querySelectorAll("li");
|
|
102
|
+
expect(items[0].textContent).toContain("3.");
|
|
103
|
+
expect(items[1].textContent).toContain("4.");
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
it("renders GFM task lists as read-only checkboxes with aria-checked state", () => {
|
|
107
|
+
const { container } = renderDoc("- [x] done\n- [ ] todo");
|
|
108
|
+
const boxes = container.querySelectorAll('[role="checkbox"]');
|
|
109
|
+
expect(boxes).toHaveLength(2);
|
|
110
|
+
expect(boxes[0].getAttribute("aria-checked")).toBe("true");
|
|
111
|
+
expect(boxes[1].getAttribute("aria-checked")).toBe("false");
|
|
112
|
+
expect(boxes[0].getAttribute("aria-disabled")).toBe("true");
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
it("renders blockquote content", () => {
|
|
116
|
+
const { container } = renderDoc("> wise words");
|
|
117
|
+
expect(container.textContent).toContain("wise words");
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
it("renders GFM tables into thead/tbody with header and data cells", () => {
|
|
121
|
+
const { container } = renderDoc(
|
|
122
|
+
["| Name | Age |", "| :--- | ---: |", "| Ada | 36 |", "| Grace | 85 |"].join("\n"),
|
|
123
|
+
);
|
|
124
|
+
expect(container.querySelector("table")).toBeTruthy();
|
|
125
|
+
const headers = container.querySelectorAll("thead th");
|
|
126
|
+
expect(headers).toHaveLength(2);
|
|
127
|
+
expect(headers[0].textContent).toBe("Name");
|
|
128
|
+
const bodyRows = container.querySelectorAll("tbody tr");
|
|
129
|
+
expect(bodyRows).toHaveLength(2);
|
|
130
|
+
expect(bodyRows[0].querySelectorAll("td")[0].textContent).toBe("Ada");
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
it("renders hard line breaks as <br> on web", () => {
|
|
134
|
+
const { container } = renderDoc("first \nsecond");
|
|
135
|
+
expect(container.querySelector("br")).toBeTruthy();
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
it("renders raw html blocks via innerHTML on web", () => {
|
|
139
|
+
const { container } = renderDoc('<div class="raw-html-marker">raw!</div>');
|
|
140
|
+
const marker = container.querySelector(".raw-html-marker");
|
|
141
|
+
expect(marker).toBeTruthy();
|
|
142
|
+
expect(marker!.textContent).toBe("raw!");
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
it("renders a thematic break without crashing surrounding content", () => {
|
|
146
|
+
const { container } = renderDoc("above\n\n---\n\nbelow");
|
|
147
|
+
expect(container.textContent).toContain("above");
|
|
148
|
+
expect(container.textContent).toContain("below");
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
describe("renderMarkdown — custom component overrides", () => {
|
|
153
|
+
it("prefers custom heading/paragraph/inline components over the built-ins", () => {
|
|
154
|
+
const components: Partial<MarkdownComponents> = {
|
|
155
|
+
h1: ({ children }) => <Text data-testid="custom-h1">{children}</Text>,
|
|
156
|
+
p: ({ children }) => <Text data-testid="custom-p">{children}</Text>,
|
|
157
|
+
strong: ({ children }) => <Text data-testid="custom-strong">{children}</Text>,
|
|
158
|
+
em: ({ children }) => <Text data-testid="custom-em">{children}</Text>,
|
|
159
|
+
del: ({ children }) => <Text data-testid="custom-del">{children}</Text>,
|
|
160
|
+
inlineCode: ({ children }) => <Text data-testid="custom-inline-code">{children}</Text>,
|
|
161
|
+
};
|
|
162
|
+
const { getByTestId } = renderDoc("# Title\n\n**b** *i* ~~d~~ `c`", components);
|
|
163
|
+
expect(getByTestId("custom-h1").textContent).toBe("Title");
|
|
164
|
+
expect(getByTestId("custom-p")).toBeTruthy();
|
|
165
|
+
expect(getByTestId("custom-strong").textContent).toBe("b");
|
|
166
|
+
expect(getByTestId("custom-em").textContent).toBe("i");
|
|
167
|
+
expect(getByTestId("custom-del").textContent).toBe("d");
|
|
168
|
+
expect(getByTestId("custom-inline-code").textContent).toBe("c");
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
it("routes fenced code through the custom code component with lang and meta", () => {
|
|
172
|
+
let seen: { lang?: string | null; meta?: string | null } = {};
|
|
173
|
+
const components: Partial<MarkdownComponents> = {
|
|
174
|
+
code: ({ children, lang, meta }) => {
|
|
175
|
+
seen = { lang, meta };
|
|
176
|
+
return <Text data-testid="custom-code">{children}</Text>;
|
|
177
|
+
},
|
|
178
|
+
};
|
|
179
|
+
const { getByTestId } = renderDoc('```ts title="x"\nconst a = 1;\n```', components);
|
|
180
|
+
expect(getByTestId("custom-code").textContent).toBe("const a = 1;");
|
|
181
|
+
expect(seen.lang).toBe("ts");
|
|
182
|
+
expect(seen.meta).toBe('title="x"');
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
it("routes links and images through custom a/img components", () => {
|
|
186
|
+
const components: Partial<MarkdownComponents> = {
|
|
187
|
+
a: ({ href, children }) => (
|
|
188
|
+
<Text data-testid="custom-a" data-href={href}>
|
|
189
|
+
{children}
|
|
190
|
+
</Text>
|
|
191
|
+
),
|
|
192
|
+
img: ({ src, alt }) => <Text data-testid="custom-img">{`${alt}:${src}`}</Text>,
|
|
193
|
+
};
|
|
194
|
+
const { getByTestId } = renderDoc("[x](/y)\n\n", components);
|
|
195
|
+
expect(getByTestId("custom-a").getAttribute("data-href")).toBe("/y");
|
|
196
|
+
expect(getByTestId("custom-img").textContent).toBe("pic:/img.png");
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
it("routes lists through custom ul/ol/li with ordered/start metadata", () => {
|
|
200
|
+
const olSeen: Array<{ ordered: boolean; start?: number | null }> = [];
|
|
201
|
+
const components: Partial<MarkdownComponents> = {
|
|
202
|
+
ol: ({ children, ordered, start }) => {
|
|
203
|
+
olSeen.push({ ordered, start });
|
|
204
|
+
return <View data-testid="custom-ol">{children}</View>;
|
|
205
|
+
},
|
|
206
|
+
li: ({ children, checked }) => (
|
|
207
|
+
<Text data-testid="custom-li" data-checked={String(checked)}>
|
|
208
|
+
{children}
|
|
209
|
+
</Text>
|
|
210
|
+
),
|
|
211
|
+
};
|
|
212
|
+
const { getByTestId, getAllByTestId } = renderDoc("5. five\n6. six", components);
|
|
213
|
+
expect(getByTestId("custom-ol")).toBeTruthy();
|
|
214
|
+
expect(olSeen[0]).toEqual({ ordered: true, start: 5 });
|
|
215
|
+
expect(getAllByTestId("custom-li")).toHaveLength(2);
|
|
216
|
+
});
|
|
217
|
+
|
|
218
|
+
it("routes blockquote/hr/br/table parts through custom components", () => {
|
|
219
|
+
const components: Partial<MarkdownComponents> = {
|
|
220
|
+
blockquote: ({ children }) => <View data-testid="custom-bq">{children}</View>,
|
|
221
|
+
hr: () => <View data-testid="custom-hr" />,
|
|
222
|
+
br: () => <Text data-testid="custom-br"> </Text>,
|
|
223
|
+
table: ({ children }) => <View data-testid="custom-table">{children}</View>,
|
|
224
|
+
tr: ({ children, isHeader }) => (
|
|
225
|
+
<View data-testid={isHeader ? "custom-tr-head" : "custom-tr-body"}>{children}</View>
|
|
226
|
+
),
|
|
227
|
+
th: ({ children }) => <Text data-testid="custom-th">{children}</Text>,
|
|
228
|
+
td: ({ children, align }) => (
|
|
229
|
+
<Text data-testid="custom-td" data-align={String(align)}>
|
|
230
|
+
{children}
|
|
231
|
+
</Text>
|
|
232
|
+
),
|
|
233
|
+
};
|
|
234
|
+
const doc = ["> quote", "", "---", "", "a ", "b", "", "| H |", "| :---: |", "| D |"].join(
|
|
235
|
+
"\n",
|
|
236
|
+
);
|
|
237
|
+
const { getByTestId } = renderDoc(doc, components);
|
|
238
|
+
expect(getByTestId("custom-bq").textContent).toContain("quote");
|
|
239
|
+
expect(getByTestId("custom-hr")).toBeTruthy();
|
|
240
|
+
expect(getByTestId("custom-br")).toBeTruthy();
|
|
241
|
+
expect(getByTestId("custom-table")).toBeTruthy();
|
|
242
|
+
expect(getByTestId("custom-tr-head")).toBeTruthy();
|
|
243
|
+
expect(getByTestId("custom-tr-body")).toBeTruthy();
|
|
244
|
+
expect(getByTestId("custom-th").textContent).toBe("H");
|
|
245
|
+
expect(getByTestId("custom-td").textContent).toBe("D");
|
|
246
|
+
expect(getByTestId("custom-td").getAttribute("data-align")).toBe("center");
|
|
247
|
+
});
|
|
248
|
+
});
|
|
249
|
+
|
|
250
|
+
describe("renderNode — unknown node degradation", () => {
|
|
251
|
+
it("renders children of unknown container nodes instead of dropping them", () => {
|
|
252
|
+
const { container } = renderWithProviders(
|
|
253
|
+
<>
|
|
254
|
+
{renderNode(
|
|
255
|
+
{
|
|
256
|
+
type: "futureContainer",
|
|
257
|
+
children: [{ type: "text", value: "still visible" }],
|
|
258
|
+
} as any,
|
|
259
|
+
0,
|
|
260
|
+
)}
|
|
261
|
+
</>,
|
|
262
|
+
);
|
|
263
|
+
expect(container.textContent).toContain("still visible");
|
|
264
|
+
});
|
|
265
|
+
|
|
266
|
+
it("renders unknown leaf nodes with a string value as text", () => {
|
|
267
|
+
const { container } = renderWithProviders(
|
|
268
|
+
<>{renderNode({ type: "futureLeaf", value: "leaf value" } as any, 0)}</>,
|
|
269
|
+
);
|
|
270
|
+
expect(container.textContent).toContain("leaf value");
|
|
271
|
+
});
|
|
272
|
+
|
|
273
|
+
it("returns null for unknown nodes with neither children nor value", () => {
|
|
274
|
+
expect(renderNode({ type: "mystery" } as any, 0)).toBeNull();
|
|
275
|
+
});
|
|
276
|
+
});
|
package/src/renderer.tsx
CHANGED
|
@@ -47,6 +47,7 @@ import {
|
|
|
47
47
|
MarkdownTableCell,
|
|
48
48
|
Break,
|
|
49
49
|
} from "./components";
|
|
50
|
+
import { MermaidBlock } from "./mermaid/MermaidBlock";
|
|
50
51
|
|
|
51
52
|
type AnyNode =
|
|
52
53
|
| Root
|
|
@@ -77,6 +78,7 @@ interface RenderOptions {
|
|
|
77
78
|
listContext?: {
|
|
78
79
|
ordered: boolean;
|
|
79
80
|
index: number;
|
|
81
|
+
start?: number;
|
|
80
82
|
};
|
|
81
83
|
}
|
|
82
84
|
|
|
@@ -173,6 +175,11 @@ export function renderNode(
|
|
|
173
175
|
</CustomCode>
|
|
174
176
|
);
|
|
175
177
|
}
|
|
178
|
+
// ```mermaid fences render as live diagrams (GitLab parity); the
|
|
179
|
+
// engine lazy-loads on first diagram, native falls back to code.
|
|
180
|
+
if (codeNode.lang === "mermaid") {
|
|
181
|
+
return <MermaidBlock key={key}>{codeNode.value}</MermaidBlock>;
|
|
182
|
+
}
|
|
176
183
|
return (
|
|
177
184
|
<CodeBlock key={key} lang={codeNode.lang} theme={codeTheme}>
|
|
178
185
|
{codeNode.value}
|
|
@@ -212,7 +219,11 @@ export function renderNode(
|
|
|
212
219
|
const listChildren = listNode.children.map((child, i) =>
|
|
213
220
|
renderNode(child, i, {
|
|
214
221
|
...options,
|
|
215
|
-
listContext: {
|
|
222
|
+
listContext: {
|
|
223
|
+
ordered: listNode.ordered ?? false,
|
|
224
|
+
index: i,
|
|
225
|
+
start: listNode.start ?? undefined,
|
|
226
|
+
},
|
|
216
227
|
}),
|
|
217
228
|
);
|
|
218
229
|
if (CustomList) {
|
|
@@ -245,6 +256,7 @@ export function renderNode(
|
|
|
245
256
|
checked={liNode.checked}
|
|
246
257
|
index={listContext?.index}
|
|
247
258
|
ordered={listContext?.ordered}
|
|
259
|
+
start={listContext?.start}
|
|
248
260
|
>
|
|
249
261
|
{renderChildren(liNode, options)}
|
|
250
262
|
</MarkdownListItem>
|
package/src/shared/colorRamps.ts
CHANGED
|
@@ -28,16 +28,6 @@ export const markdownBlockquoteColors = {
|
|
|
28
28
|
},
|
|
29
29
|
} as const;
|
|
30
30
|
|
|
31
|
-
export const markdownTableColors = {
|
|
32
|
-
background: {
|
|
33
|
-
base: "transparent",
|
|
34
|
-
header: "$color3",
|
|
35
|
-
},
|
|
36
|
-
border: {
|
|
37
|
-
base: "$borderColor",
|
|
38
|
-
},
|
|
39
|
-
} as const;
|
|
40
|
-
|
|
41
31
|
export const markdownLinkColors = {
|
|
42
32
|
text: {
|
|
43
33
|
base: "$blue10",
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { useTheme } from "tamagui";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Convert a concrete CSS color into its fully transparent variant so a
|
|
5
|
+
* LinearGradient can fade from transparent into the color.
|
|
6
|
+
*/
|
|
7
|
+
export function toTransparent(color: string): string {
|
|
8
|
+
const fnMatch = color.match(/^(rgb|hsl)a?\(([^)]+)\)$/i);
|
|
9
|
+
if (fnMatch) {
|
|
10
|
+
const parts = fnMatch[2].split(",").map((part) => part.trim());
|
|
11
|
+
const [a, b, c] = parts;
|
|
12
|
+
return `${fnMatch[1].toLowerCase()}a(${a}, ${b}, ${c}, 0)`;
|
|
13
|
+
}
|
|
14
|
+
const hexMatch = color.match(/^#([0-9a-f]{3}|[0-9a-f]{6})$/i);
|
|
15
|
+
if (hexMatch) {
|
|
16
|
+
let hex = hexMatch[1];
|
|
17
|
+
if (hex.length === 3) {
|
|
18
|
+
hex = hex
|
|
19
|
+
.split("")
|
|
20
|
+
.map((char) => char + char)
|
|
21
|
+
.join("");
|
|
22
|
+
}
|
|
23
|
+
const r = Number.parseInt(hex.slice(0, 2), 16);
|
|
24
|
+
const g = Number.parseInt(hex.slice(2, 4), 16);
|
|
25
|
+
const b = Number.parseInt(hex.slice(4, 6), 16);
|
|
26
|
+
return `rgba(${r}, ${g}, ${b}, 0)`;
|
|
27
|
+
}
|
|
28
|
+
return "transparent";
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Concrete [transparent, background] colors for cutoff fade gradients.
|
|
33
|
+
* LinearGradient cannot interpolate theme tokens or CSS variables, so the
|
|
34
|
+
* values must be resolved here (SB-M-1203).
|
|
35
|
+
*/
|
|
36
|
+
export function useCutoffGradientColors(): [string, string] {
|
|
37
|
+
const theme = useTheme();
|
|
38
|
+
const background = theme.background?.val ?? "#ffffff";
|
|
39
|
+
return [toTransparent(background), background];
|
|
40
|
+
}
|
package/src/shiki/index.ts
CHANGED
|
@@ -1,11 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
type ThemedToken,
|
|
9
|
-
type BundledLanguage,
|
|
10
|
-
type BundledTheme,
|
|
11
|
-
} from "./highlighter";
|
|
1
|
+
/**
|
|
2
|
+
* LC-16 ONE-IMPLEMENTATION: the shiki highlighter stack lives in
|
|
3
|
+
* `@multiplatform.one/components` (`highlightCode` / `useShikiTokens` /
|
|
4
|
+
* `HighlightedCode`) — one JS-regex-engine highlighter for the whole app.
|
|
5
|
+
* This module only keeps the local shiki type path alive for the renderer.
|
|
6
|
+
*/
|
|
7
|
+
export type { BundledLanguage, BundledTheme } from "shiki";
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from "@storybook/react-native-web-vite";
|
|
2
|
+
import { Paragraph as TamaguiParagraph, XStack, YStack } from "tamagui";
|
|
3
|
+
import { Blockquote } from "../components/Blockquote";
|
|
4
|
+
import { Heading } from "../components/Heading";
|
|
5
|
+
import { HorizontalRule } from "../components/HorizontalRule";
|
|
6
|
+
import { InlineCode } from "../components/InlineCode";
|
|
7
|
+
import { Strong, Emphasis } from "../components/InlineStyles";
|
|
8
|
+
import { Link } from "../components/Link";
|
|
9
|
+
import { MarkdownList, MarkdownListItem } from "../components/List";
|
|
10
|
+
import { Paragraph } from "../components/Paragraph";
|
|
11
|
+
import { HR } from "../Hr";
|
|
12
|
+
import { LI } from "../Li";
|
|
13
|
+
import { UL } from "../Ul";
|
|
14
|
+
|
|
15
|
+
const meta: Meta = {
|
|
16
|
+
title: "Markdown/Blocks",
|
|
17
|
+
parameters: {
|
|
18
|
+
status: { type: "beta" },
|
|
19
|
+
docs: {
|
|
20
|
+
description: {
|
|
21
|
+
component:
|
|
22
|
+
"Markdown block renderers: Heading, Paragraph, Blockquote, HorizontalRule/HR, MarkdownList/MarkdownListItem, UL/LI.",
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export default meta;
|
|
29
|
+
type Story = StoryObj;
|
|
30
|
+
|
|
31
|
+
export const HeadingScale: Story = {
|
|
32
|
+
render: () => (
|
|
33
|
+
<YStack maxWidth={700} padding="$4">
|
|
34
|
+
<Heading level={1}>Heading level 1</Heading>
|
|
35
|
+
<Heading level={2}>Heading level 2</Heading>
|
|
36
|
+
<Heading level={3}>Heading level 3</Heading>
|
|
37
|
+
<Heading level={4}>Heading level 4</Heading>
|
|
38
|
+
<Heading level={5}>Heading level 5</Heading>
|
|
39
|
+
<Heading level={6}>Heading level 6</Heading>
|
|
40
|
+
</YStack>
|
|
41
|
+
),
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
export const HeadingEdge: Story = {
|
|
45
|
+
args: { level: 2, children: "Knob-driven heading" },
|
|
46
|
+
argTypes: {
|
|
47
|
+
level: { control: "select", options: [1, 2, 3, 4, 5, 6] },
|
|
48
|
+
children: { control: "text" },
|
|
49
|
+
},
|
|
50
|
+
render: (args: any) => (
|
|
51
|
+
<YStack maxWidth={700} padding="$4">
|
|
52
|
+
<Heading level={args.level}>{args.children}</Heading>
|
|
53
|
+
<Heading level={2}>{""}</Heading>
|
|
54
|
+
<Heading level={2}>
|
|
55
|
+
A very long duplicate heading that keeps going far beyond a single line to prove wrapping
|
|
56
|
+
behaviour holds for headings too
|
|
57
|
+
</Heading>
|
|
58
|
+
<Heading level={2}>
|
|
59
|
+
A very long duplicate heading that keeps going far beyond a single line to prove wrapping
|
|
60
|
+
behaviour holds for headings too
|
|
61
|
+
</Heading>
|
|
62
|
+
<Heading level={3}>
|
|
63
|
+
Inline children: <Strong>bold</Strong>, <Emphasis>italic</Emphasis>,{" "}
|
|
64
|
+
<InlineCode>code()</InlineCode> and a <Link href="#top">link</Link>
|
|
65
|
+
</Heading>
|
|
66
|
+
<YStack style={{ direction: "rtl" } as any}>
|
|
67
|
+
<Heading level={2}>عنوان بالعربية RTL</Heading>
|
|
68
|
+
</YStack>
|
|
69
|
+
</YStack>
|
|
70
|
+
),
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
export const ParagraphStory: Story = {
|
|
74
|
+
name: "Paragraph",
|
|
75
|
+
args: { children: "A knob-driven paragraph body." },
|
|
76
|
+
argTypes: { children: { control: "text" } },
|
|
77
|
+
render: (args: any) => (
|
|
78
|
+
<YStack maxWidth={700} padding="$4">
|
|
79
|
+
<Paragraph>{args.children}</Paragraph>
|
|
80
|
+
<Paragraph>{""}</Paragraph>
|
|
81
|
+
<Paragraph>
|
|
82
|
+
{
|
|
83
|
+
"A long paragraph exercising wrapping and selection. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur."
|
|
84
|
+
}
|
|
85
|
+
</Paragraph>
|
|
86
|
+
<Paragraph>
|
|
87
|
+
Inline mix: <InlineCode>code</InlineCode>, <Link href="https://example.com">a link</Link>,
|
|
88
|
+
and <Emphasis>emphasis</Emphasis> inside one paragraph.
|
|
89
|
+
</Paragraph>
|
|
90
|
+
<YStack style={{ direction: "rtl" } as any}>
|
|
91
|
+
<Paragraph>
|
|
92
|
+
{"نص عربي طويل يلتف من اليمين إلى اليسار ويحافظ على اتجاه القراءة الصحيح في الفقرة."}
|
|
93
|
+
</Paragraph>
|
|
94
|
+
</YStack>
|
|
95
|
+
</YStack>
|
|
96
|
+
),
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
export const BlockquoteStory: Story = {
|
|
100
|
+
name: "Blockquote",
|
|
101
|
+
render: () => (
|
|
102
|
+
<YStack maxWidth={700} padding="$4">
|
|
103
|
+
<Blockquote>
|
|
104
|
+
<Paragraph>A simple quote paragraph.</Paragraph>
|
|
105
|
+
</Blockquote>
|
|
106
|
+
<Blockquote>
|
|
107
|
+
<Paragraph>
|
|
108
|
+
A long quote. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
|
|
109
|
+
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud
|
|
110
|
+
exercitation ullamco laboris.
|
|
111
|
+
</Paragraph>
|
|
112
|
+
<Blockquote>
|
|
113
|
+
<Paragraph>A nested quote inside the first.</Paragraph>
|
|
114
|
+
</Blockquote>
|
|
115
|
+
<MarkdownList ordered={false}>
|
|
116
|
+
<MarkdownListItem index={0}>
|
|
117
|
+
<Paragraph>list inside quote</Paragraph>
|
|
118
|
+
</MarkdownListItem>
|
|
119
|
+
</MarkdownList>
|
|
120
|
+
<Paragraph>
|
|
121
|
+
with <InlineCode>inline code</InlineCode> too
|
|
122
|
+
</Paragraph>
|
|
123
|
+
</Blockquote>
|
|
124
|
+
<Blockquote>{null}</Blockquote>
|
|
125
|
+
<YStack style={{ direction: "rtl" } as any}>
|
|
126
|
+
<Blockquote>
|
|
127
|
+
<Paragraph>{"اقتباس RTL — يجب أن يبقى الحد على جهة البداية المنطقية"}</Paragraph>
|
|
128
|
+
</Blockquote>
|
|
129
|
+
</YStack>
|
|
130
|
+
</YStack>
|
|
131
|
+
),
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
export const Rules: Story = {
|
|
135
|
+
render: () => (
|
|
136
|
+
<YStack maxWidth={700} padding="$4">
|
|
137
|
+
<TamaguiParagraph>HorizontalRule (markdown mapped):</TamaguiParagraph>
|
|
138
|
+
<HorizontalRule />
|
|
139
|
+
<TamaguiParagraph>HR (MDX alias):</TamaguiParagraph>
|
|
140
|
+
<HR />
|
|
141
|
+
<TamaguiParagraph>Narrow container (160px):</TamaguiParagraph>
|
|
142
|
+
<YStack width={160} borderWidth={1} borderColor="$color5">
|
|
143
|
+
<HorizontalRule />
|
|
144
|
+
<HR />
|
|
145
|
+
</YStack>
|
|
146
|
+
</YStack>
|
|
147
|
+
),
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
export const Lists: Story = {
|
|
151
|
+
render: () => (
|
|
152
|
+
<YStack maxWidth={700} padding="$4">
|
|
153
|
+
<TamaguiParagraph fontWeight="600">Unordered</TamaguiParagraph>
|
|
154
|
+
<MarkdownList ordered={false}>
|
|
155
|
+
<MarkdownListItem index={0}>
|
|
156
|
+
<Paragraph>first item</Paragraph>
|
|
157
|
+
</MarkdownListItem>
|
|
158
|
+
<MarkdownListItem index={1}>
|
|
159
|
+
<Paragraph>
|
|
160
|
+
a multiline item long enough to wrap onto a second line so the marker alignment with the
|
|
161
|
+
first line can be verified precisely
|
|
162
|
+
</Paragraph>
|
|
163
|
+
</MarkdownListItem>
|
|
164
|
+
<MarkdownListItem index={2}>
|
|
165
|
+
<Paragraph>nested below:</Paragraph>
|
|
166
|
+
<MarkdownList ordered={false}>
|
|
167
|
+
<MarkdownListItem index={0}>
|
|
168
|
+
<Paragraph>nested child</Paragraph>
|
|
169
|
+
<MarkdownList ordered={false}>
|
|
170
|
+
<MarkdownListItem index={0}>
|
|
171
|
+
<Paragraph>deep nested child</Paragraph>
|
|
172
|
+
</MarkdownListItem>
|
|
173
|
+
</MarkdownList>
|
|
174
|
+
</MarkdownListItem>
|
|
175
|
+
</MarkdownList>
|
|
176
|
+
</MarkdownListItem>
|
|
177
|
+
</MarkdownList>
|
|
178
|
+
<TamaguiParagraph fontWeight="600">Ordered (start ignored?)</TamaguiParagraph>
|
|
179
|
+
<MarkdownList ordered start={5}>
|
|
180
|
+
<MarkdownListItem ordered index={0}>
|
|
181
|
+
<Paragraph>ordered one</Paragraph>
|
|
182
|
+
</MarkdownListItem>
|
|
183
|
+
<MarkdownListItem ordered index={1}>
|
|
184
|
+
<Paragraph>ordered two</Paragraph>
|
|
185
|
+
</MarkdownListItem>
|
|
186
|
+
</MarkdownList>
|
|
187
|
+
<TamaguiParagraph fontWeight="600">Tasks</TamaguiParagraph>
|
|
188
|
+
<MarkdownList ordered={false}>
|
|
189
|
+
<MarkdownListItem checked={true} index={0}>
|
|
190
|
+
<Paragraph>checked task</Paragraph>
|
|
191
|
+
</MarkdownListItem>
|
|
192
|
+
<MarkdownListItem checked={false} index={1}>
|
|
193
|
+
<Paragraph>unchecked task</Paragraph>
|
|
194
|
+
</MarkdownListItem>
|
|
195
|
+
</MarkdownList>
|
|
196
|
+
<TamaguiParagraph fontWeight="600">Empty list</TamaguiParagraph>
|
|
197
|
+
<MarkdownList ordered={false}>{null}</MarkdownList>
|
|
198
|
+
<TamaguiParagraph fontWeight="600">RTL</TamaguiParagraph>
|
|
199
|
+
<YStack style={{ direction: "rtl" } as any}>
|
|
200
|
+
<MarkdownList ordered={false}>
|
|
201
|
+
<MarkdownListItem index={0}>
|
|
202
|
+
<Paragraph>{"عنصر قائمة RTL"}</Paragraph>
|
|
203
|
+
</MarkdownListItem>
|
|
204
|
+
</MarkdownList>
|
|
205
|
+
</YStack>
|
|
206
|
+
</YStack>
|
|
207
|
+
),
|
|
208
|
+
};
|
|
209
|
+
|
|
210
|
+
export const UlLi: Story = {
|
|
211
|
+
render: () => (
|
|
212
|
+
<YStack maxWidth={700} padding="$4">
|
|
213
|
+
<UL>
|
|
214
|
+
<LI>custom LI one</LI>
|
|
215
|
+
<LI>
|
|
216
|
+
a multiline custom LI long enough to wrap so we can confirm the list-item display keeps
|
|
217
|
+
its disc marker aligned with the first line of text
|
|
218
|
+
</LI>
|
|
219
|
+
<LI>{""}</LI>
|
|
220
|
+
<LI>
|
|
221
|
+
nested UL below:
|
|
222
|
+
<UL>
|
|
223
|
+
<LI>nested LI</LI>
|
|
224
|
+
<UL>
|
|
225
|
+
<LI>deep nested LI</LI>
|
|
226
|
+
</UL>
|
|
227
|
+
</UL>
|
|
228
|
+
</LI>
|
|
229
|
+
</UL>
|
|
230
|
+
</YStack>
|
|
231
|
+
),
|
|
232
|
+
};
|