{"_id":"@aeven-ai/hypermarkdown","_rev":"19-8cfc31309e27569d2a624cebec6acb2e","name":"@aeven-ai/hypermarkdown","dist-tags":{"latest":"0.4.4"},"versions":{"0.1.0":{"name":"@aeven-ai/hypermarkdown","version":"0.1.0","keywords":["markdown","streaming","react","llm","renderer","gfm","katex","mermaid"],"author":{"name":"Aeven"},"license":"MIT","_id":"@aeven-ai/hypermarkdown@0.1.0","maintainers":[{"name":"olibaron","email":"olivier@airwave.io"}],"homepage":"https://github.com/Aeven-AI/HyperMarkdown#readme","bugs":{"url":"https://github.com/Aeven-AI/HyperMarkdown/issues"},"dist":{"shasum":"05b27dad867cea019bd59cdf031f68404aaed325","tarball":"https://registry.npmjs.org/@aeven-ai/hypermarkdown/-/hypermarkdown-0.1.0.tgz","fileCount":66,"integrity":"sha512-9WXccrqbgEcaQAzY7DYoA3ewzlP6V9EKW/cKhO5wXcZ/K++qyKjbWC/zLA7Z5AQnzGFDtEuG4OX3CdFbozjJ9w==","signatures":[{"sig":"MEUCIQCWugqalnML/QmNsDcvgbD+iipqdr6DOvThib07a7IHowIgZCR0dG2yL5Zbojgfb5F64gcPoje8QaLX9lrhC3tfFq4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":283653},"type":"module","types":"./dist/index.d.ts","module":"./dist/hypermarkdown.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/hypermarkdown.js"},"./styles.css":"./dist/hypermarkdown.css","./plugins/cjk":{"types":"./dist/lib/plugins/cjk.d.ts","import":"./dist/plugins/cjk.js"},"./plugins/code":{"types":"./dist/lib/plugins/code.d.ts","import":"./dist/plugins/code.js"},"./plugins/math":{"types":"./dist/lib/plugins/math.d.ts","import":"./dist/plugins/math.js"},"./plugins/mermaid":{"types":"./dist/lib/plugins/mermaid.d.ts","import":"./dist/plugins/mermaid.js"}},"scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -b && vite build && npm run build:css","test:ui":"vitest run tests/ui","test:api":"vitest run tests/api tests/plugins","benchmark":"node benchmarks/run.js --runs=5 --warmup=1","build:css":"sass --no-source-map --style=compressed styles/hypermarkdown.scss dist/hypermarkdown.css","test:unit":"vitest run --config vitest.unit.config.ts","typecheck":"tsc -b && npm run typecheck:react18 && npm run typecheck:react19","test:coverage":"vitest run --coverage","test:security":"vitest run tests/security","prepublishOnly":"npm run build","test:streaming":"vitest run tests/streaming","bundle-analyzer":"vite-bundle-visualizer","test:unit:watch":"vitest --config vitest.unit.config.ts","test:correctness":"vitest run tests/correctness","typecheck:react18":"tsc -p tsconfig.react18.json","typecheck:react19":"tsc -p tsconfig.react19.json","test:coverage:unit":"vitest run --config vitest.unit.config.ts --coverage","bundle-analyzer-network":"vite-bundle-visualizer -t network","bundle-analyzer-sunburst":"vite-bundle-visualizer -t sunburst"},"_npmUser":{"name":"olibaron","email":"olivier@airwave.io"},"repository":{"url":"git+https://github.com/Aeven-AI/HyperMarkdown.git","type":"git"},"_npmVersion":"11.19.0","description":"Streaming-aware markdown renderer for React. Renders token-by-token model output without showing raw markup.","directories":{},"sideEffects":["*.css"],"_nodeVersion":"26.7.0","allowScripts":{"esbuild@0.28.2":true,"fsevents@2.3.3":true,"@swc/core@1.16.1":true,"@parcel/watcher@2.6.0":true},"dependencies":{"unified":"^11.0.5","tippy.js":"^6.3.1","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","rehype-react":"^8.0.0","remark-parse":"^11.0.0","remark-rehype":"^11.1.2","rehype-sanitize":"^6.0.0","unist-util-visit":"^5.0.0","hast-util-to-jsx-runtime":"^2.3.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sass":"^1.103.1","vite":"^7.1.7","jsdom":"^26.1.0","katex":"^0.16.25","react":"^18.3.1","vfile":"^6.0.3","eslint":"^9.36.0","vitest":"^4.1.8","globals":"^16.4.0","mermaid":"^11.12.0","react-dom":"^18.3.1","@eslint/js":"^9.36.0","typescript":"~5.8.3","@types/hast":"^3.0.4","@types/node":"^22.10.2","remark-math":"^6.0.0","@types/react":"~18.3.1","@types/unist":"^3.0.3","rehype-katex":"^7.0.1","types-react-18":"npm:@types/react@^18.3.1","types-react-19":"npm:@types/react@^19.2.0","vite-plugin-dts":"^4.5.4","@types/react-dom":"~18.3.0","rehype-highlight":"^7.0.2","typescript-eslint":"^8.44.0","@vitest/coverage-v8":"^4.1.8","remark-cjk-friendly":"^2.3.1","vite-bundle-visualizer":"^1.2.1","@vitejs/plugin-react-swc":"^4.1.0","eslint-plugin-react-hooks":"^5.2.0","eslint-plugin-react-refresh":"^0.4.20"},"peerDependencies":{"katex":"^0.16.25","react":">=18","mermaid":"^11.12.0","react-dom":">=18","remark-math":"^6.0.0","rehype-katex":"^7.0.1","rehype-highlight":"^7.0.2","remark-cjk-friendly":"^2.3.1"},"peerDependenciesMeta":{"katex":{"optional":true},"mermaid":{"optional":true},"remark-math":{"optional":true},"rehype-katex":{"optional":true},"rehype-highlight":{"optional":true},"remark-cjk-friendly":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hypermarkdown_0.1.0_1787903967583_0.6935868362983115","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@aeven-ai/hypermarkdown","version":"0.1.1","keywords":["markdown","streaming","react","llm","renderer","gfm","katex","mermaid"],"author":{"name":"Aeven"},"license":"MIT","_id":"@aeven-ai/hypermarkdown@0.1.1","maintainers":[{"name":"olibaron","email":"olivier@airwave.io"}],"homepage":"https://github.com/Aeven-AI/HyperMarkdown#readme","bugs":{"url":"https://github.com/Aeven-AI/HyperMarkdown/issues"},"dist":{"shasum":"505b69416ea3d810870beadd6fce6c9726f94094","tarball":"https://registry.npmjs.org/@aeven-ai/hypermarkdown/-/hypermarkdown-0.1.1.tgz","fileCount":66,"integrity":"sha512-xcAPy4Z0pbYFJzqpowtXGYNrGWTfDEQa/AAWpshOA98SGTdu3yQjJq1NsIpl8PYJQoB9wIIQVFDoyj4M80k2RA==","signatures":[{"sig":"MEUCIGJhPc2OqG/NelNJNH7GmCkhBmg84OnnGfz37rESxQg6AiEAjt/TghvtJjgGPrrKSy5uWC1aTaVU+uMggOV2XHNeRQQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":283818},"type":"module","types":"./dist/index.d.ts","module":"./dist/hypermarkdown.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/hypermarkdown.js"},"./styles.css":"./dist/hypermarkdown.css","./plugins/cjk":{"types":"./dist/lib/plugins/cjk.d.ts","import":"./dist/plugins/cjk.js"},"./plugins/code":{"types":"./dist/lib/plugins/code.d.ts","import":"./dist/plugins/code.js"},"./plugins/math":{"types":"./dist/lib/plugins/math.d.ts","import":"./dist/plugins/math.js"},"./plugins/mermaid":{"types":"./dist/lib/plugins/mermaid.d.ts","import":"./dist/plugins/mermaid.js"}},"scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -b && vite build && npm run build:css","test:ui":"vitest run tests/ui","test:api":"vitest run tests/api tests/plugins","benchmark":"node benchmarks/run.js --runs=5 --warmup=1","build:css":"sass --no-source-map --style=compressed styles/hypermarkdown.scss dist/hypermarkdown.css","test:unit":"vitest run --config vitest.unit.config.ts","typecheck":"tsc -b && npm run typecheck:react18 && npm run typecheck:react19","test:coverage":"vitest run --coverage","test:security":"vitest run tests/security","prepublishOnly":"npm run build","test:streaming":"vitest run tests/streaming","bundle-analyzer":"vite-bundle-visualizer","test:unit:watch":"vitest --config vitest.unit.config.ts","test:correctness":"vitest run tests/correctness","typecheck:react18":"tsc -p tsconfig.react18.json","typecheck:react19":"tsc -p tsconfig.react19.json","test:coverage:unit":"vitest run --config vitest.unit.config.ts --coverage","bundle-analyzer-network":"vite-bundle-visualizer -t network","bundle-analyzer-sunburst":"vite-bundle-visualizer -t sunburst"},"_npmUser":{"name":"olibaron","email":"olivier@airwave.io"},"repository":{"url":"git+https://github.com/Aeven-AI/HyperMarkdown.git","type":"git"},"_npmVersion":"11.19.0","description":"Streaming-aware markdown renderer for React. Renders token-by-token model output without showing raw markup.","directories":{},"sideEffects":["*.css"],"_nodeVersion":"26.7.0","allowScripts":{"esbuild@0.28.2":true,"fsevents@2.3.3":true,"@swc/core@1.16.1":true,"@parcel/watcher@2.6.0":true},"dependencies":{"unified":"^11.0.5","tippy.js":"^6.3.1","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","rehype-react":"^8.0.0","remark-parse":"^11.0.0","remark-rehype":"^11.1.2","rehype-sanitize":"^6.0.0","unist-util-visit":"^5.0.0","hast-util-to-jsx-runtime":"^2.3.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sass":"^1.103.1","vite":"^7.1.7","jsdom":"^26.1.0","katex":"^0.16.25","react":"^18.3.1","vfile":"^6.0.3","eslint":"^9.36.0","vitest":"^4.1.8","globals":"^16.4.0","mermaid":"^11.12.0","react-dom":"^18.3.1","@eslint/js":"^9.36.0","typescript":"~5.8.3","@types/hast":"^3.0.4","@types/node":"^22.10.2","remark-math":"^6.0.0","@types/react":"~18.3.1","@types/unist":"^3.0.3","rehype-katex":"^7.0.1","types-react-18":"npm:@types/react@^18.3.1","types-react-19":"npm:@types/react@^19.2.0","vite-plugin-dts":"^4.5.4","@types/react-dom":"~18.3.0","rehype-highlight":"^7.0.2","typescript-eslint":"^8.44.0","@vitest/coverage-v8":"^4.1.8","remark-cjk-friendly":"^2.3.1","vite-bundle-visualizer":"^1.2.1","@vitejs/plugin-react-swc":"^4.1.0","eslint-plugin-react-hooks":"^5.2.0","eslint-plugin-react-refresh":"^0.4.20"},"peerDependencies":{"katex":"^0.16.25","react":">=18","mermaid":"^11.12.0","react-dom":">=18","remark-math":"^6.0.0","rehype-katex":"^7.0.1","rehype-highlight":"^7.0.2","remark-cjk-friendly":"^2.3.1"},"peerDependenciesMeta":{"katex":{"optional":true},"mermaid":{"optional":true},"remark-math":{"optional":true},"rehype-katex":{"optional":true},"rehype-highlight":{"optional":true},"remark-cjk-friendly":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hypermarkdown_0.1.1_1787907506336_0.654339875990769","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@aeven-ai/hypermarkdown","version":"0.1.2","keywords":["markdown","streaming","react","llm","renderer","gfm","katex","mermaid"],"author":{"name":"Aeven"},"license":"MIT","_id":"@aeven-ai/hypermarkdown@0.1.2","maintainers":[{"name":"olibaron","email":"olivier@airwave.io"}],"homepage":"https://github.com/Aeven-AI/HyperMarkdown#readme","bugs":{"url":"https://github.com/Aeven-AI/HyperMarkdown/issues"},"dist":{"shasum":"9bb0bc4514e2262615507887a86c400353ed4245","tarball":"https://registry.npmjs.org/@aeven-ai/hypermarkdown/-/hypermarkdown-0.1.2.tgz","fileCount":66,"integrity":"sha512-loywkbImZ16gahfnG8qpMvkoHXn4WAyRVNhDYU94pgwUcM1dRIfd9yOvf04azK9+nHSgcchPVOnCRtLbBfiQog==","signatures":[{"sig":"MEQCICRUkjM+rvI94KtEa86bOMAjgt08et1QJk6g+UDNcm62AiA5bxkJJ4ionnrdMoyT/YkrCNvl5X0MKDqwXfs3i1d+kQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":284582},"type":"module","types":"./dist/index.d.ts","module":"./dist/hypermarkdown.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/hypermarkdown.js"},"./styles.css":"./dist/hypermarkdown.css","./plugins/cjk":{"types":"./dist/lib/plugins/cjk.d.ts","import":"./dist/plugins/cjk.js"},"./plugins/code":{"types":"./dist/lib/plugins/code.d.ts","import":"./dist/plugins/code.js"},"./plugins/math":{"types":"./dist/lib/plugins/math.d.ts","import":"./dist/plugins/math.js"},"./plugins/mermaid":{"types":"./dist/lib/plugins/mermaid.d.ts","import":"./dist/plugins/mermaid.js"}},"gitHead":"206ccb377f3d2029074d9ca39f14f672a3850888","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -b && vite build && npm run build:css","test:ui":"vitest run tests/ui","test:api":"vitest run tests/api tests/plugins","benchmark":"node benchmarks/run.js --runs=5 --warmup=1","build:css":"sass --no-source-map --style=compressed styles/hypermarkdown.scss dist/hypermarkdown.css","test:unit":"vitest run --config vitest.unit.config.ts","typecheck":"tsc -b && npm run typecheck:react18 && npm run typecheck:react19","test:coverage":"vitest run --coverage","test:security":"vitest run tests/security","prepublishOnly":"npm run build","test:streaming":"vitest run tests/streaming","bundle-analyzer":"vite-bundle-visualizer","test:unit:watch":"vitest --config vitest.unit.config.ts","test:correctness":"vitest run tests/correctness","typecheck:react18":"tsc -p tsconfig.react18.json","typecheck:react19":"tsc -p tsconfig.react19.json","test:coverage:unit":"vitest run --config vitest.unit.config.ts --coverage","bundle-analyzer-network":"vite-bundle-visualizer -t network","bundle-analyzer-sunburst":"vite-bundle-visualizer -t sunburst"},"_npmUser":{"name":"olibaron","email":"olivier@airwave.io"},"repository":{"url":"git+https://github.com/Aeven-AI/HyperMarkdown.git","type":"git"},"_npmVersion":"11.19.0","description":"Streaming-aware markdown renderer for React. Renders token-by-token model output without showing raw markup.","directories":{},"sideEffects":["*.css"],"_nodeVersion":"26.7.0","allowScripts":{"esbuild@0.28.2":true,"fsevents@2.3.3":true,"@swc/core@1.16.1":true,"@parcel/watcher@2.6.0":true},"dependencies":{"unified":"^11.0.5","tippy.js":"^6.3.1","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","rehype-react":"^8.0.0","remark-parse":"^11.0.0","remark-rehype":"^11.1.2","rehype-sanitize":"^6.0.0","unist-util-visit":"^5.0.0","hast-util-to-jsx-runtime":"^2.3.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sass":"^1.103.1","vite":"^7.1.7","jsdom":"^26.1.0","katex":"^0.16.25","react":"^18.3.1","vfile":"^6.0.3","eslint":"^9.36.0","vitest":"^4.1.8","globals":"^16.4.0","mermaid":"^11.12.0","react-dom":"^18.3.1","@eslint/js":"^9.36.0","typescript":"~5.8.3","@types/hast":"^3.0.4","@types/node":"^22.10.2","remark-math":"^6.0.0","@types/react":"~18.3.1","@types/unist":"^3.0.3","rehype-katex":"^7.0.1","types-react-18":"npm:@types/react@^18.3.1","types-react-19":"npm:@types/react@^19.2.0","vite-plugin-dts":"^4.5.4","@types/react-dom":"~18.3.0","rehype-highlight":"^7.0.2","typescript-eslint":"^8.44.0","@vitest/coverage-v8":"^4.1.8","remark-cjk-friendly":"^2.3.1","vite-bundle-visualizer":"^1.2.1","@vitejs/plugin-react-swc":"^4.1.0","eslint-plugin-react-hooks":"^5.2.0","eslint-plugin-react-refresh":"^0.4.20"},"peerDependencies":{"katex":"^0.16.25","react":">=18","mermaid":"^11.12.0","react-dom":">=18","remark-math":"^6.0.0","rehype-katex":"^7.0.1","rehype-highlight":"^7.0.2","remark-cjk-friendly":"^2.3.1"},"peerDependenciesMeta":{"katex":{"optional":true},"mermaid":{"optional":true},"remark-math":{"optional":true},"rehype-katex":{"optional":true},"rehype-highlight":{"optional":true},"remark-cjk-friendly":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hypermarkdown_0.1.2_1787939437021_0.26610217980332806","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@aeven-ai/hypermarkdown","version":"0.1.3","keywords":["markdown","streaming","react","llm","renderer","gfm","katex","mermaid"],"author":{"name":"Aeven"},"license":"MIT","_id":"@aeven-ai/hypermarkdown@0.1.3","maintainers":[{"name":"olibaron","email":"olivier@airwave.io"}],"homepage":"https://github.com/Aeven-AI/HyperMarkdown#readme","bugs":{"url":"https://github.com/Aeven-AI/HyperMarkdown/issues"},"dist":{"shasum":"5606df05a82d64ae7bc3f8935782448d8cb1c362","tarball":"https://registry.npmjs.org/@aeven-ai/hypermarkdown/-/hypermarkdown-0.1.3.tgz","fileCount":67,"integrity":"sha512-YsYbNRVXv+xGymHrtndetMb43dZ5nIP/r5w58FJaoAtMbSOqIb9J6aZno2Ic5pBt3hF/YUB/4gzxi44+baygAw==","signatures":[{"sig":"MEUCIQDAtxc54+USJdvwy2aECVqU+2WKtNmxqDXauvlfy2uOVwIgCrDHnRruXYVKJnAKoDw0ALmOj9d+cv0AOrdnawCZaF0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":291944},"type":"module","types":"./dist/index.d.ts","module":"./dist/hypermarkdown.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/hypermarkdown.js"},"./styles.css":"./dist/hypermarkdown.css","./plugins/cjk":{"types":"./dist/lib/plugins/cjk.d.ts","import":"./dist/plugins/cjk.js"},"./plugins/code":{"types":"./dist/lib/plugins/code.d.ts","import":"./dist/plugins/code.js"},"./plugins/math":{"types":"./dist/lib/plugins/math.d.ts","import":"./dist/plugins/math.js"},"./plugins/mermaid":{"types":"./dist/lib/plugins/mermaid.d.ts","import":"./dist/plugins/mermaid.js"}},"gitHead":"c26169be624ab4eaea754d107e76d150f988e6b7","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -b && vite build && npm run build:css","test:ui":"vitest run tests/ui","test:api":"vitest run tests/api tests/plugins","benchmark":"node benchmarks/run.js --runs=5 --warmup=1","build:css":"sass --no-source-map --style=compressed styles/hypermarkdown.scss dist/hypermarkdown.css","test:unit":"vitest run --config vitest.unit.config.ts","typecheck":"tsc -b && npm run typecheck:react18 && npm run typecheck:react19","test:coverage":"vitest run --coverage","test:security":"vitest run tests/security","prepublishOnly":"npm run build","test:streaming":"vitest run tests/streaming","bundle-analyzer":"vite-bundle-visualizer","test:unit:watch":"vitest --config vitest.unit.config.ts","test:correctness":"vitest run tests/correctness","typecheck:react18":"tsc -p tsconfig.react18.json","typecheck:react19":"tsc -p tsconfig.react19.json","test:coverage:unit":"vitest run --config vitest.unit.config.ts --coverage","bundle-analyzer-network":"vite-bundle-visualizer -t network","bundle-analyzer-sunburst":"vite-bundle-visualizer -t sunburst"},"_npmUser":{"name":"olibaron","email":"olivier@airwave.io"},"repository":{"url":"git+https://github.com/Aeven-AI/HyperMarkdown.git","type":"git"},"_npmVersion":"11.19.0","description":"Streaming-aware markdown renderer for React. Renders token-by-token model output without showing raw markup.","directories":{},"sideEffects":["*.css"],"_nodeVersion":"26.7.0","allowScripts":{"esbuild@0.28.2":true,"fsevents@2.3.3":true,"@swc/core@1.16.1":true,"@parcel/watcher@2.6.0":true},"dependencies":{"unified":"^11.0.5","tippy.js":"^6.3.1","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","rehype-react":"^8.0.0","remark-parse":"^11.0.0","remark-rehype":"^11.1.2","rehype-sanitize":"^6.0.0","unist-util-visit":"^5.0.0","hast-util-to-jsx-runtime":"^2.3.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sass":"^1.103.1","vite":"^7.1.7","jsdom":"^26.1.0","katex":"^0.16.25","react":"^18.3.1","vfile":"^6.0.3","eslint":"^9.36.0","vitest":"^4.1.8","globals":"^16.4.0","mermaid":"^11.12.0","react-dom":"^18.3.1","@eslint/js":"^9.36.0","typescript":"~5.8.3","@types/hast":"^3.0.4","@types/node":"^22.10.2","remark-math":"^6.0.0","@types/react":"~18.3.1","@types/unist":"^3.0.3","rehype-katex":"^7.0.1","types-react-18":"npm:@types/react@^18.3.1","types-react-19":"npm:@types/react@^19.2.0","vite-plugin-dts":"^4.5.4","@types/react-dom":"~18.3.0","rehype-highlight":"^7.0.2","typescript-eslint":"^8.44.0","@vitest/coverage-v8":"^4.1.8","remark-cjk-friendly":"^2.3.1","vite-bundle-visualizer":"^1.2.1","@vitejs/plugin-react-swc":"^4.1.0","eslint-plugin-react-hooks":"^5.2.0","eslint-plugin-react-refresh":"^0.4.20"},"peerDependencies":{"katex":"^0.16.25","react":">=18","mermaid":"^11.12.0","react-dom":">=18","remark-math":"^6.0.0","rehype-katex":"^7.0.1","rehype-highlight":"^7.0.2","remark-cjk-friendly":"^2.3.1"},"peerDependenciesMeta":{"katex":{"optional":true},"mermaid":{"optional":true},"remark-math":{"optional":true},"rehype-katex":{"optional":true},"rehype-highlight":{"optional":true},"remark-cjk-friendly":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hypermarkdown_0.1.3_1787941970750_0.8947846579481373","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@aeven-ai/hypermarkdown","version":"0.1.4","keywords":["markdown","streaming","react","llm","renderer","gfm","katex","mermaid"],"author":{"name":"Aeven"},"license":"MIT","_id":"@aeven-ai/hypermarkdown@0.1.4","maintainers":[{"name":"olibaron","email":"olivier@airwave.io"}],"homepage":"https://github.com/Aeven-AI/HyperMarkdown#readme","bugs":{"url":"https://github.com/Aeven-AI/HyperMarkdown/issues"},"dist":{"shasum":"05278ddbc90e843486407d6d24ab831c83172132","tarball":"https://registry.npmjs.org/@aeven-ai/hypermarkdown/-/hypermarkdown-0.1.4.tgz","fileCount":69,"integrity":"sha512-Om5L+mAL8jKLds+bSdhLH2500hvWlwYNtH0AxyC1Cs9J715gffIq3nZuu59FriY1StIa8WSQ5dac7ueKCn3GKg==","signatures":[{"sig":"MEQCIC1NkBuPyz5x6Ka0CKVi098pRgAjGbEaSsYzYIVkZp3bAiBhv4xwbE6qM93OV3l2CdmI8fLQYg5Z5jFbhXqy9aPvaw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":296484},"type":"module","types":"./dist/index.d.ts","module":"./dist/hypermarkdown.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/hypermarkdown.js"},"./styles.css":"./dist/hypermarkdown.css","./plugins/cjk":{"types":"./dist/lib/plugins/cjk.d.ts","import":"./dist/plugins/cjk.js"},"./plugins/code":{"types":"./dist/lib/plugins/code.d.ts","import":"./dist/plugins/code.js"},"./plugins/math":{"types":"./dist/lib/plugins/math.d.ts","import":"./dist/plugins/math.js"},"./plugins/mermaid":{"types":"./dist/lib/plugins/mermaid.d.ts","import":"./dist/plugins/mermaid.js"}},"gitHead":"2fa9267145097185dc92eb9c8509c3c3e99ea253","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -b && vite build && npm run build:css","test:ui":"vitest run tests/ui","test:api":"vitest run tests/api tests/plugins","benchmark":"node benchmarks/run.js --runs=5 --warmup=1","build:css":"sass --no-source-map --style=compressed styles/hypermarkdown.scss dist/hypermarkdown.css","test:unit":"vitest run --config vitest.unit.config.ts","typecheck":"tsc -b && npm run typecheck:react18 && npm run typecheck:react19","test:coverage":"vitest run --coverage","test:security":"vitest run tests/security","prepublishOnly":"npm run build","test:streaming":"vitest run tests/streaming","bundle-analyzer":"vite-bundle-visualizer","test:unit:watch":"vitest --config vitest.unit.config.ts","test:correctness":"vitest run tests/correctness","typecheck:react18":"tsc -p tsconfig.react18.json","typecheck:react19":"tsc -p tsconfig.react19.json","test:coverage:unit":"vitest run --config vitest.unit.config.ts --coverage","bundle-analyzer-network":"vite-bundle-visualizer -t network","bundle-analyzer-sunburst":"vite-bundle-visualizer -t sunburst"},"_npmUser":{"name":"olibaron","email":"olivier@airwave.io"},"repository":{"url":"git+https://github.com/Aeven-AI/HyperMarkdown.git","type":"git"},"_npmVersion":"11.19.0","description":"Streaming-aware markdown renderer for React. Renders token-by-token model output without showing raw markup.","directories":{},"sideEffects":["*.css"],"_nodeVersion":"26.7.0","allowScripts":{"esbuild@0.28.2":true,"fsevents@2.3.3":true,"@swc/core@1.16.1":true,"@parcel/watcher@2.6.0":true},"dependencies":{"unified":"^11.0.5","tippy.js":"^6.3.1","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","rehype-react":"^8.0.0","remark-parse":"^11.0.0","remark-rehype":"^11.1.2","rehype-sanitize":"^6.0.0","unist-util-visit":"^5.0.0","hast-util-to-jsx-runtime":"^2.3.6","unist-util-visit-parents":"^6.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sass":"^1.103.1","vite":"^7.1.7","jsdom":"^26.1.0","katex":"^0.16.25","react":"^18.3.1","vfile":"^6.0.3","eslint":"^9.36.0","vitest":"^4.1.8","globals":"^16.4.0","mermaid":"^11.12.0","react-dom":"^18.3.1","@eslint/js":"^9.36.0","typescript":"~5.8.3","@types/hast":"^3.0.4","@types/node":"^22.10.2","remark-math":"^6.0.0","@types/react":"~18.3.1","@types/unist":"^3.0.3","rehype-katex":"^7.0.1","types-react-18":"npm:@types/react@^18.3.1","types-react-19":"npm:@types/react@^19.2.0","vite-plugin-dts":"^4.5.4","@types/react-dom":"~18.3.0","rehype-highlight":"^7.0.2","typescript-eslint":"^8.44.0","@vitest/coverage-v8":"^4.1.8","remark-cjk-friendly":"^2.3.1","vite-bundle-visualizer":"^1.2.1","@vitejs/plugin-react-swc":"^4.1.0","eslint-plugin-react-hooks":"^5.2.0","eslint-plugin-react-refresh":"^0.4.20"},"peerDependencies":{"katex":"^0.16.25","react":">=18","mermaid":"^11.12.0","react-dom":">=18","remark-math":"^6.0.0","rehype-katex":"^7.0.1","rehype-highlight":"^7.0.2","remark-cjk-friendly":"^2.3.1"},"peerDependenciesMeta":{"katex":{"optional":true},"mermaid":{"optional":true},"remark-math":{"optional":true},"rehype-katex":{"optional":true},"rehype-highlight":{"optional":true},"remark-cjk-friendly":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hypermarkdown_0.1.4_1787945368163_0.5259807456875243","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@aeven-ai/hypermarkdown","version":"0.1.5","keywords":["markdown","streaming","react","llm","renderer","gfm","katex","mermaid"],"author":{"name":"Aeven"},"license":"MIT","_id":"@aeven-ai/hypermarkdown@0.1.5","maintainers":[{"name":"olibaron","email":"olivier@airwave.io"}],"homepage":"https://github.com/Aeven-AI/HyperMarkdown#readme","bugs":{"url":"https://github.com/Aeven-AI/HyperMarkdown/issues"},"dist":{"shasum":"52c6e9257da138c8c54599ec3c490b3fba9fe73e","tarball":"https://registry.npmjs.org/@aeven-ai/hypermarkdown/-/hypermarkdown-0.1.5.tgz","fileCount":69,"integrity":"sha512-3UhX2BfYcK5JMXpjWZNXLYNL1YpBt3Ouo4aUemF5+fe58owHb/3OKj9wiwf1O/UX1zFQTwEcnsoZQlRqmLh5dw==","signatures":[{"sig":"MEUCIHqtByjf8+ECL1QQHFRNyS7genSCi5JaXsNt8kOFi5/KAiEAhvO8P+uLWPK0ybSZF3LLHsBLKIaNqCQT6iuC2Hefi+Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":306410},"type":"module","types":"./dist/index.d.ts","module":"./dist/hypermarkdown.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/hypermarkdown.js"},"./styles.css":"./dist/hypermarkdown.css","./plugins/cjk":{"types":"./dist/lib/plugins/cjk.d.ts","import":"./dist/plugins/cjk.js"},"./plugins/code":{"types":"./dist/lib/plugins/code.d.ts","import":"./dist/plugins/code.js"},"./plugins/math":{"types":"./dist/lib/plugins/math.d.ts","import":"./dist/plugins/math.js"},"./plugins/mermaid":{"types":"./dist/lib/plugins/mermaid.d.ts","import":"./dist/plugins/mermaid.js"}},"gitHead":"991d2ad60fb2fbb3b3ad4de30794970fb799e2f5","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -b && vite build && npm run build:css","test:ui":"vitest run tests/ui","test:api":"vitest run tests/api tests/plugins","benchmark":"node benchmarks/run.js --runs=5 --warmup=1","build:css":"sass --no-source-map --style=compressed styles/hypermarkdown.scss dist/hypermarkdown.css","test:unit":"vitest run --config vitest.unit.config.ts","typecheck":"tsc -b && npm run typecheck:react18 && npm run typecheck:react19","test:coverage":"vitest run --coverage","test:security":"vitest run tests/security","prepublishOnly":"npm run build","test:streaming":"vitest run tests/streaming","bundle-analyzer":"vite-bundle-visualizer","test:unit:watch":"vitest --config vitest.unit.config.ts","test:correctness":"vitest run tests/correctness","typecheck:react18":"tsc -p tsconfig.react18.json","typecheck:react19":"tsc -p tsconfig.react19.json","test:coverage:unit":"vitest run --config vitest.unit.config.ts --coverage","bundle-analyzer-network":"vite-bundle-visualizer -t network","bundle-analyzer-sunburst":"vite-bundle-visualizer -t sunburst"},"_npmUser":{"name":"olibaron","email":"olivier@airwave.io"},"repository":{"url":"git+https://github.com/Aeven-AI/HyperMarkdown.git","type":"git"},"_npmVersion":"11.19.0","description":"Ridiculously fast Markdown for React and AI. Streaming-native renderer that caches settled code lines, table rows, and list items so growing LLM output does not re-parse finished work.","directories":{},"sideEffects":["*.css"],"_nodeVersion":"26.7.0","allowScripts":{"esbuild@0.28.2":true,"fsevents@2.3.3":true,"@swc/core@1.16.1":true,"@parcel/watcher@2.6.0":true},"dependencies":{"unified":"^11.0.5","tippy.js":"^6.3.1","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","rehype-react":"^8.0.0","remark-parse":"^11.0.0","remark-rehype":"^11.1.2","rehype-sanitize":"^6.0.0","unist-util-visit":"^5.0.0","hast-util-to-jsx-runtime":"^2.3.6","unist-util-visit-parents":"^6.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sass":"^1.103.1","vite":"^7.1.7","jsdom":"^26.1.0","katex":"^0.16.25","react":"^18.3.1","vfile":"^6.0.3","eslint":"^9.36.0","vitest":"^4.1.8","globals":"^16.4.0","mermaid":"^11.12.0","react-dom":"^18.3.1","@eslint/js":"^9.36.0","typescript":"~5.8.3","@types/hast":"^3.0.4","@types/node":"^22.10.2","remark-math":"^6.0.0","@types/react":"~18.3.1","@types/unist":"^3.0.3","rehype-katex":"^7.0.1","types-react-18":"npm:@types/react@^18.3.1","types-react-19":"npm:@types/react@^19.2.0","vite-plugin-dts":"^4.5.4","@types/react-dom":"~18.3.0","rehype-highlight":"^7.0.2","typescript-eslint":"^8.44.0","@vitest/coverage-v8":"^4.1.8","remark-cjk-friendly":"^2.3.1","vite-bundle-visualizer":"^1.2.1","@vitejs/plugin-react-swc":"^4.1.0","eslint-plugin-react-hooks":"^5.2.0","eslint-plugin-react-refresh":"^0.4.20"},"peerDependencies":{"katex":"^0.16.25","react":">=18","mermaid":"^11.12.0","react-dom":">=18","remark-math":"^6.0.0","rehype-katex":"^7.0.1","rehype-highlight":"^7.0.2","remark-cjk-friendly":"^2.3.1"},"peerDependenciesMeta":{"katex":{"optional":true},"mermaid":{"optional":true},"remark-math":{"optional":true},"rehype-katex":{"optional":true},"rehype-highlight":{"optional":true},"remark-cjk-friendly":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hypermarkdown_0.1.5_1788172203881_0.5115169600554819","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@aeven-ai/hypermarkdown","version":"0.1.8","keywords":["markdown","streaming","react","llm","renderer","gfm","katex","mermaid"],"author":{"name":"Aeven"},"license":"MIT","_id":"@aeven-ai/hypermarkdown@0.1.8","maintainers":[{"name":"olibaron","email":"olivier@airwave.io"}],"homepage":"https://aeven-ai.github.io/HyperMarkdown/","bugs":{"url":"https://github.com/Aeven-AI/HyperMarkdown/issues"},"dist":{"shasum":"422ae49e3d2461a8567e261e252471da613fa3fc","tarball":"https://registry.npmjs.org/@aeven-ai/hypermarkdown/-/hypermarkdown-0.1.8.tgz","fileCount":70,"integrity":"sha512-CnQlnvdBX46RKSOp/8tX6hoDS/xpD+uDmGmiTm+SWo75+k0o1veUCKGg/oDy6Rq0zu6y1ipniyjrDxqzoxbrTw==","signatures":[{"sig":"MEUCIHpUZGR5xaz9xwOBeGp+NmDS1THgd9H5IrGVdiVMJPHWAiEA3r3L2thYg1qwOk5PSsKZfVIWIUAfZAfQjXyhvUxWvno=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":312485},"type":"module","types":"./dist/index.d.ts","module":"./dist/hypermarkdown.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/hypermarkdown.js"},"./styles.css":"./dist/hypermarkdown.css","./plugins/cjk":{"types":"./dist/lib/plugins/cjk.d.ts","import":"./dist/plugins/cjk.js"},"./plugins/code":{"types":"./dist/lib/plugins/code.d.ts","import":"./dist/plugins/code.js"},"./plugins/math":{"types":"./dist/lib/plugins/math.d.ts","import":"./dist/plugins/math.js"},"./plugins/mermaid":{"types":"./dist/lib/plugins/mermaid.d.ts","import":"./dist/plugins/mermaid.js"}},"gitHead":"eae89b009946dad2fe05958802eba235ff5d998a","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -b && vite build && npm run verify:client-boundary && npm run build:css","test:ui":"vitest run tests/ui","test:api":"vitest run tests/api tests/plugins","benchmark":"node benchmarks/run.js --runs=5 --warmup=1","build:css":"node scripts/build-css.mjs","test:unit":"vitest run --config vitest.unit.config.ts","typecheck":"tsc -b && npm run typecheck:react18 && npm run typecheck:react19","website:dev":"npm run website:benchmarks && npm --prefix website start","test:coverage":"vitest run --coverage","test:security":"vitest run tests/security","website:build":"npm run website:benchmarks && npm --prefix website run build","prepublishOnly":"npm run build","test:streaming":"vitest run tests/streaming","bundle-analyzer":"vite-bundle-visualizer","test:unit:watch":"vitest --config vitest.unit.config.ts","website:preview":"npm --prefix website run serve -- --port 3000","test:correctness":"vitest run tests/correctness","typecheck:react18":"tsc -p tsconfig.react18.json","typecheck:react19":"tsc -p tsconfig.react19.json","test:coverage:unit":"vitest run --config vitest.unit.config.ts --coverage","website:benchmarks":"node website/scripts/generate-benchmarks.mjs","verify:client-boundary":"node scripts/verify-client-boundary.mjs","bundle-analyzer-network":"vite-bundle-visualizer -t network","bundle-analyzer-sunburst":"vite-bundle-visualizer -t sunburst"},"_npmUser":{"name":"olibaron","email":"olivier@airwave.io"},"repository":{"url":"git+https://github.com/Aeven-AI/HyperMarkdown.git","type":"git"},"_npmVersion":"11.19.0","description":"Ridiculously fast Markdown for React and AI. Streaming-native renderer that caches settled code lines, table rows, and list items so growing LLM output does not re-parse finished work.","directories":{},"sideEffects":["*.css"],"_nodeVersion":"26.7.0","allowScripts":{"esbuild@0.28.2":true,"fsevents@2.3.3":true,"@swc/core@1.16.1":true,"@parcel/watcher@2.6.0":true},"dependencies":{"unified":"^11.0.5","tippy.js":"^6.3.1","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","rehype-react":"^8.0.0","remark-parse":"^11.0.0","remark-rehype":"^11.1.2","rehype-sanitize":"^6.0.0","unist-util-visit":"^5.0.0","hast-util-to-jsx-runtime":"^2.3.6","unist-util-visit-parents":"^6.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sass":"^1.103.1","vite":"^7.1.7","jsdom":"^26.1.0","katex":"^0.16.25","react":"^18.3.1","vfile":"^6.0.3","eslint":"^9.36.0","vitest":"^4.1.8","globals":"^16.4.0","mermaid":"^11.12.0","react-dom":"^18.3.1","@eslint/js":"^9.36.0","typescript":"~5.8.3","@types/hast":"^3.0.4","@types/node":"^22.10.2","remark-math":"^6.0.0","@types/react":"~18.3.1","@types/unist":"^3.0.3","rehype-katex":"^7.0.1","types-react-18":"npm:@types/react@^18.3.1","types-react-19":"npm:@types/react@^19.2.0","vite-plugin-dts":"^4.5.4","@types/react-dom":"~18.3.0","rehype-highlight":"^7.0.2","typescript-eslint":"^8.44.0","@vitest/coverage-v8":"^4.1.8","remark-cjk-friendly":"^2.3.1","vite-bundle-visualizer":"^1.2.1","@vitejs/plugin-react-swc":"^4.1.0","eslint-plugin-react-hooks":"^5.2.0","eslint-plugin-react-refresh":"^0.4.20"},"peerDependencies":{"katex":"^0.16.25","react":">=18","mermaid":"^11.12.0","react-dom":">=18","remark-math":"^6.0.0","rehype-katex":"^7.0.1","rehype-highlight":"^7.0.2","remark-cjk-friendly":"^2.3.1"},"peerDependenciesMeta":{"katex":{"optional":true},"mermaid":{"optional":true},"remark-math":{"optional":true},"rehype-katex":{"optional":true},"rehype-highlight":{"optional":true},"remark-cjk-friendly":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hypermarkdown_0.1.8_1788260509683_0.6801960481610794","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@aeven-ai/hypermarkdown","version":"0.1.6","keywords":["markdown","streaming","react","llm","renderer","gfm","katex","mermaid"],"author":{"name":"Aeven"},"license":"MIT","_id":"@aeven-ai/hypermarkdown@0.1.6","maintainers":[{"name":"olibaron","email":"olivier@airwave.io"}],"homepage":"https://aeven-ai.github.io/HyperMarkdown/","bugs":{"url":"https://github.com/Aeven-AI/HyperMarkdown/issues"},"dist":{"shasum":"6b442085a716e870d37129607093558ba080901a","tarball":"https://registry.npmjs.org/@aeven-ai/hypermarkdown/-/hypermarkdown-0.1.6.tgz","fileCount":70,"integrity":"sha512-KBwkjkEf7ggf0V8873guLVkSyEWmWfaxTf0ByVdkq7XEG/TPqJsJxn5AHBDepd/rTQqmFyOn97va7phyNq4bEQ==","signatures":[{"sig":"MEUCICXmOd+b/SJK+asin0bt+QGUpJDNJdgRWoxtIHKfY/PQAiEAikCPW8pe0lvchBJuAMC9yaUs+83UkKfgHY7du5hNlAw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":312227},"type":"module","types":"./dist/index.d.ts","module":"./dist/hypermarkdown.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/hypermarkdown.js"},"./styles.css":"./dist/hypermarkdown.css","./plugins/cjk":{"types":"./dist/lib/plugins/cjk.d.ts","import":"./dist/plugins/cjk.js"},"./plugins/code":{"types":"./dist/lib/plugins/code.d.ts","import":"./dist/plugins/code.js"},"./plugins/math":{"types":"./dist/lib/plugins/math.d.ts","import":"./dist/plugins/math.js"},"./plugins/mermaid":{"types":"./dist/lib/plugins/mermaid.d.ts","import":"./dist/plugins/mermaid.js"}},"scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -b && vite build && npm run verify:client-boundary && npm run build:css","test:ui":"vitest run tests/ui","test:api":"vitest run tests/api tests/plugins","benchmark":"node benchmarks/run.js --runs=5 --warmup=1","build:css":"node scripts/build-css.mjs","test:unit":"vitest run --config vitest.unit.config.ts","typecheck":"tsc -b && npm run typecheck:react18 && npm run typecheck:react19","website:dev":"npm run website:benchmarks && npm --prefix website start","test:coverage":"vitest run --coverage","test:security":"vitest run tests/security","website:build":"npm run website:benchmarks && npm --prefix website run build","prepublishOnly":"npm run build","test:streaming":"vitest run tests/streaming","bundle-analyzer":"vite-bundle-visualizer","test:unit:watch":"vitest --config vitest.unit.config.ts","website:preview":"npm --prefix website run serve -- --port 3000","test:correctness":"vitest run tests/correctness","typecheck:react18":"tsc -p tsconfig.react18.json","typecheck:react19":"tsc -p tsconfig.react19.json","test:coverage:unit":"vitest run --config vitest.unit.config.ts --coverage","website:benchmarks":"node website/scripts/generate-benchmarks.mjs","verify:client-boundary":"node scripts/verify-client-boundary.mjs","bundle-analyzer-network":"vite-bundle-visualizer -t network","bundle-analyzer-sunburst":"vite-bundle-visualizer -t sunburst"},"_npmUser":{"name":"olibaron","email":"olivier@airwave.io"},"repository":{"url":"git+https://github.com/Aeven-AI/HyperMarkdown.git","type":"git"},"_npmVersion":"11.19.0","description":"Ridiculously fast Markdown for React and AI. Streaming-native renderer that caches settled code lines, table rows, and list items so growing LLM output does not re-parse finished work.","directories":{},"sideEffects":["*.css"],"_nodeVersion":"26.7.0","allowScripts":{"esbuild@0.28.2":true,"fsevents@2.3.3":true,"@swc/core@1.16.1":true,"@parcel/watcher@2.6.0":true},"dependencies":{"unified":"^11.0.5","tippy.js":"^6.3.1","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","rehype-react":"^8.0.0","remark-parse":"^11.0.0","remark-rehype":"^11.1.2","rehype-sanitize":"^6.0.0","unist-util-visit":"^5.0.0","hast-util-to-jsx-runtime":"^2.3.6","unist-util-visit-parents":"^6.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sass":"^1.103.1","vite":"^7.1.7","jsdom":"^26.1.0","katex":"^0.16.25","react":"^18.3.1","vfile":"^6.0.3","eslint":"^9.36.0","vitest":"^4.1.8","globals":"^16.4.0","mermaid":"^11.12.0","react-dom":"^18.3.1","@eslint/js":"^9.36.0","typescript":"~5.8.3","@types/hast":"^3.0.4","@types/node":"^22.10.2","remark-math":"^6.0.0","@types/react":"~18.3.1","@types/unist":"^3.0.3","rehype-katex":"^7.0.1","types-react-18":"npm:@types/react@^18.3.1","types-react-19":"npm:@types/react@^19.2.0","vite-plugin-dts":"^4.5.4","@types/react-dom":"~18.3.0","rehype-highlight":"^7.0.2","typescript-eslint":"^8.44.0","@vitest/coverage-v8":"^4.1.8","remark-cjk-friendly":"^2.3.1","vite-bundle-visualizer":"^1.2.1","@vitejs/plugin-react-swc":"^4.1.0","eslint-plugin-react-hooks":"^5.2.0","eslint-plugin-react-refresh":"^0.4.20"},"peerDependencies":{"katex":"^0.16.25","react":">=18","mermaid":"^11.12.0","react-dom":">=18","remark-math":"^6.0.0","rehype-katex":"^7.0.1","rehype-highlight":"^7.0.2","remark-cjk-friendly":"^2.3.1"},"peerDependenciesMeta":{"katex":{"optional":true},"mermaid":{"optional":true},"remark-math":{"optional":true},"rehype-katex":{"optional":true},"rehype-highlight":{"optional":true},"remark-cjk-friendly":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hypermarkdown_0.1.6_1788261078270_0.7610308000842547","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@aeven-ai/hypermarkdown","version":"0.1.7","keywords":["markdown","streaming","react","llm","renderer","gfm","katex","mermaid"],"author":{"name":"Aeven"},"license":"MIT","_id":"@aeven-ai/hypermarkdown@0.1.7","maintainers":[{"name":"olibaron","email":"olivier@airwave.io"}],"homepage":"https://aeven-ai.github.io/HyperMarkdown/","bugs":{"url":"https://github.com/Aeven-AI/HyperMarkdown/issues"},"dist":{"shasum":"6a352e4d80c9f401a561000e3dd03f348c35b3b3","tarball":"https://registry.npmjs.org/@aeven-ai/hypermarkdown/-/hypermarkdown-0.1.7.tgz","fileCount":70,"integrity":"sha512-ecBZOYAuEunbq10JUry8e3ytcfhv4v80ewZpkZi8aV/wfwb7G9FeDS9EGbXW7xgIxBMO28Vxwn/W1oSipK1sUA==","signatures":[{"sig":"MEQCIGlDF3G0eh7k7OLpR2hbYT9IlAL40zEDuW7EE/YcnOlKAiBlyJRxpYjkfnQvsYMwy+N2P3sM7pjS76zJWefPGUm2jA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":312506},"type":"module","types":"./dist/index.d.ts","module":"./dist/hypermarkdown.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/hypermarkdown.js"},"./styles.css":"./dist/hypermarkdown.css","./plugins/cjk":{"types":"./dist/lib/plugins/cjk.d.ts","import":"./dist/plugins/cjk.js"},"./plugins/code":{"types":"./dist/lib/plugins/code.d.ts","import":"./dist/plugins/code.js"},"./plugins/math":{"types":"./dist/lib/plugins/math.d.ts","import":"./dist/plugins/math.js"},"./plugins/mermaid":{"types":"./dist/lib/plugins/mermaid.d.ts","import":"./dist/plugins/mermaid.js"}},"scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -b && vite build && npm run verify:client-boundary && npm run build:css","test:ui":"vitest run tests/ui","test:api":"vitest run tests/api tests/plugins","benchmark":"node benchmarks/run.js --runs=5 --warmup=1","build:css":"node scripts/build-css.mjs","test:unit":"vitest run --config vitest.unit.config.ts","typecheck":"tsc -b && npm run typecheck:react18 && npm run typecheck:react19","website:dev":"npm run website:benchmarks && npm --prefix website start","test:coverage":"vitest run --coverage","test:security":"vitest run tests/security","website:build":"npm run website:benchmarks && npm --prefix website run build","prepublishOnly":"npm run build","test:streaming":"vitest run tests/streaming","bundle-analyzer":"vite-bundle-visualizer","test:unit:watch":"vitest --config vitest.unit.config.ts","website:preview":"npm --prefix website run serve -- --port 3000","test:correctness":"vitest run tests/correctness","typecheck:react18":"tsc -p tsconfig.react18.json","typecheck:react19":"tsc -p tsconfig.react19.json","test:coverage:unit":"vitest run --config vitest.unit.config.ts --coverage","website:benchmarks":"node website/scripts/generate-benchmarks.mjs","verify:client-boundary":"node scripts/verify-client-boundary.mjs","bundle-analyzer-network":"vite-bundle-visualizer -t network","bundle-analyzer-sunburst":"vite-bundle-visualizer -t sunburst"},"_npmUser":{"name":"olibaron","email":"olivier@airwave.io"},"repository":{"url":"git+https://github.com/Aeven-AI/HyperMarkdown.git","type":"git"},"_npmVersion":"11.19.0","description":"Ridiculously fast Markdown for React and AI. Streaming-native renderer that caches settled code lines, table rows, and list items so growing LLM output does not re-parse finished work.","directories":{},"sideEffects":["*.css"],"_nodeVersion":"26.7.0","allowScripts":{"esbuild@0.28.2":true,"fsevents@2.3.3":true,"@swc/core@1.16.1":true,"@parcel/watcher@2.6.0":true},"dependencies":{"unified":"^11.0.5","tippy.js":"^6.3.1","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","rehype-react":"^8.0.0","remark-parse":"^11.0.0","remark-rehype":"^11.1.2","rehype-sanitize":"^6.0.0","unist-util-visit":"^5.0.0","hast-util-to-jsx-runtime":"^2.3.6","unist-util-visit-parents":"^6.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sass":"^1.103.1","vite":"^7.1.7","jsdom":"^26.1.0","katex":"^0.16.25","react":"^18.3.1","vfile":"^6.0.3","eslint":"^9.36.0","vitest":"^4.1.8","globals":"^16.4.0","mermaid":"^11.12.0","react-dom":"^18.3.1","@eslint/js":"^9.36.0","typescript":"~5.8.3","@types/hast":"^3.0.4","@types/node":"^22.10.2","remark-math":"^6.0.0","@types/react":"~18.3.1","@types/unist":"^3.0.3","rehype-katex":"^7.0.1","types-react-18":"npm:@types/react@^18.3.1","types-react-19":"npm:@types/react@^19.2.0","vite-plugin-dts":"^4.5.4","@types/react-dom":"~18.3.0","rehype-highlight":"^7.0.2","typescript-eslint":"^8.44.0","@vitest/coverage-v8":"^4.1.8","remark-cjk-friendly":"^2.3.1","vite-bundle-visualizer":"^1.2.1","@vitejs/plugin-react-swc":"^4.1.0","eslint-plugin-react-hooks":"^5.2.0","eslint-plugin-react-refresh":"^0.4.20"},"peerDependencies":{"katex":"^0.16.25","react":">=18","mermaid":"^11.12.0","react-dom":">=18","remark-math":"^6.0.0","rehype-katex":"^7.0.1","rehype-highlight":"^7.0.2","remark-cjk-friendly":"^2.3.1"},"peerDependenciesMeta":{"katex":{"optional":true},"mermaid":{"optional":true},"remark-math":{"optional":true},"rehype-katex":{"optional":true},"rehype-highlight":{"optional":true},"remark-cjk-friendly":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hypermarkdown_0.1.7_1788261120783_0.9838074182259715","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"@aeven-ai/hypermarkdown","version":"0.1.9","keywords":["markdown","streaming","react","llm","renderer","gfm","katex","mermaid"],"author":{"name":"Aeven"},"license":"MIT","_id":"@aeven-ai/hypermarkdown@0.1.9","maintainers":[{"name":"olibaron","email":"olivier@airwave.io"}],"homepage":"https://aeven-ai.github.io/HyperMarkdown/","bugs":{"url":"https://github.com/Aeven-AI/HyperMarkdown/issues"},"dist":{"shasum":"0b29908fd89d60a7384afb285dcc9ad79d3c5f95","tarball":"https://registry.npmjs.org/@aeven-ai/hypermarkdown/-/hypermarkdown-0.1.9.tgz","fileCount":70,"integrity":"sha512-WjvqJQbpbJQ2mXx6CzoQo4Ujpas9FRkRtCb+GtVysRgJwSnPxHQc7KWL5BVs8Lctf0rVsmEfdr4pb7T7w9Cufw==","signatures":[{"sig":"MEUCIEvpf7BHMlRv/MkayUDHf2Bff1nVaZ/VHZyG0IzduhdPAiEAoZ/Qgl76ne84jJfkrqFsEPCPXCnbosRXsjaworcKlBM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":316731},"type":"module","types":"./dist/index.d.ts","module":"./dist/hypermarkdown.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/hypermarkdown.js"},"./styles.css":"./dist/hypermarkdown.css","./plugins/cjk":{"types":"./dist/lib/plugins/cjk.d.ts","import":"./dist/plugins/cjk.js"},"./plugins/code":{"types":"./dist/lib/plugins/code.d.ts","import":"./dist/plugins/code.js"},"./plugins/math":{"types":"./dist/lib/plugins/math.d.ts","import":"./dist/plugins/math.js"},"./plugins/mermaid":{"types":"./dist/lib/plugins/mermaid.d.ts","import":"./dist/plugins/mermaid.js"}},"gitHead":"14b95d2748fc9a8b7b9f1636b7e3c19617806d67","scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -b && vite build && npm run verify:client-boundary && npm run build:css","test:ui":"vitest run tests/ui","version":"npm --prefix website install --package-lock-only --ignore-scripts && git add website/package-lock.json","test:api":"vitest run tests/api tests/plugins","benchmark":"node benchmarks/run.js --runs=5 --warmup=1","build:css":"node scripts/build-css.mjs","test:unit":"vitest run --config vitest.unit.config.ts","typecheck":"tsc -b && npm run typecheck:react18 && npm run typecheck:react19","website:dev":"npm run website:benchmarks && npm --prefix website start","test:coverage":"vitest run --coverage","test:security":"vitest run tests/security","website:build":"npm run website:benchmarks && npm --prefix website run build","prepublishOnly":"npm run build","test:streaming":"vitest run tests/streaming","bundle-analyzer":"vite-bundle-visualizer","test:unit:watch":"vitest --config vitest.unit.config.ts","website:preview":"npm --prefix website run serve -- --port 3000","test:correctness":"vitest run tests/correctness","typecheck:react18":"tsc -p tsconfig.react18.json","typecheck:react19":"tsc -p tsconfig.react19.json","test:coverage:unit":"vitest run --config vitest.unit.config.ts --coverage","website:benchmarks":"node website/scripts/generate-benchmarks.mjs","verify:client-boundary":"node scripts/verify-client-boundary.mjs","bundle-analyzer-network":"vite-bundle-visualizer -t network","bundle-analyzer-sunburst":"vite-bundle-visualizer -t sunburst"},"_npmUser":{"name":"olibaron","email":"olivier@airwave.io"},"repository":{"url":"git+https://github.com/Aeven-AI/HyperMarkdown.git","type":"git"},"_npmVersion":"11.19.0","description":"Ridiculously fast Markdown for React and AI. Streaming-native renderer that caches settled code lines, table rows, and list items so growing LLM output does not re-parse finished work.","directories":{},"sideEffects":["*.css"],"_nodeVersion":"26.7.0","allowScripts":{"esbuild@0.28.2":true,"fsevents@2.3.3":true,"@swc/core@1.16.1":true,"@parcel/watcher@2.6.0":true},"dependencies":{"unified":"^11.0.5","tippy.js":"^6.3.1","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","rehype-react":"^8.0.0","remark-parse":"^11.0.0","remark-rehype":"^11.1.2","rehype-sanitize":"^6.0.0","unist-util-visit":"^5.0.0","hast-util-to-jsx-runtime":"^2.3.6","unist-util-visit-parents":"^6.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sass":"^1.103.1","vite":"^7.1.7","jsdom":"^26.1.0","katex":"^0.16.25","react":"^18.3.1","vfile":"^6.0.3","eslint":"^9.36.0","vitest":"^4.1.8","globals":"^16.4.0","mermaid":"^11.12.0","react-dom":"^18.3.1","@eslint/js":"^9.36.0","typescript":"~5.8.3","@types/hast":"^3.0.4","@types/node":"^22.10.2","remark-math":"^6.0.0","@types/react":"~18.3.1","@types/unist":"^3.0.3","rehype-katex":"^7.0.1","types-react-18":"npm:@types/react@^18.3.1","types-react-19":"npm:@types/react@^19.2.0","vite-plugin-dts":"^4.5.4","@types/react-dom":"~18.3.0","rehype-highlight":"^7.0.2","typescript-eslint":"^8.44.0","@vitest/coverage-v8":"^4.1.8","remark-cjk-friendly":"^2.3.1","vite-bundle-visualizer":"^1.2.1","@vitejs/plugin-react-swc":"^4.1.0","eslint-plugin-react-hooks":"^5.2.0","eslint-plugin-react-refresh":"^0.4.20"},"peerDependencies":{"katex":"^0.16.25","react":">=18","mermaid":"^11.12.0","react-dom":">=18","remark-math":"^6.0.0","rehype-katex":"^7.0.1","rehype-highlight":"^7.0.2","remark-cjk-friendly":"^2.3.1"},"peerDependenciesMeta":{"katex":{"optional":true},"mermaid":{"optional":true},"remark-math":{"optional":true},"rehype-katex":{"optional":true},"rehype-highlight":{"optional":true},"remark-cjk-friendly":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hypermarkdown_0.1.9_1788280620864_0.14682184784530694","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@aeven-ai/hypermarkdown","version":"0.2.0","keywords":["markdown","streaming","react","llm","renderer","gfm","katex","mermaid"],"author":{"name":"Aeven"},"license":"MIT","_id":"@aeven-ai/hypermarkdown@0.2.0","maintainers":[{"name":"olibaron","email":"olivier@airwave.io"}],"homepage":"https://aeven-ai.github.io/HyperMarkdown/","bugs":{"url":"https://github.com/Aeven-AI/HyperMarkdown/issues"},"dist":{"shasum":"f50bab81accac26f9a9624b9d2a2fe0492ab5ac1","tarball":"https://registry.npmjs.org/@aeven-ai/hypermarkdown/-/hypermarkdown-0.2.0.tgz","fileCount":71,"integrity":"sha512-gkhLxwAiOyXPyoirSvu/owFtII/+lihlI0ctKCZOtcrlD1LZgqGt38L08p+QgFAFrcACy+1xWubPEymnwFXrcw==","signatures":[{"sig":"MEUCIBF5UA4O8ICtWekeNNdyLmCHRrzAnDxUJ2qn8iXcxpA3AiEArJfF3kwc+1xuYaqIKcD89kmQK2MmbPO7ExRNf0DmKa8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":318463},"type":"module","types":"./dist/index.d.ts","module":"./dist/hypermarkdown.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/hypermarkdown.js"},"./styles.css":"./dist/hypermarkdown.css","./plugins/cjk":{"types":"./dist/lib/plugins/cjk.d.ts","import":"./dist/plugins/cjk.js"},"./plugins/code":{"types":"./dist/lib/plugins/code.d.ts","import":"./dist/plugins/code.js"},"./plugins/math":{"types":"./dist/lib/plugins/math.d.ts","import":"./dist/plugins/math.js"},"./plugins/mermaid":{"types":"./dist/lib/plugins/mermaid.d.ts","import":"./dist/plugins/mermaid.js"}},"scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -b && vite build && npm run verify:client-boundary && npm run build:css","test:ui":"vitest run tests/ui","version":"npm --prefix website install --package-lock-only --ignore-scripts && git add website/package-lock.json","test:api":"vitest run tests/api tests/plugins","benchmark":"node benchmarks/run.js --runs=5 --warmup=1","build:css":"node scripts/build-css.mjs","test:unit":"vitest run --config vitest.unit.config.ts","typecheck":"tsc -b && npm run typecheck:react18 && npm run typecheck:react19","website:dev":"npm run website:benchmarks && npm --prefix website start","test:coverage":"vitest run --coverage","test:security":"vitest run tests/security","website:build":"npm run website:benchmarks && npm --prefix website run build","prepublishOnly":"npm run build","test:streaming":"vitest run tests/streaming","bundle-analyzer":"vite-bundle-visualizer","test:unit:watch":"vitest --config vitest.unit.config.ts","website:preview":"npm --prefix website run serve -- --port 3000","test:correctness":"vitest run tests/correctness","typecheck:react18":"tsc -p tsconfig.react18.json","typecheck:react19":"tsc -p tsconfig.react19.json","test:coverage:unit":"vitest run --config vitest.unit.config.ts --coverage","website:benchmarks":"node website/scripts/generate-benchmarks.mjs","verify:client-boundary":"node scripts/verify-client-boundary.mjs","bundle-analyzer-network":"vite-bundle-visualizer -t network","bundle-analyzer-sunburst":"vite-bundle-visualizer -t sunburst"},"_npmUser":{"name":"olibaron","email":"olivier@airwave.io"},"repository":{"url":"git+https://github.com/Aeven-AI/HyperMarkdown.git","type":"git"},"_npmVersion":"11.19.0","description":"Ridiculously fast Markdown for React and AI. Streaming-native renderer that caches settled code lines, table rows, and list items so growing LLM output does not re-parse finished work.","directories":{},"sideEffects":["*.css"],"_nodeVersion":"26.7.0","allowScripts":{"esbuild@0.28.2":true,"fsevents@2.3.3":true,"@swc/core@1.16.1":true,"@parcel/watcher@2.6.0":true},"dependencies":{"unified":"^11.0.5","tippy.js":"^6.3.1","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","rehype-react":"^8.0.0","remark-parse":"^11.0.0","remark-rehype":"^11.1.2","rehype-sanitize":"^6.0.0","unist-util-visit":"^5.0.0","hast-util-to-jsx-runtime":"^2.3.6","unist-util-visit-parents":"^6.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sass":"^1.103.1","vite":"^7.1.7","jsdom":"^26.1.0","katex":"^0.16.25","react":"^18.3.1","vfile":"^6.0.3","eslint":"^9.36.0","vitest":"^4.1.8","globals":"^16.4.0","mermaid":"^11.12.0","react-dom":"^18.3.1","@eslint/js":"^9.36.0","typescript":"~5.8.3","@types/hast":"^3.0.4","@types/node":"^22.10.2","remark-math":"^6.0.0","@types/react":"~18.3.1","@types/unist":"^3.0.3","rehype-katex":"^7.0.1","types-react-18":"npm:@types/react@^18.3.1","types-react-19":"npm:@types/react@^19.2.0","vite-plugin-dts":"^4.5.4","@types/react-dom":"~18.3.0","rehype-highlight":"^7.0.2","typescript-eslint":"^8.44.0","@vitest/coverage-v8":"^4.1.8","remark-cjk-friendly":"^2.3.1","vite-bundle-visualizer":"^1.2.1","@vitejs/plugin-react-swc":"^4.1.0","eslint-plugin-react-hooks":"^5.2.0","eslint-plugin-react-refresh":"^0.4.20"},"peerDependencies":{"katex":"^0.16.25","react":">=18","mermaid":"^11.12.0","react-dom":">=18","remark-math":"^6.0.0","rehype-katex":"^7.0.1","rehype-highlight":"^7.0.2","remark-cjk-friendly":"^2.3.1"},"peerDependenciesMeta":{"katex":{"optional":true},"mermaid":{"optional":true},"remark-math":{"optional":true},"rehype-katex":{"optional":true},"rehype-highlight":{"optional":true},"remark-cjk-friendly":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hypermarkdown_0.2.0_1788283087968_0.6722850570668422","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@aeven-ai/hypermarkdown","version":"0.2.1","keywords":["markdown","streaming","react","llm","renderer","gfm","katex","mermaid"],"author":{"name":"Aeven"},"license":"MIT","_id":"@aeven-ai/hypermarkdown@0.2.1","maintainers":[{"name":"olibaron","email":"olivier@airwave.io"}],"homepage":"https://aeven-ai.github.io/HyperMarkdown/","bugs":{"url":"https://github.com/Aeven-AI/HyperMarkdown/issues"},"dist":{"shasum":"ac52f2516efd78b0892935b3165e69a4530e2be3","tarball":"https://registry.npmjs.org/@aeven-ai/hypermarkdown/-/hypermarkdown-0.2.1.tgz","fileCount":71,"integrity":"sha512-auL27Dle2dtM82zCo38/6QIjVS8jHMZANuNbeFdS5VvCKdyl2yI8zYt7Y5rDCYDUolK8I9DOxhYMVrXkVgtCFg==","signatures":[{"sig":"MEYCIQCKaXmSMZUEnu1XYkoCbomrC/4SRBRbhkHo7u6FW63lWgIhAL1hRbyrdCnkJyDVgi95cyul91vBihft4+ueofeO32ti","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":318507},"type":"module","types":"./dist/index.d.ts","module":"./dist/hypermarkdown.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/hypermarkdown.js"},"./styles.css":"./dist/hypermarkdown.css","./plugins/cjk":{"types":"./dist/lib/plugins/cjk.d.ts","import":"./dist/plugins/cjk.js"},"./plugins/code":{"types":"./dist/lib/plugins/code.d.ts","import":"./dist/plugins/code.js"},"./plugins/math":{"types":"./dist/lib/plugins/math.d.ts","import":"./dist/plugins/math.js"},"./plugins/mermaid":{"types":"./dist/lib/plugins/mermaid.d.ts","import":"./dist/plugins/mermaid.js"}},"scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -b && vite build && npm run verify:client-boundary && npm run build:css","test:ui":"vitest run tests/ui","version":"npm --prefix website install --package-lock-only --ignore-scripts && git add website/package-lock.json","test:api":"vitest run tests/api tests/plugins","benchmark":"node benchmarks/run.js --runs=5 --warmup=1","build:css":"node scripts/build-css.mjs","test:unit":"vitest run --config vitest.unit.config.ts","typecheck":"tsc -b && npm run typecheck:react18 && npm run typecheck:react19","website:dev":"npm run website:benchmarks && npm --prefix website start","test:coverage":"vitest run --coverage","test:security":"vitest run tests/security","website:build":"npm run website:benchmarks && npm --prefix website run build","prepublishOnly":"npm run build","test:streaming":"vitest run tests/streaming","bundle-analyzer":"vite-bundle-visualizer","test:unit:watch":"vitest --config vitest.unit.config.ts","website:preview":"npm --prefix website run serve -- --port 3000","test:correctness":"vitest run tests/correctness","typecheck:react18":"tsc -p tsconfig.react18.json","typecheck:react19":"tsc -p tsconfig.react19.json","test:coverage:unit":"vitest run --config vitest.unit.config.ts --coverage","website:benchmarks":"node website/scripts/generate-benchmarks.mjs","verify:client-boundary":"node scripts/verify-client-boundary.mjs","bundle-analyzer-network":"vite-bundle-visualizer -t network","bundle-analyzer-sunburst":"vite-bundle-visualizer -t sunburst"},"_npmUser":{"name":"olibaron","email":"olivier@airwave.io"},"repository":{"url":"git+https://github.com/Aeven-AI/HyperMarkdown.git","type":"git"},"_npmVersion":"11.19.0","description":"Ridiculously fast Markdown for React and AI. Streaming-native renderer that caches settled code lines, table rows, and list items so growing LLM output does not re-parse finished work.","directories":{},"sideEffects":["*.css"],"_nodeVersion":"26.7.0","allowScripts":{"esbuild@0.28.2":true,"fsevents@2.3.3":true,"@swc/core@1.16.1":true,"@parcel/watcher@2.6.0":true},"dependencies":{"unified":"^11.0.5","tippy.js":"^6.3.1","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","rehype-react":"^8.0.0","remark-parse":"^11.0.0","remark-rehype":"^11.1.2","rehype-sanitize":"^6.0.0","unist-util-visit":"^5.0.0","hast-util-to-jsx-runtime":"^2.3.6","unist-util-visit-parents":"^6.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sass":"^1.103.1","vite":"^7.1.7","jsdom":"^26.1.0","katex":"^0.16.25","react":"^18.3.1","vfile":"^6.0.3","eslint":"^9.36.0","vitest":"^4.1.8","globals":"^16.4.0","mermaid":"^11.12.0","react-dom":"^18.3.1","@eslint/js":"^9.36.0","typescript":"~5.8.3","@types/hast":"^3.0.4","@types/node":"^22.10.2","remark-math":"^6.0.0","@types/react":"~18.3.1","@types/unist":"^3.0.3","rehype-katex":"^7.0.1","types-react-18":"npm:@types/react@^18.3.1","types-react-19":"npm:@types/react@^19.2.0","vite-plugin-dts":"^4.5.4","@types/react-dom":"~18.3.0","rehype-highlight":"^7.0.2","typescript-eslint":"^8.44.0","@vitest/coverage-v8":"^4.1.8","remark-cjk-friendly":"^2.3.1","vite-bundle-visualizer":"^1.2.1","@vitejs/plugin-react-swc":"^4.1.0","eslint-plugin-react-hooks":"^5.2.0","eslint-plugin-react-refresh":"^0.4.20"},"peerDependencies":{"katex":"^0.16.25","react":">=18","mermaid":"^11.12.0","react-dom":">=18","remark-math":"^6.0.0","rehype-katex":"^7.0.1","rehype-highlight":"^7.0.2","remark-cjk-friendly":"^2.3.1"},"peerDependenciesMeta":{"katex":{"optional":true},"mermaid":{"optional":true},"remark-math":{"optional":true},"rehype-katex":{"optional":true},"rehype-highlight":{"optional":true},"remark-cjk-friendly":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hypermarkdown_0.2.1_1788284560932_0.33273395145962903","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@aeven-ai/hypermarkdown","version":"0.3.0","keywords":["markdown","streaming","react","llm","renderer","gfm","katex","mermaid"],"author":{"name":"Aeven"},"license":"MIT","_id":"@aeven-ai/hypermarkdown@0.3.0","maintainers":[{"name":"olibaron","email":"olivier@airwave.io"}],"homepage":"https://aeven-ai.github.io/HyperMarkdown/","bugs":{"url":"https://github.com/Aeven-AI/HyperMarkdown/issues"},"dist":{"shasum":"6bd0166a680ccfa6a9955b72e9de053b27cc1fe9","tarball":"https://registry.npmjs.org/@aeven-ai/hypermarkdown/-/hypermarkdown-0.3.0.tgz","fileCount":71,"integrity":"sha512-SBR7GIrDHItPxW/3mZtJYrN+d2DWQFPcM5h8a3oTtJgZJXiAi5ltHjkFt1kh2rYTxGGP/SpN7PU+X8DflAZEYA==","signatures":[{"sig":"MEUCIQCqt9ox7zvVC6+u/zqvM35JNkI/LWt7zBQ91QfcTMPlkwIgflvTKi05iHHTZs5MaHZTq/YYLVSiJdm+iZ8pPDbwQZY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":323780},"type":"module","types":"./dist/index.d.ts","module":"./dist/hypermarkdown.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/hypermarkdown.js"},"./styles.css":"./dist/hypermarkdown.css","./plugins/cjk":{"types":"./dist/lib/plugins/cjk.d.ts","import":"./dist/plugins/cjk.js"},"./plugins/code":{"types":"./dist/lib/plugins/code.d.ts","import":"./dist/plugins/code.js"},"./plugins/math":{"types":"./dist/lib/plugins/math.d.ts","import":"./dist/plugins/math.js"},"./plugins/mermaid":{"types":"./dist/lib/plugins/mermaid.d.ts","import":"./dist/plugins/mermaid.js"}},"scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -b && vite build && npm run verify:client-boundary && npm run build:css","test:ui":"vitest run tests/ui","version":"npm --prefix website install --package-lock-only --ignore-scripts && git add website/package-lock.json","test:api":"vitest run tests/api tests/plugins","benchmark":"node benchmarks/run.js --runs=5 --warmup=1","build:css":"node scripts/build-css.mjs","test:unit":"vitest run --config vitest.unit.config.ts","typecheck":"tsc -b && npm run typecheck:react18 && npm run typecheck:react19","website:dev":"npm run website:benchmarks && npm --prefix website start","test:coverage":"vitest run --coverage","test:security":"vitest run tests/security","website:build":"npm run website:benchmarks && npm --prefix website run build","prepublishOnly":"npm run build","test:streaming":"vitest run tests/streaming","bundle-analyzer":"vite-bundle-visualizer","test:unit:watch":"vitest --config vitest.unit.config.ts","website:preview":"npm --prefix website run serve -- --port 3000","test:correctness":"vitest run tests/correctness","typecheck:react18":"tsc -p tsconfig.react18.json","typecheck:react19":"tsc -p tsconfig.react19.json","test:coverage:unit":"vitest run --config vitest.unit.config.ts --coverage","website:benchmarks":"node website/scripts/generate-benchmarks.mjs","verify:client-boundary":"node scripts/verify-client-boundary.mjs","bundle-analyzer-network":"vite-bundle-visualizer -t network","bundle-analyzer-sunburst":"vite-bundle-visualizer -t sunburst"},"_npmUser":{"name":"olibaron","email":"olivier@airwave.io"},"repository":{"url":"git+https://github.com/Aeven-AI/HyperMarkdown.git","type":"git"},"_npmVersion":"11.19.0","description":"Ridiculously fast Markdown for React and AI. Streaming-native renderer that caches settled code lines, table rows, and list items so growing LLM output does not re-parse finished work.","directories":{},"sideEffects":["*.css"],"_nodeVersion":"26.7.0","allowScripts":{"esbuild@0.28.2":true,"fsevents@2.3.3":true,"@swc/core@1.16.1":true,"@parcel/watcher@2.6.0":true},"dependencies":{"unified":"^11.0.5","tippy.js":"^6.3.1","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","rehype-react":"^8.0.0","remark-parse":"^11.0.0","remark-rehype":"^11.1.2","rehype-sanitize":"^6.0.0","unist-util-visit":"^5.0.0","hast-util-to-jsx-runtime":"^2.3.6","unist-util-visit-parents":"^6.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sass":"^1.103.1","vite":"^7.1.7","jsdom":"^26.1.0","katex":"^0.16.25","react":"^18.3.1","vfile":"^6.0.3","eslint":"^9.36.0","vitest":"^4.1.8","globals":"^16.4.0","mermaid":"^11.12.0","react-dom":"^18.3.1","@eslint/js":"^9.36.0","typescript":"~5.8.3","@types/hast":"^3.0.4","@types/node":"^22.10.2","remark-math":"^6.0.0","@types/react":"~18.3.1","@types/unist":"^3.0.3","rehype-katex":"^7.0.1","types-react-18":"npm:@types/react@^18.3.1","types-react-19":"npm:@types/react@^19.2.0","vite-plugin-dts":"^4.5.4","@types/react-dom":"~18.3.0","rehype-highlight":"^7.0.2","typescript-eslint":"^8.44.0","@vitest/coverage-v8":"^4.1.8","remark-cjk-friendly":"^2.3.1","vite-bundle-visualizer":"^1.2.1","@vitejs/plugin-react-swc":"^4.1.0","eslint-plugin-react-hooks":"^5.2.0","eslint-plugin-react-refresh":"^0.4.20"},"peerDependencies":{"katex":"^0.16.25","react":">=18","mermaid":"^11.12.0","react-dom":">=18","remark-math":"^6.0.0","rehype-katex":"^7.0.1","rehype-highlight":"^7.0.2","remark-cjk-friendly":"^2.3.1"},"peerDependenciesMeta":{"katex":{"optional":true},"mermaid":{"optional":true},"remark-math":{"optional":true},"rehype-katex":{"optional":true},"rehype-highlight":{"optional":true},"remark-cjk-friendly":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hypermarkdown_0.3.0_1788289896919_0.4148100277334168","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@aeven-ai/hypermarkdown","version":"0.4.0","keywords":["markdown","streaming","react","llm","renderer","gfm","katex","mermaid"],"author":{"name":"Aeven"},"license":"MIT","_id":"@aeven-ai/hypermarkdown@0.4.0","maintainers":[{"name":"olibaron","email":"olivier@airwave.io"}],"homepage":"https://aeven-ai.github.io/HyperMarkdown/","bugs":{"url":"https://github.com/Aeven-AI/HyperMarkdown/issues"},"dist":{"shasum":"bca8e8a4cd12dd809932e6aa816e04253c9683fa","tarball":"https://registry.npmjs.org/@aeven-ai/hypermarkdown/-/hypermarkdown-0.4.0.tgz","fileCount":72,"integrity":"sha512-rDDSoH6tCRH5+A6qoRtpTmecaeGkYrkNoybLKuwbw/ZO+Dn2xi81CaUKB5wTCHkHFBDo2HfvyJxmDb1K0z8ntw==","signatures":[{"sig":"MEUCIFTfWYmNRrC/GOzITrRDhHKok7NVGiaSt4TzGsdCbN3KAiEAwrp+pX8qias21Nl2/6CyBTlk9X3rj/92UgeiacFWOu4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":343929},"type":"module","types":"./dist/index.d.ts","module":"./dist/hypermarkdown.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/hypermarkdown.js"},"./styles.css":"./dist/hypermarkdown.css","./plugins/cjk":{"types":"./dist/lib/plugins/cjk.d.ts","import":"./dist/plugins/cjk.js"},"./plugins/code":{"types":"./dist/lib/plugins/code.d.ts","import":"./dist/plugins/code.js"},"./plugins/math":{"types":"./dist/lib/plugins/math.d.ts","import":"./dist/plugins/math.js"},"./plugins/mermaid":{"types":"./dist/lib/plugins/mermaid.d.ts","import":"./dist/plugins/mermaid.js"}},"scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -b && vite build && npm run verify:client-boundary && npm run build:css","test:ui":"vitest run tests/ui","version":"npm --prefix website install --package-lock-only --ignore-scripts && git add website/package-lock.json","test:api":"vitest run tests/api tests/plugins","benchmark":"node benchmarks/run.js --runs=5 --warmup=1","build:css":"node scripts/build-css.mjs","test:unit":"vitest run --config vitest.unit.config.ts","typecheck":"tsc -b && npm run typecheck:react18 && npm run typecheck:react19","website:dev":"npm run website:benchmarks && npm --prefix website start","test:coverage":"vitest run --coverage","test:security":"vitest run tests/security","website:build":"npm run website:benchmarks && npm --prefix website run build","prepublishOnly":"npm run build","test:streaming":"vitest run tests/streaming","bundle-analyzer":"vite-bundle-visualizer","test:unit:watch":"vitest --config vitest.unit.config.ts","website:preview":"npm --prefix website run serve -- --port 3000","test:correctness":"vitest run tests/correctness","typecheck:react18":"tsc -p tsconfig.react18.json","typecheck:react19":"tsc -p tsconfig.react19.json","test:coverage:unit":"vitest run --config vitest.unit.config.ts --coverage","website:benchmarks":"node website/scripts/generate-benchmarks.mjs","verify:client-boundary":"node scripts/verify-client-boundary.mjs","bundle-analyzer-network":"vite-bundle-visualizer -t network","bundle-analyzer-sunburst":"vite-bundle-visualizer -t sunburst"},"_npmUser":{"name":"olibaron","email":"olivier@airwave.io"},"repository":{"url":"git+https://github.com/Aeven-AI/HyperMarkdown.git","type":"git"},"_npmVersion":"11.19.0","description":"Ridiculously fast Markdown for React and AI. Streaming-native renderer that caches settled code lines, table rows, and list items so growing LLM output does not re-parse finished work.","directories":{},"sideEffects":["*.css"],"_nodeVersion":"26.7.0","allowScripts":{"esbuild@0.28.2":true,"fsevents@2.3.3":true,"@swc/core@1.16.1":true,"@parcel/watcher@2.6.0":true},"dependencies":{"unified":"^11.0.5","tippy.js":"^6.3.1","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","rehype-react":"^8.0.0","remark-parse":"^11.0.0","remark-rehype":"^11.1.2","rehype-sanitize":"^6.0.0","unist-util-visit":"^5.0.0","hast-util-to-jsx-runtime":"^2.3.6","unist-util-visit-parents":"^6.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sass":"^1.103.1","vite":"^7.1.7","jsdom":"^26.1.0","katex":"^0.16.25","react":"^18.3.1","vfile":"^6.0.3","eslint":"^9.36.0","vitest":"^4.1.8","globals":"^16.4.0","mermaid":"^11.12.0","react-dom":"^18.3.1","@eslint/js":"^9.36.0","typescript":"~5.8.3","@types/hast":"^3.0.4","@types/node":"^22.10.2","remark-math":"^6.0.0","@types/react":"~18.3.1","@types/unist":"^3.0.3","rehype-katex":"^7.0.1","types-react-18":"npm:@types/react@^18.3.1","types-react-19":"npm:@types/react@^19.2.0","vite-plugin-dts":"^4.5.4","@types/react-dom":"~18.3.0","rehype-highlight":"^7.0.2","typescript-eslint":"^8.44.0","@vitest/coverage-v8":"^4.1.8","remark-cjk-friendly":"^2.3.1","vite-bundle-visualizer":"^1.2.1","@vitejs/plugin-react-swc":"^4.1.0","eslint-plugin-react-hooks":"^5.2.0","eslint-plugin-react-refresh":"^0.4.20"},"peerDependencies":{"katex":"^0.16.25","react":">=18","mermaid":"^11.12.0","react-dom":">=18","remark-math":"^6.0.0","rehype-katex":"^7.0.1","rehype-highlight":"^7.0.2","remark-cjk-friendly":"^2.3.1"},"peerDependenciesMeta":{"katex":{"optional":true},"mermaid":{"optional":true},"remark-math":{"optional":true},"rehype-katex":{"optional":true},"rehype-highlight":{"optional":true},"remark-cjk-friendly":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hypermarkdown_0.4.0_1788344447126_0.9305191229991703","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@aeven-ai/hypermarkdown","version":"0.4.1","keywords":["markdown","streaming","react","llm","renderer","gfm","katex","mermaid"],"author":{"name":"Aeven"},"license":"MIT","_id":"@aeven-ai/hypermarkdown@0.4.1","maintainers":[{"name":"olibaron","email":"olivier@airwave.io"}],"homepage":"https://aeven-ai.github.io/HyperMarkdown/","bugs":{"url":"https://github.com/Aeven-AI/HyperMarkdown/issues"},"dist":{"shasum":"f3eb66014a54dfbdb2a0548070690736c94b0a1a","tarball":"https://registry.npmjs.org/@aeven-ai/hypermarkdown/-/hypermarkdown-0.4.1.tgz","fileCount":72,"integrity":"sha512-J4sG+VewCdms4CoLA3HUND8wlDD8mtWXclWEEkRgPrifOddlQCazt+VrLO/7fX2ShszeS2s/5a79imiLet2OWg==","signatures":[{"sig":"MEUCIQDRZN3iczDv2aLY4ZbFZAmUm9fcR/WeJWbWw5TWf3xgGQIgQDvE+DL1yPULKxT9j2wDY/Q3DGMzmFo7Wwct93bQQIA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":348417},"type":"module","types":"./dist/index.d.ts","module":"./dist/hypermarkdown.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/hypermarkdown.js"},"./styles.css":"./dist/hypermarkdown.css","./plugins/cjk":{"types":"./dist/lib/plugins/cjk.d.ts","import":"./dist/plugins/cjk.js"},"./plugins/code":{"types":"./dist/lib/plugins/code.d.ts","import":"./dist/plugins/code.js"},"./plugins/math":{"types":"./dist/lib/plugins/math.d.ts","import":"./dist/plugins/math.js"},"./plugins/mermaid":{"types":"./dist/lib/plugins/mermaid.d.ts","import":"./dist/plugins/mermaid.js"}},"scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -b && vite build && npm run verify:client-boundary && npm run build:css","test:ui":"vitest run tests/ui","version":"npm --prefix website install --package-lock-only --ignore-scripts && git add website/package-lock.json","test:api":"vitest run tests/api tests/plugins","benchmark":"node benchmarks/run.js --runs=5 --warmup=1","build:css":"node scripts/build-css.mjs","test:unit":"vitest run --config vitest.unit.config.ts","typecheck":"tsc -b && npm run typecheck:react18 && npm run typecheck:react19","website:dev":"npm run build && npm run website:benchmarks && npm --prefix website start","test:coverage":"vitest run --coverage","test:security":"vitest run tests/security","website:build":"npm run website:benchmarks && npm --prefix website run build","prepublishOnly":"npm run build","test:streaming":"vitest run tests/streaming","bundle-analyzer":"vite-bundle-visualizer","test:unit:watch":"vitest --config vitest.unit.config.ts","website:preview":"npm --prefix website run serve -- --port 3000","test:correctness":"vitest run tests/correctness","typecheck:react18":"tsc -p tsconfig.react18.json","typecheck:react19":"tsc -p tsconfig.react19.json","test:coverage:unit":"vitest run --config vitest.unit.config.ts --coverage","website:benchmarks":"node website/scripts/generate-benchmarks.mjs","verify:client-boundary":"node scripts/verify-client-boundary.mjs","bundle-analyzer-network":"vite-bundle-visualizer -t network","bundle-analyzer-sunburst":"vite-bundle-visualizer -t sunburst"},"_npmUser":{"name":"olibaron","email":"olivier@airwave.io"},"repository":{"url":"git+https://github.com/Aeven-AI/HyperMarkdown.git","type":"git"},"_npmVersion":"11.19.0","description":"Ridiculously fast Markdown for React and AI. Streaming-native renderer that caches settled code lines, table rows, and list items so growing LLM output does not re-parse finished work.","directories":{},"sideEffects":["*.css"],"_nodeVersion":"26.7.0","allowScripts":{"esbuild@0.28.2":true,"fsevents@2.3.3":true,"@swc/core@1.16.1":true,"@parcel/watcher@2.6.0":true},"dependencies":{"unified":"^11.0.5","tippy.js":"^6.3.1","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","rehype-react":"^8.0.0","remark-parse":"^11.0.0","remark-rehype":"^11.1.2","rehype-sanitize":"^6.0.0","unist-util-visit":"^5.0.0","hast-util-to-jsx-runtime":"^2.3.6","unist-util-visit-parents":"^6.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sass":"^1.103.1","vite":"^7.1.7","jsdom":"^26.1.0","katex":"^0.16.25","react":"^18.3.1","vfile":"^6.0.3","eslint":"^9.36.0","vitest":"^4.1.8","globals":"^16.4.0","mermaid":"^11.12.0","react-dom":"^18.3.1","@eslint/js":"^9.36.0","typescript":"~5.8.3","@types/hast":"^3.0.4","@types/node":"^22.10.2","remark-math":"^6.0.0","@types/react":"~18.3.1","@types/unist":"^3.0.3","rehype-katex":"^7.0.1","types-react-18":"npm:@types/react@^18.3.1","types-react-19":"npm:@types/react@^19.2.0","vite-plugin-dts":"^4.5.4","@types/react-dom":"~18.3.0","rehype-highlight":"^7.0.2","typescript-eslint":"^8.44.0","@vitest/coverage-v8":"^4.1.8","remark-cjk-friendly":"^2.3.1","vite-bundle-visualizer":"^1.2.1","@vitejs/plugin-react-swc":"^4.1.0","eslint-plugin-react-hooks":"^5.2.0","eslint-plugin-react-refresh":"^0.4.20"},"peerDependencies":{"katex":"^0.16.25","react":">=18","mermaid":"^11.12.0","react-dom":">=18","remark-math":"^6.0.0","rehype-katex":"^7.0.1","rehype-highlight":"^7.0.2","remark-cjk-friendly":"^2.3.1"},"peerDependenciesMeta":{"katex":{"optional":true},"mermaid":{"optional":true},"remark-math":{"optional":true},"rehype-katex":{"optional":true},"rehype-highlight":{"optional":true},"remark-cjk-friendly":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hypermarkdown_0.4.1_1788349924735_0.5127634268030556","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"@aeven-ai/hypermarkdown","version":"0.4.2","keywords":["markdown","streaming","react","llm","renderer","gfm","katex","mermaid"],"author":{"name":"Aeven"},"license":"MIT","_id":"@aeven-ai/hypermarkdown@0.4.2","maintainers":[{"name":"olibaron","email":"olivier@airwave.io"}],"homepage":"https://aeven-ai.github.io/HyperMarkdown/","bugs":{"url":"https://github.com/Aeven-AI/HyperMarkdown/issues"},"dist":{"shasum":"6537508dd20f8a068191844d1118b7d6fb1fff01","tarball":"https://registry.npmjs.org/@aeven-ai/hypermarkdown/-/hypermarkdown-0.4.2.tgz","fileCount":72,"integrity":"sha512-zMFCpHidT1Sy2jE2gRMmHchPcOlcowfJQPzzOC7IA/nZTciSnqMchdUARbRv5a3mLi8ZG6PZpaD/8LeUrxw6PA==","signatures":[{"sig":"MEUCIQD6HAfAtjFIoia6zuW3FnhuhX25fpgOJw6sp4EMiPKstwIgBbLCqqzjv4if9O4F0kHJW0THZYCiYAdxD6cWIZNEuEw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":349328},"type":"module","types":"./dist/index.d.ts","module":"./dist/hypermarkdown.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/hypermarkdown.js"},"./styles.css":"./dist/hypermarkdown.css","./plugins/cjk":{"types":"./dist/lib/plugins/cjk.d.ts","import":"./dist/plugins/cjk.js"},"./plugins/code":{"types":"./dist/lib/plugins/code.d.ts","import":"./dist/plugins/code.js"},"./plugins/math":{"types":"./dist/lib/plugins/math.d.ts","import":"./dist/plugins/math.js"},"./plugins/mermaid":{"types":"./dist/lib/plugins/mermaid.d.ts","import":"./dist/plugins/mermaid.js"}},"scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -b && vite build && npm run verify:client-boundary && npm run build:css","test:ui":"vitest run tests/ui","version":"npm --prefix website install --package-lock-only --ignore-scripts && git add website/package-lock.json","test:api":"vitest run tests/api tests/plugins","benchmark":"node benchmarks/run.js --runs=5 --warmup=1","build:css":"node scripts/build-css.mjs","test:unit":"vitest run --config vitest.unit.config.ts","typecheck":"tsc -b && npm run typecheck:react18 && npm run typecheck:react19","website:dev":"npm run build && npm run website:benchmarks && npm --prefix website start","test:coverage":"vitest run --coverage","test:security":"vitest run tests/security","website:build":"npm run website:benchmarks && npm --prefix website run build","prepublishOnly":"npm run build","test:streaming":"vitest run tests/streaming","bundle-analyzer":"vite-bundle-visualizer","test:unit:watch":"vitest --config vitest.unit.config.ts","website:preview":"npm --prefix website run serve -- --port 3000","test:correctness":"vitest run tests/correctness","typecheck:react18":"tsc -p tsconfig.react18.json","typecheck:react19":"tsc -p tsconfig.react19.json","test:coverage:unit":"vitest run --config vitest.unit.config.ts --coverage","website:benchmarks":"node website/scripts/generate-benchmarks.mjs","verify:client-boundary":"node scripts/verify-client-boundary.mjs","bundle-analyzer-network":"vite-bundle-visualizer -t network","bundle-analyzer-sunburst":"vite-bundle-visualizer -t sunburst"},"_npmUser":{"name":"olibaron","email":"olivier@airwave.io"},"repository":{"url":"git+https://github.com/Aeven-AI/HyperMarkdown.git","type":"git"},"_npmVersion":"11.19.0","description":"Ridiculously fast Markdown for React and AI. Streaming-native renderer that caches settled code lines, table rows, and list items so growing LLM output does not re-parse finished work.","directories":{},"sideEffects":["*.css"],"_nodeVersion":"26.7.0","allowScripts":{"esbuild@0.28.2":true,"fsevents@2.3.3":true,"@swc/core@1.16.1":true,"@parcel/watcher@2.6.0":true},"dependencies":{"unified":"^11.0.5","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","rehype-react":"^8.0.0","remark-parse":"^11.0.0","remark-rehype":"^11.1.2","rehype-sanitize":"^6.0.0","unist-util-visit":"^5.0.0","hast-util-to-jsx-runtime":"^2.3.6","unist-util-visit-parents":"^6.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sass":"^1.103.1","vite":"^7.1.7","jsdom":"^26.1.0","katex":"^0.16.25","react":"^18.3.1","vfile":"^6.0.3","eslint":"^9.36.0","vitest":"^4.1.8","globals":"^16.4.0","mermaid":"^11.12.0","react-dom":"^18.3.1","@eslint/js":"^9.36.0","typescript":"~5.8.3","@types/hast":"^3.0.4","@types/node":"^22.10.2","remark-math":"^6.0.0","@types/react":"~18.3.1","@types/unist":"^3.0.3","rehype-katex":"^7.0.1","types-react-18":"npm:@types/react@^18.3.1","types-react-19":"npm:@types/react@^19.2.0","vite-plugin-dts":"^4.5.4","@types/react-dom":"~18.3.0","rehype-highlight":"^7.0.2","typescript-eslint":"^8.44.0","@vitest/coverage-v8":"^4.1.8","remark-cjk-friendly":"^2.3.1","vite-bundle-visualizer":"^1.2.1","@vitejs/plugin-react-swc":"^4.1.0","eslint-plugin-react-hooks":"^5.2.0","eslint-plugin-react-refresh":"^0.4.20"},"peerDependencies":{"katex":"^0.16.25","react":">=18","mermaid":"^11.12.0","tippy.js":"^6.3.1","react-dom":">=18","remark-math":"^6.0.0","rehype-katex":"^7.0.1","rehype-highlight":"^7.0.2","remark-cjk-friendly":"^2.3.1"},"peerDependenciesMeta":{"katex":{"optional":true},"mermaid":{"optional":true},"tippy.js":{"optional":true},"remark-math":{"optional":true},"rehype-katex":{"optional":true},"rehype-highlight":{"optional":true},"remark-cjk-friendly":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hypermarkdown_0.4.2_1788865856170_0.6428786623292149","host":"s3://npm-registry-packages-npm-production"}},"0.4.3":{"name":"@aeven-ai/hypermarkdown","version":"0.4.3","keywords":["markdown","streaming","react","llm","renderer","gfm","katex","mermaid"],"author":{"name":"Aeven"},"license":"MIT","_id":"@aeven-ai/hypermarkdown@0.4.3","maintainers":[{"name":"olibaron","email":"olivier@airwave.io"}],"homepage":"https://aeven-ai.github.io/HyperMarkdown/","bugs":{"url":"https://github.com/Aeven-AI/HyperMarkdown/issues"},"dist":{"shasum":"f35dd12f40c3b91d04ea6b235d0e020e9df3ed0d","tarball":"https://registry.npmjs.org/@aeven-ai/hypermarkdown/-/hypermarkdown-0.4.3.tgz","fileCount":72,"integrity":"sha512-5idlsFbTZqrsW2M0n5nEIScNUZvu76fnMg2JFo1KhU8ttCDBmDelphQK3YGML3Eyso3Gp6bgRGf4dGqZXbbo5Q==","signatures":[{"sig":"MEYCIQC5SlXcOw6kRTEa4vY4rD/sBwJz3Cc3+xZmTntNLfATQgIhAPWN4VLrL8TDrNCfooZGTTh8IPhAc9n4cGWf0bcSkw6V","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":351127},"type":"module","types":"./dist/index.d.ts","module":"./dist/hypermarkdown.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/hypermarkdown.js"},"./styles.css":"./dist/hypermarkdown.css","./plugins/cjk":{"types":"./dist/lib/plugins/cjk.d.ts","import":"./dist/plugins/cjk.js"},"./plugins/code":{"types":"./dist/lib/plugins/code.d.ts","import":"./dist/plugins/code.js"},"./plugins/math":{"types":"./dist/lib/plugins/math.d.ts","import":"./dist/plugins/math.js"},"./plugins/mermaid":{"types":"./dist/lib/plugins/mermaid.d.ts","import":"./dist/plugins/mermaid.js"}},"scripts":{"lint":"eslint .","test":"vitest run","build":"tsc -b && vite build && npm run verify:client-boundary && npm run build:css","test:ui":"vitest run tests/ui","version":"npm --prefix website install --package-lock-only --ignore-scripts && git add website/package-lock.json","test:api":"vitest run tests/api tests/plugins","benchmark":"node benchmarks/run.js --runs=5 --warmup=1","build:css":"node scripts/build-css.mjs","test:unit":"vitest run --config vitest.unit.config.ts","typecheck":"tsc -b && npm run typecheck:react18 && npm run typecheck:react19","website:dev":"npm run build && npm run website:benchmarks && npm --prefix website start","test:coverage":"vitest run --coverage","test:security":"vitest run tests/security","website:build":"npm run website:benchmarks && npm --prefix website run build","prepublishOnly":"npm run build","test:streaming":"vitest run tests/streaming","bundle-analyzer":"vite-bundle-visualizer","test:unit:watch":"vitest --config vitest.unit.config.ts","website:preview":"npm --prefix website run serve -- --port 3000","test:correctness":"vitest run tests/correctness","typecheck:react18":"tsc -p tsconfig.react18.json","typecheck:react19":"tsc -p tsconfig.react19.json","test:coverage:unit":"vitest run --config vitest.unit.config.ts --coverage","website:benchmarks":"node website/scripts/generate-benchmarks.mjs","verify:client-boundary":"node scripts/verify-client-boundary.mjs","bundle-analyzer-network":"vite-bundle-visualizer -t network","bundle-analyzer-sunburst":"vite-bundle-visualizer -t sunburst"},"_npmUser":{"name":"olibaron","email":"olivier@airwave.io"},"repository":{"url":"git+https://github.com/Aeven-AI/HyperMarkdown.git","type":"git"},"_npmVersion":"11.19.0","description":"Ridiculously fast Markdown for React and AI. Streaming-native renderer that caches settled code lines, table rows, and list items so growing LLM output does not re-parse finished work.","directories":{},"sideEffects":["*.css"],"_nodeVersion":"26.7.0","allowScripts":{"esbuild@0.28.2":true,"fsevents@2.3.3":true,"@swc/core@1.16.1":true,"@parcel/watcher@2.6.0":true},"dependencies":{"unified":"^11.0.5","rehype-raw":"^7.0.0","remark-gfm":"^4.0.1","rehype-react":"^8.0.0","remark-parse":"^11.0.0","remark-rehype":"^11.1.2","rehype-sanitize":"^6.0.0","unist-util-visit":"^5.0.0","hast-util-to-jsx-runtime":"^2.3.6","unist-util-visit-parents":"^6.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"sass":"^1.103.1","vite":"^7.1.7","jsdom":"^26.1.0","katex":"^0.16.25","react":"^18.3.1","vfile":"^6.0.3","eslint":"^9.36.0","vitest":"^4.1.8","globals":"^16.4.0","mermaid":"^11.12.0","react-dom":"^18.3.1","@eslint/js":"^9.36.0","typescript":"~5.8.3","@types/hast":"^3.0.4","@types/node":"^22.10.2","remark-math":"^6.0.0","@types/react":"~18.3.1","@types/unist":"^3.0.3","rehype-katex":"^7.0.1","types-react-18":"npm:@types/react@^18.3.1","types-react-19":"npm:@types/react@^19.2.0","vite-plugin-dts":"^4.5.4","@types/react-dom":"~18.3.0","rehype-highlight":"^7.0.2","typescript-eslint":"^8.44.0","@vitest/coverage-v8":"^4.1.8","remark-cjk-friendly":"^2.3.1","vite-bundle-visualizer":"^1.2.1","@vitejs/plugin-react-swc":"^4.1.0","eslint-plugin-react-hooks":"^5.2.0","eslint-plugin-react-refresh":"^0.4.20"},"peerDependencies":{"katex":"^0.16.25","react":">=18","mermaid":"^11.12.0","tippy.js":"^6.3.1","react-dom":">=18","remark-math":"^6.0.0","rehype-katex":"^7.0.1","rehype-highlight":"^7.0.2","remark-cjk-friendly":"^2.3.1"},"peerDependenciesMeta":{"katex":{"optional":true},"mermaid":{"optional":true},"tippy.js":{"optional":true},"remark-math":{"optional":true},"rehype-katex":{"optional":true},"rehype-highlight":{"optional":true},"remark-cjk-friendly":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/hypermarkdown_0.4.3_1789067265097_0.7322562235663559","host":"s3://npm-registry-packages-npm-production"}},"0.4.4":{"name":"@aeven-ai/hypermarkdown","version":"0.4.4","description":"Ridiculously fast Markdown for React and AI. Streaming-native renderer that caches settled code lines, table rows, and list items so growing LLM output does not re-parse finished work.","author":{"name":"Aeven"},"repository":{"type":"git","url":"git+https://github.com/Aeven-AI/HyperMarkdown.git"},"homepage":"https://aeven-ai.github.io/HyperMarkdown/","bugs":{"url":"https://github.com/Aeven-AI/HyperMarkdown/issues"},"type":"module","license":"MIT","publishConfig":{"access":"public"},"module":"./dist/hypermarkdown.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/hypermarkdown.js"},"./plugins/math":{"types":"./dist/lib/plugins/math.d.ts","import":"./dist/plugins/math.js"},"./plugins/code":{"types":"./dist/lib/plugins/code.d.ts","import":"./dist/plugins/code.js"},"./plugins/mermaid":{"types":"./dist/lib/plugins/mermaid.d.ts","import":"./dist/plugins/mermaid.js"},"./styles.css":"./dist/hypermarkdown.css","./plugins/cjk":{"types":"./dist/lib/plugins/cjk.d.ts","import":"./dist/plugins/cjk.js"}},"sideEffects":["*.css"],"allowScripts":{"@parcel/watcher@2.6.0":true,"@swc/core@1.16.1":true,"esbuild@0.28.2":true,"fsevents@2.3.3":true},"scripts":{"benchmark":"node benchmarks/run.js --runs=5 --warmup=1","build":"tsc -b && vite build && npm run verify:client-boundary && npm run build:css","website:benchmarks":"node website/scripts/generate-benchmarks.mjs","website:dev":"npm run build && npm run website:benchmarks && npm --prefix website start","website:build":"npm run website:benchmarks && npm --prefix website run build","website:preview":"npm --prefix website run serve -- --port 3000","typecheck":"tsc -b && npm run typecheck:react18 && npm run typecheck:react19","typecheck:react18":"tsc -p tsconfig.react18.json","typecheck:react19":"tsc -p tsconfig.react19.json","test":"vitest run","test:correctness":"vitest run tests/correctness","test:streaming":"vitest run tests/streaming","test:ui":"vitest run tests/ui","test:api":"vitest run tests/api tests/plugins","test:security":"vitest run tests/security","test:unit":"vitest run --config vitest.unit.config.ts","test:unit:watch":"vitest --config vitest.unit.config.ts","test:coverage":"vitest run --coverage","test:coverage:unit":"vitest run --config vitest.unit.config.ts --coverage","lint":"eslint .","verify:client-boundary":"node scripts/verify-client-boundary.mjs","build:css":"node scripts/build-css.mjs","bundle-analyzer":"vite-bundle-visualizer","bundle-analyzer-network":"vite-bundle-visualizer -t network","bundle-analyzer-sunburst":"vite-bundle-visualizer -t sunburst","version":"npm --prefix website install --package-lock-only --ignore-scripts && git add website/package-lock.json","prepublishOnly":"npm run build"},"peerDependencies":{"katex":"^0.16.25","mermaid":"^11.12.0","react":">=18","react-dom":">=18","rehype-highlight":"^7.0.2","rehype-katex":"^7.0.1","remark-cjk-friendly":"^2.3.1","remark-math":"^6.0.0","tippy.js":"^6.3.1"},"dependencies":{"hast-util-to-jsx-runtime":"^2.3.6","rehype-raw":"^7.0.0","rehype-react":"^8.0.0","rehype-sanitize":"^6.0.0","remark-gfm":"^4.0.1","remark-parse":"^11.0.0","remark-rehype":"^11.1.2","unified":"^11.0.5","unist-util-visit":"^5.0.0","unist-util-visit-parents":"^6.0.2"},"devDependencies":{"@eslint/js":"^9.36.0","@types/hast":"^3.0.4","@types/node":"^22.10.2","@types/react":"~18.3.1","@types/react-dom":"~18.3.0","@types/unist":"^3.0.3","@vitejs/plugin-react-swc":"^4.1.0","@vitest/coverage-v8":"^4.1.8","eslint":"^9.36.0","eslint-plugin-react-hooks":"^5.2.0","eslint-plugin-react-refresh":"^0.4.20","globals":"^16.4.0","jsdom":"^26.1.0","katex":"^0.16.25","mermaid":"^11.12.0","react":"^18.3.1","react-dom":"^18.3.1","rehype-highlight":"^7.0.2","rehype-katex":"^7.0.1","remark-cjk-friendly":"^2.3.1","remark-math":"^6.0.0","sass":"^1.103.1","tippy.js":"^6.3.1","types-react-18":"npm:@types/react@^18.3.1","types-react-19":"npm:@types/react@^19.2.0","typescript":"~5.8.3","typescript-eslint":"^8.44.0","vfile":"^6.0.3","vite":"^7.1.7","vite-bundle-visualizer":"^1.2.1","vite-plugin-dts":"^4.5.4","vitest":"^4.1.8"},"keywords":["markdown","streaming","react","llm","renderer","gfm","katex","mermaid"],"peerDependenciesMeta":{"katex":{"optional":true},"mermaid":{"optional":true},"rehype-katex":{"optional":true},"rehype-highlight":{"optional":true},"remark-math":{"optional":true},"remark-cjk-friendly":{"optional":true},"tippy.js":{"optional":true}},"_id":"@aeven-ai/hypermarkdown@0.4.4","_nodeVersion":"26.7.0","_npmVersion":"11.19.0","dist":{"integrity":"sha512-Bx5zvBCP0hMPno4umzx5QNqblYt3X5CwQhplaGby3jx2+L7wOZ4iaN9ey1ST1YVwxEsNFObWdUxCIk9S/rYv4g==","shasum":"5d68587b98b02737394544427693fd29ef459ffb","tarball":"https://registry.npmjs.org/@aeven-ai/hypermarkdown/-/hypermarkdown-0.4.4.tgz","fileCount":72,"unpackedSize":355041,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDzVZI43dJ6T8cc01M1w8l60FEBpPurLumpPx0NoV2WgwIgJjoeP0t5QeM8rQjtwNKyphoNFS9lTHHZVfhIGmFklYo="}]},"_npmUser":{"name":"olibaron","email":"olivier@airwave.io"},"directories":{},"maintainers":[{"name":"olibaron","email":"olivier@airwave.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/hypermarkdown_0.4.4_1789120120469_0.4292021437412341"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-28T07:59:27.370Z","modified":"2026-09-11T09:48:40.787Z","0.1.0":"2026-08-28T07:59:27.733Z","0.1.1":"2026-08-28T08:58:26.479Z","0.1.2":"2026-08-28T17:50:37.161Z","0.1.3":"2026-08-28T18:32:50.888Z","0.1.4":"2026-08-28T19:29:28.362Z","0.1.5":"2026-08-31T10:30:04.020Z","0.1.8":"2026-09-01T11:01:49.832Z","0.1.6":"2026-09-01T11:11:18.401Z","0.1.7":"2026-09-01T11:12:00.958Z","0.1.9":"2026-09-01T16:37:01.007Z","0.2.0":"2026-09-01T17:18:08.163Z","0.2.1":"2026-09-01T17:42:41.068Z","0.3.0":"2026-09-01T19:11:37.121Z","0.4.0":"2026-09-02T10:20:47.274Z","0.4.1":"2026-09-02T11:52:04.869Z","0.4.2":"2026-09-08T11:10:56.307Z","0.4.3":"2026-09-10T19:07:45.272Z","0.4.4":"2026-09-11T09:48:40.611Z"},"bugs":{"url":"https://github.com/Aeven-AI/HyperMarkdown/issues"},"author":{"name":"Aeven"},"license":"MIT","homepage":"https://aeven-ai.github.io/HyperMarkdown/","keywords":["markdown","streaming","react","llm","renderer","gfm","katex","mermaid"],"repository":{"type":"git","url":"git+https://github.com/Aeven-AI/HyperMarkdown.git"},"description":"Ridiculously fast Markdown for React and AI. Streaming-native renderer that caches settled code lines, table rows, and list items so growing LLM output does not re-parse finished work.","maintainers":[{"name":"olibaron","email":"olivier@airwave.io"}],"readme":"# HyperMarkdown\n\n[![CI](https://github.com/Aeven-AI/HyperMarkdown/actions/workflows/ci.yml/badge.svg)](https://github.com/Aeven-AI/HyperMarkdown/actions/workflows/ci.yml)\n[![npm](https://img.shields.io/npm/v/@aeven-ai/hypermarkdown)](https://www.npmjs.com/package/@aeven-ai/hypermarkdown)\n[![site](https://img.shields.io/badge/site-aeven--ai.github.io-111113)](https://aeven-ai.github.io/HyperMarkdown/)\n\n### Ridiculously fast Markdown for React and AI.\n\n**Parse the change. Not the conversation.**\n\nHyperMarkdown is a streaming-native Markdown renderer built for LLM output.\nIt caches settled content down to code lines, table rows, and list items, so\ngrowing responses do not keep paying to parse and render work that is already\nfinished.\n\n## Performance\n\n**1.8×–11.0× faster than the nearest streaming renderer across our benchmark\nsuite.**\n\n| Workload | HyperMarkdown | Markstream | Streamdown | DeepSeek Harness | react-markdown |\n| --- | ---: | ---: | ---: | ---: | ---: |\n| Large code block | **216 ms** | 769 ms | 3,242 ms | 4,416 ms | 2,054 ms |\n| Mixed prose | **140 ms** | 313 ms | 559 ms | 249 ms | 2,629 ms |\n| Captured AI code stream (`real-code-os`) | **533 ms** | 4,417 ms | 12,511 ms | 14,621 ms | 8,008 ms |\n| Captured AI table stream (`real-table-head`) | **666 ms** | 4,948 ms | 11,621 ms | 19,644 ms | 10,236 ms |\n| Large table | **846 ms** | 9,276 ms | 33,142 ms | 55,918 ms | 29,747 ms |\n\nThe captured model fixtures are not generated stress cases: their content is\nreal AI output, replayed in controlled 8-character frames. HyperMarkdown\nrenders the code stream in **533 ms** versus **4,417 ms** for the next closest\nstreaming renderer, and the table stream in **666 ms** versus **4,948 ms**.\n\nOn a large streaming table, HyperMarkdown completes the workload in **under\none second**.\n\n- Streamdown: **33 seconds**\n- DeepSeek Harness strategy: **56 seconds**\n- react-markdown: **30 seconds**\n\nSame Markdown. Same stream. Very different architecture.\n\n> Production React benchmark on an Apple M2 Max, including chunk processing\n> and synchronous render/commit. Absolute timings vary; the ratios are the\n> useful comparison. HyperMarkdown was refreshed on 2026-09-01; comparison\n> rows carry over from the same-machine, same-settings run on 2026-08-31.\n\n[Read the methodology](./benchmarks/README.md) ·\n[View the full benchmark results](./benchmarks/results/latest.md)\n\n## Why is it so fast?\n\nMost streaming Markdown renderers optimize at the document or block level.\nHyperMarkdown goes further.\n\n```text\nTraditional streaming renderer\n\nnew token\n   ↓\ngrowing active block\n   ↓\nparse the active block again\n   ↓\nrender again\n```\n\nHyperMarkdown:\n\n```text\nnew token\n   ↓\nactive block\n   │\n   ├── settled code lines    → cached\n   ├── settled table rows    → cached\n   ├── settled list items    → cached\n   └── changing frontier     → parse\n```\n\nA 1,000-line code block does not become a 1,000-line parsing problem every\ntime another token arrives.\n\n**Completed work stays completed.**\n\n## Built for AI streaming\n\n- Sub-block caching for code, tables, and lists\n- Streaming-safe handling of incomplete Markdown\n- GFM tables, task lists, autolinks, and footnotes\n- Reasoning blocks written as `<think>`, `<thinking>`, or `<reasoning>`\n- KaTeX math\n- Mermaid diagrams\n- Syntax highlighting\n- Raw HTML with sanitization\n- React 18 and React 19\n- SSR and hydration, including a Next.js App Router client boundary\n- Lightweight core with heavy features loaded as optional plugins\n- Production integration with DeepSeek Harness / DSH architecture\n\n## Used by Æven\n\nHyperMarkdown is the official Markdown component used by Æven and integrates\nwith the DeepSeek Harness (DSH) architecture. It was built around the demands\nof an agent harness—long answers, dense code, wide tables, reasoning traces,\nand many small deltas—not adapted from a finished-document renderer after the\nfact.\n\nThe captured AI workloads in the benchmark suite come from that environment.\nThey exercise the content shapes a renderer encounters in a real model\nresponse, with controlled chunk sizes that keep comparisons reproducible.\n\n## Install\n\n```bash\nnpm install @aeven-ai/hypermarkdown\n```\n\nReact 18 or 19 is required as a peer dependency.\n\nImport the component stylesheet once in your application entry point:\n\n```tsx\nimport \"@aeven-ai/hypermarkdown/styles.css\";\n```\n\nIf you render the code or diagram toolbars, tippy.js — an optional peer — also\nneeds its stylesheet, the same way KaTeX does:\n\n```tsx\nimport \"tippy.js/dist/tippy.css\";\n```\n\nThen import the component:\n\n```tsx\nimport {\n  HyperMarkdown,\n  type HyperMarkdownHandle,\n} from \"@aeven-ai/hypermarkdown\";\n```\n\n## Quick start\n\n### Finished Markdown\n\nUse the `md` prop when the complete document already exists:\n\n```tsx\n<HyperMarkdown md={markdown} />\n```\n\nUpdating `md` replaces the document. This mode works naturally for stored\nmessages, previews, and server-rendered content.\n\n### Streaming Markdown\n\nMount one renderer for the active response and write each incoming **delta**\nto its imperative handle:\n\n```tsx\nimport { useRef } from \"react\";\nimport {\n  HyperMarkdown,\n  type HyperMarkdownHandle,\n} from \"@aeven-ai/hypermarkdown\";\n\nfunction Chat() {\n  const renderer = useRef<HyperMarkdownHandle>(null);\n\n  async function generate(prompt: string) {\n    // Reuse the mounted component for a new response.\n    renderer.current?.reset();\n\n    const deltas = await createResponseStream(prompt);\n\n    try {\n      for await (const delta of deltas) {\n        renderer.current?.write(delta);\n      }\n    } finally {\n      // Flush the final open paragraph, fence, list, table, or reasoning block.\n      renderer.current?.write(\"\", true);\n    }\n  }\n\n  return (\n    <HyperMarkdown\n      ref={renderer}\n      streaming\n      animation\n    />\n  );\n}\n```\n\n`createResponseStream()` above represents your SDK or transport. It only needs\nto yield the text fragments produced since the previous event.\n\n### The delta contract\n\n`write()` appends. Pass the new fragment exactly once:\n\n```tsx\nrenderer.current?.write(delta);     // correct\nrenderer.current?.write(fullText);  // wrong: repeats everything already written\n```\n\nWhen the stream ends, finalize it exactly once. Either form is valid:\n\n```tsx\nrenderer.current?.write(\"\", true);          // separate finalization\nrenderer.current?.write(lastDelta, true);   // final delta and finalization\n```\n\nFinalization matters even when the visible text looks complete: it settles the\nactive frontier and lets the renderer finish incomplete-block bookkeeping.\n\nBefore using the same mounted component for another response, call `reset()`.\nKeep the component and its `ref` mounted during a response; changing its React\n`key` creates a new, empty renderer.\n\n### If your source emits cumulative snapshots\n\nSome APIs emit `\"Hello\"`, then `\"Hello world\"`, rather than `\"Hello\"`, then\n`\" world\"`. Convert those snapshots to deltas at the boundary:\n\n```tsx\nlet previous = \"\";\n\nfunction startSnapshotStream() {\n  previous = \"\";\n  renderer.current?.reset();\n}\n\nfunction writeSnapshot(next: string, final = false) {\n  const handle = renderer.current;\n  if (!handle) return;\n\n  if (!next.startsWith(previous)) {\n    // The provider revised an earlier prefix. Rebuild from the new snapshot.\n    handle.reset();\n    previous = \"\";\n  }\n\n  handle.write(next.slice(previous.length), final);\n  previous = next;\n}\n```\n\nCall `startSnapshotStream()` before the first snapshot of each response.\n\nDo not put the growing Markdown string in React state just to feed it back as a\nprop on every token. In streaming mode, HyperMarkdown owns that buffer so your\ncomponent tree does not have to.\n\n## Next.js\n\nHyperMarkdown supports Next.js server rendering and hydration. Its public\ncomponent entry includes `\"use client\"`, so an App Router Server Component can\nimport it directly. The Client Component is still prerendered into the initial\nHTML and hydrated in the browser.\n\nImport the stylesheet once in the root layout:\n\n```tsx\n// app/layout.tsx\nimport \"@aeven-ai/hypermarkdown/styles.css\";\n\nexport default function RootLayout({ children }: { children: React.ReactNode }) {\n  return (\n    <html lang=\"en\">\n      <body>{children}</body>\n    </html>\n  );\n}\n```\n\nThen render finished Markdown from a Server Component:\n\n```tsx\n// app/page.tsx\nimport { HyperMarkdown } from \"@aeven-ai/hypermarkdown\";\n\nexport default async function Page() {\n  const markdown = await loadMarkdown();\n  return <HyperMarkdown md={markdown} />;\n}\n```\n\nThe `md` prop is serializable and can cross the Server Component boundary.\nCreate plugins, component overrides, refs, and callbacks inside a Client\nComponent because they contain functions. Streaming through the imperative\nhandle also belongs in a Client Component.\n\nHyperMarkdown does not normally need `dynamic(..., { ssr: false })`; disabling\nSSR removes the rendered Markdown from the initial HTML.\n\nSee the full [SSR, hydration, and Next.js guide](https://aeven-ai.github.io/HyperMarkdown/docs/ssr)\nfor App Router plugins and streaming, Pages Router SSR, and hydration-mismatch\nguidance.\n\n## Migrating\n\n### From react-markdown or another prop-based renderer\n\nFor finished documents, the migration is a component swap:\n\n```tsx\n// Before\n<ReactMarkdown>{markdown}</ReactMarkdown>\n\n// After\n<HyperMarkdown md={markdown} />\n```\n\nFor streaming, the architectural change is more important. A typical\nprop-based loop rebuilds an accumulated string and reparses it on every chunk:\n\n```tsx\n// Before: full document goes back through React on every delta.\nconst [markdown, setMarkdown] = useState(\"\");\n\nfor await (const delta of stream) {\n  setMarkdown((current) => current + delta);\n}\n\n<ReactMarkdown>{markdown}</ReactMarkdown>\n```\n\nReplace that state loop with one stable `HyperMarkdown` instance:\n\n```tsx\n// After: only the new fragment enters the renderer.\nconst renderer = useRef<HyperMarkdownHandle>(null);\n\nfor await (const delta of stream) {\n  renderer.current?.write(delta);\n}\nrenderer.current?.write(\"\", true);\n\n<HyperMarkdown ref={renderer} streaming />\n```\n\nCommon migration mappings:\n\n| Previous pattern | HyperMarkdown |\n| --- | --- |\n| Markdown passed as `children` | `md={markdown}` for finished content |\n| Accumulated text prop updated per token | `write(delta)` with `streaming` |\n| Clear state before a new answer | `ref.current?.reset()` |\n| End-of-stream state flag | `write(\"\", true)` |\n| GFM remark plugin | Built in |\n| Custom element renderers | `components={{ ... }}` |\n| Math, highlighting, Mermaid | Optional `plugins` slots |\n| Raw HTML plugin | Built in; sanitized by default |\n\nHyperMarkdown does not accept arbitrary `remarkPlugins` or `rehypePlugins`\nthrough the component API. Use its typed feature plugins and component\noverrides; if you depend on a custom AST transform, verify that transform\nbefore replacing the old renderer.\n\n### From the legacy `MarkdownStream` export\n\n`MarkdownStream` remains exported for compatibility but is deprecated. Mount\n`HyperMarkdown`, hold a `HyperMarkdownHandle`, and replace direct engine calls\nwith `write(delta)`, `write(\"\", true)`, and `reset()`. The component owns the\nstore and subscribes React to it safely.\n\n## Optional plugins\n\nMath, syntax highlighting, diagrams, and CJK-friendly emphasis are optional.\nInstall only what your application uses:\n\n```bash\nnpm install katex remark-math rehype-katex\nnpm install rehype-highlight\nnpm install mermaid\nnpm install remark-cjk-friendly\n```\n\n```tsx\nimport { katexPlugin } from \"@aeven-ai/hypermarkdown/plugins/math\";\nimport { highlightPlugin } from \"@aeven-ai/hypermarkdown/plugins/code\";\nimport { mermaidPlugin } from \"@aeven-ai/hypermarkdown/plugins/mermaid\";\nimport { cjkPlugin } from \"@aeven-ai/hypermarkdown/plugins/cjk\";\nimport \"katex/dist/katex.min.css\";\n\n// Build this once. A new plugin object rebuilds the processing pipelines.\nconst plugins = {\n  math: katexPlugin(),\n  code: highlightPlugin(),\n  diagram: mermaidPlugin({ theme: \"neutral\", fontFamily: \"Inter\" }),\n  cjk: cjkPlugin(),\n};\n\n<HyperMarkdown md={markdown} plugins={plugins} />\n```\n\nEach missing plugin degrades gracefully:\n\n| Missing plugin | Behavior |\n| --- | --- |\n| `math` | `$x$` remains literal text |\n| `code` | Code blocks retain caching, controls, and line numbers but are not highlighted |\n| `diagram` | A `mermaid` fence renders as an ordinary code block |\n| `cjk` | Standard CommonMark emphasis rules apply |\n\nMermaid is dynamically imported. With `preload` off, loading starts when an\nopening Mermaid fence appears, overlapping the rest of the stream. Set\n`preload` when a view is very likely to contain diagrams and should begin the\ndownload on mount.\n\n## Incomplete Markdown\n\nLLM chunks end in inconvenient places. HyperMarkdown treats partial syntax as\na normal state, not an error:\n\n- Half-written links, autolinks, HTML tags, and math are withheld until safe\n  to render.\n- Emphasis resolves eagerly when the CommonMark delimiter rules make it\n  unambiguous.\n- Open code fences, tables, and lists render their stable content while the\n  unfinished frontier continues changing.\n- A finalized stream matches the whole-document parse across the correctness\n  fixture suite.\n\n## Reasoning blocks\n\nModel reasoning wrapped in `<think>`, `<thinking>`, or `<reasoning>` becomes a\ncollapsible block. It stays open while tokens arrive and collapses when the\nblock finishes.\n\n```markdown\n<think>\nChecking the constraints first.\n</think>\n\nThe answer is 42.\n```\n\nMarkdown inside the reasoning block is rendered normally. A partial opening\ntag such as `<thi` is withheld instead of flashing as text.\n\nTo place reasoning outside the answer container, provide a portal target:\n\n```tsx\nconst reasoning = useRef<HTMLDivElement>(null);\n\nreturn (\n  <>\n    <div ref={reasoning} />\n    <HyperMarkdown\n      ref={renderer}\n      streaming\n      reasoningTarget={() => reasoning.current}\n    />\n  </>\n);\n```\n\nSet `controls={{ reasoning: false }}` to render the content without the\ncollapsible wrapper. Override `translations.thinking` and\n`translations.thoughtFor` to localize its labels.\n\n## HTML and untrusted model output\n\nMarkdown produced by a model is untrusted input. HyperMarkdown defaults to\n`html=\"sanitize\"`: raw HTML is parsed, then cleaned before math, syntax\nhighlighting, diagrams, or animation run. Scripts, styles, iframes, forms, and\nevent-handler attributes are removed.\n\nLinks and images are checked separately. By default, `http`, `https`,\n`mailto`, and `tel` protocols are allowed, as are `data:` images.\n\nChoose the policy explicitly when needed:\n\n```tsx\n<HyperMarkdown md={markdown} html=\"literal\" />\n```\n\n| `html` mode | Behavior |\n| --- | --- |\n| `\"sanitize\"` | Default. Parse raw HTML and remove anything outside the schema. |\n| `\"literal\"` | Render raw HTML as visible text. Strongest option for untrusted output. |\n| `\"raw\"` | Parse without sanitization. Use only for content you control. |\n\nTo widen the default policy without disabling it:\n\n```tsx\n<HyperMarkdown\n  md={markdown}\n  allowedTags={{ mention: [\"data-user-id\"] }}\n  linkSafety={{ allowedLinkPrefixes: [\"https://docs.example.com/\"] }}\n/>\n```\n\n`sanitize={false}` is retained for compatibility and selects raw mode when\n`html` is not set. Prefer the clearer `html` prop in new code.\n\n## Styling\n\nThe shipped stylesheet is scoped under `.hypermarkdown`. Customize it with\nCSS variables rather than overriding internal selectors:\n\n```css\n.assistant-message {\n  --hm-font: Inter, sans-serif;\n  --hm-font-mono: \"Geist Mono\", monospace;\n  --hm-color: #171717;\n  --hm-background: #f5f5f5;\n  --hm-link-color: #2563eb;\n  --hm-radius: 16px;\n  --hm-max-width: 100%;\n}\n```\n\n```tsx\n<HyperMarkdown className=\"assistant-message\" md={markdown} />\n```\n\nThe root always receives `hypermarkdown`; `className` is added alongside it.\nKaTeX requires its own stylesheet when the math plugin is enabled.\n\n## Component overrides\n\nReplace rendered tags with stable React component references:\n\n```tsx\nconst components = {\n  a: AppLink,\n  img: ProxiedImage,\n  code: Code,\n};\n\n<HyperMarkdown md={markdown} components={components} />\n```\n\nHyperMarkdown already provides specialized renderers for links, images, code\nblocks, tables, and diagrams. An override wins over the built-in component.\nKeep the object and component functions stable—recreating them on every render\ncan remount rendered elements.\n\n## API\n\n### `HyperMarkdown` props\n\n| Prop | Type | Description |\n| --- | --- | --- |\n| `md` | `string` | Finished Markdown. Ignored while `streaming` is true. |\n| `streaming` | `boolean` | Receive content through the imperative handle. |\n| `animation` | `boolean` | Fade arriving words in. |\n| `plugins` | `PluginConfig` | Optional math, code, diagram, and CJK plugins. |\n| `preload` | `boolean` | Begin loading the configured diagram engine on mount. |\n| `components` | `RendererComponents` | Stable tag-to-component overrides. |\n| `html` | `\"sanitize\" \\| \"literal\" \\| \"raw\"` | Raw HTML policy. Defaults to `\"sanitize\"`. |\n| `allowedTags` | `Record<string, string[]>` | Additional sanitized tags and attributes. |\n| `linkSafety` | `LinkSafetyConfig` | Allowed URL protocols and prefixes. |\n| `reasoningTarget` | `HTMLElement \\| null \\| () => HTMLElement \\| null` | Optional portal target for reasoning. |\n| `controls` | `ControlsConfig` | Configure or hide reasoning, code, table, and diagram controls. Diagrams add `panZoom`. |\n| `translations` | `Partial<Translations>` | Override UI strings. |\n| `icons` | `Partial<IconMap>` | Override toolbar icons with inline SVG strings. |\n| `lineNumbers` | `boolean` | Show code line numbers. Defaults to `true`. |\n| `codeBlockMaxHeight` | `number \\| string` | Height at which code blocks scroll; numbers are pixels. |\n| `tableMaxHeight` | `number \\| string` | Height at which tables scroll; numbers are pixels. |\n| `preview` | `PreviewConfig` | Where a code block's HTML preview opens. Defaults to a page of its own. |\n| `scrollDown` | `() => void` | Runs after each committed update for host scroll management. |\n| `onFullscreenChange` | `(fullscreen: boolean) => void` | Reports code, table, or diagram fullscreen changes. |\n| `onAlert` | `(alert: HyperMarkdownAlert) => void` | Lets the host present block alerts. |\n| `className` | `string` | Additional class on the `.hypermarkdown` root. |\n\n### Diagram pan and zoom\n\nA diagram can be zoomed and panned in place, so a wide flowchart or a dense\nsequence diagram stays readable without opening it fullscreen. The toolbar\ncarries **Zoom in**, **Zoom out** and **Reset zoom and pan**. Dragging pans,\nby mouse, pen or touch, and holding **Ctrl** (or **⌘**) while scrolling zooms —\na trackpad pinch arrives as exactly that, so pinching zooms too.\n\nA plain scroll is left to the page. A diagram that swallowed the wheel would\ntrap the reader every time one passed under the cursor, and a document can be\nmostly diagram.\n\nIt is on by default. Turn it off and the diagram keeps its copy and fullscreen\nbuttons:\n\n```tsx\n<HyperMarkdown\n  md={markdown}\n  plugins={plugins}\n  controls={{ diagram: { copy: true, fullscreen: true, panZoom: false } }}\n/>\n```\n\n`panZoom` is the one control diagrams have that code blocks and tables do not,\nwhich is why `controls.diagram` takes a `DiagramControls` rather than the\n`BlockControls` the others use. Its three labels — `zoomIn`, `zoomOut` and\n`resetView` — and its three icons are overridable like any others through\n`translations` and `icons`.\n\n### HTML previews\n\nA code block holding HTML offers a **Preview** button. By default the block\nopens that HTML as a page of its own — a blob URL, so it is a real document\nwith a real address that reloads, inspects and views source like any other\npage, and runs in its own scope rather than the app's. Nothing is required of\nthe host: no route, no storage, no navigation of your own.\n\nIf the window cannot be opened — a blocked popup, or a host embedded without\n`allow-popups` — the block reports it through `onAlert` instead.\n\nTo send previews to a page you serve, give `preview` a `url`. The HTML is\nwritten to `localStorage` first, and the page reads it back:\n\n```tsx\n<HyperMarkdown md={markdown} preview={{ url: \"/preview-code/{id}\" }} />\n```\n\n| Field | Type | Description |\n| --- | --- | --- |\n| `url` | `string \\| (id: string) => string` | The page to open. `{id}` is replaced with the block's id. Unset means the built-in preview. |\n| `storageKey` | `string \\| (id: string) => string` | Key the HTML is written to. Defaults to `preview-{id}`. Only used with `url`. |\n\nBoth accept a function when substitution is not enough:\n\n```tsx\n<HyperMarkdown\n  md={markdown}\n  preview={{\n    url: (id) => `/preview#${encodeURIComponent(id)}`,\n    storageKey: (id) => `preview:${id}`,\n  }}\n/>\n```\n\nThe previewed HTML runs with your origin. Serving your own preview page lets\nyou decide how far to trust it — rendering it inside a sandboxed iframe, for\ninstance.\n\n### `HyperMarkdownHandle`\n\n| Member | Description |\n| --- | --- |\n| `write(delta, finalize?)` | Append one delta; pass `true` once at end of stream. |\n| `reset()` | Discard rendered content and start a new stream. |\n| `store` | The component's rendering store for advanced integrations. |\n| `stream` | Deprecated alias for `store`. |\n\n## Supported Markdown\n\nCommonMark plus GitHub Flavored Markdown: tables, task lists, strikethrough,\nautolinks, and footnotes. Optional plugins add KaTeX math, Mermaid diagrams,\nsyntax highlighting, and CJK-friendly emphasis. Raw HTML is supported under\nthe selected safety policy.\n\n## Development\n\n```bash\nnpm install\nnpm test\nnpm run test:coverage\nnpm run typecheck\nnpm run lint\nnpm run build\nnpm run benchmark\nnpm run website:dev\n```\n\nThe documentation site and playground live in `website/` and deploy to\n[GitHub Pages](https://aeven-ai.github.io/HyperMarkdown/) from\n`.github/workflows/pages.yml`. Set the repository Pages source to **GitHub\nActions**.\n\nPull requests and pushes to `main` run lint, typecheck (React 18 and 19), unit\nand full coverage, and a production build. Both coverage gates are 100%\nstatements, lines, functions, and branches. Coverage reports are uploaded as\nartifacts and posted on pull requests. Mark the CI job as a required status\ncheck on `main` if you want GitHub to block merges on a red build.\n\nThe correctness suite compares finished streaming output with whole-document\nrendering across the fixture corpus. The benchmark harness validates DOM\noutput and measures chunk processing plus synchronous React commits.\n\n### Releasing\n\nThe account publishes under two-factor auth, which no runner can satisfy, so\nthe publish itself is local:\n\n1. Bump `version` in `package.json` (and the lockfile). `npm version`\n   also refreshes `website/package-lock.json` so the docs site records\n   that same version.\n2. Commit, tag `vX.Y.Z`, and push.\n3. Create a GitHub Release from that tag. That deploys the documentation\n   site from the release tag (the playground and docs build that\n   released library).\n4. Run `npm publish` locally, from the tag, and complete the 2FA prompt.\n\nA GitHub Release therefore does not publish to npm. npm publishing is always\nperformed locally with the account's two-factor authentication.\n\n<details>\n<summary>Project layout</summary>\n\n```text\nindex.tsx                     public React component and types\n\nlib/\n  renderer.tsx                buffers, caching, and incremental rendering\n  processors.ts               Markdown and HTML processing pipelines\n  stream/                     block detection and boundaries\n  repair/                     safe handling of incomplete inline syntax\n  cache/                      code-line, table-row, and list-item caches\n  plugins/                    optional math, code, Mermaid, and CJK adapters\n  code/  table/  mermaid/     rich block renderers and controls\n  reasoning/                  streamed reasoning UI\n  sanitize.ts                 HTML and URL safety policy\n\nstyles/hypermarkdown.scss     scoped component stylesheet\ntests/                        correctness, streaming, API, UI, and security\nbenchmarks/                   fixtures, competing renderers, and results\nexample/                      browser example using the built package\n```\n\n</details>\n\n## License\n\nMIT\n","readmeFilename":"README.md"}