markstream-react 0.0.52 → 0.0.54

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 (344) hide show
  1. package/README.md +43 -6
  2. package/dist/Tooltip-DRyaxB2U.js +207 -0
  3. package/dist/abap-DnJxzdy9.js +1 -0
  4. package/dist/actionscript-3-DKotD2Vd.js +1 -0
  5. package/dist/ada-iG1FnIvR.js +1 -0
  6. package/dist/andromeeda-C4gqWexZ.js +1 -0
  7. package/dist/angular-html-C5GGT2tR.js +1 -0
  8. package/dist/angular-ts-Qqqp7JE0.js +1 -0
  9. package/dist/apache-CdTKWnKT.js +1 -0
  10. package/dist/apex-BtozVX6V.js +1 -0
  11. package/dist/apl-BkgZWazH.js +1 -0
  12. package/dist/applescript-BlLNmGTp.js +1 -0
  13. package/dist/ara-Ba3fhlsS.js +1 -0
  14. package/dist/asciidoc-AY8u9WWM.js +1 -0
  15. package/dist/asm-CHX6lpGW.js +1 -0
  16. package/dist/astro-BxFA88J7.js +1 -0
  17. package/dist/aurora-x-D-2ljcwZ.js +1 -0
  18. package/dist/awk-XRrwoikR.js +1 -0
  19. package/dist/ayu-dark-DYE7WIF3.js +1 -0
  20. package/dist/ayu-light-BA47KaF1.js +1 -0
  21. package/dist/ayu-mirage-32ctXXKs.js +1 -0
  22. package/dist/ballerina-Dh0JsEtz.js +1 -0
  23. package/dist/bat-BVu0TwaT.js +1 -0
  24. package/dist/beancount-CJl0njO0.js +1 -0
  25. package/dist/berry-Bmu6i3Vs.js +1 -0
  26. package/dist/bibtex-CGjxJ4Zd.js +1 -0
  27. package/dist/bicep-DSW96mAt.js +1 -0
  28. package/dist/bird2-DxzquW1t.js +1 -0
  29. package/dist/blade-B0Yy4jmA.js +1 -0
  30. package/dist/bsl-DGicdwC0.js +1 -0
  31. package/dist/c-BmJt9k-y.js +1 -0
  32. package/dist/c3-BP_4uRj3.js +1 -0
  33. package/dist/cadence-DbDq8SCj.js +1 -0
  34. package/dist/cairo-Dz8fl918.js +1 -0
  35. package/dist/catppuccin-frappe-DFWUc33u.js +1 -0
  36. package/dist/catppuccin-latte-C9dUb6Cb.js +1 -0
  37. package/dist/catppuccin-macchiato-DQyhUUbL.js +1 -0
  38. package/dist/catppuccin-mocha-D87Tk5Gz.js +1 -0
  39. package/dist/clarity-Bb40UnPS.js +1 -0
  40. package/dist/clojure-BjI0Knrv.js +1 -0
  41. package/dist/cmake-BYiqpiH1.js +1 -0
  42. package/dist/cobol-B1Bs9cCy.js +1 -0
  43. package/dist/codeBlockExtraProps-bURhH5ZJ.js +3 -0
  44. package/dist/codeowners-L91meNbn.js +1 -0
  45. package/dist/codeql-Cd-JFsJB.js +1 -0
  46. package/dist/coffee-BDkVV41o.js +1 -0
  47. package/dist/common-lisp-DOi1njVG.js +1 -0
  48. package/dist/coq-BfbrVLCY.js +1 -0
  49. package/dist/cpp-oXxK9OCk.js +1 -0
  50. package/dist/crystal-2eHiXEKD.js +1 -0
  51. package/dist/csharp-DhuT4xSQ.js +1 -0
  52. package/dist/css-C6sBVIXB.js +1 -0
  53. package/dist/csv-DXKU4rRd.js +1 -0
  54. package/dist/cue-zmT78Agv.js +1 -0
  55. package/dist/cypher-bkHSskm3.js +1 -0
  56. package/dist/d-vs9xsbRV.js +1 -0
  57. package/dist/dark-plus-C3mMm8J8.js +1 -0
  58. package/dist/dart-ATbvIoNW.js +1 -0
  59. package/dist/dax-D135z3aS.js +1 -0
  60. package/dist/desktop-CigPEpQ5.js +1 -0
  61. package/dist/diff-Beq1YlA8.js +1 -0
  62. package/dist/docker-V5Al5bpF.js +1 -0
  63. package/dist/dotenv-D9G8sA2m.js +1 -0
  64. package/dist/dracula-BzJJZx-M.js +1 -0
  65. package/dist/dracula-soft-BXkSAIEj.js +1 -0
  66. package/dist/dream-maker-BsoKROiO.js +1 -0
  67. package/dist/edge-BUP_aW-j.js +1 -0
  68. package/dist/elixir-CV6JUqYA.js +1 -0
  69. package/dist/elm-5NnWpb8Q.js +1 -0
  70. package/dist/emacs-lisp-C4732ieo.js +1 -0
  71. package/dist/erb-DzuXK2qx.js +1 -0
  72. package/dist/erlang-DAw79KxH.js +1 -0
  73. package/dist/everforest-dark-BgDCqdQA.js +1 -0
  74. package/dist/everforest-light-C8M2exoo.js +1 -0
  75. package/dist/fennel-qzPJJAAI.js +1 -0
  76. package/dist/fish-Cx6My9pS.js +1 -0
  77. package/dist/fluent-BsukS3Co.js +1 -0
  78. package/dist/fortran-fixed-form-BiRvzwyR.js +1 -0
  79. package/dist/fortran-free-form-CakU9R0a.js +1 -0
  80. package/dist/fsharp-BmLNaTNL.js +1 -0
  81. package/dist/gdresource-pHyHNgx5.js +1 -0
  82. package/dist/gdscript-BpxQpKjR.js +1 -0
  83. package/dist/gdshader-BC7WJXp9.js +1 -0
  84. package/dist/genie-IZOju1hG.js +1 -0
  85. package/dist/gherkin-DUpgZfGr.js +1 -0
  86. package/dist/git-commit-Bptnmh-c.js +1 -0
  87. package/dist/git-rebase-CqNhyBhE.js +1 -0
  88. package/dist/github-dark-DHJKELXO.js +1 -0
  89. package/dist/github-dark-default-Cuk6v7N8.js +1 -0
  90. package/dist/github-dark-dimmed-DH5Ifo-i.js +1 -0
  91. package/dist/github-dark-high-contrast-E3gJ1_iC.js +1 -0
  92. package/dist/github-light-DAi9KRSo.js +1 -0
  93. package/dist/github-light-default-D7oLnXFd.js +1 -0
  94. package/dist/github-light-high-contrast-BfjtVDDH.js +1 -0
  95. package/dist/gleam-CCCEh_av.js +1 -0
  96. package/dist/glimmer-js-C8NS61CI.js +1 -0
  97. package/dist/glimmer-ts-B-RapyDB.js +1 -0
  98. package/dist/glsl-BDbjGBhJ.js +1 -0
  99. package/dist/gn-BNGDdMfm.js +1 -0
  100. package/dist/gnuplot-D0FoiB-W.js +1 -0
  101. package/dist/go-D4Ovm2g9.js +1 -0
  102. package/dist/graphql-DTlHKpVh.js +1 -0
  103. package/dist/groovy-D9sPn4Z-.js +1 -0
  104. package/dist/gruvbox-dark-hard-CFHQjOhq.js +1 -0
  105. package/dist/gruvbox-dark-medium-GsRaNv29.js +1 -0
  106. package/dist/gruvbox-dark-soft-CVdnzihN.js +1 -0
  107. package/dist/gruvbox-light-hard-CH1njM8p.js +1 -0
  108. package/dist/gruvbox-light-medium-DRw_LuNl.js +1 -0
  109. package/dist/gruvbox-light-soft-hJgmCMqR.js +1 -0
  110. package/dist/hack-BxpNoYuc.js +1 -0
  111. package/dist/haml-B9roiRDW.js +1 -0
  112. package/dist/handlebars-Bal7dEre.js +1 -0
  113. package/dist/haskell-Cp0NQEkn.js +1 -0
  114. package/dist/haxe-D-PmAGDa.js +1 -0
  115. package/dist/hcl-DRMo6eis.js +1 -0
  116. package/dist/hjson-BPEpXUFQ.js +1 -0
  117. package/dist/hlsl-B-PjNM4a.js +1 -0
  118. package/dist/horizon-BUw7H-hv.js +1 -0
  119. package/dist/horizon-bright-CUuTKBJd.js +1 -0
  120. package/dist/houston-DnULxvSX.js +1 -0
  121. package/dist/html-B3ILK6fm.js +1 -0
  122. package/dist/html-derivative-CfZez7eO.js +1 -0
  123. package/dist/http-Dh7mhfAc.js +1 -0
  124. package/dist/hurl-DvxDWHzM.js +1 -0
  125. package/dist/hxml-DB3_nACV.js +1 -0
  126. package/dist/hy-CLIvbAhW.js +1 -0
  127. package/dist/imba-B-tO30Ge.js +1 -0
  128. package/dist/index-70BGc65F.js +1 -0
  129. package/dist/index-BfHYFUlj.js +85 -0
  130. package/dist/index-Bsx2m-LR.js +47 -0
  131. package/dist/index.css +1 -1
  132. package/dist/index.d.ts +2 -2
  133. package/dist/index.js +1 -1
  134. package/dist/index.px.css +1 -1
  135. package/dist/index.tailwind.css +1 -1
  136. package/dist/ini-Bpxu4Zsc.js +1 -0
  137. package/dist/java-DtRXFtDl.js +1 -0
  138. package/dist/javascript-DFyEbC5y.js +1 -0
  139. package/dist/jinja-CVIIYihW.js +1 -0
  140. package/dist/jison-rKmQmF2-.js +1 -0
  141. package/dist/json-LWN7Ml79.js +1 -0
  142. package/dist/json5-CgCB487x.js +1 -0
  143. package/dist/jsonc-BXrjvC_e.js +1 -0
  144. package/dist/jsonl-D5dm1SHP.js +1 -0
  145. package/dist/jsonnet-B60UklUs.js +1 -0
  146. package/dist/jssm-CsqlGknB.js +1 -0
  147. package/dist/jsx-g2NrEQII.js +1 -0
  148. package/dist/julia-3RKjS8FQ.js +1 -0
  149. package/dist/just-CVCZ9vRQ.js +1 -0
  150. package/dist/kanagawa-dragon-CkXjmgJE.js +1 -0
  151. package/dist/kanagawa-lotus-CfQXZHmo.js +1 -0
  152. package/dist/kanagawa-wave-DWedfzmr.js +1 -0
  153. package/dist/kdl-DWIPcypl.js +1 -0
  154. package/dist/kotlin-DiV2Dt9D.js +1 -0
  155. package/dist/kusto-Bjy7G7j4.js +1 -0
  156. package/dist/laserwave-DUszq2jm.js +1 -0
  157. package/dist/latex-Bs1X87VY.js +1 -0
  158. package/dist/lean-BpZurxeZ.js +1 -0
  159. package/dist/less-DKKxO4Pm.js +1 -0
  160. package/dist/light-plus-B7mTdjB0.js +1 -0
  161. package/dist/liquid-DhgCFC9B.js +1 -0
  162. package/dist/llvm-w4szIS5k.js +1 -0
  163. package/dist/log-CnKjEmrw.js +1 -0
  164. package/dist/logo-BmG1tMr6.js +1 -0
  165. package/dist/lua-DlAioYQl.js +1 -0
  166. package/dist/luau-CDzI2T2B.js +1 -0
  167. package/dist/make-Ccm3NI5i.js +1 -0
  168. package/dist/markdown-DY93LJPj.js +1 -0
  169. package/dist/marko-DcK8dvuy.js +1 -0
  170. package/dist/markstream-react.css +1 -1
  171. package/dist/material-theme-D5KoaKCx.js +1 -0
  172. package/dist/material-theme-darker-BfHTSMKl.js +1 -0
  173. package/dist/material-theme-lighter-B0m2ddpp.js +1 -0
  174. package/dist/material-theme-ocean-CyktbL80.js +1 -0
  175. package/dist/material-theme-palenight-Csfq5Kiy.js +1 -0
  176. package/dist/matlab-nYX3zffi.js +1 -0
  177. package/dist/mdc-DQafIqD6.js +1 -0
  178. package/dist/mdx-C8C9IGe9.js +1 -0
  179. package/dist/mermaid--Jyu4oWd.js +1 -0
  180. package/dist/min-dark-CafNBF8u.js +1 -0
  181. package/dist/min-light-CTRr51gU.js +1 -0
  182. package/dist/mipsasm-BjAqecqh.js +1 -0
  183. package/dist/mojo-C2cxD0aZ.js +1 -0
  184. package/dist/monokai-D4h5O-jR.js +1 -0
  185. package/dist/moonbit-B4gpyPjt.js +1 -0
  186. package/dist/move-Dg7rFHVC.js +1 -0
  187. package/dist/narrat-BTSicUR-.js +1 -0
  188. package/dist/next.d.ts +41 -18
  189. package/dist/next.js +1 -1
  190. package/dist/nextflow-CRfcQpDI.js +1 -0
  191. package/dist/nextflow-groovy-DuWVVkaq.js +1 -0
  192. package/dist/nginx-B2z8CTeP.js +1 -0
  193. package/dist/night-owl-C39BiMTA.js +1 -0
  194. package/dist/night-owl-light-CMTm3GFP.js +1 -0
  195. package/dist/nim-DP_Ekwra.js +1 -0
  196. package/dist/nix-_0LqsLde.js +1 -0
  197. package/dist/nord-Ddv68eIx.js +1 -0
  198. package/dist/nushell-Mk45ZIMx.js +1 -0
  199. package/dist/objective-c-DLT9zZoE.js +1 -0
  200. package/dist/objective-cpp-DKXr-AK_.js +1 -0
  201. package/dist/ocaml-DP9q6K5L.js +1 -0
  202. package/dist/odin-BINPiy40.js +1 -0
  203. package/dist/one-dark-pro-DVMEJ2y_.js +1 -0
  204. package/dist/one-light-C3Wv6jpd.js +1 -0
  205. package/dist/openscad-CVq2HK1T.js +1 -0
  206. package/dist/pascal-DjTTLVNS.js +1 -0
  207. package/dist/perl-CmsZP_P9.js +1 -0
  208. package/dist/php-vdga8FKK.js +1 -0
  209. package/dist/pierre-dark-CyvmCCZW.js +1 -0
  210. package/dist/pierre-dark-protanopia-deuteranopia-Rgc0TwpF.js +1 -0
  211. package/dist/pierre-dark-soft-BHGpRqa4.js +1 -0
  212. package/dist/pierre-dark-tritanopia-Beq2gCRQ.js +1 -0
  213. package/dist/pierre-dark-vibrant-BWBVywrn.js +1 -0
  214. package/dist/pierre-light-480U9XYS.js +1 -0
  215. package/dist/pierre-light-protanopia-deuteranopia-CaVOBURG.js +1 -0
  216. package/dist/pierre-light-soft-CVdyfjmI.js +1 -0
  217. package/dist/pierre-light-tritanopia-B4_gpKOM.js +1 -0
  218. package/dist/pierre-light-vibrant-DdTDNdfJ.js +1 -0
  219. package/dist/pkl-0Sl31KKD.js +1 -0
  220. package/dist/plastic-3e1v2bzS.js +1 -0
  221. package/dist/plsql-CJrHCTnj.js +1 -0
  222. package/dist/po-y5MdiEbo.js +1 -0
  223. package/dist/poimandres-CS3Unz2-.js +1 -0
  224. package/dist/polar-Bsx6RkUC.js +1 -0
  225. package/dist/postcss-CeUBPB2S.js +1 -0
  226. package/dist/powerquery-CW27I574.js +1 -0
  227. package/dist/powershell-DSYJ6xcj.js +1 -0
  228. package/dist/prisma-CLoN-gBj.js +1 -0
  229. package/dist/prolog-Bgt5DHUA.js +1 -0
  230. package/dist/proto-C194Edqz.js +1 -0
  231. package/dist/pug-KXbBtQiy.js +1 -0
  232. package/dist/puppet-TSkl_nn0.js +1 -0
  233. package/dist/purescript-BrDje9qL.js +1 -0
  234. package/dist/python-DlV7vnVD.js +1 -0
  235. package/dist/qml-DTv-54bL.js +1 -0
  236. package/dist/qmldir-CSZk7E48.js +1 -0
  237. package/dist/qss-DACx-k9g.js +1 -0
  238. package/dist/r-EOoB7omE.js +1 -0
  239. package/dist/racket-D1nq-KeH.js +1 -0
  240. package/dist/raku-DocPDKZq.js +1 -0
  241. package/dist/razor-B-tk-wsx.js +1 -0
  242. package/dist/red-bN70gL4F.js +1 -0
  243. package/dist/reg-5ydmJHEw.js +1 -0
  244. package/dist/regexp-CpyjTnFF.js +1 -0
  245. package/dist/rel-D68lwU-3.js +1 -0
  246. package/dist/riscv-Cl4WfXj6.js +1 -0
  247. package/dist/ron-DIZViclS.js +1 -0
  248. package/dist/rose-pine-dawn-DHQR4-dF.js +1 -0
  249. package/dist/rose-pine-moon-D4_iv3hh.js +1 -0
  250. package/dist/rose-pine-qdsjHGoJ.js +1 -0
  251. package/dist/rosmsg-sf_0D22S.js +1 -0
  252. package/dist/rst-BG5pn2qR.js +1 -0
  253. package/dist/ruby-DcH2yJAk.js +1 -0
  254. package/dist/rust-DpWcZSqc.js +1 -0
  255. package/dist/sas-B5HzFFRM.js +1 -0
  256. package/dist/sass-DY_rGA2-.js +1 -0
  257. package/dist/scala-CYRsmRER.js +1 -0
  258. package/dist/scheme-C45fPb3F.js +1 -0
  259. package/dist/scss-BV51UrMN.js +1 -0
  260. package/dist/sdbl-BpucmfEo.js +1 -0
  261. package/dist/server.d.ts +28 -5
  262. package/dist/server.js +1 -1
  263. package/dist/shaderlab-DNyPh2Q6.js +1 -0
  264. package/dist/shellscript-B8OHlvmy.js +1 -0
  265. package/dist/shellsession-OATBsyRD.js +1 -0
  266. package/dist/slack-dark-BthQWCQV.js +1 -0
  267. package/dist/slack-ochin-DqwNpetd.js +1 -0
  268. package/dist/smalltalk-CKvddXL8.js +1 -0
  269. package/dist/snazzy-light-Bw305WKR.js +1 -0
  270. package/dist/solarized-dark-DXbdFlpD.js +1 -0
  271. package/dist/solarized-light-L9t79GZl.js +1 -0
  272. package/dist/solidity-XfXaqt9k.js +1 -0
  273. package/dist/soy-B8YA9JrK.js +1 -0
  274. package/dist/sparql-CLNNOQQI.js +1 -0
  275. package/dist/splunk-CFtInczE.js +1 -0
  276. package/dist/sql-Q2iGWUi5.js +1 -0
  277. package/dist/ssh-config-Dqsr-I88.js +1 -0
  278. package/dist/stata-BR_XK0X0.js +1 -0
  279. package/dist/stylus-BeJftkpb.js +1 -0
  280. package/dist/surrealql-C_6seBBi.js +1 -0
  281. package/dist/svelte-0br9ZpFT.js +1 -0
  282. package/dist/swift-0qv2hBXI.js +1 -0
  283. package/dist/synthwave-84-ChtBzv_y.js +1 -0
  284. package/dist/system-verilog-B3nElewZ.js +1 -0
  285. package/dist/systemd-B7SlkmfE.js +1 -0
  286. package/dist/tailwind.cjs +1 -1
  287. package/dist/tailwind.js +1 -1
  288. package/dist/talonscript-BrsbXmRy.js +1 -0
  289. package/dist/tasl-CMkPZNj1.js +1 -0
  290. package/dist/tcl-CiyEbZSK.js +1 -0
  291. package/dist/templ-B0JhIwv9.js +1 -0
  292. package/dist/terraform-BUB-_BlF.js +1 -0
  293. package/dist/tex-ByCZWQmN.js +1 -0
  294. package/dist/tokyo-night-hegEt444.js +1 -0
  295. package/dist/toml-VldhK7iW.js +1 -0
  296. package/dist/ts-tags-BWP4nPgY.js +1 -0
  297. package/dist/tsv-BQ9ptESM.js +1 -0
  298. package/dist/tsx-DYwE5ssU.js +1 -0
  299. package/dist/turtle-BVy4HXn4.js +1 -0
  300. package/dist/twig-z8zdyiH9.js +1 -0
  301. package/dist/types/components/HtmlInlineNode/HtmlInlineNode.d.ts +4 -1
  302. package/dist/types/components/NodeRenderer.d.ts +2 -1
  303. package/dist/types/customComponents.d.ts +20 -1
  304. package/dist/types/index.d.ts +2 -2
  305. package/dist/types/next.d.ts +7 -3
  306. package/dist/types/renderers/renderNode.d.ts +1 -1
  307. package/dist/types/server-renderer/index.d.ts +6 -2
  308. package/dist/types/server.d.ts +2 -2
  309. package/dist/types/types.d.ts +8 -3
  310. package/dist/types/utils/customHtmlTag.d.ts +5 -4
  311. package/dist/types/utils/htmlToReact.d.ts +17 -6
  312. package/dist/typescript-DI7mmMRd.js +1 -0
  313. package/dist/typespec-BAzX0Tk7.js +1 -0
  314. package/dist/typst-JIZTSUoJ.js +1 -0
  315. package/dist/v-B66J5FdL.js +1 -0
  316. package/dist/vala-p2PL1w-1.js +1 -0
  317. package/dist/vb-Dv-GCw1m.js +1 -0
  318. package/dist/verilog-DKP7kpC6.js +1 -0
  319. package/dist/vesper-DRje8inN.js +1 -0
  320. package/dist/vhdl-Cog-DhcW.js +1 -0
  321. package/dist/viml-0AN1aqkP.js +1 -0
  322. package/dist/vitesse-black-Bkuqu6BP.js +1 -0
  323. package/dist/vitesse-dark-D0r3Knsf.js +1 -0
  324. package/dist/vitesse-light-CVO1_9PV.js +1 -0
  325. package/dist/vue-DqsE_lDH.js +1 -0
  326. package/dist/vue-html-a8uCr53v.js +1 -0
  327. package/dist/vue-vine-CVmLzYuL.js +1 -0
  328. package/dist/vyper-sB2l1MOO.js +1 -0
  329. package/dist/wasm--yL7jHw-.js +1 -0
  330. package/dist/wasm-CSAWeJiV.js +1 -0
  331. package/dist/wenyan-CLHHXU5e.js +1 -0
  332. package/dist/wgsl-DiTcYanS.js +1 -0
  333. package/dist/wikitext-DT8E9qe0.js +1 -0
  334. package/dist/wit-CtjT-RdY.js +1 -0
  335. package/dist/wolfram-1xJNnwe2.js +1 -0
  336. package/dist/xml-BsgRw6d1.js +1 -0
  337. package/dist/xsl-CNIkWbJg.js +1 -0
  338. package/dist/yaml-c2-Vhxho.js +1 -0
  339. package/dist/zenscript-ChP1MlQf.js +1 -0
  340. package/dist/zig-rivS3YQG.js +1 -0
  341. package/package.json +9 -9
  342. package/dist/Tooltip-Ux2h3oiV.js +0 -207
  343. package/dist/codeBlockExtraProps-NhTjbA1T.js +0 -3
  344. package/dist/index-DdaK6qko.js +0 -85
package/README.md CHANGED
@@ -165,26 +165,63 @@ module.exports = {
165
165
 
166
166
  ## Custom Components
167
167
 
168
- Register custom renderers with `setCustomComponents`. Custom tag-like blocks are exposed as nodes with `type` equal to the tag name when the parser is configured for that tag.
168
+ For HTML-like custom tags in new React code, prefer renderer-local component maps:
169
+
170
+ - `streamingComponents` receives parser-backed `NodeComponentProps`, including `node.attrs`, `node.content`, and `node.loading`.
171
+ - `htmlComponents` renders through the raw/dynamic HTML path and receives normal React props plus `children`.
169
172
 
170
173
  ```tsx
171
174
  import type { NodeComponentProps } from 'markstream-react'
172
- import MarkdownRender, { setCustomComponents } from 'markstream-react'
175
+ import type React from 'react'
176
+ import MarkdownRender from 'markstream-react'
173
177
 
174
- function ThinkingNode(props: NodeComponentProps<{ type: 'thinking', content: string }>) {
175
- return <MarkdownRender content={props.node.content} fade={false} />
178
+ function DocumentLink(props: NodeComponentProps<{ type: 'documentlink', content: string, loading?: boolean }>) {
179
+ return <span aria-busy={props.node.loading || undefined}>{props.node.content}</span>
176
180
  }
177
181
 
178
- setCustomComponents('chat', { thinking: ThinkingNode })
182
+ function Badge({ kind, children }: React.PropsWithChildren<{ kind?: string }>) {
183
+ return <span data-kind={kind}>{children}</span>
184
+ }
185
+
186
+ const renderer = (
187
+ <MarkdownRender
188
+ content={content}
189
+ final={isDone}
190
+ streamingComponents={{ documentlink: DocumentLink }}
191
+ htmlComponents={{ badge: Badge }}
192
+ />
193
+ )
179
194
  ```
180
195
 
196
+ `streamingComponents` keys are normalized and automatically added to the parser's effective `customHtmlTags`, so incomplete tags can render while content is streaming.
197
+
198
+ `customHtmlTags` remains available as a lower-level parser option. `setCustomComponents` and `customId` also remain supported for compatibility, shared application-level registration, and existing node overrides:
199
+
200
+ ```tsx
201
+ import MarkdownRender, { setCustomComponents } from 'markstream-react'
202
+
203
+ setCustomComponents('chat', {
204
+ documentlink: DocumentLink,
205
+ })
206
+
207
+ const legacyRenderer = (
208
+ <MarkdownRender
209
+ customId="chat"
210
+ customHtmlTags={['documentlink']}
211
+ content={content}
212
+ />
213
+ )
214
+ ```
215
+
216
+ Without `customHtmlTags` or `streamingComponents`, registered tag components render through the raw HTML path and receive HTML-style props/children instead of `props.node`. HTML safety is still handled by `htmlPolicy` and sanitization; the API split is not a security boundary.
217
+
181
218
  ## When Not to Use It
182
219
 
183
220
  Use `react-markdown`, `marked`, or `markdown-it` when you only render short static Markdown, need the smallest possible Markdown stack, or already have a complete remark/rehype pipeline and do not need streaming mid-state handling.
184
221
 
185
222
  ## Type Exports
186
223
 
187
- The package root exports the public component and renderer types, including `NodeRendererProps`, `NodeComponentProps`, `RenderContext`, `RenderNodeFn`, `CustomComponentMap`, and code-block option types.
224
+ The package root exports the public component and renderer types, including `NodeRendererProps`, `NodeComponentProps`, `StreamingComponentMap`, `HtmlComponentMap`, `RenderContext`, `RenderNodeFn`, `CustomComponentMap`, and code-block option types.
188
225
 
189
226
  ## Development
190
227