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 @@
1
+ {"version":3,"file":"Blockquote.js","sourceRoot":"","sources":["../../../src/components/defaults/Blockquote.tsx"],"names":[],"mappings":";AAQA,MAAM,CAAC,MAAM,UAAU,GAAwB,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC9D,OAAO,+BAAa,QAAQ,GAAc,CAAA;AAC5C,CAAC,CAAA"}
@@ -0,0 +1,13 @@
1
+ import type { FC, ReactNode } from 'react';
2
+ import type { Code as CodeNode, InlineCode } from 'mdast';
3
+ export interface CodeProps {
4
+ node: CodeNode;
5
+ children?: ReactNode;
6
+ }
7
+ export declare const Code: FC<CodeProps>;
8
+ export interface InlineCodeProps {
9
+ node: InlineCode;
10
+ children?: ReactNode;
11
+ }
12
+ export declare const InlineCodeComponent: FC<InlineCodeProps>;
13
+ //# sourceMappingURL=Code.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Code.d.ts","sourceRoot":"","sources":["../../../src/components/defaults/Code.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAC1C,OAAO,KAAK,EAAE,IAAI,IAAI,QAAQ,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAEzD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,QAAQ,CAAA;IACd,QAAQ,CAAC,EAAE,SAAS,CAAA;CACrB;AAED,eAAO,MAAM,IAAI,EAAE,EAAE,CAAC,SAAS,CAQ9B,CAAA;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,UAAU,CAAA;IAChB,QAAQ,CAAC,EAAE,SAAS,CAAA;CACrB;AAED,eAAO,MAAM,mBAAmB,EAAE,EAAE,CAAC,eAAe,CAEnD,CAAA"}
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ export const Code = ({ node }) => {
3
+ const className = node.lang ? `language-${node.lang}` : undefined;
4
+ return (_jsx("pre", { children: _jsx("code", { className: className, children: node.value }) }));
5
+ };
6
+ export const InlineCodeComponent = ({ node }) => {
7
+ return _jsx("code", { children: node.value });
8
+ };
9
+ //# sourceMappingURL=Code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Code.js","sourceRoot":"","sources":["../../../src/components/defaults/Code.tsx"],"names":[],"mappings":";AAQA,MAAM,CAAC,MAAM,IAAI,GAAkB,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;IAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;IAEjE,OAAO,CACL,wBACE,eAAM,SAAS,EAAE,SAAS,YAAG,IAAI,CAAC,KAAK,GAAQ,GAC3C,CACP,CAAA;AACH,CAAC,CAAA;AAOD,MAAM,CAAC,MAAM,mBAAmB,GAAwB,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;IACnE,OAAO,yBAAO,IAAI,CAAC,KAAK,GAAQ,CAAA;AAClC,CAAC,CAAA"}
@@ -0,0 +1,8 @@
1
+ import type { FC, ReactNode } from 'react';
2
+ import type { Heading as HeadingNode } from 'mdast';
3
+ export interface HeadingProps {
4
+ node: HeadingNode;
5
+ children: ReactNode;
6
+ }
7
+ export declare const Heading: FC<HeadingProps>;
8
+ //# sourceMappingURL=Heading.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Heading.d.ts","sourceRoot":"","sources":["../../../src/components/defaults/Heading.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAC1C,OAAO,KAAK,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,OAAO,CAAA;AAEnD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,WAAW,CAAA;IACjB,QAAQ,EAAE,SAAS,CAAA;CACpB;AAED,eAAO,MAAM,OAAO,EAAE,EAAE,CAAC,YAAY,CAKpC,CAAA"}
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ export const Heading = ({ node, children }) => {
3
+ const Tag = `h${node.depth}`;
4
+ const id = node.data && 'id' in node.data ? node.data.id : undefined;
5
+ return _jsx(Tag, { id: id, children: children });
6
+ };
7
+ //# sourceMappingURL=Heading.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Heading.js","sourceRoot":"","sources":["../../../src/components/defaults/Heading.tsx"],"names":[],"mappings":";AAQA,MAAM,CAAC,MAAM,OAAO,GAAqB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC9D,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,KAAK,EAAW,CAAA;IACrC,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAE,IAAI,CAAC,IAAI,CAAC,EAAa,CAAC,CAAC,CAAC,SAAS,CAAA;IAEhF,OAAO,KAAC,GAAG,IAAC,EAAE,EAAE,EAAE,YAAG,QAAQ,GAAO,CAAA;AACtC,CAAC,CAAA"}
@@ -0,0 +1,7 @@
1
+ import type { FC } from 'react';
2
+ import type { Image as ImageNode } from 'mdast';
3
+ export interface ImageProps {
4
+ node: ImageNode;
5
+ }
6
+ export declare const Image: FC<ImageProps>;
7
+ //# sourceMappingURL=Image.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Image.d.ts","sourceRoot":"","sources":["../../../src/components/defaults/Image.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAA;AAC/B,OAAO,KAAK,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,OAAO,CAAA;AAE/C,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,SAAS,CAAA;CAChB;AAED,eAAO,MAAM,KAAK,EAAE,EAAE,CAAC,UAAU,CAEhC,CAAA"}
@@ -0,0 +1,5 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ export const Image = ({ node }) => {
3
+ return _jsx("img", { src: node.url, alt: node.alt || '', title: node.title || undefined });
4
+ };
5
+ //# sourceMappingURL=Image.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Image.js","sourceRoot":"","sources":["../../../src/components/defaults/Image.tsx"],"names":[],"mappings":";AAOA,MAAM,CAAC,MAAM,KAAK,GAAmB,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;IAChD,OAAO,cAAK,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,SAAS,GAAI,CAAA;AACpF,CAAC,CAAA"}
@@ -0,0 +1,8 @@
1
+ import type { FC, ReactNode } from 'react';
2
+ import type { Link as LinkNode } from 'mdast';
3
+ export interface LinkProps {
4
+ node: LinkNode;
5
+ children: ReactNode;
6
+ }
7
+ export declare const Link: FC<LinkProps>;
8
+ //# sourceMappingURL=Link.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Link.d.ts","sourceRoot":"","sources":["../../../src/components/defaults/Link.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAC1C,OAAO,KAAK,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,OAAO,CAAA;AAE7C,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,QAAQ,CAAA;IACd,QAAQ,EAAE,SAAS,CAAA;CACpB;AAED,eAAO,MAAM,IAAI,EAAE,EAAE,CAAC,SAAS,CAS9B,CAAA"}
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ export const Link = ({ node, children }) => {
3
+ // Basic security: prevent javascript: URLs
4
+ const href = node.url?.startsWith('javascript:') ? '#' : node.url;
5
+ return (_jsx("a", { href: href, title: node.title || undefined, children: children }));
6
+ };
7
+ //# sourceMappingURL=Link.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Link.js","sourceRoot":"","sources":["../../../src/components/defaults/Link.tsx"],"names":[],"mappings":";AAQA,MAAM,CAAC,MAAM,IAAI,GAAkB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;IACxD,2CAA2C;IAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAA;IAEjE,OAAO,CACL,YAAG,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,SAAS,YAC1C,QAAQ,GACP,CACL,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,13 @@
1
+ import type { FC, ReactNode } from 'react';
2
+ import type { List as ListNode, ListItem as ListItemNode } from 'mdast';
3
+ export interface ListProps {
4
+ node: ListNode;
5
+ children: ReactNode;
6
+ }
7
+ export declare const List: FC<ListProps>;
8
+ export interface ListItemProps {
9
+ node: ListItemNode;
10
+ children: ReactNode;
11
+ }
12
+ export declare const ListItem: FC<ListItemProps>;
13
+ //# sourceMappingURL=List.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"List.d.ts","sourceRoot":"","sources":["../../../src/components/defaults/List.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAC1C,OAAO,KAAK,EAAE,IAAI,IAAI,QAAQ,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,OAAO,CAAA;AAEvE,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,QAAQ,CAAA;IACd,QAAQ,EAAE,SAAS,CAAA;CACpB;AAED,eAAO,MAAM,IAAI,EAAE,EAAE,CAAC,SAAS,CAK9B,CAAA;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,YAAY,CAAA;IAClB,QAAQ,EAAE,SAAS,CAAA;CACpB;AAED,eAAO,MAAM,QAAQ,EAAE,EAAE,CAAC,aAAa,CAYtC,CAAA"}
@@ -0,0 +1,14 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ export const List = ({ node, children }) => {
3
+ const Tag = node.ordered ? 'ol' : 'ul';
4
+ const start = node.ordered && node.start != null && node.start !== 1 ? node.start : undefined;
5
+ return _jsx(Tag, { start: start, children: children });
6
+ };
7
+ export const ListItem = ({ node, children }) => {
8
+ // Handle task list items
9
+ if (typeof node.checked === 'boolean') {
10
+ return (_jsxs("li", { className: "task-list-item", children: [_jsx("input", { type: "checkbox", checked: node.checked, readOnly: true }), _jsx("span", { children: children })] }));
11
+ }
12
+ return _jsx("li", { children: children });
13
+ };
14
+ //# sourceMappingURL=List.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"List.js","sourceRoot":"","sources":["../../../src/components/defaults/List.tsx"],"names":[],"mappings":";AAQA,MAAM,CAAC,MAAM,IAAI,GAAkB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;IACxD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;IACtC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAA;IAE7F,OAAO,KAAC,GAAG,IAAC,KAAK,EAAE,KAAK,YAAG,QAAQ,GAAO,CAAA;AAC5C,CAAC,CAAA;AAOD,MAAM,CAAC,MAAM,QAAQ,GAAsB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;IAChE,yBAAyB;IACzB,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACtC,OAAO,CACL,cAAI,SAAS,EAAC,gBAAgB,aAC5B,gBAAO,IAAI,EAAC,UAAU,EAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,SAAG,EACzD,yBAAO,QAAQ,GAAQ,IACpB,CACN,CAAA;IACH,CAAC;IAED,OAAO,uBAAK,QAAQ,GAAM,CAAA;AAC5B,CAAC,CAAA"}
@@ -0,0 +1,8 @@
1
+ import type { FC, ReactNode } from 'react';
2
+ import type { Paragraph as ParagraphNode } from 'mdast';
3
+ export interface ParagraphProps {
4
+ node: ParagraphNode;
5
+ children: ReactNode;
6
+ }
7
+ export declare const Paragraph: FC<ParagraphProps>;
8
+ //# sourceMappingURL=Paragraph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Paragraph.d.ts","sourceRoot":"","sources":["../../../src/components/defaults/Paragraph.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAC1C,OAAO,KAAK,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,OAAO,CAAA;AAEvD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,aAAa,CAAA;IACnB,QAAQ,EAAE,SAAS,CAAA;CACpB;AAED,eAAO,MAAM,SAAS,EAAE,EAAE,CAAC,cAAc,CAExC,CAAA"}
@@ -0,0 +1,5 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ export const Paragraph = ({ children }) => {
3
+ return _jsx("p", { children: children });
4
+ };
5
+ //# sourceMappingURL=Paragraph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Paragraph.js","sourceRoot":"","sources":["../../../src/components/defaults/Paragraph.tsx"],"names":[],"mappings":";AAQA,MAAM,CAAC,MAAM,SAAS,GAAuB,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC5D,OAAO,sBAAI,QAAQ,GAAK,CAAA;AAC1B,CAAC,CAAA"}
@@ -0,0 +1,19 @@
1
+ import type { FC, ReactNode } from 'react';
2
+ import type { Table as TableNode, TableRow as TableRowNode, TableCell as TableCellNode } from 'mdast';
3
+ export interface TableProps {
4
+ node: TableNode;
5
+ children: ReactNode;
6
+ }
7
+ export declare const Table: FC<TableProps>;
8
+ export interface TableRowProps {
9
+ node: TableRowNode;
10
+ children: ReactNode;
11
+ isHeader?: boolean;
12
+ }
13
+ export declare const TableRow: FC<TableRowProps>;
14
+ export interface TableCellProps {
15
+ node: TableCellNode;
16
+ children: ReactNode;
17
+ }
18
+ export declare const TableCell: FC<TableCellProps>;
19
+ //# sourceMappingURL=Table.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Table.d.ts","sourceRoot":"","sources":["../../../src/components/defaults/Table.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAC1C,OAAO,KAAK,EACV,KAAK,IAAI,SAAS,EAClB,QAAQ,IAAI,YAAY,EACxB,SAAS,IAAI,aAAa,EAC3B,MAAM,OAAO,CAAA;AAEd,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,SAAS,CAAA;IACf,QAAQ,EAAE,SAAS,CAAA;CACpB;AAED,eAAO,MAAM,KAAK,EAAE,EAAE,CAAC,UAAU,CAMhC,CAAA;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,YAAY,CAAA;IAClB,QAAQ,EAAE,SAAS,CAAA;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,eAAO,MAAM,QAAQ,EAAE,EAAE,CAAC,aAAa,CAStC,CAAA;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,aAAa,CAAA;IACnB,QAAQ,EAAE,SAAS,CAAA;CACpB;AAED,eAAO,MAAM,SAAS,EAAE,EAAE,CAAC,cAAc,CAOxC,CAAA"}
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ export const Table = ({ children }) => {
3
+ return (_jsx("table", { children: children }));
4
+ };
5
+ export const TableRow = ({ children, isHeader }) => {
6
+ if (isHeader) {
7
+ return (_jsx("thead", { children: _jsx("tr", { children: children }) }));
8
+ }
9
+ return _jsx("tr", { children: children });
10
+ };
11
+ export const TableCell = ({ node, children }) => {
12
+ const isHeader = node.data?.isHeader;
13
+ const align = node.data?.align;
14
+ const Tag = isHeader ? 'th' : 'td';
15
+ const style = align ? { textAlign: align } : undefined;
16
+ return _jsx(Tag, { style: style, children: children });
17
+ };
18
+ //# sourceMappingURL=Table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Table.js","sourceRoot":"","sources":["../../../src/components/defaults/Table.tsx"],"names":[],"mappings":";AAYA,MAAM,CAAC,MAAM,KAAK,GAAmB,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IACpD,OAAO,CACL,0BACG,QAAQ,GACH,CACT,CAAA;AACH,CAAC,CAAA;AAQD,MAAM,CAAC,MAAM,QAAQ,GAAsB,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE;IACpE,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CACL,0BACE,uBAAK,QAAQ,GAAM,GACb,CACT,CAAA;IACH,CAAC;IACD,OAAO,uBAAK,QAAQ,GAAM,CAAA;AAC5B,CAAC,CAAA;AAOD,MAAM,CAAC,MAAM,SAAS,GAAuB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;IAClE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAA;IACpC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,KAA2C,CAAA;IACpE,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;IAClC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;IAEtD,OAAO,KAAC,GAAG,IAAC,KAAK,EAAE,KAAK,YAAG,QAAQ,GAAO,CAAA;AAC5C,CAAC,CAAA"}
@@ -0,0 +1,34 @@
1
+ import * as React from 'react';
2
+ import { Heading, HeadingProps } from './Heading';
3
+ import { Paragraph, ParagraphProps } from './Paragraph';
4
+ import { List, ListItem, ListProps, ListItemProps } from './List';
5
+ import { Table, TableRow, TableCell, TableProps, TableRowProps, TableCellProps } from './Table';
6
+ import { Code, InlineCodeComponent, CodeProps, InlineCodeProps } from './Code';
7
+ import { Link, LinkProps } from './Link';
8
+ import { Image, ImageProps } from './Image';
9
+ import { Blockquote, BlockquoteProps } from './Blockquote';
10
+ export { Heading, Paragraph, List, ListItem, Table, TableRow, TableCell, Code, InlineCodeComponent, Link, Image, Blockquote, };
11
+ export type { HeadingProps, ParagraphProps, ListProps, ListItemProps, TableProps, TableRowProps, TableCellProps, CodeProps, InlineCodeProps, LinkProps, ImageProps, BlockquoteProps, };
12
+ /**
13
+ * Map of node types to their corresponding React components
14
+ */
15
+ export interface ComponentMap {
16
+ heading: React.FC<HeadingProps>;
17
+ paragraph: React.FC<ParagraphProps>;
18
+ list: React.FC<ListProps>;
19
+ listItem: React.FC<ListItemProps>;
20
+ table: React.FC<TableProps>;
21
+ tableRow: React.FC<TableRowProps>;
22
+ tableCell: React.FC<TableCellProps>;
23
+ code: React.FC<CodeProps>;
24
+ inlineCode: React.FC<InlineCodeProps>;
25
+ link: React.FC<LinkProps>;
26
+ image: React.FC<ImageProps>;
27
+ blockquote: React.FC<BlockquoteProps>;
28
+ [key: string]: React.FC<any>;
29
+ }
30
+ /**
31
+ * Default component map
32
+ */
33
+ export declare const defaultComponents: ComponentMap;
34
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/defaults/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACjD,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACvD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAA;AACjE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAC/F,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAA;AAC9E,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AACxC,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAG1D,OAAO,EACL,OAAO,EACP,SAAS,EACT,IAAI,EACJ,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,SAAS,EACT,IAAI,EACJ,mBAAmB,EACnB,IAAI,EACJ,KAAK,EACL,UAAU,GACX,CAAA;AAGD,YAAY,EACV,YAAY,EACZ,cAAc,EACd,SAAS,EACT,aAAa,EACb,UAAU,EACV,aAAa,EACb,cAAc,EACd,SAAS,EACT,eAAe,EACf,SAAS,EACT,UAAU,EACV,eAAe,GAChB,CAAA;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,CAAA;IAC/B,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CAAC,CAAA;IACnC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,CAAA;IACzB,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAAC,CAAA;IACjC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,CAAA;IAC3B,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAAC,CAAA;IACjC,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CAAC,CAAA;IACnC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,CAAA;IACzB,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAAC,CAAA;IACrC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,CAAA;IACzB,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,CAAA;IAC3B,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAAC,CAAA;IAErC,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;CAC7B;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,YAa/B,CAAA"}
@@ -0,0 +1,28 @@
1
+ import { Heading } from './Heading';
2
+ import { Paragraph } from './Paragraph';
3
+ import { List, ListItem } from './List';
4
+ import { Table, TableRow, TableCell } from './Table';
5
+ import { Code, InlineCodeComponent } from './Code';
6
+ import { Link } from './Link';
7
+ import { Image } from './Image';
8
+ import { Blockquote } from './Blockquote';
9
+ // Re-export all components
10
+ export { Heading, Paragraph, List, ListItem, Table, TableRow, TableCell, Code, InlineCodeComponent, Link, Image, Blockquote, };
11
+ /**
12
+ * Default component map
13
+ */
14
+ export const defaultComponents = {
15
+ heading: Heading,
16
+ paragraph: Paragraph,
17
+ list: List,
18
+ listItem: ListItem,
19
+ table: Table,
20
+ tableRow: TableRow,
21
+ tableCell: TableCell,
22
+ code: Code,
23
+ inlineCode: InlineCodeComponent,
24
+ link: Link,
25
+ image: Image,
26
+ blockquote: Blockquote,
27
+ };
28
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/defaults/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAgB,MAAM,WAAW,CAAA;AACjD,OAAO,EAAE,SAAS,EAAkB,MAAM,aAAa,CAAA;AACvD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAA4B,MAAM,QAAQ,CAAA;AACjE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAA6C,MAAM,SAAS,CAAA;AAC/F,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAA8B,MAAM,QAAQ,CAAA;AAC9E,OAAO,EAAE,IAAI,EAAa,MAAM,QAAQ,CAAA;AACxC,OAAO,EAAE,KAAK,EAAc,MAAM,SAAS,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAmB,MAAM,cAAc,CAAA;AAE1D,2BAA2B;AAC3B,OAAO,EACL,OAAO,EACP,SAAS,EACT,IAAI,EACJ,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,SAAS,EACT,IAAI,EACJ,mBAAmB,EACnB,IAAI,EACJ,KAAK,EACL,UAAU,GACX,CAAA;AAsCD;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAiB;IAC7C,OAAO,EAAE,OAAO;IAChB,SAAS,EAAE,SAAS;IACpB,IAAI,EAAE,IAAI;IACV,QAAQ,EAAE,QAAQ;IAClB,KAAK,EAAE,KAAK;IACZ,QAAQ,EAAE,QAAQ;IAClB,SAAS,EAAE,SAAS;IACpB,IAAI,EAAE,IAAI;IACV,UAAU,EAAE,mBAAmB;IAC/B,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,KAAK;IACZ,UAAU,EAAE,UAAU;CACvB,CAAA"}
@@ -0,0 +1,11 @@
1
+ import type { Root } from 'mdast';
2
+ import { type ParserOptions } from '@pd-markdown/parser';
3
+ /**
4
+ * Hook for parsing markdown on the client side
5
+ *
6
+ * @param source - Markdown source string
7
+ * @param options - Parser options
8
+ * @returns Parsed AST
9
+ */
10
+ export declare function useMarkdown(source: string, options?: ParserOptions): Root;
11
+ //# sourceMappingURL=useMarkdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMarkdown.d.ts","sourceRoot":"","sources":["../../src/hooks/useMarkdown.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,OAAO,CAAA;AACjC,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAetE;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI,CAOzE"}
@@ -0,0 +1,28 @@
1
+ import { useMemo } from 'react';
2
+ import { createParser } from '@pd-markdown/parser';
3
+ // Cached parser instance
4
+ let cachedParser = null;
5
+ function getParser(options) {
6
+ if (options) {
7
+ return createParser(options);
8
+ }
9
+ if (!cachedParser) {
10
+ cachedParser = createParser();
11
+ }
12
+ return cachedParser;
13
+ }
14
+ /**
15
+ * Hook for parsing markdown on the client side
16
+ *
17
+ * @param source - Markdown source string
18
+ * @param options - Parser options
19
+ * @returns Parsed AST
20
+ */
21
+ export function useMarkdown(source, options) {
22
+ const ast = useMemo(() => {
23
+ const parser = getParser(options);
24
+ return parser.parse(source);
25
+ }, [source, options]);
26
+ return ast;
27
+ }
28
+ //# sourceMappingURL=useMarkdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMarkdown.js","sourceRoot":"","sources":["../../src/hooks/useMarkdown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAE/B,OAAO,EAAE,YAAY,EAAsB,MAAM,qBAAqB,CAAA;AAEtE,yBAAyB;AACzB,IAAI,YAAY,GAA2C,IAAI,CAAA;AAE/D,SAAS,SAAS,CAAC,OAAuB;IACxC,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,YAAY,CAAC,OAAO,CAAC,CAAA;IAC9B,CAAC;IACD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,YAAY,GAAG,YAAY,EAAE,CAAA;IAC/B,CAAC;IACD,OAAO,YAAY,CAAA;AACrB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,MAAc,EAAE,OAAuB;IACjE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;QACvB,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAA;QACjC,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IAC7B,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IAErB,OAAO,GAAG,CAAA;AACZ,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { MarkdownRenderer, type MarkdownRendererProps } from './components/MarkdownRenderer';
2
+ export { NodeRenderer, type NodeRendererProps } from './components/NodeRenderer';
3
+ export { MarkdownContext, useMarkdownContext, type MarkdownContextValue } from './components/context';
4
+ export { Heading, Paragraph, List, ListItem, Table, TableRow, TableCell, Code, InlineCodeComponent, Link, Image, Blockquote, defaultComponents, type ComponentMap, type HeadingProps, type ParagraphProps, type ListProps, type ListItemProps, type TableProps, type TableRowProps, type TableCellProps, type CodeProps, type InlineCodeProps, type LinkProps, type ImageProps, type BlockquoteProps, } from './components/defaults';
5
+ export { useMarkdown } from './hooks/useMarkdown';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,KAAK,qBAAqB,EAAE,MAAM,+BAA+B,CAAA;AAC5F,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAChF,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAGrG,OAAO,EACL,OAAO,EACP,SAAS,EACT,IAAI,EACJ,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,SAAS,EACT,IAAI,EACJ,mBAAmB,EACnB,IAAI,EACJ,KAAK,EACL,UAAU,EACV,iBAAiB,EACjB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,eAAe,GACrB,MAAM,uBAAuB,CAAA;AAG9B,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA"}
@@ -0,0 +1,9 @@
1
+ // Components
2
+ export { MarkdownRenderer } from './components/MarkdownRenderer';
3
+ export { NodeRenderer } from './components/NodeRenderer';
4
+ export { MarkdownContext, useMarkdownContext } from './components/context';
5
+ // Default components
6
+ export { Heading, Paragraph, List, ListItem, Table, TableRow, TableCell, Code, InlineCodeComponent, Link, Image, Blockquote, defaultComponents, } from './components/defaults';
7
+ // Hooks
8
+ export { useMarkdown } from './hooks/useMarkdown';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,OAAO,EAAE,gBAAgB,EAA8B,MAAM,+BAA+B,CAAA;AAC5F,OAAO,EAAE,YAAY,EAA0B,MAAM,2BAA2B,CAAA;AAChF,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAA6B,MAAM,sBAAsB,CAAA;AAErG,qBAAqB;AACrB,OAAO,EACL,OAAO,EACP,SAAS,EACT,IAAI,EACJ,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,SAAS,EACT,IAAI,EACJ,mBAAmB,EACnB,IAAI,EACJ,KAAK,EACL,UAAU,EACV,iBAAiB,GAclB,MAAM,uBAAuB,CAAA;AAE9B,QAAQ;AACR,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA"}
@@ -0,0 +1,89 @@
1
+ import { describe, it, expect } from 'vitest'
2
+ import { render, screen } from '@testing-library/react'
3
+ import { MarkdownRenderer } from '../src/components/MarkdownRenderer'
4
+ import { createParser } from '@pd-markdown/parser'
5
+
6
+ describe('MarkdownRenderer', () => {
7
+ it('should render markdown string', () => {
8
+ render(<MarkdownRenderer source="# Hello World" />)
9
+
10
+ expect(screen.getByRole('heading', { level: 1 })).toHaveTextContent('Hello World')
11
+ })
12
+
13
+ it('should render pre-parsed AST', () => {
14
+ const parser = createParser()
15
+ const ast = parser.parse('# From AST')
16
+
17
+ render(<MarkdownRenderer ast={ast} />)
18
+
19
+ expect(screen.getByRole('heading', { level: 1 })).toHaveTextContent('From AST')
20
+ })
21
+
22
+ it('should render nothing when no content provided', () => {
23
+ const { container } = render(<MarkdownRenderer />)
24
+
25
+ expect(container.firstChild).toBeNull()
26
+ })
27
+
28
+ it('should apply className', () => {
29
+ const { container } = render(
30
+ <MarkdownRenderer source="# Test" className="markdown-body" />
31
+ )
32
+
33
+ expect(container.firstChild).toHaveClass('markdown-body')
34
+ })
35
+
36
+ it('should apply inline styles', () => {
37
+ const { container } = render(
38
+ <MarkdownRenderer source="# Test" style={{ color: 'red' }} />
39
+ )
40
+
41
+ expect(container.firstChild).toHaveStyle({ color: 'rgb(255, 0, 0)' })
42
+ })
43
+
44
+ it('should support custom components override', () => {
45
+ const CustomHeading = ({ children }: { children: React.ReactNode }) => (
46
+ <div data-testid="custom-heading">{children}</div>
47
+ )
48
+
49
+ render(
50
+ <MarkdownRenderer
51
+ source="# Custom"
52
+ components={{ heading: CustomHeading as any }}
53
+ />
54
+ )
55
+
56
+ expect(screen.getByTestId('custom-heading')).toHaveTextContent('Custom')
57
+ })
58
+
59
+ it('should render multiple elements', () => {
60
+ render(
61
+ <MarkdownRenderer
62
+ source={`
63
+ # Heading
64
+
65
+ Paragraph text.
66
+
67
+ - Item 1
68
+ - Item 2
69
+ `.trim()}
70
+ />
71
+ )
72
+
73
+ expect(screen.getByRole('heading')).toBeInTheDocument()
74
+ expect(screen.getByText('Paragraph text.')).toBeInTheDocument()
75
+ expect(screen.getByRole('list')).toBeInTheDocument()
76
+ })
77
+ })
78
+
79
+ describe('MarkdownRenderer SSR compatibility', () => {
80
+ it('should render from AST without re-parsing', () => {
81
+ const parser = createParser()
82
+ const ast = parser.parse('# Pre-rendered')
83
+
84
+ // This simulates SSR where AST is passed directly
85
+ const { container } = render(<MarkdownRenderer ast={ast} />)
86
+
87
+ expect(container.querySelector('h1')).toHaveTextContent('Pre-rendered')
88
+ })
89
+ })
@@ -0,0 +1,97 @@
1
+ import { describe, it, expect } from 'vitest'
2
+ import { render, screen } from '@testing-library/react'
3
+ import { NodeRenderer } from '../src/components/NodeRenderer'
4
+ import { MarkdownContext } from '../src/components/context'
5
+ import type { Root, Heading, Paragraph } from 'mdast'
6
+
7
+ const renderWithContext = (node: any, components = {}) => {
8
+ return render(
9
+ <MarkdownContext.Provider value={{ components }}>
10
+ <NodeRenderer node={node} />
11
+ </MarkdownContext.Provider>
12
+ )
13
+ }
14
+
15
+ describe('NodeRenderer', () => {
16
+ it('should render root node', () => {
17
+ const root: Root = {
18
+ type: 'root',
19
+ children: [
20
+ {
21
+ type: 'paragraph',
22
+ children: [{ type: 'text', value: 'Hello' }],
23
+ } as Paragraph,
24
+ ],
25
+ }
26
+
27
+ renderWithContext(root)
28
+ expect(screen.getByText('Hello')).toBeInTheDocument()
29
+ })
30
+
31
+ it('should render heading with correct level', () => {
32
+ const heading: Heading = {
33
+ type: 'heading',
34
+ depth: 2,
35
+ children: [{ type: 'text', value: 'Title' }],
36
+ }
37
+
38
+ renderWithContext(heading)
39
+ expect(screen.getByRole('heading', { level: 2 })).toHaveTextContent('Title')
40
+ })
41
+
42
+ it('should render heading with id from data', () => {
43
+ const heading: Heading = {
44
+ type: 'heading',
45
+ depth: 1,
46
+ children: [{ type: 'text', value: 'Hello' }],
47
+ data: { id: 'hello' },
48
+ }
49
+
50
+ renderWithContext(heading)
51
+ expect(screen.getByRole('heading')).toHaveAttribute('id', 'hello')
52
+ })
53
+
54
+ it('should render inline formatting', () => {
55
+ const paragraph: Paragraph = {
56
+ type: 'paragraph',
57
+ children: [
58
+ { type: 'text', value: 'Hello ' },
59
+ { type: 'strong', children: [{ type: 'text', value: 'bold' }] },
60
+ { type: 'text', value: ' and ' },
61
+ { type: 'emphasis', children: [{ type: 'text', value: 'italic' }] },
62
+ ],
63
+ }
64
+
65
+ const { container } = renderWithContext(paragraph)
66
+ expect(container.querySelector('strong')).toHaveTextContent('bold')
67
+ expect(container.querySelector('em')).toHaveTextContent('italic')
68
+ })
69
+
70
+ it('should handle unknown node types gracefully', () => {
71
+ const unknown = {
72
+ type: 'unknown-type',
73
+ children: [
74
+ { type: 'paragraph', children: [{ type: 'text', value: 'Content' }] },
75
+ ],
76
+ }
77
+
78
+ // Should not throw and should try to render children
79
+ renderWithContext(unknown)
80
+ expect(screen.getByText('Content')).toBeInTheDocument()
81
+ })
82
+
83
+ it('should use custom component override', () => {
84
+ const heading: Heading = {
85
+ type: 'heading',
86
+ depth: 1,
87
+ children: [{ type: 'text', value: 'Custom' }],
88
+ }
89
+
90
+ const CustomHeading = ({ children }: { children: React.ReactNode }) => (
91
+ <span data-testid="custom">{children}</span>
92
+ )
93
+
94
+ renderWithContext(heading, { heading: CustomHeading })
95
+ expect(screen.getByTestId('custom')).toHaveTextContent('Custom')
96
+ })
97
+ })