pd-markdown 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (235) hide show
  1. package/package.json +26 -0
  2. package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/index.d.ts +4 -0
  3. package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/index.d.ts.map +1 -0
  4. package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/index.js +5 -0
  5. package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/index.js.map +1 -0
  6. package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/plugins/index.d.ts +4 -0
  7. package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/plugins/index.d.ts.map +1 -0
  8. package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/plugins/index.js +4 -0
  9. package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/plugins/index.js.map +1 -0
  10. package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/plugins/transform/heading.d.ts +6 -0
  11. package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/plugins/transform/heading.d.ts.map +1 -0
  12. package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/plugins/transform/heading.js +36 -0
  13. package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/plugins/transform/heading.js.map +1 -0
  14. package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/plugins/transform/list.d.ts +14 -0
  15. package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/plugins/transform/list.d.ts.map +1 -0
  16. package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/plugins/transform/list.js +18 -0
  17. package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/plugins/transform/list.js.map +1 -0
  18. package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/plugins/transform/table.d.ts +27 -0
  19. package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/plugins/transform/table.d.ts.map +1 -0
  20. package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/plugins/transform/table.js +37 -0
  21. package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/plugins/transform/table.js.map +1 -0
  22. package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/processor.d.ts +22 -0
  23. package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/processor.d.ts.map +1 -0
  24. package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/processor.js +95 -0
  25. package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/processor.js.map +1 -0
  26. package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/types/index.d.ts +55 -0
  27. package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/types/index.d.ts.map +1 -0
  28. package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/types/index.js +2 -0
  29. package/packages/parser/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/parser/dist/types/index.js.map +1 -0
  30. package/packages/parser/__tests__/frontmatter.test.ts +69 -0
  31. package/packages/parser/__tests__/gfm.test.ts +83 -0
  32. package/packages/parser/__tests__/processor.test.ts +136 -0
  33. package/packages/parser/__tests__/transform/heading.test.ts +56 -0
  34. package/packages/parser/__tests__/transform/list.test.ts +67 -0
  35. package/packages/parser/__tests__/transform/table.test.ts +85 -0
  36. package/packages/parser/dist/index.cjs +191 -0
  37. package/packages/parser/dist/index.cjs.map +1 -0
  38. package/packages/parser/dist/index.d.ts +4 -0
  39. package/packages/parser/dist/index.d.ts.map +1 -0
  40. package/packages/parser/dist/index.mjs +185 -0
  41. package/packages/parser/dist/index.mjs.map +1 -0
  42. package/packages/parser/dist/plugins/index.d.ts +4 -0
  43. package/packages/parser/dist/plugins/index.d.ts.map +1 -0
  44. package/packages/parser/dist/plugins/transform/heading.d.ts +6 -0
  45. package/packages/parser/dist/plugins/transform/heading.d.ts.map +1 -0
  46. package/packages/parser/dist/plugins/transform/list.d.ts +14 -0
  47. package/packages/parser/dist/plugins/transform/list.d.ts.map +1 -0
  48. package/packages/parser/dist/plugins/transform/table.d.ts +27 -0
  49. package/packages/parser/dist/plugins/transform/table.d.ts.map +1 -0
  50. package/packages/parser/dist/processor.d.ts +22 -0
  51. package/packages/parser/dist/processor.d.ts.map +1 -0
  52. package/packages/parser/dist/types/index.d.ts +55 -0
  53. package/packages/parser/dist/types/index.d.ts.map +1 -0
  54. package/packages/parser/node_modules/.bin/yaml +17 -0
  55. package/packages/parser/package.json +38 -0
  56. package/packages/parser/rollup.config.ts +38 -0
  57. package/packages/parser/src/index.ts +15 -0
  58. package/packages/parser/src/plugins/index.ts +3 -0
  59. package/packages/parser/src/plugins/transform/heading.ts +40 -0
  60. package/packages/parser/src/plugins/transform/list.ts +29 -0
  61. package/packages/parser/src/plugins/transform/table.ts +62 -0
  62. package/packages/parser/src/processor.ts +119 -0
  63. package/packages/parser/src/types/index.ts +60 -0
  64. package/packages/parser/tsconfig.json +9 -0
  65. package/packages/utils/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/utils/dist/ast/query.d.ts +36 -0
  66. package/packages/utils/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/utils/dist/ast/query.d.ts.map +1 -0
  67. package/packages/utils/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/utils/dist/ast/query.js +99 -0
  68. package/packages/utils/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/utils/dist/ast/query.js.map +1 -0
  69. package/packages/utils/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/utils/dist/ast/traverse.d.ts +22 -0
  70. package/packages/utils/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/utils/dist/ast/traverse.d.ts.map +1 -0
  71. package/packages/utils/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/utils/dist/ast/traverse.js +46 -0
  72. package/packages/utils/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/utils/dist/ast/traverse.js.map +1 -0
  73. package/packages/utils/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/utils/dist/index.d.ts +7 -0
  74. package/packages/utils/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/utils/dist/index.d.ts.map +1 -0
  75. package/packages/utils/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/utils/dist/index.js +8 -0
  76. package/packages/utils/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/utils/dist/index.js.map +1 -0
  77. package/packages/utils/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/utils/dist/string/sanitize.d.ts +22 -0
  78. package/packages/utils/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/utils/dist/string/sanitize.d.ts.map +1 -0
  79. package/packages/utils/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/utils/dist/string/sanitize.js +140 -0
  80. package/packages/utils/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/utils/dist/string/sanitize.js.map +1 -0
  81. package/packages/utils/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/utils/dist/string/slugify.d.ts +16 -0
  82. package/packages/utils/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/utils/dist/string/slugify.d.ts.map +1 -0
  83. package/packages/utils/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/utils/dist/string/slugify.js +39 -0
  84. package/packages/utils/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/utils/dist/string/slugify.js.map +1 -0
  85. package/packages/utils/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/utils/dist/types/index.d.ts +49 -0
  86. package/packages/utils/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/utils/dist/types/index.d.ts.map +1 -0
  87. package/packages/utils/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/utils/dist/types/index.js +19 -0
  88. package/packages/utils/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/utils/dist/types/index.js.map +1 -0
  89. package/packages/utils/__tests__/query.test.ts +155 -0
  90. package/packages/utils/__tests__/sanitize.test.ts +96 -0
  91. package/packages/utils/__tests__/slugify.test.ts +71 -0
  92. package/packages/utils/__tests__/traverse.test.ts +131 -0
  93. package/packages/utils/dist/ast/query.d.ts +36 -0
  94. package/packages/utils/dist/ast/query.d.ts.map +1 -0
  95. package/packages/utils/dist/ast/traverse.d.ts +22 -0
  96. package/packages/utils/dist/ast/traverse.d.ts.map +1 -0
  97. package/packages/utils/dist/index.cjs +358 -0
  98. package/packages/utils/dist/index.cjs.map +1 -0
  99. package/packages/utils/dist/index.d.ts +7 -0
  100. package/packages/utils/dist/index.d.ts.map +1 -0
  101. package/packages/utils/dist/index.mjs +343 -0
  102. package/packages/utils/dist/index.mjs.map +1 -0
  103. package/packages/utils/dist/string/sanitize.d.ts +22 -0
  104. package/packages/utils/dist/string/sanitize.d.ts.map +1 -0
  105. package/packages/utils/dist/string/slugify.d.ts +16 -0
  106. package/packages/utils/dist/string/slugify.d.ts.map +1 -0
  107. package/packages/utils/dist/types/index.d.ts +49 -0
  108. package/packages/utils/dist/types/index.d.ts.map +1 -0
  109. package/packages/utils/package.json +27 -0
  110. package/packages/utils/rollup.config.ts +26 -0
  111. package/packages/utils/src/ast/query.ts +127 -0
  112. package/packages/utils/src/ast/traverse.ts +73 -0
  113. package/packages/utils/src/index.ts +20 -0
  114. package/packages/utils/src/string/sanitize.ts +155 -0
  115. package/packages/utils/src/string/slugify.ts +43 -0
  116. package/packages/utils/src/types/index.ts +72 -0
  117. package/packages/utils/tsconfig.json +8 -0
  118. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/MarkdownRenderer.d.ts +27 -0
  119. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/MarkdownRenderer.d.ts.map +1 -0
  120. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/MarkdownRenderer.js +39 -0
  121. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/MarkdownRenderer.js.map +1 -0
  122. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/NodeRenderer.d.ts +10 -0
  123. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/NodeRenderer.d.ts.map +1 -0
  124. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/NodeRenderer.js +130 -0
  125. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/NodeRenderer.js.map +1 -0
  126. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/context.d.ts +17 -0
  127. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/context.d.ts.map +1 -0
  128. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/context.js +14 -0
  129. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/context.js.map +1 -0
  130. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Blockquote.d.ts +8 -0
  131. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Blockquote.d.ts.map +1 -0
  132. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Blockquote.js +5 -0
  133. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Blockquote.js.map +1 -0
  134. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Code.d.ts +13 -0
  135. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Code.d.ts.map +1 -0
  136. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Code.js +9 -0
  137. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Code.js.map +1 -0
  138. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Heading.d.ts +8 -0
  139. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Heading.d.ts.map +1 -0
  140. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Heading.js +7 -0
  141. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Heading.js.map +1 -0
  142. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Image.d.ts +7 -0
  143. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Image.d.ts.map +1 -0
  144. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Image.js +5 -0
  145. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Image.js.map +1 -0
  146. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Link.d.ts +8 -0
  147. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Link.d.ts.map +1 -0
  148. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Link.js +7 -0
  149. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Link.js.map +1 -0
  150. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/List.d.ts +13 -0
  151. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/List.d.ts.map +1 -0
  152. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/List.js +14 -0
  153. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/List.js.map +1 -0
  154. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Paragraph.d.ts +8 -0
  155. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Paragraph.d.ts.map +1 -0
  156. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Paragraph.js +5 -0
  157. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Paragraph.js.map +1 -0
  158. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Table.d.ts +19 -0
  159. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Table.d.ts.map +1 -0
  160. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Table.js +18 -0
  161. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/Table.js.map +1 -0
  162. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/index.d.ts +34 -0
  163. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/index.d.ts.map +1 -0
  164. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/index.js +28 -0
  165. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/components/defaults/index.js.map +1 -0
  166. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/hooks/useMarkdown.d.ts +11 -0
  167. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/hooks/useMarkdown.d.ts.map +1 -0
  168. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/hooks/useMarkdown.js +28 -0
  169. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/hooks/useMarkdown.js.map +1 -0
  170. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/index.d.ts +6 -0
  171. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/index.d.ts.map +1 -0
  172. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/index.js +9 -0
  173. package/packages/web/.rollup.cache/Users/pidan/Work/Learn/pd-markdown/packages/web/dist/index.js.map +1 -0
  174. package/packages/web/__tests__/MarkdownRenderer.test.tsx +89 -0
  175. package/packages/web/__tests__/NodeRenderer.test.tsx +97 -0
  176. package/packages/web/__tests__/components/Code.test.tsx +71 -0
  177. package/packages/web/__tests__/components/Heading.test.tsx +65 -0
  178. package/packages/web/__tests__/components/List.test.tsx +100 -0
  179. package/packages/web/__tests__/components/Table.test.tsx +105 -0
  180. package/packages/web/__tests__/useMarkdown.test.ts +63 -0
  181. package/packages/web/dist/components/MarkdownRenderer.d.ts +27 -0
  182. package/packages/web/dist/components/MarkdownRenderer.d.ts.map +1 -0
  183. package/packages/web/dist/components/NodeRenderer.d.ts +10 -0
  184. package/packages/web/dist/components/NodeRenderer.d.ts.map +1 -0
  185. package/packages/web/dist/components/context.d.ts +17 -0
  186. package/packages/web/dist/components/context.d.ts.map +1 -0
  187. package/packages/web/dist/components/defaults/Blockquote.d.ts +8 -0
  188. package/packages/web/dist/components/defaults/Blockquote.d.ts.map +1 -0
  189. package/packages/web/dist/components/defaults/Code.d.ts +13 -0
  190. package/packages/web/dist/components/defaults/Code.d.ts.map +1 -0
  191. package/packages/web/dist/components/defaults/Heading.d.ts +8 -0
  192. package/packages/web/dist/components/defaults/Heading.d.ts.map +1 -0
  193. package/packages/web/dist/components/defaults/Image.d.ts +7 -0
  194. package/packages/web/dist/components/defaults/Image.d.ts.map +1 -0
  195. package/packages/web/dist/components/defaults/Link.d.ts +8 -0
  196. package/packages/web/dist/components/defaults/Link.d.ts.map +1 -0
  197. package/packages/web/dist/components/defaults/List.d.ts +13 -0
  198. package/packages/web/dist/components/defaults/List.d.ts.map +1 -0
  199. package/packages/web/dist/components/defaults/Paragraph.d.ts +8 -0
  200. package/packages/web/dist/components/defaults/Paragraph.d.ts.map +1 -0
  201. package/packages/web/dist/components/defaults/Table.d.ts +19 -0
  202. package/packages/web/dist/components/defaults/Table.d.ts.map +1 -0
  203. package/packages/web/dist/components/defaults/index.d.ts +34 -0
  204. package/packages/web/dist/components/defaults/index.d.ts.map +1 -0
  205. package/packages/web/dist/hooks/useMarkdown.d.ts +11 -0
  206. package/packages/web/dist/hooks/useMarkdown.d.ts.map +1 -0
  207. package/packages/web/dist/index.cjs +306 -0
  208. package/packages/web/dist/index.cjs.map +1 -0
  209. package/packages/web/dist/index.d.ts +6 -0
  210. package/packages/web/dist/index.d.ts.map +1 -0
  211. package/packages/web/dist/index.mjs +287 -0
  212. package/packages/web/dist/index.mjs.map +1 -0
  213. package/packages/web/package.json +40 -0
  214. package/packages/web/rollup.config.ts +36 -0
  215. package/packages/web/src/components/MarkdownRenderer.tsx +70 -0
  216. package/packages/web/src/components/NodeRenderer.tsx +205 -0
  217. package/packages/web/src/components/context.ts +24 -0
  218. package/packages/web/src/components/defaults/Blockquote.tsx +11 -0
  219. package/packages/web/src/components/defaults/Code.tsx +26 -0
  220. package/packages/web/src/components/defaults/Heading.tsx +14 -0
  221. package/packages/web/src/components/defaults/Image.tsx +10 -0
  222. package/packages/web/src/components/defaults/Link.tsx +18 -0
  223. package/packages/web/src/components/defaults/List.tsx +33 -0
  224. package/packages/web/src/components/defaults/Paragraph.tsx +11 -0
  225. package/packages/web/src/components/defaults/Table.tsx +50 -0
  226. package/packages/web/src/components/defaults/index.tsx +80 -0
  227. package/packages/web/src/hooks/useMarkdown.ts +32 -0
  228. package/packages/web/src/index.ts +37 -0
  229. package/packages/web/tsconfig.json +11 -0
  230. package/packages/web/vitest.config.ts +9 -0
  231. package/pnpm-workspace.yaml +2 -0
  232. package/tsconfig.base.json +26 -0
  233. package/tsconfig.json +8 -0
  234. package/vitest.config.ts +28 -0
  235. package/vitest.setup.ts +1 -0
@@ -0,0 +1,73 @@
1
+ import type { Node } from 'unist'
2
+ import type { Parent, MdNode, Visitor } from '../types'
3
+ import { isParent } from '../types'
4
+
5
+ /**
6
+ * Traverse AST in depth-first order
7
+ *
8
+ * @param node - Root node to start traversal
9
+ * @param visitor - Visitor function called for each node
10
+ * Return `false` to skip children of current node
11
+ * Return `true` or `undefined` to continue
12
+ */
13
+ export function traverseAst<T extends Node = MdNode>(
14
+ node: T,
15
+ visitor: Visitor<T>
16
+ ): void {
17
+ function visit(
18
+ current: T,
19
+ index: number | undefined,
20
+ parent: Parent | undefined
21
+ ): void {
22
+ const result = visitor(current, index, parent)
23
+
24
+ // Skip children if visitor returns false
25
+ if (result === false) {
26
+ return
27
+ }
28
+
29
+ if (isParent(current)) {
30
+ const children = current.children as T[]
31
+ for (let i = 0; i < children.length; i++) {
32
+ visit(children[i], i, current as unknown as Parent)
33
+ }
34
+ }
35
+ }
36
+
37
+ visit(node, undefined, undefined)
38
+ }
39
+
40
+ /**
41
+ * Traverse AST with enter and leave callbacks
42
+ *
43
+ * @param node - Root node to start traversal
44
+ * @param callbacks - Object with optional enter and leave functions
45
+ */
46
+ export function traverseAstWithCallbacks<T extends Node = MdNode>(
47
+ node: T,
48
+ callbacks: {
49
+ enter?: Visitor<T>
50
+ leave?: Visitor<T>
51
+ }
52
+ ): void {
53
+ const { enter, leave } = callbacks
54
+
55
+ function visit(
56
+ current: T,
57
+ index: number | undefined,
58
+ parent: Parent | undefined
59
+ ): void {
60
+ const shouldSkipChildren = enter?.(current, index, parent) === false
61
+
62
+ if (!shouldSkipChildren && isParent(current)) {
63
+ const children = current.children as T[]
64
+ for (let i = 0; i < children.length; i++) {
65
+ visit(children[i], i, current as unknown as Parent)
66
+ }
67
+ }
68
+
69
+ leave?.(current, index, parent)
70
+ }
71
+
72
+ visit(node, undefined, undefined)
73
+ }
@@ -0,0 +1,20 @@
1
+ // Types
2
+ export type {
3
+ MdNode,
4
+ MdRoot,
5
+ Parent,
6
+ Literal,
7
+ Visitor,
8
+ PluginOptions,
9
+ Position,
10
+ Location,
11
+ } from './types'
12
+ export { isParent, isLiteral, isNodeType } from './types'
13
+
14
+ // AST utilities
15
+ export { traverseAst, traverseAstWithCallbacks } from './ast/traverse'
16
+ export { findNodes, findNode, findNodesBy, findParent } from './ast/query'
17
+
18
+ // String utilities
19
+ export { slugify, uniqueSlugify } from './string/slugify'
20
+ export { escapeHtml, sanitizeHtml, stripHtml } from './string/sanitize'
@@ -0,0 +1,155 @@
1
+ /**
2
+ * HTML entities that need escaping
3
+ */
4
+ const HTML_ESCAPE_MAP: Record<string, string> = {
5
+ '&': '&amp;',
6
+ '<': '&lt;',
7
+ '>': '&gt;',
8
+ '"': '&quot;',
9
+ "'": '&#39;',
10
+ }
11
+
12
+ /**
13
+ * Escape HTML special characters
14
+ *
15
+ * @param text - Text to escape
16
+ * @returns Escaped text safe for HTML insertion
17
+ */
18
+ export function escapeHtml(text: string): string {
19
+ return text.replace(/[&<>"']/g, (char) => HTML_ESCAPE_MAP[char] || char)
20
+ }
21
+
22
+ /**
23
+ * Allowed HTML tags for sanitization
24
+ */
25
+ const ALLOWED_TAGS = new Set([
26
+ 'a',
27
+ 'abbr',
28
+ 'b',
29
+ 'blockquote',
30
+ 'br',
31
+ 'code',
32
+ 'dd',
33
+ 'del',
34
+ 'div',
35
+ 'dl',
36
+ 'dt',
37
+ 'em',
38
+ 'h1',
39
+ 'h2',
40
+ 'h3',
41
+ 'h4',
42
+ 'h5',
43
+ 'h6',
44
+ 'hr',
45
+ 'i',
46
+ 'img',
47
+ 'ins',
48
+ 'kbd',
49
+ 'li',
50
+ 'ol',
51
+ 'p',
52
+ 'pre',
53
+ 'q',
54
+ 's',
55
+ 'samp',
56
+ 'small',
57
+ 'span',
58
+ 'strong',
59
+ 'sub',
60
+ 'sup',
61
+ 'table',
62
+ 'tbody',
63
+ 'td',
64
+ 'tfoot',
65
+ 'th',
66
+ 'thead',
67
+ 'tr',
68
+ 'u',
69
+ 'ul',
70
+ ])
71
+
72
+ /**
73
+ * Allowed attributes for sanitization
74
+ */
75
+ const ALLOWED_ATTRS = new Set([
76
+ 'href',
77
+ 'src',
78
+ 'alt',
79
+ 'title',
80
+ 'class',
81
+ 'id',
82
+ 'name',
83
+ 'target',
84
+ 'rel',
85
+ 'width',
86
+ 'height',
87
+ 'align',
88
+ 'colspan',
89
+ 'rowspan',
90
+ ])
91
+
92
+ /**
93
+ * Sanitize HTML string by removing dangerous content
94
+ *
95
+ * @param html - HTML string to sanitize
96
+ * @returns Sanitized HTML string
97
+ */
98
+ export function sanitizeHtml(html: string): string {
99
+ let result = html
100
+
101
+ // Remove script tags first
102
+ result = result.replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, '')
103
+
104
+ // Remove event handlers
105
+ result = result.replace(/\s+on\w+\s*=\s*(?:"[^"]*"|'[^']*'|[^\s>]*)/gi, '')
106
+
107
+ // Remove disallowed tags (keep content) and sanitize attributes
108
+ result = result.replace(/<\/?(\w+)([^>]*)>/g, (match, tagName, attrs) => {
109
+ const tag = tagName.toLowerCase()
110
+ if (!ALLOWED_TAGS.has(tag)) {
111
+ return ''
112
+ }
113
+
114
+ // For closing tags, just return them
115
+ if (match.startsWith('</')) {
116
+ return `</${tag}>`
117
+ }
118
+
119
+ // Sanitize attributes
120
+ const sanitizedAttrs: string[] = []
121
+ const attrRegex = /\s+([\w-]+)\s*=\s*(?:"([^"]*)"|'([^']*)'|(\S+))/g
122
+ let attrMatch
123
+
124
+ while ((attrMatch = attrRegex.exec(attrs)) !== null) {
125
+ const [, attrName, v1, v2, v3] = attrMatch
126
+ const attr = attrName.toLowerCase()
127
+
128
+ if (ALLOWED_ATTRS.has(attr)) {
129
+ let value = v1 ?? v2 ?? v3 ?? ''
130
+
131
+ // Check for dangerous URLs in href/src
132
+ if ((attr === 'href' || attr === 'src') && /^\s*javascript\s*:/i.test(value)) {
133
+ value = ''
134
+ }
135
+
136
+ sanitizedAttrs.push(`${attr}="${value}"`)
137
+ }
138
+ }
139
+
140
+ const attrStr = sanitizedAttrs.length > 0 ? ' ' + sanitizedAttrs.join(' ') : ''
141
+ return `<${tag}${attrStr}>`
142
+ })
143
+
144
+ return result
145
+ }
146
+
147
+ /**
148
+ * Strip all HTML tags from a string
149
+ *
150
+ * @param html - HTML string to strip
151
+ * @returns Plain text without HTML tags
152
+ */
153
+ export function stripHtml(html: string): string {
154
+ return html.replace(/<[^>]*>/g, '')
155
+ }
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Convert text to URL-safe slug
3
+ *
4
+ * @param text - Text to slugify
5
+ * @returns URL-safe slug
6
+ */
7
+ export function slugify(text: string): string {
8
+ return (
9
+ text
10
+ // Convert to lowercase
11
+ .toLowerCase()
12
+ // Replace Chinese characters with pinyin-like representation (keep as-is for simplicity)
13
+ // Replace spaces and special chars with hyphens
14
+ .replace(/[\s_]+/g, '-')
15
+ // Remove characters that aren't alphanumeric, hyphens, or common CJK
16
+ .replace(/[^\w\u4e00-\u9fff\u3040-\u309f\u30a0-\u30ff-]/g, '')
17
+ // Replace multiple consecutive hyphens with single hyphen
18
+ .replace(/-+/g, '-')
19
+ // Remove leading/trailing hyphens
20
+ .replace(/^-+|-+$/g, '')
21
+ )
22
+ }
23
+
24
+ /**
25
+ * Generate unique slug with counter suffix for duplicates
26
+ *
27
+ * @param text - Text to slugify
28
+ * @param existingSlugs - Set of existing slugs to check against
29
+ * @returns Unique slug
30
+ */
31
+ export function uniqueSlugify(text: string, existingSlugs: Set<string>): string {
32
+ const baseSlug = slugify(text)
33
+ let slug = baseSlug
34
+ let counter = 1
35
+
36
+ while (existingSlugs.has(slug)) {
37
+ slug = `${baseSlug}-${counter}`
38
+ counter++
39
+ }
40
+
41
+ existingSlugs.add(slug)
42
+ return slug
43
+ }
@@ -0,0 +1,72 @@
1
+ import type { Root, Content, Parent, Literal } from 'mdast'
2
+ import type { Node as UnistNode } from 'unist'
3
+
4
+ // Re-export mdast types
5
+ export type { Root, Content, Parent, Literal }
6
+
7
+ /**
8
+ * All possible markdown node types
9
+ */
10
+ export type MdNode = Root | Content
11
+
12
+ /**
13
+ * Root node of markdown AST
14
+ */
15
+ export type MdRoot = Root
16
+
17
+ /**
18
+ * Visitor function for AST traversal
19
+ */
20
+ export type Visitor<T extends UnistNode = MdNode> = (
21
+ node: T,
22
+ index: number | undefined,
23
+ parent: Parent | undefined
24
+ ) => void | boolean
25
+
26
+ /**
27
+ * Plugin options base interface
28
+ */
29
+ export interface PluginOptions {
30
+ [key: string]: unknown
31
+ }
32
+
33
+ /**
34
+ * Position information in source
35
+ */
36
+ export interface Position {
37
+ line: number
38
+ column: number
39
+ offset?: number
40
+ }
41
+
42
+ /**
43
+ * Location in source
44
+ */
45
+ export interface Location {
46
+ start: Position
47
+ end: Position
48
+ }
49
+
50
+ /**
51
+ * Type guard to check if node is a parent node
52
+ */
53
+ export function isParent(node: UnistNode): node is Parent {
54
+ return 'children' in node && Array.isArray((node as Parent).children)
55
+ }
56
+
57
+ /**
58
+ * Type guard to check if node is a literal node
59
+ */
60
+ export function isLiteral(node: UnistNode): node is Literal {
61
+ return 'value' in node && typeof (node as Literal).value === 'string'
62
+ }
63
+
64
+ /**
65
+ * Type guard to check if node has specific type
66
+ */
67
+ export function isNodeType<T extends MdNode>(
68
+ node: UnistNode,
69
+ type: T['type']
70
+ ): node is T {
71
+ return node.type === type
72
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "extends": "../../tsconfig.base.json",
3
+ "compilerOptions": {
4
+ "outDir": "./dist",
5
+ "rootDir": "./src"
6
+ },
7
+ "include": ["src"]
8
+ }
@@ -0,0 +1,27 @@
1
+ import type { FC, CSSProperties } from 'react';
2
+ import type { Root } from 'mdast';
3
+ import { type ParserOptions } from '@pd-markdown/parser';
4
+ import type { ComponentMap } from './defaults';
5
+ export interface MarkdownRendererProps {
6
+ /** Markdown source string (will be parsed) */
7
+ source?: string;
8
+ /** Pre-parsed AST (skip parsing, useful for SSR) */
9
+ ast?: Root;
10
+ /** Custom component overrides */
11
+ components?: Partial<ComponentMap>;
12
+ /** CSS class name for wrapper */
13
+ className?: string;
14
+ /** Inline styles for wrapper */
15
+ style?: CSSProperties;
16
+ /** Parser options (only used when source is provided) */
17
+ parserOptions?: ParserOptions;
18
+ }
19
+ /**
20
+ * Main markdown renderer component
21
+ *
22
+ * Supports both client-side and server-side rendering:
23
+ * - Pass `source` for automatic parsing
24
+ * - Pass `ast` for pre-parsed content (SSR optimization)
25
+ */
26
+ export declare const MarkdownRenderer: FC<MarkdownRendererProps>;
27
+ //# sourceMappingURL=MarkdownRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MarkdownRenderer.d.ts","sourceRoot":"","sources":["../../src/components/MarkdownRenderer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAC9C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,OAAO,CAAA;AACjC,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAGtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C,MAAM,WAAW,qBAAqB;IACpC,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,oDAAoD;IACpD,GAAG,CAAC,EAAE,IAAI,CAAA;IACV,iCAAiC;IACjC,UAAU,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAA;IAClC,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gCAAgC;IAChC,KAAK,CAAC,EAAE,aAAa,CAAA;IACrB,yDAAyD;IACzD,aAAa,CAAC,EAAE,aAAa,CAAA;CAC9B;AAeD;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC,qBAAqB,CA2BtD,CAAA"}
@@ -0,0 +1,39 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { createParser } from '@pd-markdown/parser';
3
+ import { MarkdownContext } from './context';
4
+ import { NodeRenderer } from './NodeRenderer';
5
+ // Singleton parser for client-side use
6
+ let defaultParser = null;
7
+ function getParser(options) {
8
+ if (options) {
9
+ return createParser(options);
10
+ }
11
+ if (!defaultParser) {
12
+ defaultParser = createParser();
13
+ }
14
+ return defaultParser;
15
+ }
16
+ /**
17
+ * Main markdown renderer component
18
+ *
19
+ * Supports both client-side and server-side rendering:
20
+ * - Pass `source` for automatic parsing
21
+ * - Pass `ast` for pre-parsed content (SSR optimization)
22
+ */
23
+ export const MarkdownRenderer = ({ source, ast, components = {}, className, style, parserOptions, }) => {
24
+ // Use provided AST or parse source
25
+ let tree;
26
+ if (ast) {
27
+ tree = ast;
28
+ }
29
+ else if (source) {
30
+ const parser = getParser(parserOptions);
31
+ tree = parser.parse(source);
32
+ }
33
+ else {
34
+ // No content provided
35
+ return null;
36
+ }
37
+ return (_jsx(MarkdownContext.Provider, { value: { components }, children: _jsx("div", { className: className, style: style, children: _jsx(NodeRenderer, { node: tree }) }) }));
38
+ };
39
+ //# sourceMappingURL=MarkdownRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MarkdownRenderer.js","sourceRoot":"","sources":["../../src/components/MarkdownRenderer.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAsB,MAAM,qBAAqB,CAAA;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAkB7C,uCAAuC;AACvC,IAAI,aAAa,GAA2C,IAAI,CAAA;AAEhE,SAAS,SAAS,CAAC,OAAuB;IACxC,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,YAAY,CAAC,OAAO,CAAC,CAAA;IAC9B,CAAC;IACD,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,aAAa,GAAG,YAAY,EAAE,CAAA;IAChC,CAAC;IACD,OAAO,aAAa,CAAA;AACtB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAA8B,CAAC,EAC1D,MAAM,EACN,GAAG,EACH,UAAU,GAAG,EAAE,EACf,SAAS,EACT,KAAK,EACL,aAAa,GACd,EAAE,EAAE;IACH,mCAAmC;IACnC,IAAI,IAAU,CAAA;IACd,IAAI,GAAG,EAAE,CAAC;QACR,IAAI,GAAG,GAAG,CAAA;IACZ,CAAC;SAAM,IAAI,MAAM,EAAE,CAAC;QAClB,MAAM,MAAM,GAAG,SAAS,CAAC,aAAa,CAAC,CAAA;QACvC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IAC7B,CAAC;SAAM,CAAC;QACN,sBAAsB;QACtB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,CACL,KAAC,eAAe,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,UAAU,EAAE,YAC7C,cAAK,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,YACrC,KAAC,YAAY,IAAC,IAAI,EAAE,IAAI,GAAI,GACxB,GACmB,CAC5B,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,10 @@
1
+ import type { FC } from 'react';
2
+ import type { Content, Root } from 'mdast';
3
+ export interface NodeRendererProps {
4
+ node: Content | Root;
5
+ }
6
+ /**
7
+ * Recursive node renderer that renders AST nodes to React elements
8
+ */
9
+ export declare const NodeRenderer: FC<NodeRendererProps>;
10
+ //# sourceMappingURL=NodeRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NodeRenderer.d.ts","sourceRoot":"","sources":["../../src/components/NodeRenderer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAa,MAAM,OAAO,CAAA;AAC1C,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAA2B,MAAM,OAAO,CAAA;AAInE,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAA;CACrB;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,iBAAiB,CAgM9C,CAAA"}
@@ -0,0 +1,130 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useMarkdownContext } from './context';
3
+ import { defaultComponents } from './defaults';
4
+ /**
5
+ * Recursive node renderer that renders AST nodes to React elements
6
+ */
7
+ export const NodeRenderer = ({ node }) => {
8
+ const { components } = useMarkdownContext();
9
+ // Get the component for this node type
10
+ const getComponent = (type) => {
11
+ return components[type] || defaultComponents[type];
12
+ };
13
+ // Render children nodes
14
+ const renderChildren = (children) => {
15
+ return children.map((child, index) => (_jsx(NodeRenderer, { node: child }, index)));
16
+ };
17
+ // Render phrasing content (inline elements)
18
+ const renderPhrasingContent = (children) => {
19
+ return children.map((child, index) => {
20
+ switch (child.type) {
21
+ case 'text':
22
+ return child.value;
23
+ case 'strong':
24
+ return _jsx("strong", { children: renderPhrasingContent(child.children) }, index);
25
+ case 'emphasis':
26
+ return _jsx("em", { children: renderPhrasingContent(child.children) }, index);
27
+ case 'delete':
28
+ return _jsx("del", { children: renderPhrasingContent(child.children) }, index);
29
+ case 'inlineCode': {
30
+ const InlineCode = getComponent('inlineCode');
31
+ return InlineCode ? _jsx(InlineCode, { node: child }, index) : _jsx("code", { children: child.value }, index);
32
+ }
33
+ case 'link': {
34
+ const Link = getComponent('link');
35
+ return Link ? (_jsx(Link, { node: child, children: renderPhrasingContent(child.children) }, index)) : (_jsx("a", { href: child.url, children: renderPhrasingContent(child.children) }, index));
36
+ }
37
+ case 'image': {
38
+ const Image = getComponent('image');
39
+ return Image ? _jsx(Image, { node: child }, index) : _jsx("img", { src: child.url, alt: child.alt || '' }, index);
40
+ }
41
+ case 'break':
42
+ return _jsx("br", {}, index);
43
+ case 'html':
44
+ // For safety, render HTML as text in React
45
+ return child.value;
46
+ default:
47
+ // For unknown inline types, try to render as text if possible
48
+ if ('value' in child && typeof child.value === 'string') {
49
+ return child.value;
50
+ }
51
+ if ('children' in child) {
52
+ return renderPhrasingContent(child.children);
53
+ }
54
+ return null;
55
+ }
56
+ });
57
+ };
58
+ // Handle different node types
59
+ switch (node.type) {
60
+ case 'root':
61
+ return _jsx(_Fragment, { children: renderChildren(node.children) });
62
+ case 'heading': {
63
+ const Heading = getComponent('heading');
64
+ return Heading ? (_jsx(Heading, { node: node, children: renderPhrasingContent(node.children) })) : null;
65
+ }
66
+ case 'paragraph': {
67
+ const Paragraph = getComponent('paragraph');
68
+ return Paragraph ? (_jsx(Paragraph, { node: node, children: renderPhrasingContent(node.children) })) : null;
69
+ }
70
+ case 'list': {
71
+ const List = getComponent('list');
72
+ return List ? (_jsx(List, { node: node, children: renderChildren(node.children) })) : null;
73
+ }
74
+ case 'listItem': {
75
+ const ListItem = getComponent('listItem');
76
+ const children = node.children.map((child, index) => {
77
+ // Unwrap single paragraph in list item
78
+ if (child.type === 'paragraph' && node.children.length === 1) {
79
+ return renderPhrasingContent(child.children);
80
+ }
81
+ return _jsx(NodeRenderer, { node: child }, index);
82
+ });
83
+ return ListItem ? _jsx(ListItem, { node: node, children: children }) : null;
84
+ }
85
+ case 'table': {
86
+ const Table = getComponent('table');
87
+ const TableRow = getComponent('tableRow');
88
+ if (!Table || !TableRow)
89
+ return null;
90
+ const [headerRow, ...bodyRows] = node.children;
91
+ return (_jsxs(Table, { node: node, children: [headerRow && (_jsx(TableRow, { node: headerRow, isHeader: true, children: headerRow.children.map((cell, index) => (_jsx(NodeRenderer, { node: cell }, index))) })), bodyRows.length > 0 && (_jsx("tbody", { children: bodyRows.map((row, rowIndex) => (_jsx(TableRow, { node: row, children: row.children.map((cell, cellIndex) => (_jsx(NodeRenderer, { node: cell }, cellIndex))) }, rowIndex))) }))] }));
92
+ }
93
+ case 'tableCell': {
94
+ const TableCell = getComponent('tableCell');
95
+ return TableCell ? (_jsx(TableCell, { node: node, children: renderPhrasingContent(node.children) })) : null;
96
+ }
97
+ case 'code': {
98
+ const Code = getComponent('code');
99
+ return Code ? _jsx(Code, { node: node }) : null;
100
+ }
101
+ case 'blockquote': {
102
+ const Blockquote = getComponent('blockquote');
103
+ return Blockquote ? (_jsx(Blockquote, { node: node, children: renderChildren(node.children) })) : null;
104
+ }
105
+ case 'thematicBreak':
106
+ return _jsx("hr", {});
107
+ case 'html':
108
+ // For safety, don't render raw HTML by default
109
+ return null;
110
+ case 'yaml':
111
+ // Frontmatter shouldn't be rendered
112
+ return null;
113
+ default: {
114
+ // Try to find a custom component for unknown types
115
+ const CustomComponent = getComponent(node.type);
116
+ if (CustomComponent) {
117
+ const children = 'children' in node
118
+ ? renderChildren(node.children)
119
+ : undefined;
120
+ return _jsx(CustomComponent, { node: node, children: children });
121
+ }
122
+ // Fallback: try to render children if available
123
+ if ('children' in node) {
124
+ return _jsx(_Fragment, { children: renderChildren(node.children) });
125
+ }
126
+ return null;
127
+ }
128
+ }
129
+ };
130
+ //# sourceMappingURL=NodeRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NodeRenderer.js","sourceRoot":"","sources":["../../src/components/NodeRenderer.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { ComponentMap } from './defaults';
2
+ /**
3
+ * Context value for markdown renderer
4
+ */
5
+ export interface MarkdownContextValue {
6
+ /** Custom component overrides */
7
+ components: Partial<ComponentMap>;
8
+ }
9
+ /**
10
+ * Context for passing configuration down the component tree
11
+ */
12
+ export declare const MarkdownContext: import("react").Context<MarkdownContextValue>;
13
+ /**
14
+ * Hook to access markdown context
15
+ */
16
+ export declare function useMarkdownContext(): MarkdownContextValue;
17
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/components/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,iCAAiC;IACjC,UAAU,EAAE,OAAO,CAAC,YAAY,CAAC,CAAA;CAClC;AAED;;GAEG;AACH,eAAO,MAAM,eAAe,+CAE1B,CAAA;AAEF;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,oBAAoB,CAEzD"}
@@ -0,0 +1,14 @@
1
+ import { createContext, useContext } from 'react';
2
+ /**
3
+ * Context for passing configuration down the component tree
4
+ */
5
+ export const MarkdownContext = createContext({
6
+ components: {},
7
+ });
8
+ /**
9
+ * Hook to access markdown context
10
+ */
11
+ export function useMarkdownContext() {
12
+ return useContext(MarkdownContext);
13
+ }
14
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/components/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAWjD;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,aAAa,CAAuB;IACjE,UAAU,EAAE,EAAE;CACf,CAAC,CAAA;AAEF;;GAEG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,UAAU,CAAC,eAAe,CAAC,CAAA;AACpC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { FC, ReactNode } from 'react';
2
+ import type { Blockquote as BlockquoteNode } from 'mdast';
3
+ export interface BlockquoteProps {
4
+ node: BlockquoteNode;
5
+ children: ReactNode;
6
+ }
7
+ export declare const Blockquote: FC<BlockquoteProps>;
8
+ //# sourceMappingURL=Blockquote.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Blockquote.d.ts","sourceRoot":"","sources":["../../../src/components/defaults/Blockquote.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAC1C,OAAO,KAAK,EAAE,UAAU,IAAI,cAAc,EAAE,MAAM,OAAO,CAAA;AAEzD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,cAAc,CAAA;IACpB,QAAQ,EAAE,SAAS,CAAA;CACpB;AAED,eAAO,MAAM,UAAU,EAAE,EAAE,CAAC,eAAe,CAE1C,CAAA"}
@@ -0,0 +1,5 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ export const Blockquote = ({ children }) => {
3
+ return _jsx("blockquote", { children: children });
4
+ };
5
+ //# sourceMappingURL=Blockquote.js.map