@multiplatform.one/markdown 6.1.0 → 6.4.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.
Files changed (672) hide show
  1. package/README.md +61 -0
  2. package/dist/cjs/Aside/index.cjs +37 -32
  3. package/dist/cjs/Aside/index.native.js +41 -34
  4. package/dist/cjs/Aside/index.native.js.map +1 -1
  5. package/dist/cjs/ExternalIcon/index.cjs +2 -0
  6. package/dist/cjs/ExternalIcon/index.native.js +2 -0
  7. package/dist/cjs/ExternalIcon/index.native.js.map +1 -1
  8. package/dist/cjs/Hr/index.cjs +3 -11
  9. package/dist/cjs/Hr/index.native.js +3 -11
  10. package/dist/cjs/Hr/index.native.js.map +1 -1
  11. package/dist/cjs/{SimpleTable → MarkdownSimpleTable}/index.cjs +27 -9
  12. package/dist/{jsx/SimpleTable → cjs/MarkdownSimpleTable}/index.native.js +32 -11
  13. package/dist/cjs/MarkdownSimpleTable/index.native.js.map +1 -0
  14. package/dist/cjs/Mdx/index.cjs +15 -7
  15. package/dist/cjs/Mdx/index.native.js +15 -7
  16. package/dist/cjs/Mdx/index.native.js.map +1 -1
  17. package/dist/cjs/MdxCodeBlock/index.cjs +28 -20
  18. package/dist/cjs/MdxCodeBlock/index.native.js +33 -22
  19. package/dist/cjs/MdxCodeBlock/index.native.js.map +1 -1
  20. package/dist/cjs/Notice/index.cjs +13 -56
  21. package/dist/cjs/Notice/index.native.js +13 -56
  22. package/dist/cjs/Notice/index.native.js.map +1 -1
  23. package/dist/cjs/Table/index.cjs +13 -0
  24. package/dist/cjs/Table/index.native.js +15 -0
  25. package/dist/cjs/Table/index.native.js.map +1 -1
  26. package/dist/cjs/Tabs/index.cjs +15 -47
  27. package/dist/cjs/Tabs/index.native.js +20 -52
  28. package/dist/cjs/Tabs/index.native.js.map +1 -1
  29. package/dist/cjs/Ul/index.cjs +2 -2
  30. package/dist/cjs/Ul/index.native.js +2 -2
  31. package/dist/cjs/Ul/index.native.js.map +1 -1
  32. package/dist/cjs/Video/index.cjs +4 -2
  33. package/dist/cjs/Video/index.native.js +4 -2
  34. package/dist/cjs/Video/index.native.js.map +1 -1
  35. package/dist/cjs/components/Blockquote.cjs +16 -3
  36. package/dist/cjs/components/Blockquote.native.js +25 -3
  37. package/dist/cjs/components/Blockquote.native.js.map +1 -1
  38. package/dist/cjs/components/Break.cjs +1 -0
  39. package/dist/cjs/components/Break.native.js +1 -0
  40. package/dist/cjs/components/Break.native.js.map +1 -1
  41. package/dist/cjs/components/CodeBlock.cjs +20 -60
  42. package/dist/cjs/components/CodeBlock.native.js +22 -64
  43. package/dist/cjs/components/CodeBlock.native.js.map +1 -1
  44. package/dist/cjs/components/Heading.cjs +23 -0
  45. package/dist/cjs/components/Heading.native.js +24 -0
  46. package/dist/cjs/components/Heading.native.js.map +1 -1
  47. package/dist/cjs/components/Image.cjs +3 -5
  48. package/dist/cjs/components/Image.native.js +6 -5
  49. package/dist/cjs/components/Image.native.js.map +1 -1
  50. package/dist/cjs/components/InlineCode.cjs +3 -6
  51. package/dist/cjs/components/InlineCode.native.js +3 -6
  52. package/dist/cjs/components/InlineCode.native.js.map +1 -1
  53. package/dist/cjs/components/InlineStyles.cjs +3 -0
  54. package/dist/cjs/components/InlineStyles.native.js +3 -0
  55. package/dist/cjs/components/InlineStyles.native.js.map +1 -1
  56. package/dist/cjs/components/Link.cjs +22 -5
  57. package/dist/cjs/components/Link.native.js +23 -5
  58. package/dist/cjs/components/Link.native.js.map +1 -1
  59. package/dist/cjs/components/List.cjs +87 -9
  60. package/dist/cjs/components/List.native.js +91 -9
  61. package/dist/cjs/components/List.native.js.map +1 -1
  62. package/dist/cjs/components/Paragraph.cjs +6 -1
  63. package/dist/cjs/components/Paragraph.native.js +6 -1
  64. package/dist/cjs/components/Paragraph.native.js.map +1 -1
  65. package/dist/cjs/components/Table.cjs +57 -24
  66. package/dist/cjs/components/Table.native.js +67 -25
  67. package/dist/cjs/components/Table.native.js.map +1 -1
  68. package/dist/cjs/hooks/useCompileMdx.cjs +61 -28
  69. package/dist/cjs/hooks/useCompileMdx.native.js +80 -28
  70. package/dist/cjs/hooks/useCompileMdx.native.js.map +1 -1
  71. package/dist/cjs/hooks/useEvaluateMdx.cjs +7 -1
  72. package/dist/cjs/hooks/useEvaluateMdx.native.js +9 -3
  73. package/dist/cjs/hooks/useEvaluateMdx.native.js.map +1 -1
  74. package/dist/cjs/icons/index.cjs +31 -101
  75. package/dist/cjs/icons/index.native.js +36 -116
  76. package/dist/cjs/icons/index.native.js.map +1 -1
  77. package/dist/cjs/index.cjs +6 -4
  78. package/dist/cjs/index.native.js +6 -4
  79. package/dist/cjs/index.native.js.map +1 -1
  80. package/dist/cjs/mdxComponents.cjs +13 -6
  81. package/dist/cjs/mdxComponents.native.js +16 -6
  82. package/dist/cjs/mdxComponents.native.js.map +1 -1
  83. package/dist/cjs/mermaid/MermaidBlock.cjs +110 -0
  84. package/dist/cjs/mermaid/MermaidBlock.native.js +41 -0
  85. package/dist/cjs/mermaid/MermaidBlock.native.js.map +1 -0
  86. package/dist/cjs/mermaid/index.cjs +31 -0
  87. package/dist/cjs/mermaid/index.native.js +34 -0
  88. package/dist/cjs/mermaid/index.native.js.map +1 -0
  89. package/dist/cjs/mermaid/mountDiagramSvg.cjs +54 -0
  90. package/dist/cjs/mermaid/mountDiagramSvg.native.js +98 -0
  91. package/dist/cjs/mermaid/mountDiagramSvg.native.js.map +1 -0
  92. package/dist/cjs/mermaid/renderMermaidDiagram.cjs +92 -0
  93. package/dist/cjs/mermaid/renderMermaidDiagram.native.js +110 -0
  94. package/dist/cjs/mermaid/renderMermaidDiagram.native.js.map +1 -0
  95. package/dist/cjs/renderer.cjs +9 -1
  96. package/dist/cjs/renderer.native.js +10 -2
  97. package/dist/cjs/renderer.native.js.map +1 -1
  98. package/dist/cjs/shared/colorRamps.cjs +1 -11
  99. package/dist/cjs/shared/colorRamps.native.js +1 -11
  100. package/dist/cjs/shared/colorRamps.native.js.map +1 -1
  101. package/dist/cjs/shared/cutoffGradient.cjs +54 -0
  102. package/dist/cjs/shared/cutoffGradient.native.js +63 -0
  103. package/dist/cjs/shared/cutoffGradient.native.js.map +1 -0
  104. package/dist/cjs/shiki/index.cjs +1 -16
  105. package/dist/cjs/shiki/index.native.js +0 -15
  106. package/dist/cjs/shiki/index.native.js.map +1 -1
  107. package/dist/esm/Aside/index.mjs +39 -34
  108. package/dist/esm/Aside/index.mjs.map +1 -1
  109. package/dist/esm/Aside/index.native.js +43 -36
  110. package/dist/esm/Aside/index.native.js.map +1 -1
  111. package/dist/esm/ExternalIcon/index.mjs +2 -0
  112. package/dist/esm/ExternalIcon/index.mjs.map +1 -1
  113. package/dist/esm/ExternalIcon/index.native.js +2 -0
  114. package/dist/esm/ExternalIcon/index.native.js.map +1 -1
  115. package/dist/esm/Hr/index.mjs +4 -12
  116. package/dist/esm/Hr/index.mjs.map +1 -1
  117. package/dist/esm/Hr/index.native.js +4 -12
  118. package/dist/esm/Hr/index.native.js.map +1 -1
  119. package/dist/esm/{SimpleTable → MarkdownSimpleTable}/index.mjs +24 -6
  120. package/dist/esm/MarkdownSimpleTable/index.mjs.map +1 -0
  121. package/dist/esm/{SimpleTable → MarkdownSimpleTable}/index.native.js +29 -8
  122. package/dist/esm/MarkdownSimpleTable/index.native.js.map +1 -0
  123. package/dist/esm/Mdx/index.mjs +15 -7
  124. package/dist/esm/Mdx/index.mjs.map +1 -1
  125. package/dist/esm/Mdx/index.native.js +15 -7
  126. package/dist/esm/Mdx/index.native.js.map +1 -1
  127. package/dist/esm/MdxCodeBlock/index.mjs +30 -22
  128. package/dist/esm/MdxCodeBlock/index.mjs.map +1 -1
  129. package/dist/esm/MdxCodeBlock/index.native.js +35 -24
  130. package/dist/esm/MdxCodeBlock/index.native.js.map +1 -1
  131. package/dist/esm/Notice/index.mjs +15 -57
  132. package/dist/esm/Notice/index.mjs.map +1 -1
  133. package/dist/esm/Notice/index.native.js +15 -57
  134. package/dist/esm/Notice/index.native.js.map +1 -1
  135. package/dist/esm/Table/index.mjs +13 -0
  136. package/dist/esm/Table/index.mjs.map +1 -1
  137. package/dist/esm/Table/index.native.js +15 -0
  138. package/dist/esm/Table/index.native.js.map +1 -1
  139. package/dist/esm/Tabs/index.mjs +17 -49
  140. package/dist/esm/Tabs/index.mjs.map +1 -1
  141. package/dist/esm/Tabs/index.native.js +22 -54
  142. package/dist/esm/Tabs/index.native.js.map +1 -1
  143. package/dist/esm/Ul/index.mjs +2 -2
  144. package/dist/esm/Ul/index.mjs.map +1 -1
  145. package/dist/esm/Ul/index.native.js +2 -2
  146. package/dist/esm/Ul/index.native.js.map +1 -1
  147. package/dist/esm/Video/index.mjs +4 -2
  148. package/dist/esm/Video/index.mjs.map +1 -1
  149. package/dist/esm/Video/index.native.js +4 -2
  150. package/dist/esm/Video/index.native.js.map +1 -1
  151. package/dist/esm/components/Blockquote.mjs +17 -4
  152. package/dist/esm/components/Blockquote.mjs.map +1 -1
  153. package/dist/esm/components/Blockquote.native.js +26 -4
  154. package/dist/esm/components/Blockquote.native.js.map +1 -1
  155. package/dist/esm/components/Break.mjs +2 -1
  156. package/dist/esm/components/Break.mjs.map +1 -1
  157. package/dist/esm/components/Break.native.js +2 -1
  158. package/dist/esm/components/Break.native.js.map +1 -1
  159. package/dist/esm/components/CodeBlock.mjs +21 -61
  160. package/dist/esm/components/CodeBlock.mjs.map +1 -1
  161. package/dist/esm/components/CodeBlock.native.js +23 -65
  162. package/dist/esm/components/CodeBlock.native.js.map +1 -1
  163. package/dist/esm/components/Heading.mjs +24 -1
  164. package/dist/esm/components/Heading.mjs.map +1 -1
  165. package/dist/esm/components/Heading.native.js +25 -1
  166. package/dist/esm/components/Heading.native.js.map +1 -1
  167. package/dist/esm/components/Image.mjs +3 -5
  168. package/dist/esm/components/Image.mjs.map +1 -1
  169. package/dist/esm/components/Image.native.js +6 -5
  170. package/dist/esm/components/Image.native.js.map +1 -1
  171. package/dist/esm/components/InlineCode.mjs +3 -6
  172. package/dist/esm/components/InlineCode.mjs.map +1 -1
  173. package/dist/esm/components/InlineCode.native.js +3 -6
  174. package/dist/esm/components/InlineCode.native.js.map +1 -1
  175. package/dist/esm/components/InlineStyles.mjs +3 -0
  176. package/dist/esm/components/InlineStyles.mjs.map +1 -1
  177. package/dist/esm/components/InlineStyles.native.js +3 -0
  178. package/dist/esm/components/InlineStyles.native.js.map +1 -1
  179. package/dist/esm/components/Link.mjs +23 -6
  180. package/dist/esm/components/Link.mjs.map +1 -1
  181. package/dist/esm/components/Link.native.js +24 -6
  182. package/dist/esm/components/Link.native.js.map +1 -1
  183. package/dist/esm/components/List.mjs +88 -10
  184. package/dist/esm/components/List.mjs.map +1 -1
  185. package/dist/esm/components/List.native.js +92 -10
  186. package/dist/esm/components/List.native.js.map +1 -1
  187. package/dist/esm/components/Paragraph.mjs +6 -1
  188. package/dist/esm/components/Paragraph.mjs.map +1 -1
  189. package/dist/esm/components/Paragraph.native.js +6 -1
  190. package/dist/esm/components/Paragraph.native.js.map +1 -1
  191. package/dist/esm/components/Table.mjs +59 -26
  192. package/dist/esm/components/Table.mjs.map +1 -1
  193. package/dist/esm/components/Table.native.js +69 -27
  194. package/dist/esm/components/Table.native.js.map +1 -1
  195. package/dist/esm/hooks/useCompileMdx.mjs +61 -29
  196. package/dist/esm/hooks/useCompileMdx.mjs.map +1 -1
  197. package/dist/esm/hooks/useCompileMdx.native.js +80 -29
  198. package/dist/esm/hooks/useCompileMdx.native.js.map +1 -1
  199. package/dist/esm/hooks/useEvaluateMdx.mjs +7 -1
  200. package/dist/esm/hooks/useEvaluateMdx.mjs.map +1 -1
  201. package/dist/esm/hooks/useEvaluateMdx.native.js +9 -3
  202. package/dist/esm/hooks/useEvaluateMdx.native.js.map +1 -1
  203. package/dist/esm/icons/index.mjs +32 -100
  204. package/dist/esm/icons/index.mjs.map +1 -1
  205. package/dist/esm/icons/index.native.js +37 -115
  206. package/dist/esm/icons/index.native.js.map +1 -1
  207. package/dist/esm/index.mjs +5 -3
  208. package/dist/esm/index.mjs.map +1 -1
  209. package/dist/esm/index.native.js +5 -3
  210. package/dist/esm/index.native.js.map +1 -1
  211. package/dist/esm/mdxComponents.mjs +14 -7
  212. package/dist/esm/mdxComponents.mjs.map +1 -1
  213. package/dist/esm/mdxComponents.native.js +17 -7
  214. package/dist/esm/mdxComponents.native.js.map +1 -1
  215. package/dist/esm/mermaid/MermaidBlock.mjs +85 -0
  216. package/dist/esm/mermaid/MermaidBlock.mjs.map +1 -0
  217. package/dist/esm/mermaid/MermaidBlock.native.js +13 -0
  218. package/dist/esm/mermaid/MermaidBlock.native.js.map +1 -0
  219. package/dist/esm/mermaid/index.mjs +4 -0
  220. package/dist/esm/mermaid/index.mjs.map +1 -0
  221. package/dist/esm/mermaid/index.native.js +4 -0
  222. package/dist/esm/mermaid/index.native.js.map +1 -0
  223. package/dist/esm/mermaid/mountDiagramSvg.mjs +29 -0
  224. package/dist/esm/mermaid/mountDiagramSvg.mjs.map +1 -0
  225. package/dist/esm/mermaid/mountDiagramSvg.native.js +70 -0
  226. package/dist/esm/mermaid/mountDiagramSvg.native.js.map +1 -0
  227. package/dist/esm/mermaid/renderMermaidDiagram.mjs +55 -0
  228. package/dist/esm/mermaid/renderMermaidDiagram.mjs.map +1 -0
  229. package/dist/esm/mermaid/renderMermaidDiagram.native.js +70 -0
  230. package/dist/esm/mermaid/renderMermaidDiagram.native.js.map +1 -0
  231. package/dist/esm/renderer.mjs +9 -1
  232. package/dist/esm/renderer.mjs.map +1 -1
  233. package/dist/esm/renderer.native.js +10 -2
  234. package/dist/esm/renderer.native.js.map +1 -1
  235. package/dist/esm/shared/colorRamps.mjs +1 -10
  236. package/dist/esm/shared/colorRamps.mjs.map +1 -1
  237. package/dist/esm/shared/colorRamps.native.js +1 -10
  238. package/dist/esm/shared/colorRamps.native.js.map +1 -1
  239. package/dist/esm/shared/cutoffGradient.mjs +28 -0
  240. package/dist/esm/shared/cutoffGradient.mjs.map +1 -0
  241. package/dist/esm/shared/cutoffGradient.native.js +34 -0
  242. package/dist/esm/shared/cutoffGradient.native.js.map +1 -0
  243. package/dist/esm/shiki/index.mjs +1 -2
  244. package/dist/esm/shiki/index.mjs.map +1 -1
  245. package/dist/esm/shiki/index.native.js +1 -2
  246. package/dist/esm/shiki/index.native.js.map +1 -1
  247. package/dist/jsx/Aside/index.mjs +39 -34
  248. package/dist/jsx/Aside/index.mjs.map +1 -1
  249. package/dist/jsx/Aside/index.native.js +41 -34
  250. package/dist/jsx/Aside/index.native.js.map +1 -1
  251. package/dist/jsx/ExternalIcon/index.mjs +2 -0
  252. package/dist/jsx/ExternalIcon/index.mjs.map +1 -1
  253. package/dist/jsx/ExternalIcon/index.native.js +2 -0
  254. package/dist/jsx/ExternalIcon/index.native.js.map +1 -1
  255. package/dist/jsx/Hr/index.mjs +4 -12
  256. package/dist/jsx/Hr/index.mjs.map +1 -1
  257. package/dist/jsx/Hr/index.native.js +3 -11
  258. package/dist/jsx/Hr/index.native.js.map +1 -1
  259. package/dist/jsx/{SimpleTable → MarkdownSimpleTable}/index.mjs +24 -6
  260. package/dist/jsx/MarkdownSimpleTable/index.mjs.map +1 -0
  261. package/dist/{cjs/SimpleTable → jsx/MarkdownSimpleTable}/index.native.js +32 -11
  262. package/dist/jsx/MarkdownSimpleTable/index.native.js.map +1 -0
  263. package/dist/jsx/Mdx/index.mjs +15 -7
  264. package/dist/jsx/Mdx/index.mjs.map +1 -1
  265. package/dist/jsx/Mdx/index.native.js +15 -7
  266. package/dist/jsx/Mdx/index.native.js.map +1 -1
  267. package/dist/jsx/MdxCodeBlock/index.mjs +30 -22
  268. package/dist/jsx/MdxCodeBlock/index.mjs.map +1 -1
  269. package/dist/jsx/MdxCodeBlock/index.native.js +33 -22
  270. package/dist/jsx/MdxCodeBlock/index.native.js.map +1 -1
  271. package/dist/jsx/Notice/index.mjs +15 -57
  272. package/dist/jsx/Notice/index.mjs.map +1 -1
  273. package/dist/jsx/Notice/index.native.js +13 -56
  274. package/dist/jsx/Notice/index.native.js.map +1 -1
  275. package/dist/jsx/Table/index.mjs +13 -0
  276. package/dist/jsx/Table/index.mjs.map +1 -1
  277. package/dist/jsx/Table/index.native.js +15 -0
  278. package/dist/jsx/Table/index.native.js.map +1 -1
  279. package/dist/jsx/Tabs/index.mjs +17 -49
  280. package/dist/jsx/Tabs/index.mjs.map +1 -1
  281. package/dist/jsx/Tabs/index.native.js +20 -52
  282. package/dist/jsx/Tabs/index.native.js.map +1 -1
  283. package/dist/jsx/Ul/index.mjs +2 -2
  284. package/dist/jsx/Ul/index.mjs.map +1 -1
  285. package/dist/jsx/Ul/index.native.js +2 -2
  286. package/dist/jsx/Ul/index.native.js.map +1 -1
  287. package/dist/jsx/Video/index.mjs +4 -2
  288. package/dist/jsx/Video/index.mjs.map +1 -1
  289. package/dist/jsx/Video/index.native.js +4 -2
  290. package/dist/jsx/Video/index.native.js.map +1 -1
  291. package/dist/jsx/components/Blockquote.mjs +17 -4
  292. package/dist/jsx/components/Blockquote.mjs.map +1 -1
  293. package/dist/jsx/components/Blockquote.native.js +25 -3
  294. package/dist/jsx/components/Blockquote.native.js.map +1 -1
  295. package/dist/jsx/components/Break.mjs +2 -1
  296. package/dist/jsx/components/Break.mjs.map +1 -1
  297. package/dist/jsx/components/Break.native.js +1 -0
  298. package/dist/jsx/components/Break.native.js.map +1 -1
  299. package/dist/jsx/components/CodeBlock.mjs +21 -61
  300. package/dist/jsx/components/CodeBlock.mjs.map +1 -1
  301. package/dist/jsx/components/CodeBlock.native.js +22 -64
  302. package/dist/jsx/components/CodeBlock.native.js.map +1 -1
  303. package/dist/jsx/components/Heading.mjs +24 -1
  304. package/dist/jsx/components/Heading.mjs.map +1 -1
  305. package/dist/jsx/components/Heading.native.js +24 -0
  306. package/dist/jsx/components/Heading.native.js.map +1 -1
  307. package/dist/jsx/components/Image.mjs +3 -5
  308. package/dist/jsx/components/Image.mjs.map +1 -1
  309. package/dist/jsx/components/Image.native.js +6 -5
  310. package/dist/jsx/components/Image.native.js.map +1 -1
  311. package/dist/jsx/components/InlineCode.mjs +3 -6
  312. package/dist/jsx/components/InlineCode.mjs.map +1 -1
  313. package/dist/jsx/components/InlineCode.native.js +3 -6
  314. package/dist/jsx/components/InlineCode.native.js.map +1 -1
  315. package/dist/jsx/components/InlineStyles.mjs +3 -0
  316. package/dist/jsx/components/InlineStyles.mjs.map +1 -1
  317. package/dist/jsx/components/InlineStyles.native.js +3 -0
  318. package/dist/jsx/components/InlineStyles.native.js.map +1 -1
  319. package/dist/jsx/components/Link.mjs +23 -6
  320. package/dist/jsx/components/Link.mjs.map +1 -1
  321. package/dist/jsx/components/Link.native.js +23 -5
  322. package/dist/jsx/components/Link.native.js.map +1 -1
  323. package/dist/jsx/components/List.mjs +88 -10
  324. package/dist/jsx/components/List.mjs.map +1 -1
  325. package/dist/jsx/components/List.native.js +91 -9
  326. package/dist/jsx/components/List.native.js.map +1 -1
  327. package/dist/jsx/components/Paragraph.mjs +6 -1
  328. package/dist/jsx/components/Paragraph.mjs.map +1 -1
  329. package/dist/jsx/components/Paragraph.native.js +6 -1
  330. package/dist/jsx/components/Paragraph.native.js.map +1 -1
  331. package/dist/jsx/components/Table.mjs +59 -26
  332. package/dist/jsx/components/Table.mjs.map +1 -1
  333. package/dist/jsx/components/Table.native.js +67 -25
  334. package/dist/jsx/components/Table.native.js.map +1 -1
  335. package/dist/jsx/hooks/useCompileMdx.mjs +61 -29
  336. package/dist/jsx/hooks/useCompileMdx.mjs.map +1 -1
  337. package/dist/jsx/hooks/useCompileMdx.native.js +80 -28
  338. package/dist/jsx/hooks/useCompileMdx.native.js.map +1 -1
  339. package/dist/jsx/hooks/useEvaluateMdx.mjs +7 -1
  340. package/dist/jsx/hooks/useEvaluateMdx.mjs.map +1 -1
  341. package/dist/jsx/hooks/useEvaluateMdx.native.js +9 -3
  342. package/dist/jsx/hooks/useEvaluateMdx.native.js.map +1 -1
  343. package/dist/jsx/icons/index.mjs +32 -100
  344. package/dist/jsx/icons/index.mjs.map +1 -1
  345. package/dist/jsx/icons/index.native.js +36 -116
  346. package/dist/jsx/icons/index.native.js.map +1 -1
  347. package/dist/jsx/index.js +5 -3
  348. package/dist/jsx/index.js.map +1 -1
  349. package/dist/jsx/index.mjs +5 -3
  350. package/dist/jsx/index.mjs.map +1 -1
  351. package/dist/jsx/index.native.js +6 -4
  352. package/dist/jsx/index.native.js.map +1 -1
  353. package/dist/jsx/mdxComponents.mjs +14 -7
  354. package/dist/jsx/mdxComponents.mjs.map +1 -1
  355. package/dist/jsx/mdxComponents.native.js +16 -6
  356. package/dist/jsx/mdxComponents.native.js.map +1 -1
  357. package/dist/jsx/mermaid/MermaidBlock.mjs +85 -0
  358. package/dist/jsx/mermaid/MermaidBlock.mjs.map +1 -0
  359. package/dist/jsx/mermaid/MermaidBlock.native.js +41 -0
  360. package/dist/jsx/mermaid/MermaidBlock.native.js.map +1 -0
  361. package/dist/jsx/mermaid/index.mjs +4 -0
  362. package/dist/jsx/mermaid/index.mjs.map +1 -0
  363. package/dist/jsx/mermaid/index.native.js +34 -0
  364. package/dist/jsx/mermaid/index.native.js.map +1 -0
  365. package/dist/jsx/mermaid/mountDiagramSvg.mjs +29 -0
  366. package/dist/jsx/mermaid/mountDiagramSvg.mjs.map +1 -0
  367. package/dist/jsx/mermaid/mountDiagramSvg.native.js +98 -0
  368. package/dist/jsx/mermaid/mountDiagramSvg.native.js.map +1 -0
  369. package/dist/jsx/mermaid/renderMermaidDiagram.mjs +55 -0
  370. package/dist/jsx/mermaid/renderMermaidDiagram.mjs.map +1 -0
  371. package/dist/jsx/mermaid/renderMermaidDiagram.native.js +110 -0
  372. package/dist/jsx/mermaid/renderMermaidDiagram.native.js.map +1 -0
  373. package/dist/jsx/renderer.mjs +9 -1
  374. package/dist/jsx/renderer.mjs.map +1 -1
  375. package/dist/jsx/renderer.native.js +10 -2
  376. package/dist/jsx/renderer.native.js.map +1 -1
  377. package/dist/jsx/shared/colorRamps.mjs +1 -10
  378. package/dist/jsx/shared/colorRamps.mjs.map +1 -1
  379. package/dist/jsx/shared/colorRamps.native.js +1 -11
  380. package/dist/jsx/shared/colorRamps.native.js.map +1 -1
  381. package/dist/jsx/shared/cutoffGradient.mjs +28 -0
  382. package/dist/jsx/shared/cutoffGradient.mjs.map +1 -0
  383. package/dist/jsx/shared/cutoffGradient.native.js +63 -0
  384. package/dist/jsx/shared/cutoffGradient.native.js.map +1 -0
  385. package/dist/jsx/shiki/index.mjs +1 -2
  386. package/dist/jsx/shiki/index.mjs.map +1 -1
  387. package/dist/jsx/shiki/index.native.js +0 -15
  388. package/dist/jsx/shiki/index.native.js.map +1 -1
  389. package/package.json +25 -14
  390. package/src/Aside/index.tsx +42 -35
  391. package/src/ExternalIcon/index.tsx +8 -1
  392. package/src/Hr/index.tsx +3 -6
  393. package/src/{SimpleTable → MarkdownSimpleTable}/index.tsx +30 -12
  394. package/src/MarkdownSimpleTable/markdownSimpleTable.spec.tsx +92 -0
  395. package/src/Mdx/index.tsx +12 -7
  396. package/src/MdxCodeBlock/index.tsx +33 -20
  397. package/src/Notice/index.tsx +12 -54
  398. package/src/Table/index.tsx +22 -6
  399. package/src/Tabs/index.tsx +26 -52
  400. package/src/Ul/index.ts +2 -2
  401. package/src/Video/index.tsx +15 -12
  402. package/src/components/Blockquote.tsx +29 -4
  403. package/src/components/Break.tsx +3 -1
  404. package/src/components/CodeBlock.tsx +49 -79
  405. package/src/components/Heading.tsx +15 -2
  406. package/src/components/Image.tsx +6 -3
  407. package/src/components/InlineCode.tsx +14 -7
  408. package/src/components/InlineStyles.tsx +15 -3
  409. package/src/components/Link.tsx +29 -6
  410. package/src/components/List.tsx +111 -11
  411. package/src/components/Paragraph.tsx +6 -1
  412. package/src/components/Table.tsx +56 -35
  413. package/src/components/markdownPrimitives.spec.tsx +121 -0
  414. package/src/docBlocks.spec.tsx +85 -0
  415. package/src/hooks/useCompileMdx.ts +75 -35
  416. package/src/hooks/useEvaluateMdx.ts +7 -1
  417. package/src/icons/index.tsx +36 -58
  418. package/src/index.ts +15 -3
  419. package/src/markdownComponent.spec.tsx +58 -0
  420. package/src/mdx.spec.tsx +4 -0
  421. package/src/mdxComponents.spec.tsx +185 -0
  422. package/src/mdxComponents.tsx +14 -5
  423. package/src/mermaid/MermaidBlock.native.tsx +15 -0
  424. package/src/mermaid/MermaidBlock.tsx +88 -0
  425. package/src/mermaid/index.ts +23 -0
  426. package/src/mermaid/mountDiagramSvg.ts +49 -0
  427. package/src/mermaid/renderMermaidDiagram.spec.ts +89 -0
  428. package/src/mermaid/renderMermaidDiagram.ts +78 -0
  429. package/src/renderer.spec.tsx +276 -0
  430. package/src/renderer.tsx +13 -1
  431. package/src/shared/colorRamps.ts +0 -10
  432. package/src/shared/cutoffGradient.ts +40 -0
  433. package/src/shiki/index.ts +7 -11
  434. package/src/stories/Blocks.stories.tsx +232 -0
  435. package/src/stories/Callouts.stories.tsx +147 -0
  436. package/src/stories/Code.stories.tsx +116 -0
  437. package/src/stories/Inline.stories.tsx +162 -0
  438. package/src/stories/Mdx.stories.tsx +107 -0
  439. package/src/stories/Media.stories.tsx +148 -0
  440. package/src/stories/Tables.stories.tsx +173 -0
  441. package/types/Aside/index.d.ts +11 -0
  442. package/types/Aside/index.d.ts.map +1 -0
  443. package/types/ExternalIcon/index.d.ts +2 -0
  444. package/types/ExternalIcon/index.d.ts.map +1 -0
  445. package/types/Hr/index.d.ts +2 -0
  446. package/types/Hr/index.d.ts.map +1 -0
  447. package/types/Li/index.d.ts +6 -0
  448. package/types/Li/index.d.ts.map +1 -0
  449. package/types/Markdown.d.ts +22 -0
  450. package/types/Markdown.d.ts.map +1 -0
  451. package/types/MarkdownSimpleTable/index.d.ts +16 -0
  452. package/types/MarkdownSimpleTable/index.d.ts.map +1 -0
  453. package/types/Mdx/index.d.ts +9 -0
  454. package/types/Mdx/index.d.ts.map +1 -0
  455. package/types/MdxCodeBlock/index.d.ts +7 -0
  456. package/types/MdxCodeBlock/index.d.ts.map +1 -0
  457. package/types/MdxCodeBlock/mdxCodeBlockContext.d.ts +13 -0
  458. package/types/MdxCodeBlock/mdxCodeBlockContext.d.ts.map +1 -0
  459. package/types/Notice/index.d.ts +12 -0
  460. package/types/Notice/index.d.ts.map +1 -0
  461. package/types/Table/index.d.ts +20 -0
  462. package/types/Table/index.d.ts.map +1 -0
  463. package/types/Tabs/index.d.ts +21 -0
  464. package/types/Tabs/index.d.ts.map +1 -0
  465. package/types/Ul/index.d.ts +6 -0
  466. package/types/Ul/index.d.ts.map +1 -0
  467. package/types/Video/index.d.ts +12 -0
  468. package/types/Video/index.d.ts.map +1 -0
  469. package/types/components/Blockquote.d.ts +3 -0
  470. package/types/components/Blockquote.d.ts.map +1 -0
  471. package/types/components/Break.d.ts +3 -0
  472. package/types/components/Break.d.ts.map +1 -0
  473. package/types/components/CodeBlock.d.ts +17 -0
  474. package/types/components/CodeBlock.d.ts.map +1 -0
  475. package/types/components/Heading.d.ts +3 -0
  476. package/types/components/Heading.d.ts.map +1 -0
  477. package/types/components/HorizontalRule.d.ts +3 -0
  478. package/types/components/HorizontalRule.d.ts.map +1 -0
  479. package/types/components/Image.d.ts +3 -0
  480. package/types/components/Image.d.ts.map +1 -0
  481. package/types/components/InlineCode.d.ts +12 -0
  482. package/types/components/InlineCode.d.ts.map +1 -0
  483. package/types/components/InlineStyles.d.ts +5 -0
  484. package/types/components/InlineStyles.d.ts.map +1 -0
  485. package/types/components/Link.d.ts +3 -0
  486. package/types/components/Link.d.ts.map +1 -0
  487. package/types/components/List.d.ts +10 -0
  488. package/types/components/List.d.ts.map +1 -0
  489. package/types/components/Paragraph.d.ts +3 -0
  490. package/types/components/Paragraph.d.ts.map +1 -0
  491. package/types/components/Table.d.ts +13 -0
  492. package/types/components/Table.d.ts.map +1 -0
  493. package/types/components/index.d.ts +13 -0
  494. package/types/components/index.d.ts.map +1 -0
  495. package/types/hooks/index.d.ts +4 -0
  496. package/types/hooks/index.d.ts.map +1 -0
  497. package/types/hooks/useCompileAndEvaluateMdx.d.ts +9 -0
  498. package/types/hooks/useCompileAndEvaluateMdx.d.ts.map +1 -0
  499. package/types/hooks/useCompileMdx.d.ts +13 -0
  500. package/types/hooks/useCompileMdx.d.ts.map +1 -0
  501. package/types/hooks/useEvaluateMdx.d.ts +5 -0
  502. package/types/hooks/useEvaluateMdx.d.ts.map +1 -0
  503. package/types/icons/index.d.ts +12 -0
  504. package/types/icons/index.d.ts.map +1 -0
  505. package/types/index.d.ts +29 -0
  506. package/types/index.d.ts.map +1 -0
  507. package/types/mdxComponents.d.ts +8 -0
  508. package/types/mdxComponents.d.ts.map +1 -0
  509. package/types/mermaid/MermaidBlock.d.ts +15 -0
  510. package/types/mermaid/MermaidBlock.d.ts.map +1 -0
  511. package/types/mermaid/MermaidBlock.native.d.ts +10 -0
  512. package/types/mermaid/MermaidBlock.native.d.ts.map +1 -0
  513. package/types/mermaid/index.d.ts +18 -0
  514. package/types/mermaid/index.d.ts.map +1 -0
  515. package/types/mermaid/mountDiagramSvg.d.ts +11 -0
  516. package/types/mermaid/mountDiagramSvg.d.ts.map +1 -0
  517. package/types/mermaid/renderMermaidDiagram.d.ts +33 -0
  518. package/types/mermaid/renderMermaidDiagram.d.ts.map +1 -0
  519. package/types/parser.d.ts +11 -0
  520. package/types/parser.d.ts.map +1 -0
  521. package/types/renderer.d.ts +32 -0
  522. package/types/renderer.d.ts.map +1 -0
  523. package/types/shared/colorRamps.d.ts +39 -0
  524. package/types/shared/colorRamps.d.ts.map +1 -0
  525. package/types/shared/cutoffGradient.d.ts +12 -0
  526. package/types/shared/cutoffGradient.d.ts.map +1 -0
  527. package/types/shared/index.d.ts +2 -0
  528. package/types/shared/index.d.ts.map +1 -0
  529. package/types/shiki/index.d.ts +8 -0
  530. package/types/shiki/index.d.ts.map +1 -0
  531. package/types/types.d.ts +160 -0
  532. package/types/types.d.ts.map +1 -0
  533. package/types/util/rehypeMetaAttributes.d.ts +2 -0
  534. package/types/util/rehypeMetaAttributes.d.ts.map +1 -0
  535. package/dist/cjs/ExternalIcon/ExternalIcon.spec.cjs +0 -37
  536. package/dist/cjs/ExternalIcon/ExternalIcon.spec.native.js +0 -40
  537. package/dist/cjs/ExternalIcon/ExternalIcon.spec.native.js.map +0 -1
  538. package/dist/cjs/Hr/hr.spec.cjs +0 -21
  539. package/dist/cjs/Hr/hr.spec.native.js +0 -24
  540. package/dist/cjs/Hr/hr.spec.native.js.map +0 -1
  541. package/dist/cjs/Li/li.spec.cjs +0 -45
  542. package/dist/cjs/Li/li.spec.native.js +0 -50
  543. package/dist/cjs/Li/li.spec.native.js.map +0 -1
  544. package/dist/cjs/Markdown.stories.cjs +0 -153
  545. package/dist/cjs/Markdown.stories.native.js +0 -162
  546. package/dist/cjs/Markdown.stories.native.js.map +0 -1
  547. package/dist/cjs/Mdx/mdx.spec.cjs +0 -139
  548. package/dist/cjs/Mdx/mdx.spec.native.js +0 -158
  549. package/dist/cjs/Mdx/mdx.spec.native.js.map +0 -1
  550. package/dist/cjs/MdxCodeBlock/mdxCodeBlock.spec.cjs +0 -90
  551. package/dist/cjs/MdxCodeBlock/mdxCodeBlock.spec.native.js +0 -122
  552. package/dist/cjs/MdxCodeBlock/mdxCodeBlock.spec.native.js.map +0 -1
  553. package/dist/cjs/SimpleTable/index.native.js.map +0 -1
  554. package/dist/cjs/Ul/ul.spec.cjs +0 -150
  555. package/dist/cjs/Ul/ul.spec.native.js +0 -153
  556. package/dist/cjs/Ul/ul.spec.native.js.map +0 -1
  557. package/dist/cjs/hooks/useCompileAndEvaluateMdx.spec.cjs +0 -34
  558. package/dist/cjs/hooks/useCompileAndEvaluateMdx.spec.native.js +0 -49
  559. package/dist/cjs/hooks/useCompileAndEvaluateMdx.spec.native.js.map +0 -1
  560. package/dist/cjs/mdx.spec.cjs +0 -400
  561. package/dist/cjs/mdx.spec.native.js +0 -465
  562. package/dist/cjs/mdx.spec.native.js.map +0 -1
  563. package/dist/cjs/parser.spec.cjs +0 -109
  564. package/dist/cjs/parser.spec.native.js +0 -114
  565. package/dist/cjs/parser.spec.native.js.map +0 -1
  566. package/dist/cjs/shiki/highlighter.cjs +0 -89
  567. package/dist/cjs/shiki/highlighter.native.js +0 -94
  568. package/dist/cjs/shiki/highlighter.native.js.map +0 -1
  569. package/dist/cjs/util/util.spec.cjs +0 -81
  570. package/dist/cjs/util/util.spec.native.js +0 -84
  571. package/dist/cjs/util/util.spec.native.js.map +0 -1
  572. package/dist/esm/ExternalIcon/ExternalIcon.spec.mjs +0 -38
  573. package/dist/esm/ExternalIcon/ExternalIcon.spec.mjs.map +0 -1
  574. package/dist/esm/ExternalIcon/ExternalIcon.spec.native.js +0 -38
  575. package/dist/esm/ExternalIcon/ExternalIcon.spec.native.js.map +0 -1
  576. package/dist/esm/Hr/hr.spec.mjs +0 -22
  577. package/dist/esm/Hr/hr.spec.mjs.map +0 -1
  578. package/dist/esm/Hr/hr.spec.native.js +0 -22
  579. package/dist/esm/Hr/hr.spec.native.js.map +0 -1
  580. package/dist/esm/Li/li.spec.mjs +0 -46
  581. package/dist/esm/Li/li.spec.mjs.map +0 -1
  582. package/dist/esm/Li/li.spec.native.js +0 -48
  583. package/dist/esm/Li/li.spec.native.js.map +0 -1
  584. package/dist/esm/Markdown.stories.mjs +0 -125
  585. package/dist/esm/Markdown.stories.mjs.map +0 -1
  586. package/dist/esm/Markdown.stories.native.js +0 -131
  587. package/dist/esm/Markdown.stories.native.js.map +0 -1
  588. package/dist/esm/Mdx/mdx.spec.mjs +0 -140
  589. package/dist/esm/Mdx/mdx.spec.mjs.map +0 -1
  590. package/dist/esm/Mdx/mdx.spec.native.js +0 -156
  591. package/dist/esm/Mdx/mdx.spec.native.js.map +0 -1
  592. package/dist/esm/MdxCodeBlock/mdxCodeBlock.spec.mjs +0 -91
  593. package/dist/esm/MdxCodeBlock/mdxCodeBlock.spec.mjs.map +0 -1
  594. package/dist/esm/MdxCodeBlock/mdxCodeBlock.spec.native.js +0 -96
  595. package/dist/esm/MdxCodeBlock/mdxCodeBlock.spec.native.js.map +0 -1
  596. package/dist/esm/SimpleTable/index.mjs.map +0 -1
  597. package/dist/esm/SimpleTable/index.native.js.map +0 -1
  598. package/dist/esm/Ul/ul.spec.mjs +0 -151
  599. package/dist/esm/Ul/ul.spec.mjs.map +0 -1
  600. package/dist/esm/Ul/ul.spec.native.js +0 -151
  601. package/dist/esm/Ul/ul.spec.native.js.map +0 -1
  602. package/dist/esm/hooks/useCompileAndEvaluateMdx.spec.mjs +0 -35
  603. package/dist/esm/hooks/useCompileAndEvaluateMdx.spec.mjs.map +0 -1
  604. package/dist/esm/hooks/useCompileAndEvaluateMdx.spec.native.js +0 -47
  605. package/dist/esm/hooks/useCompileAndEvaluateMdx.spec.native.js.map +0 -1
  606. package/dist/esm/mdx.spec.mjs +0 -377
  607. package/dist/esm/mdx.spec.mjs.map +0 -1
  608. package/dist/esm/mdx.spec.native.js +0 -439
  609. package/dist/esm/mdx.spec.native.js.map +0 -1
  610. package/dist/esm/parser.spec.mjs +0 -110
  611. package/dist/esm/parser.spec.mjs.map +0 -1
  612. package/dist/esm/parser.spec.native.js +0 -112
  613. package/dist/esm/parser.spec.native.js.map +0 -1
  614. package/dist/esm/shiki/highlighter.mjs +0 -59
  615. package/dist/esm/shiki/highlighter.mjs.map +0 -1
  616. package/dist/esm/shiki/highlighter.native.js +0 -61
  617. package/dist/esm/shiki/highlighter.native.js.map +0 -1
  618. package/dist/esm/util/util.spec.mjs +0 -82
  619. package/dist/esm/util/util.spec.mjs.map +0 -1
  620. package/dist/esm/util/util.spec.native.js +0 -82
  621. package/dist/esm/util/util.spec.native.js.map +0 -1
  622. package/dist/jsx/ExternalIcon/ExternalIcon.spec.mjs +0 -38
  623. package/dist/jsx/ExternalIcon/ExternalIcon.spec.mjs.map +0 -1
  624. package/dist/jsx/ExternalIcon/ExternalIcon.spec.native.js +0 -40
  625. package/dist/jsx/ExternalIcon/ExternalIcon.spec.native.js.map +0 -1
  626. package/dist/jsx/Hr/hr.spec.mjs +0 -22
  627. package/dist/jsx/Hr/hr.spec.mjs.map +0 -1
  628. package/dist/jsx/Hr/hr.spec.native.js +0 -24
  629. package/dist/jsx/Hr/hr.spec.native.js.map +0 -1
  630. package/dist/jsx/Li/li.spec.mjs +0 -46
  631. package/dist/jsx/Li/li.spec.mjs.map +0 -1
  632. package/dist/jsx/Li/li.spec.native.js +0 -50
  633. package/dist/jsx/Li/li.spec.native.js.map +0 -1
  634. package/dist/jsx/Markdown.stories.mjs +0 -125
  635. package/dist/jsx/Markdown.stories.mjs.map +0 -1
  636. package/dist/jsx/Markdown.stories.native.js +0 -162
  637. package/dist/jsx/Markdown.stories.native.js.map +0 -1
  638. package/dist/jsx/Mdx/mdx.spec.mjs +0 -140
  639. package/dist/jsx/Mdx/mdx.spec.mjs.map +0 -1
  640. package/dist/jsx/Mdx/mdx.spec.native.js +0 -158
  641. package/dist/jsx/Mdx/mdx.spec.native.js.map +0 -1
  642. package/dist/jsx/MdxCodeBlock/mdxCodeBlock.spec.mjs +0 -91
  643. package/dist/jsx/MdxCodeBlock/mdxCodeBlock.spec.mjs.map +0 -1
  644. package/dist/jsx/MdxCodeBlock/mdxCodeBlock.spec.native.js +0 -122
  645. package/dist/jsx/MdxCodeBlock/mdxCodeBlock.spec.native.js.map +0 -1
  646. package/dist/jsx/SimpleTable/index.mjs.map +0 -1
  647. package/dist/jsx/SimpleTable/index.native.js.map +0 -1
  648. package/dist/jsx/Ul/ul.spec.mjs +0 -151
  649. package/dist/jsx/Ul/ul.spec.mjs.map +0 -1
  650. package/dist/jsx/Ul/ul.spec.native.js +0 -153
  651. package/dist/jsx/Ul/ul.spec.native.js.map +0 -1
  652. package/dist/jsx/hooks/useCompileAndEvaluateMdx.spec.mjs +0 -35
  653. package/dist/jsx/hooks/useCompileAndEvaluateMdx.spec.mjs.map +0 -1
  654. package/dist/jsx/hooks/useCompileAndEvaluateMdx.spec.native.js +0 -49
  655. package/dist/jsx/hooks/useCompileAndEvaluateMdx.spec.native.js.map +0 -1
  656. package/dist/jsx/mdx.spec.mjs +0 -377
  657. package/dist/jsx/mdx.spec.mjs.map +0 -1
  658. package/dist/jsx/mdx.spec.native.js +0 -465
  659. package/dist/jsx/mdx.spec.native.js.map +0 -1
  660. package/dist/jsx/parser.spec.mjs +0 -110
  661. package/dist/jsx/parser.spec.mjs.map +0 -1
  662. package/dist/jsx/parser.spec.native.js +0 -114
  663. package/dist/jsx/parser.spec.native.js.map +0 -1
  664. package/dist/jsx/shiki/highlighter.mjs +0 -59
  665. package/dist/jsx/shiki/highlighter.mjs.map +0 -1
  666. package/dist/jsx/shiki/highlighter.native.js +0 -94
  667. package/dist/jsx/shiki/highlighter.native.js.map +0 -1
  668. package/dist/jsx/util/util.spec.mjs +0 -82
  669. package/dist/jsx/util/util.spec.mjs.map +0 -1
  670. package/dist/jsx/util/util.spec.native.js +0 -84
  671. package/dist/jsx/util/util.spec.native.js.map +0 -1
  672. package/src/shiki/highlighter.ts +0 -148
@@ -0,0 +1,185 @@
1
+ /**
2
+ * mdxComponents mapping specs — the HTML-tag → Tamagui component table MDX
3
+ * documents render through. Locks down real DOM semantics per tag (headings
4
+ * with data-heading anchors, inline strong/em/del, list/table structure) and
5
+ * the `code` dual mode (inline CodeInline without className vs block).
6
+ *
7
+ * The `a` mapping is not covered here: it renders through the router Link,
8
+ * which needs a live router host.
9
+ */
10
+
11
+ import { renderWithProviders } from "@multiplatform.one/test-utils";
12
+ import { describe, expect, it } from "vitest";
13
+ import { mdxComponents } from "./mdxComponents";
14
+
15
+ function C(tag: keyof typeof mdxComponents): any {
16
+ const component = mdxComponents[tag];
17
+ expect(component, `mdxComponents.${tag}`).toBeTruthy();
18
+ return component;
19
+ }
20
+
21
+ describe("mdxComponents — headings", () => {
22
+ it("renders h1 as a real h1", () => {
23
+ const H1 = C("h1");
24
+ const { container } = renderWithProviders(<H1>Top</H1>);
25
+ expect(container.querySelector("h1")?.textContent).toBe("Top");
26
+ });
27
+
28
+ it("renders h2 with the data-heading marker used by TOC scrapers", () => {
29
+ const H2 = C("h2");
30
+ const { container } = renderWithProviders(<H2>Section</H2>);
31
+ const h2 = container.querySelector("h2");
32
+ expect(h2?.textContent).toBe("Section");
33
+ expect(h2?.hasAttribute("data-heading")).toBe(true);
34
+ });
35
+
36
+ it("renders h3 as a self-linking anchor heading with its id", () => {
37
+ const H3 = C("h3");
38
+ const { container } = renderWithProviders(<H3 id="install">Install</H3>);
39
+ const anchor = container.querySelector('a[href="#install"]');
40
+ expect(anchor).toBeTruthy();
41
+ expect(anchor!.getAttribute("id")).toBe("install");
42
+ expect(anchor!.textContent).toContain("Install");
43
+ expect(container.querySelector("h3")).toBeTruthy();
44
+ });
45
+
46
+ it("renders h4/h5/h6 at their own levels", () => {
47
+ const H4 = C("h4");
48
+ const H5 = C("h5");
49
+ const H6 = C("h6");
50
+ const { container } = renderWithProviders(
51
+ <>
52
+ <H4>four</H4>
53
+ <H5>five</H5>
54
+ <H6>six</H6>
55
+ </>,
56
+ );
57
+ expect(container.querySelector("h4")?.textContent).toBe("four");
58
+ expect(container.querySelector("h5")?.textContent).toBe("five");
59
+ expect(container.querySelector("h6")?.textContent).toBe("six");
60
+ });
61
+ });
62
+
63
+ describe("mdxComponents — inline and block text", () => {
64
+ it("renders p as a real paragraph element", () => {
65
+ const P = C("p");
66
+ const { container } = renderWithProviders(<P>body copy</P>);
67
+ expect(container.querySelector("p")?.textContent).toBe("body copy");
68
+ });
69
+
70
+ it("renders strong/em/del with their native semantics", () => {
71
+ const Strong = C("strong");
72
+ const Em = C("em");
73
+ const Del = C("del");
74
+ const { container } = renderWithProviders(
75
+ <>
76
+ <Strong>bold</Strong>
77
+ <Em>slanted</Em>
78
+ <Del>removed</Del>
79
+ </>,
80
+ );
81
+ expect(container.querySelector("strong")?.textContent).toBe("bold");
82
+ expect(container.querySelector("em")?.textContent).toBe("slanted");
83
+ expect(container.querySelector("del")?.textContent).toBe("removed");
84
+ });
85
+
86
+ it("renders blockquote content through the quote treatment", () => {
87
+ const Blockquote = C("blockquote");
88
+ const { container } = renderWithProviders(<Blockquote>quoted wisdom</Blockquote>);
89
+ expect(container.textContent).toContain("quoted wisdom");
90
+ });
91
+
92
+ it("renders hr without crashing", () => {
93
+ const Hr = C("hr");
94
+ const { container } = renderWithProviders(<Hr />);
95
+ expect(container.firstChild).toBeTruthy();
96
+ });
97
+ });
98
+
99
+ describe("mdxComponents — code", () => {
100
+ it("renders inline code (no className) as a real <code> element", () => {
101
+ const Code = C("code");
102
+ const { container } = renderWithProviders(<Code>npm i tamagui</Code>);
103
+ const code = container.querySelector("code");
104
+ expect(code).toBeTruthy();
105
+ expect(code!.textContent).toBe("npm i tamagui");
106
+ });
107
+ });
108
+
109
+ describe("mdxComponents — lists", () => {
110
+ it("renders ul > li structure and strips stray string children", () => {
111
+ const Ul = C("ul");
112
+ const Li = C("li");
113
+ const { container } = renderWithProviders(
114
+ <Ul>
115
+ {"\n"}
116
+ <Li>first</Li>
117
+ {"\n"}
118
+ <Li>second</Li>
119
+ </Ul>,
120
+ );
121
+ const ul = container.querySelector("ul");
122
+ expect(ul).toBeTruthy();
123
+ const items = ul!.querySelectorAll("li");
124
+ expect(items).toHaveLength(2);
125
+ expect(ul!.textContent).not.toContain("\n");
126
+ });
127
+
128
+ it("renders ol as a real ordered list", () => {
129
+ const Ol = C("ol");
130
+ const Li = C("li");
131
+ const { container } = renderWithProviders(
132
+ <Ol>
133
+ <Li>one</Li>
134
+ </Ol>,
135
+ );
136
+ expect(container.querySelector("ol")).toBeTruthy();
137
+ expect(container.querySelector("ol li")?.textContent).toContain("one");
138
+ });
139
+ });
140
+
141
+ describe("mdxComponents — media and tables", () => {
142
+ it("renders img nested in a span wrapper with forwarded src/alt", () => {
143
+ const Img = C("img");
144
+ const { container } = renderWithProviders(
145
+ <Img src="https://example.com/x.png" alt="diagram" />,
146
+ );
147
+ const img = container.querySelector("img");
148
+ expect(img).toBeTruthy();
149
+ expect(img!.getAttribute("src")).toBe("https://example.com/x.png");
150
+ expect(img!.getAttribute("alt")).toBe("diagram");
151
+ });
152
+
153
+ it("renders the full table family into table/thead/tbody/tr/th/td", () => {
154
+ const Table = C("table");
155
+ const Thead = C("thead");
156
+ const Tbody = C("tbody");
157
+ const Tr = C("tr");
158
+ const Th = C("th");
159
+ const Td = C("td");
160
+ const { container } = renderWithProviders(
161
+ <Table>
162
+ <Thead>
163
+ <Tr>
164
+ <Th>Header</Th>
165
+ </Tr>
166
+ </Thead>
167
+ <Tbody>
168
+ <Tr>
169
+ <Td>Data</Td>
170
+ </Tr>
171
+ </Tbody>
172
+ </Table>,
173
+ );
174
+ expect(container.querySelector("table")).toBeTruthy();
175
+ expect(container.querySelector("thead th")?.textContent).toBe("Header");
176
+ expect(container.querySelector("tbody td")?.textContent).toBe("Data");
177
+ });
178
+
179
+ it("pre passes children through unchanged (code block owns the chrome)", () => {
180
+ const Pre = C("pre");
181
+ const { container } = renderWithProviders(<Pre>inner text</Pre>);
182
+ expect(container.textContent).toContain("inner text");
183
+ expect(container.querySelector("pre")).toBeNull();
184
+ });
185
+ });
@@ -4,7 +4,7 @@ import { Link } from "@multiplatform.one/router";
4
4
  import type { MDXComponents } from "mdx/types";
5
5
  import { Children } from "react";
6
6
  import type { XStackProps } from "tamagui";
7
- import { H1, H2, H3, H4, H5, H6, Paragraph, Text, XStack, YStack, styled } from "tamagui";
7
+ import { H1, H2, H3, H4, H5, H6, Paragraph, Text, XStack, YStack, isWeb, styled } from "tamagui";
8
8
  import { ExternalIcon } from "./ExternalIcon";
9
9
  import { HR } from "./Hr";
10
10
  import { LinkIcon } from "./icons";
@@ -61,8 +61,17 @@ function MdxBlockquote({ children, ...props }: any) {
61
61
  <YStack
62
62
  marginVertical="$4"
63
63
  paddingHorizontal={knobProps.panelPadding.padding}
64
- style={{ marginLeft: 12 }}
65
- borderLeftWidth={1}
64
+ // Logical start rail so the quote mirrors in RTL; tamagui
65
+ // borderStartWidth does not compile to working CSS on web (SB-M-1215)
66
+ {...(isWeb
67
+ ? {
68
+ style: {
69
+ marginInlineStart: 12,
70
+ borderInlineStartWidth: 1,
71
+ borderInlineStartStyle: "solid",
72
+ } as any,
73
+ }
74
+ : { style: { marginInlineStart: 12 }, borderStartWidth: 1 })}
66
75
  borderColor="$borderColor"
67
76
  justifyContent="center"
68
77
  {...props}
@@ -105,7 +114,6 @@ export const mdxComponents: MDXComponents = {
105
114
  maxWidth="100%"
106
115
  position="relative"
107
116
  width={"fit-content" as any}
108
- nativeID={id}
109
117
  size="$8"
110
118
  color="$color11"
111
119
  fontWeight="600"
@@ -136,7 +144,8 @@ export const mdxComponents: MDXComponents = {
136
144
  return (
137
145
  <Link href={href}>
138
146
  <Paragraph
139
- render="a"
147
+ // the router Link already renders the anchor; a nested <a> is invalid
148
+ render="span"
140
149
  fontSize="inherit"
141
150
  display="inline"
142
151
  cursor="pointer"
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Native fallback for mermaid blocks: the engine needs a DOM, so the
3
+ * diagram source renders as a plain highlighted code block.
4
+ */
5
+
6
+ import { CodeBlock } from "../components";
7
+
8
+ export interface MermaidBlockProps {
9
+ /** Mermaid diagram source */
10
+ children: string;
11
+ }
12
+
13
+ export function MermaidBlock({ children }: MermaidBlockProps) {
14
+ return <CodeBlock lang="mermaid">{children}</CodeBlock>;
15
+ }
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Read-only mermaid diagram block for rendered markdown (web).
3
+ *
4
+ * Fenced ```mermaid code renders as a live SVG diagram (GitLab behavior).
5
+ * The engine is lazy-loaded on first render via the canonical
6
+ * `renderMermaidDiagram` helper; while loading the raw source shows as a
7
+ * plain code block, and invalid source shows the parse error above the
8
+ * source (Axiom 6: show the error, never blank).
9
+ */
10
+
11
+ import { useEffect, useRef, useState } from "react";
12
+ import { Text, View, useThemeName } from "tamagui";
13
+ import { useResolvedKnobs } from "@multiplatform.one/theme";
14
+ import { markdownCodeColors } from "../shared/colorRamps";
15
+ import { CodeBlock } from "../components";
16
+ import { mountDiagramSvg } from "./mountDiagramSvg";
17
+ import { renderMermaidDiagram } from "./renderMermaidDiagram";
18
+
19
+ export interface MermaidBlockProps {
20
+ /** Mermaid diagram source */
21
+ children: string;
22
+ }
23
+
24
+ type MermaidState =
25
+ | { status: "loading" }
26
+ | { status: "ok"; svg: string }
27
+ | { status: "error"; error: string };
28
+
29
+ export function MermaidBlock({ children }: MermaidBlockProps) {
30
+ const { knobProps } = useResolvedKnobs();
31
+ const themeName = useThemeName();
32
+ const scheme = String(themeName).startsWith("dark") ? "dark" : "light";
33
+ const [state, setState] = useState<MermaidState>({ status: "loading" });
34
+ const svgHostRef = useRef<HTMLDivElement>(null);
35
+
36
+ useEffect(() => {
37
+ let cancelled = false;
38
+ setState({ status: "loading" });
39
+ renderMermaidDiagram(children, { scheme }).then((result) => {
40
+ if (cancelled) return;
41
+ setState(
42
+ result.ok ? { status: "ok", svg: result.svg } : { status: "error", error: result.error },
43
+ );
44
+ });
45
+ return () => {
46
+ cancelled = true;
47
+ };
48
+ }, [children, scheme]);
49
+
50
+ useEffect(() => {
51
+ if (state.status !== "ok" || !svgHostRef.current) return;
52
+ mountDiagramSvg(svgHostRef.current, state.svg);
53
+ }, [state]);
54
+
55
+ if (state.status === "ok") {
56
+ return (
57
+ <View
58
+ {...(knobProps.borderRadiusOuter ?? { borderRadius: "$4" })}
59
+ backgroundColor={markdownCodeColors.background.base}
60
+ borderWidth={1}
61
+ borderColor={markdownCodeColors.border.base}
62
+ paddingHorizontal={16}
63
+ paddingVertical={12}
64
+ marginVertical="$2"
65
+ overflow="hidden"
66
+ >
67
+ <div
68
+ ref={svgHostRef}
69
+ role="img"
70
+ aria-label="Mermaid diagram"
71
+ data-mermaid-diagram="true"
72
+ style={{ display: "flex", justifyContent: "center", overflowX: "auto" }}
73
+ />
74
+ </View>
75
+ );
76
+ }
77
+
78
+ return (
79
+ <View>
80
+ {state.status === "error" ? (
81
+ <Text color="$red11" fontSize={13} marginTop="$2" role="alert">
82
+ {`Mermaid: ${state.error}`}
83
+ </Text>
84
+ ) : null}
85
+ <CodeBlock lang="mermaid">{children}</CodeBlock>
86
+ </View>
87
+ );
88
+ }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Dedicated `@multiplatform.one/markdown/mermaid` entry (LC-16 canonical
3
+ * mermaid renderer) for lazy consumers like the rich-text editor.
4
+ *
5
+ * Deliberately free of static dependencies: importing the package BARREL
6
+ * from another package makes the barrel's whole static closure (shiki,
7
+ * the MDX compiler, remark…) graph-reachable, and app chunk-group tests
8
+ * pin reachable node_modules eager. This entry keeps the editor's dynamic
9
+ * import surgical — the only heavy module behind it is `mermaid` itself,
10
+ * loaded through renderMermaidDiagram's own dynamic import.
11
+ *
12
+ * The read-only `MermaidBlock` component intentionally does NOT export
13
+ * from here (it pulls react/tamagui); the package barrel exports it from
14
+ * `./MermaidBlock` directly.
15
+ */
16
+
17
+ export { mountDiagramSvg } from "./mountDiagramSvg";
18
+ export {
19
+ renderMermaidDiagram,
20
+ resetMermaidForTesting,
21
+ type MermaidRenderOptions,
22
+ type MermaidRenderResult,
23
+ } from "./renderMermaidDiagram";
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Mounts a mermaid SVG string into a container as real DOM nodes.
3
+ *
4
+ * mermaid already sanitizes its output at securityLevel "strict" (it runs
5
+ * DOMPurify internally); this helper adds defense in depth: the markup is
6
+ * parsed inert (scripts never execute during HTML parsing), executable
7
+ * elements and on* handlers are stripped, and only the <svg> element is
8
+ * imported into the live document.
9
+ */
10
+
11
+ const EXECUTABLE_SELECTOR = "script, iframe, object, embed";
12
+
13
+ /**
14
+ * XML parse first (faithful SVG namespaces for importNode), lenient HTML
15
+ * parse as fallback for markup that is not well-formed XML (e.g. html
16
+ * labels inside foreignObject).
17
+ */
18
+ function parseSvgElement(svg: string): Element | null {
19
+ try {
20
+ const xml = new DOMParser().parseFromString(svg, "image/svg+xml");
21
+ const root = xml.documentElement;
22
+ if (root?.tagName.toLowerCase() === "svg" && !xml.querySelector("parsererror")) {
23
+ return root;
24
+ }
25
+ } catch {
26
+ // fall through to HTML parsing
27
+ }
28
+ const html = new DOMParser().parseFromString(svg, "text/html");
29
+ return html.body.querySelector("svg");
30
+ }
31
+
32
+ export function mountDiagramSvg(container: HTMLElement, svg: string): boolean {
33
+ const root = parseSvgElement(svg);
34
+ if (!root) return false;
35
+ for (const el of Array.from(root.querySelectorAll(EXECUTABLE_SELECTOR))) el.remove();
36
+ for (const el of [root, ...Array.from(root.querySelectorAll("*"))]) {
37
+ for (const attr of Array.from(el.attributes)) {
38
+ const name = attr.name.toLowerCase();
39
+ if (
40
+ name.startsWith("on") ||
41
+ (name === "href" && attr.value.trim().toLowerCase().startsWith("javascript:"))
42
+ ) {
43
+ el.removeAttribute(attr.name);
44
+ }
45
+ }
46
+ }
47
+ container.replaceChildren(document.importNode(root, true));
48
+ return true;
49
+ }
@@ -0,0 +1,89 @@
1
+ import { beforeEach, describe, expect, it, vi } from "vitest";
2
+
3
+ const initialize = vi.fn();
4
+ const parse = vi.fn();
5
+ const render = vi.fn();
6
+
7
+ vi.mock("mermaid", () => ({
8
+ default: { initialize, parse, render },
9
+ }));
10
+
11
+ import { renderMermaidDiagram, resetMermaidForTesting } from "./renderMermaidDiagram";
12
+ import { mountDiagramSvg } from "./mountDiagramSvg";
13
+
14
+ beforeEach(() => {
15
+ resetMermaidForTesting();
16
+ initialize.mockClear();
17
+ parse.mockReset().mockResolvedValue(undefined);
18
+ render.mockReset().mockResolvedValue({ svg: "<svg><g>ok</g></svg>" });
19
+ });
20
+
21
+ describe("renderMermaidDiagram", () => {
22
+ it("renders valid source to svg through the lazy engine", async () => {
23
+ const result = await renderMermaidDiagram("graph TD\n A-->B");
24
+ expect(result).toEqual({ ok: true, svg: "<svg><g>ok</g></svg>" });
25
+ expect(parse).toHaveBeenCalledWith("graph TD\n A-->B");
26
+ });
27
+
28
+ it("passes the dark scheme to mermaid theme config", async () => {
29
+ await renderMermaidDiagram("graph TD\n A-->B", { scheme: "dark" });
30
+ expect(initialize).toHaveBeenCalledWith(
31
+ expect.objectContaining({ theme: "dark", securityLevel: "strict", startOnLoad: false }),
32
+ );
33
+ });
34
+
35
+ it("defaults to the light theme and re-initializes only on scheme change", async () => {
36
+ await renderMermaidDiagram("a");
37
+ await renderMermaidDiagram("b");
38
+ expect(initialize).toHaveBeenCalledTimes(1);
39
+ expect(initialize).toHaveBeenCalledWith(expect.objectContaining({ theme: "default" }));
40
+ await renderMermaidDiagram("c", { scheme: "dark" });
41
+ expect(initialize).toHaveBeenCalledTimes(2);
42
+ });
43
+
44
+ it("returns the parse error for invalid source (Axiom 6: never blank)", async () => {
45
+ parse.mockRejectedValue(new Error("Parse error on line 2: unexpected token"));
46
+ const result = await renderMermaidDiagram("graph TD\n A--");
47
+ expect(result).toEqual({
48
+ ok: false,
49
+ error: "Parse error on line 2: unexpected token",
50
+ });
51
+ expect(render).not.toHaveBeenCalled();
52
+ });
53
+
54
+ it("returns render failures as errors too", async () => {
55
+ render.mockRejectedValue(new Error("boom"));
56
+ const result = await renderMermaidDiagram("graph TD\n A-->B");
57
+ expect(result).toEqual({ ok: false, error: "boom" });
58
+ });
59
+ });
60
+
61
+ describe("mountDiagramSvg", () => {
62
+ it("mounts the svg element as real nodes", () => {
63
+ const container = document.createElement("div");
64
+ expect(mountDiagramSvg(container, "<svg><g><text>hi</text></g></svg>")).toBe(true);
65
+ expect(container.querySelector("svg g text")?.textContent).toBe("hi");
66
+ });
67
+
68
+ it("strips executable content and handlers (defense in depth)", () => {
69
+ const container = document.createElement("div");
70
+ mountDiagramSvg(
71
+ container,
72
+ '<svg onload="alert(1)"><script>alert(2)</script>' +
73
+ '<g onclick="x()"><text>t</text></g>' +
74
+ '<image href="javascript:alert(3)"></image></svg>',
75
+ );
76
+ expect(container.querySelector("script")).toBeNull();
77
+ expect(container.querySelector("svg")?.getAttribute("onload")).toBeNull();
78
+ expect(container.querySelector("g")?.getAttribute("onclick")).toBeNull();
79
+ expect(container.querySelector("image")?.getAttribute("href")).toBeNull();
80
+ // the safe content survives
81
+ expect(container.querySelector("text")?.textContent).toBe("t");
82
+ });
83
+
84
+ it("returns false for non-svg payloads", () => {
85
+ const container = document.createElement("div");
86
+ expect(mountDiagramSvg(container, "<div>nope</div>")).toBe(false);
87
+ expect(container.childNodes.length).toBe(0);
88
+ });
89
+ });
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Canonical lazy mermaid renderer (LC-16: one implementation).
3
+ *
4
+ * Consumed by this package's read-only `MermaidBlock` and by the
5
+ * `@multiplatform.one/rich-text` editor's live code-block preview. The
6
+ * mermaid engine (~500 KB raw) is NEVER in an eager chunk: it is
7
+ * dynamically imported on the first diagram render and cached.
8
+ *
9
+ * The result contract is Axiom 6 friendly — invalid diagram source returns
10
+ * `{ ok: false, error }` with mermaid's parse message so callers can show
11
+ * the error instead of a blank box.
12
+ */
13
+
14
+ export interface MermaidRenderOptions {
15
+ /** Color scheme for mermaid's built-in theming (default "light") */
16
+ scheme?: "light" | "dark";
17
+ /** Font family passed to mermaid's theme config */
18
+ fontFamily?: string;
19
+ }
20
+
21
+ export type MermaidRenderResult = { ok: true; svg: string } | { ok: false; error: string };
22
+
23
+ type MermaidModule = typeof import("mermaid").default;
24
+
25
+ let mermaidPromise: Promise<MermaidModule> | null = null;
26
+ let idCounter = 0;
27
+ let lastInitKey: string | null = null;
28
+
29
+ function loadMermaid(): Promise<MermaidModule> {
30
+ if (!mermaidPromise) {
31
+ mermaidPromise = import("mermaid").then((mod: any) => mod.default ?? mod);
32
+ }
33
+ return mermaidPromise;
34
+ }
35
+
36
+ /**
37
+ * Renders mermaid source to an isolated SVG string. Re-initializes the
38
+ * engine only when the scheme/font changes (mermaid config is global).
39
+ */
40
+ export async function renderMermaidDiagram(
41
+ code: string,
42
+ options: MermaidRenderOptions = {},
43
+ ): Promise<MermaidRenderResult> {
44
+ if (typeof document === "undefined") {
45
+ return { ok: false, error: "Mermaid diagrams require a DOM environment" };
46
+ }
47
+ const id = `mpo-mermaid-${++idCounter}`;
48
+ try {
49
+ const mermaid = await loadMermaid();
50
+ const initKey = `${options.scheme ?? "light"}|${options.fontFamily ?? ""}`;
51
+ if (initKey !== lastInitKey) {
52
+ mermaid.initialize({
53
+ startOnLoad: false,
54
+ securityLevel: "strict",
55
+ theme: options.scheme === "dark" ? "dark" : "default",
56
+ ...(options.fontFamily ? { fontFamily: options.fontFamily } : {}),
57
+ });
58
+ lastInitKey = initKey;
59
+ }
60
+ // parse() first: it throws a clean syntax error without leaving the
61
+ // error bomb SVG that render() can inject into the document
62
+ await mermaid.parse(code);
63
+ const { svg } = await mermaid.render(id, code);
64
+ return { ok: true, svg };
65
+ } catch (err) {
66
+ // render() can orphan its temp element on failure — clean it up
67
+ document.getElementById(`d${id}`)?.remove();
68
+ document.getElementById(id)?.remove();
69
+ const message = err instanceof Error ? err.message : String(err);
70
+ return { ok: false, error: message };
71
+ }
72
+ }
73
+
74
+ /** Test seam: reset engine cache/init state */
75
+ export function resetMermaidForTesting(): void {
76
+ mermaidPromise = null;
77
+ lastInitKey = null;
78
+ }