{"_id":"@xcan-cloud/markdown","_rev":"28-bef748d7e8fcd2ba074a46fdfb63105c","name":"@xcan-cloud/markdown","dist-tags":{"latest":"1.8.0"},"versions":{"1.0.0":{"name":"@xcan-cloud/markdown","version":"1.0.0","_id":"@xcan-cloud/markdown@1.0.0","maintainers":[{"name":"xiaolong.liu666","email":"xlliu2@163.com"}],"homepage":"https://github.com/xcancloud/Markdown#readme","bugs":{"url":"https://github.com/xcancloud/Markdown/issues"},"dist":{"shasum":"1f93459454ddc0bf245a7c68fccc10a75fd9191a","tarball":"https://registry.npmjs.org/@xcan-cloud/markdown/-/markdown-1.0.0.tgz","fileCount":1008,"integrity":"sha512-gDONIgR6j1BPaxqQnh0jg1Ix2D8wK6plePPQQP/F3Cjv720q9bEsmTVViyzB+2mEzTatc16Qc2OYIF7/YrzYFw==","signatures":[{"sig":"MEQCIGMR1HaVeA0Z1F4HWo+dD0Gb7afr1uMuXOpo4d6xcvGHAiBFzpZ8XIAzQcWXnqxDWiM6K8dJpllJ2JrjGIEpZjki2Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":43298608},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"},"./styles":"./dist/styles/markdown-renderer.css","./themes/*":"./dist/styles/themes/*"},"gitHead":"2bb07fb0ed3ff2b0a96f5b395e9148a727f7b7d6","scripts":{"dev":"vite","lint":"tsc --noEmit","test":"vitest run","build":"tsc && vite build","deploy":"npm run build && npm publish","test:watch":"vitest","deploy:dry-run":"npm run build && npm publish --dry-run","prepublishOnly":"npm run build"},"_npmUser":{"name":"xiaolong.liu666","email":"xlliu2@163.com"},"repository":{"url":"git+https://github.com/xcancloud/Markdown.git","type":"git"},"_npmVersion":"9.5.0","description":"Production-grade, extensible, high-performance Markdown rendering and editing component","directories":{},"sideEffects":["*.css"],"_nodeVersion":"18.15.0","dependencies":{"katex":"^0.16.11","shiki":"^1.24.0","mermaid":"^11.4.0","unified":"^11.0.5","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","rehype-slug":"^6.0.0","remark-math":"^6.0.0","rehype-katex":"^7.0.1","remark-emoji":"^4.0.1","remark-parse":"^11.0.0","remark-rehype":"^11.1.1","github-slugger":"^2.0.0","rehype-sanitize":"^6.0.0","@codemirror/view":"^6.34.0","rehype-stringify":"^10.0.1","remark-directive":"^3.0.0","unist-util-visit":"^5.0.0","@codemirror/state":"^6.4.1","remark-frontmatter":"^5.0.0","hast-util-to-string":"^3.0.1","@codemirror/commands":"^6.7.1","@codemirror/language":"^6.10.3","mdast-util-to-string":"^4.0.0","@codemirror/autocomplete":"^6.18.3","rehype-autolink-headings":"^7.1.0","@codemirror/lang-markdown":"^6.3.0","@codemirror/language-data":"^6.5.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.3","jsdom":"^25.0.1","react":"^18.3.1","vitest":"^2.1.8","react-dom":"^18.3.1","typescript":"^5.7.2","@types/katex":"^0.16.7","@types/react":"^18.3.12","vite-plugin-dts":"^4.3.0","@types/react-dom":"^18.3.1","@vitejs/plugin-react":"^4.3.4","@testing-library/react":"^16.1.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/markdown_1.0.0_1773902093729_0.6453947161338329","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@xcan-cloud/markdown","version":"1.0.1","_id":"@xcan-cloud/markdown@1.0.1","maintainers":[{"name":"xiaolong.liu666","email":"xlliu2@163.com"}],"homepage":"https://github.com/xcancloud/Markdown#readme","bugs":{"url":"https://github.com/xcancloud/Markdown/issues"},"dist":{"shasum":"0f06bf50b63f5a2ac8b8d05ce21c05068c570780","tarball":"https://registry.npmjs.org/@xcan-cloud/markdown/-/markdown-1.0.1.tgz","fileCount":1013,"integrity":"sha512-wB1dORlUSog5JLH2QRE7jrf7uto7RZlz04kfcjeBj5eX/iZ5LDTDK3h6hjtS3UxDMQiRYCsO5EgCSpAu/PCk1A==","signatures":[{"sig":"MEUCIQDtJY65BKnEGEC+h0HSnHxPmGITyHJJt+kA//2sYQGY8QIge2XcqnIqKy8qo7HJClAqyjFxbdsLGlanOJFX71ONT3U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":43322475},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"},"./styles":"./dist/styles/markdown-renderer.css","./themes/*":"./dist/styles/themes/*"},"gitHead":"cfcc4964adcfc3eadbee0e49a33fc8f4e9b1029e","scripts":{"dev":"vite","lint":"tsc --noEmit","test":"vitest run","build":"tsc && vite build && cp -r src/styles dist/","deploy":"npm run build && npm publish","test:watch":"vitest","deploy:dry-run":"npm run build && npm publish --dry-run","prepublishOnly":"npm run build"},"_npmUser":{"name":"xiaolong.liu666","email":"xlliu2@163.com"},"repository":{"url":"git+https://github.com/xcancloud/Markdown.git","type":"git"},"_npmVersion":"11.4.1","description":"Production-grade, extensible, high-performance Markdown rendering and editing component","directories":{},"sideEffects":["*.css"],"_nodeVersion":"22.9.0","dependencies":{"katex":"^0.16.11","shiki":"^1.24.0","mermaid":"^11.4.0","unified":"^11.0.5","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","rehype-slug":"^6.0.0","remark-math":"^6.0.0","rehype-katex":"^7.0.1","remark-emoji":"^4.0.1","remark-parse":"^11.0.0","remark-rehype":"^11.1.1","github-slugger":"^2.0.0","rehype-sanitize":"^6.0.0","@codemirror/view":"^6.34.0","rehype-stringify":"^10.0.1","remark-directive":"^3.0.0","unist-util-visit":"^5.0.0","@codemirror/state":"^6.4.1","remark-frontmatter":"^5.0.0","hast-util-to-string":"^3.0.1","@codemirror/commands":"^6.7.1","@codemirror/language":"^6.10.3","mdast-util-to-string":"^4.0.0","@codemirror/autocomplete":"^6.18.3","rehype-autolink-headings":"^7.1.0","@codemirror/lang-markdown":"^6.3.0","@codemirror/language-data":"^6.5.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.3","jsdom":"^25.0.1","react":"^18.3.1","vitest":"^2.1.8","react-dom":"^18.3.1","typescript":"^5.7.2","@types/katex":"^0.16.7","@types/react":"^18.3.12","vite-plugin-dts":"^4.3.0","@types/react-dom":"^18.3.1","@vitejs/plugin-react":"^4.3.4","@testing-library/react":"^16.1.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/markdown_1.0.1_1773907082196_0.37670255899714444","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@xcan-cloud/markdown","version":"1.0.2","_id":"@xcan-cloud/markdown@1.0.2","maintainers":[{"name":"xiaolong.liu666","email":"xlliu2@163.com"}],"homepage":"https://github.com/xcancloud/Markdown#readme","bugs":{"url":"https://github.com/xcancloud/Markdown/issues"},"dist":{"shasum":"f1cfb6c0367fc9cb9a976fc57b54f13ee3ec380d","tarball":"https://registry.npmjs.org/@xcan-cloud/markdown/-/markdown-1.0.2.tgz","fileCount":511,"integrity":"sha512-XgGojLxb07idCu9mkg/In0tsvRKLPHaCTG94uG2spP963OAGz9deFOgeb5UaAQEh+OAd6o2sCS5bmquMUocynA==","signatures":[{"sig":"MEUCIQCZRmoPrC6bE4VXGXcI38ORqMsbRJRjqzOPPiviKQuHSgIgabw2vX+4Cd2BSv+MPQdBPEREUgmKg+IA4tk2+fjsVS8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15544448},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"},"./styles":"./dist/styles/markdown-renderer.css","./themes/*":"./dist/styles/themes/*"},"gitHead":"c6dba41624c90f31eccd2e3dc872627c75075e3e","scripts":{"dev":"vite","lint":"tsc --noEmit","test":"vitest run","build":"tsc && vite build && cp -r src/styles dist/","deploy":"npm run build && npm publish","test:watch":"vitest","deploy:dry-run":"npm run build && npm publish --dry-run","prepublishOnly":"npm run build"},"_npmUser":{"name":"xiaolong.liu666","email":"xlliu2@163.com"},"repository":{"url":"git+https://github.com/xcancloud/Markdown.git","type":"git"},"_npmVersion":"9.5.0","description":"Production-grade, extensible, high-performance Markdown rendering and editing component","directories":{},"sideEffects":["*.css"],"_nodeVersion":"18.15.0","dependencies":{"katex":"^0.16.11","shiki":"^1.24.0","mermaid":"^11.4.0","unified":"^11.0.5","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","rehype-slug":"^6.0.0","remark-math":"^6.0.0","rehype-katex":"^7.0.1","remark-emoji":"^4.0.1","remark-parse":"^11.0.0","remark-rehype":"^11.1.1","github-slugger":"^2.0.0","rehype-sanitize":"^6.0.0","@codemirror/view":"^6.34.0","rehype-stringify":"^10.0.1","remark-directive":"^3.0.0","unist-util-visit":"^5.0.0","@codemirror/state":"^6.4.1","remark-frontmatter":"^5.0.0","hast-util-to-string":"^3.0.1","@codemirror/commands":"^6.7.1","@codemirror/language":"^6.10.3","mdast-util-to-string":"^4.0.0","@codemirror/autocomplete":"^6.18.3","rehype-autolink-headings":"^7.1.0","@codemirror/lang-markdown":"^6.3.0","@codemirror/language-data":"^6.5.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.3","jsdom":"^25.0.1","react":"^18.3.1","vitest":"^2.1.8","react-dom":"^18.3.1","typescript":"^5.7.2","@types/katex":"^0.16.7","@types/react":"^18.3.12","vite-plugin-dts":"^4.3.0","@types/react-dom":"^18.3.1","@vitejs/plugin-react":"^4.3.4","@testing-library/react":"^16.1.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/markdown_1.0.2_1773908167262_0.3321965846481343","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@xcan-cloud/markdown","version":"1.0.3","_id":"@xcan-cloud/markdown@1.0.3","maintainers":[{"name":"xiaolong.liu666","email":"xlliu2@163.com"}],"homepage":"https://github.com/xcancloud/Markdown#readme","bugs":{"url":"https://github.com/xcancloud/Markdown/issues"},"dist":{"shasum":"0732f051370e581dc2c2954f681958d83ba26987","tarball":"https://registry.npmjs.org/@xcan-cloud/markdown/-/markdown-1.0.3.tgz","fileCount":510,"integrity":"sha512-LGoWf3jsylk+v8/2HFNhnu3o7/p7d9EW28oVFstq/EJJXuKrPnYpMkSIJfciUs5DGSaCPldCXBOhq0ocfomuVA==","signatures":[{"sig":"MEUCIGL8lbrZz00v04E7c6r7CCdjg45mQNPepNGmcxez2wjIAiEAkjBasIGs8v/EIq8cLq8T6RkjFLwnvM6gQp6Z31p7d6c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16914179},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"},"./styles":"./dist/styles/markdown-renderer.css","./themes/*":"./dist/styles/themes/*"},"gitHead":"be9a8af066a63c0d1cf22589a13ae5846e77bb4a","scripts":{"dev":"vite","lint":"tsc --noEmit","test":"vitest run","build":"tsc && vite build && cp -r src/styles dist/","deploy":"npm run build && npm publish","test:watch":"vitest","deploy:dry-run":"npm run build && npm publish --dry-run","prepublishOnly":"npm run build"},"_npmUser":{"name":"xiaolong.liu666","email":"xlliu2@163.com"},"repository":{"url":"git+https://github.com/xcancloud/Markdown.git","type":"git"},"_npmVersion":"9.5.0","description":"Production-grade, extensible, high-performance Markdown rendering and editing component","directories":{},"sideEffects":["*.css"],"_nodeVersion":"18.15.0","dependencies":{"katex":"^0.16.11","shiki":"^1.24.0","mermaid":"^11.4.0","unified":"^11.0.5","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","rehype-slug":"^6.0.0","remark-math":"^6.0.0","rehype-katex":"^7.0.1","remark-emoji":"^4.0.1","remark-parse":"^11.0.0","remark-rehype":"^11.1.1","github-slugger":"^2.0.0","rehype-sanitize":"^6.0.0","@codemirror/view":"^6.34.0","rehype-stringify":"^10.0.1","remark-directive":"^3.0.0","unist-util-visit":"^5.0.0","@codemirror/state":"^6.4.1","remark-frontmatter":"^5.0.0","hast-util-to-string":"^3.0.1","@codemirror/commands":"^6.7.1","@codemirror/language":"^6.10.3","mdast-util-to-string":"^4.0.0","@codemirror/autocomplete":"^6.18.3","rehype-autolink-headings":"^7.1.0","@codemirror/lang-markdown":"^6.3.0","@codemirror/language-data":"^6.5.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.3","jsdom":"^25.0.1","react":"^18.3.1","vitest":"^2.1.8","react-dom":"^18.3.1","typescript":"^5.7.2","@types/katex":"^0.16.7","@types/react":"^18.3.12","vite-plugin-dts":"^4.3.0","@types/react-dom":"^18.3.1","@vitejs/plugin-react":"^4.3.4","@testing-library/react":"^16.1.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/markdown_1.0.3_1773912413148_0.36290100569571493","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@xcan-cloud/markdown","version":"1.0.4","_id":"@xcan-cloud/markdown@1.0.4","maintainers":[{"name":"xiaolong.liu666","email":"xlliu2@163.com"}],"homepage":"https://github.com/xcancloud/Markdown#readme","bugs":{"url":"https://github.com/xcancloud/Markdown/issues"},"dist":{"shasum":"f165186bbf0eb7aa7ef0610e2ab87c9176d32b8c","tarball":"https://registry.npmjs.org/@xcan-cloud/markdown/-/markdown-1.0.4.tgz","fileCount":510,"integrity":"sha512-BcGc1Por+cQ6v0S87gRXzcx9J7nNALPs6nugu+X3DWqmN7C78GJQUJOLI39qidg/kluTGZPAKqEtkSkqsE4FeQ==","signatures":[{"sig":"MEYCIQCd7iuK8JGhll805VeDAS4xr3PX7UUDA1bGQsaaWdVEKAIhAMpVFXdIQ9h4nHAdE9s6rLAIo3kox3HGWbR+lL8qpr7B","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16915515},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"},"./styles":"./dist/styles/markdown-renderer.css","./themes/*":"./dist/styles/themes/*"},"gitHead":"73b95a50b4cffb45d203c111d518656173ef40e4","scripts":{"dev":"vite","lint":"tsc --noEmit","test":"vitest run","build":"tsc && vite build && cp -r src/styles dist/","deploy":"npm run build && npm publish","test:watch":"vitest","deploy:dry-run":"npm run build && npm publish --dry-run","prepublishOnly":"npm run build"},"_npmUser":{"name":"xiaolong.liu666","email":"xlliu2@163.com"},"repository":{"url":"git+https://github.com/xcancloud/Markdown.git","type":"git"},"_npmVersion":"9.5.0","description":"Production-grade, extensible, high-performance Markdown rendering and editing component","directories":{},"sideEffects":["*.css"],"_nodeVersion":"18.15.0","dependencies":{"katex":"^0.16.11","shiki":"^1.24.0","mermaid":"^11.4.0","unified":"^11.0.5","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","rehype-slug":"^6.0.0","remark-math":"^6.0.0","rehype-katex":"^7.0.1","remark-emoji":"^4.0.1","remark-parse":"^11.0.0","remark-rehype":"^11.1.1","github-slugger":"^2.0.0","rehype-sanitize":"^6.0.0","@codemirror/view":"^6.34.0","rehype-stringify":"^10.0.1","remark-directive":"^3.0.0","unist-util-visit":"^5.0.0","@codemirror/state":"^6.4.1","remark-frontmatter":"^5.0.0","hast-util-to-string":"^3.0.1","@codemirror/commands":"^6.7.1","@codemirror/language":"^6.10.3","mdast-util-to-string":"^4.0.0","@codemirror/autocomplete":"^6.18.3","rehype-autolink-headings":"^7.1.0","@codemirror/lang-markdown":"^6.3.0","@codemirror/language-data":"^6.5.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.3","jsdom":"^25.0.1","react":"^18.3.1","vitest":"^2.1.8","react-dom":"^18.3.1","typescript":"^5.7.2","@types/katex":"^0.16.7","@types/react":"^18.3.12","vite-plugin-dts":"^4.3.0","@types/react-dom":"^18.3.1","@vitejs/plugin-react":"^4.3.4","@testing-library/react":"^16.1.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/markdown_1.0.4_1773934219001_0.37050989942944734","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@xcan-cloud/markdown","version":"1.0.5","_id":"@xcan-cloud/markdown@1.0.5","maintainers":[{"name":"xiaolong.liu666","email":"xlliu2@163.com"}],"homepage":"https://github.com/xcancloud/Markdown#readme","bugs":{"url":"https://github.com/xcancloud/Markdown/issues"},"dist":{"shasum":"e29b6685a2443890e67881c2c58554068ea96a06","tarball":"https://registry.npmjs.org/@xcan-cloud/markdown/-/markdown-1.0.5.tgz","fileCount":510,"integrity":"sha512-QyKQ0nKG9cNvmEdS2goGe7v0lKLZdMJDIodzGVmveZ/NMj5lpF0ZA5WBhBt7+/+MSki0OFpUSi0QMgFcHavEJw==","signatures":[{"sig":"MEUCIQCUN6AkiT+K8yAOhtsEFdFMx3TzP6X/PVIozOLo1zi99AIgeZVgQiKgJU6ISL4iI+t+o6Ur9a5gga22F+oxSZqjzoI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16920573},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"},"./styles":"./dist/styles/markdown-renderer.css","./themes/*":"./dist/styles/themes/*"},"gitHead":"38062e309cefdaa81ac4761b340e375a2f0522a3","scripts":{"dev":"vite","lint":"tsc --noEmit","test":"vitest run","build":"tsc && vite build && cp -r src/styles dist/","deploy":"npm run build && npm publish","test:watch":"vitest","deploy:dry-run":"npm run build && npm publish --dry-run","prepublishOnly":"npm run build"},"_npmUser":{"name":"xiaolong.liu666","email":"xlliu2@163.com"},"repository":{"url":"git+https://github.com/xcancloud/Markdown.git","type":"git"},"_npmVersion":"9.5.0","description":"Production-grade, extensible, high-performance Markdown rendering and editing component","directories":{},"sideEffects":["*.css"],"_nodeVersion":"18.15.0","dependencies":{"katex":"^0.16.11","shiki":"^1.24.0","mermaid":"^11.4.0","unified":"^11.0.5","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","rehype-slug":"^6.0.0","remark-math":"^6.0.0","rehype-katex":"^7.0.1","remark-emoji":"^4.0.1","remark-parse":"^11.0.0","remark-rehype":"^11.1.1","github-slugger":"^2.0.0","rehype-sanitize":"^6.0.0","@codemirror/view":"^6.34.0","rehype-stringify":"^10.0.1","remark-directive":"^3.0.0","unist-util-visit":"^5.0.0","@codemirror/state":"^6.4.1","remark-frontmatter":"^5.0.0","hast-util-to-string":"^3.0.1","@codemirror/commands":"^6.7.1","@codemirror/language":"^6.10.3","mdast-util-to-string":"^4.0.0","@codemirror/autocomplete":"^6.18.3","rehype-autolink-headings":"^7.1.0","@codemirror/lang-markdown":"^6.3.0","@codemirror/language-data":"^6.5.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.3","jsdom":"^25.0.1","react":"^18.3.1","vitest":"^2.1.8","react-dom":"^18.3.1","typescript":"^5.7.2","@types/katex":"^0.16.7","@types/react":"^18.3.12","vite-plugin-dts":"^4.3.0","@types/react-dom":"^18.3.1","@vitejs/plugin-react":"^4.3.4","@testing-library/react":"^16.1.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/markdown_1.0.5_1773937811453_0.04420963473263262","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@xcan-cloud/markdown","version":"1.0.6","_id":"@xcan-cloud/markdown@1.0.6","maintainers":[{"name":"xiaolong.liu666","email":"xlliu2@163.com"}],"homepage":"https://github.com/xcancloud/Markdown#readme","bugs":{"url":"https://github.com/xcancloud/Markdown/issues"},"dist":{"shasum":"9bd10e37272310e989ac851489bdfc67bd5b5c19","tarball":"https://registry.npmjs.org/@xcan-cloud/markdown/-/markdown-1.0.6.tgz","fileCount":510,"integrity":"sha512-0VnvEf7htcbf3v7TyaLpIzPKSNpb0XwQIUuXGYTg2lk97twxznDfuPyxWju1DT1fWu+JemkNrrtSYKnR/p3TmQ==","signatures":[{"sig":"MEUCIQCbZzFxzsUzyeps2LBJNFflyc5hfbIz4OypkCnF99PA0wIgItKci1ah2ITiTUd+RtD4S4cdJBQ17tEN99JNJ4CP9SQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16921816},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"},"./styles":"./dist/styles/markdown-renderer.css","./themes/*":"./dist/styles/themes/*"},"gitHead":"38062e309cefdaa81ac4761b340e375a2f0522a3","scripts":{"dev":"vite","lint":"tsc --noEmit","test":"vitest run","build":"tsc && vite build && cp -r src/styles dist/","deploy":"npm run build && npm publish","test:watch":"vitest","deploy:dry-run":"npm run build && npm publish --dry-run","prepublishOnly":"npm run build"},"_npmUser":{"name":"xiaolong.liu666","email":"xlliu2@163.com"},"repository":{"url":"git+https://github.com/xcancloud/Markdown.git","type":"git"},"_npmVersion":"9.5.0","description":"Production-grade, extensible, high-performance Markdown rendering and editing component","directories":{},"sideEffects":["*.css"],"_nodeVersion":"18.15.0","dependencies":{"katex":"^0.16.11","shiki":"^1.24.0","mermaid":"^11.4.0","unified":"^11.0.5","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","rehype-slug":"^6.0.0","remark-math":"^6.0.0","rehype-katex":"^7.0.1","remark-emoji":"^4.0.1","remark-parse":"^11.0.0","remark-rehype":"^11.1.1","github-slugger":"^2.0.0","rehype-sanitize":"^6.0.0","@codemirror/view":"^6.34.0","rehype-stringify":"^10.0.1","remark-directive":"^3.0.0","unist-util-visit":"^5.0.0","@codemirror/state":"^6.4.1","remark-frontmatter":"^5.0.0","hast-util-to-string":"^3.0.1","@codemirror/commands":"^6.7.1","@codemirror/language":"^6.10.3","mdast-util-to-string":"^4.0.0","@codemirror/autocomplete":"^6.18.3","rehype-autolink-headings":"^7.1.0","@codemirror/lang-markdown":"^6.3.0","@codemirror/language-data":"^6.5.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.3","jsdom":"^25.0.1","react":"^18.3.1","vitest":"^2.1.8","react-dom":"^18.3.1","typescript":"^5.7.2","@types/katex":"^0.16.7","@types/react":"^18.3.12","vite-plugin-dts":"^4.3.0","@types/react-dom":"^18.3.1","@vitejs/plugin-react":"^4.3.4","@testing-library/react":"^16.1.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/markdown_1.0.6_1773938459736_0.6074400971181138","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"@xcan-cloud/markdown","version":"1.0.7","_id":"@xcan-cloud/markdown@1.0.7","maintainers":[{"name":"xiaolong.liu666","email":"xlliu2@163.com"}],"homepage":"https://github.com/xcancloud/Markdown#readme","bugs":{"url":"https://github.com/xcancloud/Markdown/issues"},"dist":{"shasum":"ced5eac2c8a4f064f8a5cc1657af0adc04ec8602","tarball":"https://registry.npmjs.org/@xcan-cloud/markdown/-/markdown-1.0.7.tgz","fileCount":510,"integrity":"sha512-jH0PuUJUjCHo3RXoBV3FQZXOdj/OalJWqDUc/pjonMTCGuXy/LgJWuZ8Y76Jo7R0UtEsmMNRpPq7EZ5p8/ziiQ==","signatures":[{"sig":"MEUCIQDtAykwBmRx1YxEadIiUXXlI5RJ5Xb0uNzP+aW/msfifQIgUECnWkUPWVxuLOq8JKfRn+pStvJE+a13xqvctU+ZT4Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16915749},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"},"./styles":"./dist/styles/markdown-renderer.css","./themes/*":"./dist/styles/themes/*"},"gitHead":"5a9c44567ca7a5570632bd6e3fe97c9f6b6fd05e","scripts":{"dev":"vite","lint":"tsc --noEmit","test":"vitest run","build":"tsc && vite build && cp -r src/styles dist/","deploy":"npm run build && npm publish","test:watch":"vitest","deploy:dry-run":"npm run build && npm publish --dry-run","prepublishOnly":"npm run build"},"_npmUser":{"name":"xiaolong.liu666","email":"xlliu2@163.com"},"repository":{"url":"git+https://github.com/xcancloud/Markdown.git","type":"git"},"_npmVersion":"9.5.0","description":"Production-grade, extensible, high-performance Markdown rendering and editing component","directories":{},"sideEffects":["*.css"],"_nodeVersion":"18.15.0","dependencies":{"katex":"^0.16.11","shiki":"^1.24.0","mermaid":"^11.4.0","unified":"^11.0.5","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","rehype-slug":"^6.0.0","remark-math":"^6.0.0","rehype-katex":"^7.0.1","remark-emoji":"^4.0.1","remark-parse":"^11.0.0","remark-rehype":"^11.1.1","github-slugger":"^2.0.0","rehype-sanitize":"^6.0.0","@codemirror/view":"^6.34.0","rehype-stringify":"^10.0.1","remark-directive":"^3.0.0","unist-util-visit":"^5.0.0","@codemirror/state":"^6.4.1","remark-frontmatter":"^5.0.0","hast-util-to-string":"^3.0.1","@codemirror/commands":"^6.7.1","@codemirror/language":"^6.10.3","mdast-util-to-string":"^4.0.0","@codemirror/autocomplete":"^6.18.3","rehype-autolink-headings":"^7.1.0","@codemirror/lang-markdown":"^6.3.0","@codemirror/language-data":"^6.5.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.3","jsdom":"^25.0.1","react":"^18.3.1","vitest":"^2.1.8","react-dom":"^18.3.1","typescript":"^5.7.2","@types/katex":"^0.16.7","@types/react":"^18.3.12","vite-plugin-dts":"^4.3.0","@types/react-dom":"^18.3.1","@vitejs/plugin-react":"^4.3.4","@testing-library/react":"^16.1.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/markdown_1.0.7_1773966911250_0.9897276941616677","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"@xcan-cloud/markdown","version":"1.0.8","_id":"@xcan-cloud/markdown@1.0.8","maintainers":[{"name":"xiaolong.liu666","email":"xlliu2@163.com"}],"homepage":"https://github.com/xcancloud/Markdown#readme","bugs":{"url":"https://github.com/xcancloud/Markdown/issues"},"dist":{"shasum":"1c59c750a44af18d344d980a6d048bad3dd56528","tarball":"https://registry.npmjs.org/@xcan-cloud/markdown/-/markdown-1.0.8.tgz","fileCount":510,"integrity":"sha512-SbV23mAXpqdjyipaNAd7p5+mpqHo9javXeWmOvNeBuvUV546wTN0uI5vEoZqzTzrMBuwMdBejhfnhg6+ttPv0A==","signatures":[{"sig":"MEYCIQCf9K83RGhOgnlZGdaFk+ZOf+oRqKOrKj4hzwZ93Z6oNwIhAMXgNrEgdaAjiLIPIyKWThepYMuAVWAb5FEk5QBa6l9o","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16961853},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"},"./styles":"./dist/styles/markdown-renderer.css","./themes/*":"./dist/styles/themes/*"},"gitHead":"3534067cd8bb07084b119fcb38ee948e24a781f3","scripts":{"dev":"vite","lint":"tsc --noEmit","test":"vitest run","build":"tsc && vite build && cp -r src/styles dist/","deploy":"npm run build && npm publish","test:watch":"vitest","deploy:dry-run":"npm run build && npm publish --dry-run","prepublishOnly":"npm run build"},"_npmUser":{"name":"xiaolong.liu666","email":"xlliu2@163.com"},"repository":{"url":"git+https://github.com/xcancloud/Markdown.git","type":"git"},"_npmVersion":"9.5.0","description":"Production-grade, extensible, high-performance Markdown rendering and editing component","directories":{},"sideEffects":["*.css"],"_nodeVersion":"18.15.0","dependencies":{"katex":"^0.16.11","shiki":"^1.24.0","mermaid":"^11.4.0","unified":"^11.0.5","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","rehype-slug":"^6.0.0","remark-math":"^6.0.0","lucide-react":"^0.474.0","rehype-katex":"^7.0.1","remark-emoji":"^4.0.1","remark-parse":"^11.0.0","remark-rehype":"^11.1.1","github-slugger":"^2.0.0","rehype-sanitize":"^6.0.0","@codemirror/view":"^6.34.0","rehype-stringify":"^10.0.1","remark-directive":"^3.0.0","unist-util-visit":"^5.0.0","@codemirror/state":"^6.4.1","remark-frontmatter":"^5.0.0","hast-util-to-string":"^3.0.1","@codemirror/commands":"^6.7.1","@codemirror/language":"^6.10.3","mdast-util-to-string":"^4.0.0","@codemirror/autocomplete":"^6.18.3","rehype-autolink-headings":"^7.1.0","@codemirror/lang-markdown":"^6.3.0","@codemirror/language-data":"^6.5.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.3","jsdom":"^25.0.1","react":"^18.3.1","vitest":"^2.1.8","react-dom":"^18.3.1","typescript":"^5.7.2","@types/katex":"^0.16.7","@types/react":"^18.3.12","vite-plugin-dts":"^4.3.0","@types/react-dom":"^18.3.1","@vitejs/plugin-react":"^4.3.4","@testing-library/react":"^16.1.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/markdown_1.0.8_1773991766089_0.3817421155661542","host":"s3://npm-registry-packages-npm-production"}},"1.0.9":{"name":"@xcan-cloud/markdown","version":"1.0.9","_id":"@xcan-cloud/markdown@1.0.9","maintainers":[{"name":"xiaolong.liu666","email":"xlliu2@163.com"}],"homepage":"https://github.com/xcancloud/Markdown#readme","bugs":{"url":"https://github.com/xcancloud/Markdown/issues"},"dist":{"shasum":"079f8895e07e0a63f3837706637a04f87cf153c4","tarball":"https://registry.npmjs.org/@xcan-cloud/markdown/-/markdown-1.0.9.tgz","fileCount":510,"integrity":"sha512-EqkttJR9lpC3ujaExGPrbpPTftMdxDv1/M0I8zYs/2Vt2ulZVH1BQWHGh64smZuVPWkv95IC7uwh/7Ld0TQduA==","signatures":[{"sig":"MEUCIQCjBp2eyXl2nTI925Kfnn5JH3YFTv5SdHWNQJuRpjMjtAIgcu18KQRrJWPwOtR5XrqT796tfGo/M5akOCdvMJoBo88=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16962063},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"},"./styles":"./dist/styles/markdown-renderer.css","./themes/*":"./dist/styles/themes/*"},"gitHead":"e145f74392a963736d989a0fcd7f147b4b71d079","scripts":{"dev":"vite","lint":"tsc --noEmit","test":"vitest run","build":"tsc && vite build && cp -r src/styles dist/","deploy":"npm run build && npm publish","test:watch":"vitest","deploy:dry-run":"npm run build && npm publish --dry-run","prepublishOnly":"npm run build"},"_npmUser":{"name":"xiaolong.liu666","email":"xlliu2@163.com"},"repository":{"url":"git+https://github.com/xcancloud/Markdown.git","type":"git"},"_npmVersion":"11.6.2","description":"Production-grade, extensible, high-performance Markdown rendering and editing component","directories":{},"sideEffects":["*.css"],"_nodeVersion":"24.11.1","dependencies":{"katex":"^0.16.11","shiki":"^1.24.0","mermaid":"^11.4.0","unified":"^11.0.5","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","rehype-slug":"^6.0.0","remark-math":"^6.0.0","lucide-react":"^0.474.0","rehype-katex":"^7.0.1","remark-emoji":"^4.0.1","remark-parse":"^11.0.0","remark-rehype":"^11.1.1","github-slugger":"^2.0.0","rehype-sanitize":"^6.0.0","@codemirror/view":"^6.34.0","rehype-stringify":"^10.0.1","remark-directive":"^3.0.0","unist-util-visit":"^5.0.0","@codemirror/state":"^6.4.1","remark-frontmatter":"^5.0.0","hast-util-to-string":"^3.0.1","@codemirror/commands":"^6.7.1","@codemirror/language":"^6.10.3","mdast-util-to-string":"^4.0.0","@codemirror/autocomplete":"^6.18.3","rehype-autolink-headings":"^7.1.0","@codemirror/lang-markdown":"^6.3.0","@codemirror/language-data":"^6.5.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.3","jsdom":"^25.0.1","react":"^18.3.1","vitest":"^2.1.8","react-dom":"^18.3.1","typescript":"^5.7.2","@types/katex":"^0.16.7","@types/react":"^18.3.12","vite-plugin-dts":"^4.3.0","@types/react-dom":"^18.3.1","@vitejs/plugin-react":"^4.3.4","@testing-library/react":"^16.1.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/markdown_1.0.9_1773994127961_0.7585334721814638","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@xcan-cloud/markdown","version":"1.1.0","_id":"@xcan-cloud/markdown@1.1.0","maintainers":[{"name":"xiaolong.liu666","email":"xlliu2@163.com"}],"homepage":"https://github.com/xcancloud/Markdown#readme","bugs":{"url":"https://github.com/xcancloud/Markdown/issues"},"dist":{"shasum":"b7648bf78e15cc7199103d572b6cdb08aed27a78","tarball":"https://registry.npmjs.org/@xcan-cloud/markdown/-/markdown-1.1.0.tgz","fileCount":513,"integrity":"sha512-2458YtCfVGasnn1iLfnVMEYr8nRIWTm6gYWQZtdB10+L1NmpCBF7x4R4VUedmf9/begM142+ot7+FCvD2VRCYA==","signatures":[{"sig":"MEQCIHSavaSEbxrBeTr2g3c3DtrJ8RemqLBqVSB7UPQiPeNRAiBIDwdgH8cIwXSaMqRefA991gaj4LdAO8ffOsmVlNchPA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17204439},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"},"./styles":"./dist/styles/index.css","./themes/*":"./dist/styles/themes/*"},"gitHead":"dae6276a38d8d29e9081d9159034d24bbb113c80","scripts":{"dev":"cd website && vite","lint":"tsc --noEmit","test":"vitest run","build":"tsc && vite build && cp -r src/styles dist/","deploy":"npm run build && npm publish","test:watch":"vitest","deploy:dry-run":"npm run build && npm publish --dry-run","prepublishOnly":"npm run build"},"_npmUser":{"name":"xiaolong.liu666","email":"xlliu2@163.com"},"repository":{"url":"git+https://github.com/xcancloud/Markdown.git","type":"git"},"_npmVersion":"9.5.0","description":"Production-grade, extensible, high-performance Markdown rendering and editing component","directories":{},"sideEffects":["*.css"],"_nodeVersion":"18.15.0","dependencies":{"katex":"^0.16.11","shiki":"^1.24.0","mermaid":"^11.4.0","unified":"^11.0.5","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","rehype-slug":"^6.0.0","remark-math":"^6.0.0","lucide-react":"^0.474.0","rehype-katex":"^7.0.1","remark-emoji":"^4.0.1","remark-parse":"^11.0.0","remark-rehype":"^11.1.1","github-slugger":"^2.0.0","rehype-sanitize":"^6.0.0","@codemirror/view":"^6.34.0","rehype-stringify":"^10.0.1","remark-directive":"^3.0.0","unist-util-visit":"^5.0.0","@codemirror/state":"^6.4.1","remark-frontmatter":"^5.0.0","hast-util-to-string":"^3.0.1","@codemirror/commands":"^6.7.1","@codemirror/language":"^6.10.3","mdast-util-to-string":"^4.0.0","@codemirror/autocomplete":"^6.18.3","rehype-autolink-headings":"^7.1.0","@codemirror/lang-markdown":"^6.3.0","@codemirror/language-data":"^6.5.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.3","jsdom":"^25.0.1","react":"^18.3.1","vitest":"^2.1.8","react-dom":"^18.3.1","typescript":"^5.7.2","@types/katex":"^0.16.7","@types/react":"^18.3.12","vite-plugin-dts":"^4.3.0","@types/react-dom":"^18.3.1","@vitejs/plugin-react":"^4.3.4","@testing-library/react":"^16.1.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/markdown_1.1.0_1774578463615_0.9822859619658861","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@xcan-cloud/markdown","version":"1.2.0","_id":"@xcan-cloud/markdown@1.2.0","maintainers":[{"name":"xiaolong.liu666","email":"xlliu2@163.com"}],"homepage":"https://github.com/xcancloud/Markdown#readme","bugs":{"url":"https://github.com/xcancloud/Markdown/issues"},"dist":{"shasum":"af183f95539d9e268c7858587e67f45783c45a16","tarball":"https://registry.npmjs.org/@xcan-cloud/markdown/-/markdown-1.2.0.tgz","fileCount":513,"integrity":"sha512-HtUNu+v6dKOYR/yWgPAVhw1m9Zd6y9cfcyWgfhG+hghhK2MxvxBdjHi3AnAHOnRCvmMTt0mpgX0O6BGTWsUwvQ==","signatures":[{"sig":"MEYCIQCTLeMIMd0ynOtHLcX5Z2e8fq3bZQzfeAEUMjDjvTgUyAIhAJ1MRECr2gTrFnk+euJx6/j/Q9TefNrFfOhRxFx8nI7U","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17205456},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"},"./styles":"./dist/styles/index.css","./themes/*":"./dist/styles/themes/*"},"gitHead":"cd8ea237711bbf99126fd2fe02bfc9fd5ad430dd","scripts":{"dev":"cd website && vite","lint":"tsc --noEmit","test":"vitest run","build":"tsc && vite build && cp -r src/styles dist/","deploy":"npm run build && npm publish","test:watch":"vitest","deploy:dry-run":"npm run build && npm publish --dry-run","prepublishOnly":"npm run build"},"_npmUser":{"name":"xiaolong.liu666","email":"xlliu2@163.com"},"repository":{"url":"git+https://github.com/xcancloud/Markdown.git","type":"git"},"_npmVersion":"9.5.0","description":"Production-grade, extensible, high-performance Markdown rendering and editing component","directories":{},"sideEffects":["*.css"],"_nodeVersion":"18.15.0","dependencies":{"katex":"^0.16.11","shiki":"^1.24.0","mermaid":"^11.4.0","unified":"^11.0.5","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","rehype-slug":"^6.0.0","remark-math":"^6.0.0","lucide-react":"^0.474.0","rehype-katex":"^7.0.1","remark-emoji":"^4.0.1","remark-parse":"^11.0.0","remark-rehype":"^11.1.1","github-slugger":"^2.0.0","rehype-sanitize":"^6.0.0","@codemirror/view":"^6.34.0","rehype-stringify":"^10.0.1","remark-directive":"^3.0.0","unist-util-visit":"^5.0.0","@codemirror/state":"^6.4.1","remark-frontmatter":"^5.0.0","hast-util-to-string":"^3.0.1","@codemirror/commands":"^6.7.1","@codemirror/language":"^6.10.3","mdast-util-to-string":"^4.0.0","@codemirror/autocomplete":"^6.18.3","rehype-autolink-headings":"^7.1.0","@codemirror/lang-markdown":"^6.3.0","@codemirror/language-data":"^6.5.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.3","jsdom":"^25.0.1","react":"^18.3.1","vitest":"^2.1.8","react-dom":"^18.3.1","typescript":"^5.7.2","@types/katex":"^0.16.7","@types/react":"^18.3.12","vite-plugin-dts":"^4.3.0","@types/react-dom":"^18.3.1","@vitejs/plugin-react":"^4.3.4","@testing-library/react":"^16.1.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/markdown_1.2.0_1774582005120_0.12370941548884185","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@xcan-cloud/markdown","version":"1.2.1","_id":"@xcan-cloud/markdown@1.2.1","maintainers":[{"name":"xiaolong.liu666","email":"xlliu2@163.com"}],"homepage":"https://github.com/xcancloud/Markdown#readme","bugs":{"url":"https://github.com/xcancloud/Markdown/issues"},"dist":{"shasum":"91cbe88d2b44bfe9d54560e5696d55a410b61d00","tarball":"https://registry.npmjs.org/@xcan-cloud/markdown/-/markdown-1.2.1.tgz","fileCount":513,"integrity":"sha512-+QSdJUNR9CMaVilII7GJx66el8J+bKiln8npAHf76mjf3H3qLJrt+oVi3jWzfUn28u6CFpm2SljDzP2TdVR8RQ==","signatures":[{"sig":"MEQCIEG8CJ/XHa3LmuFzhGcWQKm3v/v9jKjLJyQrR0//S3Q2AiAJrGRF0QlZrt90z32yap4ErJ5XtFHX8q0wkZkBdCTPwg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17205888},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"},"./styles":"./dist/styles/index.css","./themes/*":"./dist/styles/themes/*"},"gitHead":"abe1de6943e9d6ac95481c9282fd9c48f33858a9","scripts":{"dev":"cd website && vite","lint":"tsc --noEmit","test":"vitest run","build":"tsc && vite build && cp -r src/styles dist/","deploy":"npm run build && npm publish","test:watch":"vitest","deploy:dry-run":"npm run build && npm publish --dry-run","prepublishOnly":"npm run build"},"_npmUser":{"name":"xiaolong.liu666","email":"xlliu2@163.com"},"repository":{"url":"git+https://github.com/xcancloud/Markdown.git","type":"git"},"_npmVersion":"9.5.0","description":"Production-grade, extensible, high-performance Markdown rendering and editing component","directories":{},"sideEffects":["*.css"],"_nodeVersion":"18.15.0","dependencies":{"katex":"^0.16.11","shiki":"^1.24.0","mermaid":"^11.4.0","unified":"^11.0.5","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","rehype-slug":"^6.0.0","remark-math":"^6.0.0","lucide-react":"^0.474.0","rehype-katex":"^7.0.1","remark-emoji":"^4.0.1","remark-parse":"^11.0.0","remark-rehype":"^11.1.1","github-slugger":"^2.0.0","rehype-sanitize":"^6.0.0","@codemirror/view":"^6.34.0","rehype-stringify":"^10.0.1","remark-directive":"^3.0.0","unist-util-visit":"^5.0.0","@codemirror/state":"^6.4.1","remark-frontmatter":"^5.0.0","hast-util-to-string":"^3.0.1","@codemirror/commands":"^6.7.1","@codemirror/language":"^6.10.3","mdast-util-to-string":"^4.0.0","@codemirror/autocomplete":"^6.18.3","rehype-autolink-headings":"^7.1.0","@codemirror/lang-markdown":"^6.3.0","@codemirror/language-data":"^6.5.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.3","jsdom":"^25.0.1","react":"^18.3.1","vitest":"^2.1.8","react-dom":"^18.3.1","typescript":"^5.7.2","@types/katex":"^0.16.7","@types/react":"^18.3.12","vite-plugin-dts":"^4.3.0","@types/react-dom":"^18.3.1","@vitejs/plugin-react":"^4.3.4","@testing-library/react":"^16.1.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/markdown_1.2.1_1774584548228_0.6587723366473031","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@xcan-cloud/markdown","version":"1.3.0","_id":"@xcan-cloud/markdown@1.3.0","maintainers":[{"name":"xiaolong.liu666","email":"xlliu2@163.com"}],"homepage":"https://github.com/xcancloud/Markdown#readme","bugs":{"url":"https://github.com/xcancloud/Markdown/issues"},"dist":{"shasum":"3cdb81979da1873c0d9e195a7176534ff62d7249","tarball":"https://registry.npmjs.org/@xcan-cloud/markdown/-/markdown-1.3.0.tgz","fileCount":512,"integrity":"sha512-r59CbLIOBMbrlLB3CsaY18mkbvdp43sMfXiHPQfgc4lXijqfxcyMEU/56/QyIcSttmpiJB+b1X49cDlsARF7zQ==","signatures":[{"sig":"MEYCIQDytvXJvPfgG1cIQpasXIkRD2mqBPu3mzNjpckaOCNongIhAPIXkh8tC1cHI9iPg+a1OF6XkQDOP+fgHA+7md51RrSK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17230448},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"},"./styles":"./dist/styles/index.css","./themes/*":"./dist/styles/themes/*"},"gitHead":"b5271d8438d61c6ff0c7a16c76d868837a7fdf0d","scripts":{"dev":"cd website && vite","lint":"tsc --noEmit","test":"vitest run","build":"tsc && vite build && cp -r src/styles dist/","deploy":"npm run build && npm publish","test:watch":"vitest","deploy:dry-run":"npm run build && npm publish --dry-run","prepublishOnly":"npm run build"},"_npmUser":{"name":"xiaolong.liu666","email":"xlliu2@163.com"},"repository":{"url":"git+https://github.com/xcancloud/Markdown.git","type":"git"},"_npmVersion":"9.5.0","description":"Production-grade, extensible, high-performance Markdown rendering and editing component","directories":{},"sideEffects":["*.css"],"_nodeVersion":"18.15.0","dependencies":{"katex":"^0.16.11","shiki":"^1.24.0","mermaid":"^11.4.0","unified":"^11.0.5","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","rehype-slug":"^6.0.0","remark-math":"^6.0.0","lucide-react":"^0.474.0","rehype-katex":"^7.0.1","remark-emoji":"^4.0.1","remark-parse":"^11.0.0","remark-rehype":"^11.1.1","github-slugger":"^2.0.0","rehype-sanitize":"^6.0.0","@codemirror/view":"^6.34.0","rehype-stringify":"^10.0.1","remark-directive":"^3.0.0","unist-util-visit":"^5.0.0","@codemirror/state":"^6.4.1","remark-frontmatter":"^5.0.0","hast-util-to-string":"^3.0.1","@codemirror/commands":"^6.7.1","@codemirror/language":"^6.10.3","mdast-util-to-string":"^4.0.0","@codemirror/autocomplete":"^6.18.3","rehype-autolink-headings":"^7.1.0","@codemirror/lang-markdown":"^6.3.0","@codemirror/language-data":"^6.5.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.3","jsdom":"^25.0.1","react":"^18.3.1","vitest":"^2.1.8","react-dom":"^18.3.1","typescript":"^5.7.2","@types/katex":"^0.16.7","@types/react":"^18.3.12","vite-plugin-dts":"^4.3.0","@types/react-dom":"^18.3.1","@vitejs/plugin-react":"^4.3.4","@testing-library/react":"^16.1.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/markdown_1.3.0_1774793571348_0.8043130760433161","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"@xcan-cloud/markdown","version":"1.3.1","_id":"@xcan-cloud/markdown@1.3.1","maintainers":[{"name":"xiaolong.liu666","email":"xlliu2@163.com"}],"homepage":"https://github.com/xcancloud/Markdown#readme","bugs":{"url":"https://github.com/xcancloud/Markdown/issues"},"dist":{"shasum":"b2451c6c9e4d3ba1cd2815dc37030c4df75cd8df","tarball":"https://registry.npmjs.org/@xcan-cloud/markdown/-/markdown-1.3.1.tgz","fileCount":240,"integrity":"sha512-PWk4tkwnXr4do+hw7Xuk+TbadSQCoo/WmZTdwtFNV20BxWOGN4zlSwpeQKo3TB3ZTXFxMUtwkAb8xO2S2Tljjg==","signatures":[{"sig":"MEUCIQDfTsD/Y1hFoOmEsFe4o5YgKBrxWLAc6ZzGupj4tWXc+wIgXhk/r3xTg936EzIXpATNb8ZVSgjPMiCF6YKr/u6Aits=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17811794},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"},"./styles":"./dist/styles/index.css","./themes/*":"./dist/styles/themes/*"},"gitHead":"b5271d8438d61c6ff0c7a16c76d868837a7fdf0d","scripts":{"dev":"cd website && vite","lint":"tsc --noEmit","test":"vitest run","build":"tsc && vite build && cp -r src/styles dist/","deploy":"npm run build && npm publish","test:watch":"vitest","deploy:dry-run":"npm run build && npm publish --dry-run","prepublishOnly":"npm run build"},"_npmUser":{"name":"xiaolong.liu666","email":"xlliu2@163.com"},"repository":{"url":"git+https://github.com/xcancloud/Markdown.git","type":"git"},"_npmVersion":"9.5.0","description":"Production-grade, extensible, high-performance Markdown rendering and editing component","directories":{},"sideEffects":["*.css"],"_nodeVersion":"18.15.0","dependencies":{"katex":"^0.16.11","shiki":"^1.24.0","mermaid":"^11.4.0","unified":"^11.0.5","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","rehype-slug":"^6.0.0","remark-math":"^6.0.0","lucide-react":"^0.474.0","rehype-katex":"^7.0.1","remark-emoji":"^4.0.1","remark-parse":"^11.0.0","remark-rehype":"^11.1.1","github-slugger":"^2.0.0","rehype-sanitize":"^6.0.0","@codemirror/view":"^6.34.0","rehype-stringify":"^10.0.1","remark-directive":"^3.0.0","unist-util-visit":"^5.0.0","@codemirror/state":"^6.4.1","remark-frontmatter":"^5.0.0","hast-util-to-string":"^3.0.1","@codemirror/commands":"^6.7.1","@codemirror/language":"^6.10.3","mdast-util-to-string":"^4.0.0","@codemirror/autocomplete":"^6.18.3","rehype-autolink-headings":"^7.1.0","@codemirror/lang-markdown":"^6.3.0","@codemirror/language-data":"^6.5.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.3","jsdom":"^25.0.1","react":"^18.3.1","vitest":"^2.1.8","react-dom":"^18.3.1","typescript":"^5.7.2","@types/katex":"^0.16.7","@types/react":"^18.3.12","vite-plugin-dts":"^4.3.0","@types/react-dom":"^18.3.1","@vitejs/plugin-react":"^4.3.4","@testing-library/react":"^16.1.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/markdown_1.3.1_1774795888391_0.6884724034744594","host":"s3://npm-registry-packages-npm-production"}},"1.3.2":{"name":"@xcan-cloud/markdown","version":"1.3.2","_id":"@xcan-cloud/markdown@1.3.2","maintainers":[{"name":"xiaolong.liu666","email":"xlliu2@163.com"}],"homepage":"https://github.com/xcancloud/Markdown#readme","bugs":{"url":"https://github.com/xcancloud/Markdown/issues"},"dist":{"shasum":"7bfeaa5ae68338a724f2799f66a8f47e204f31f1","tarball":"https://registry.npmjs.org/@xcan-cloud/markdown/-/markdown-1.3.2.tgz","fileCount":240,"integrity":"sha512-4T5V+LP/4gQM15K1ikdonW9kSpRFuJ6/frsN2FSsIcb3yRDhWVY+2jNHutNr0pvLQGkFxyzuFVNi1OYxkVOCqQ==","signatures":[{"sig":"MEUCICzg26FErsu+BRkfkezW1jKxb4QqiTbJcN6WxM/aSEgdAiEAqr4qjIca8guvQgFRkjaNRgEyDuwbHt2PX07dVaOPrXI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17811794},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"},"./styles":"./dist/styles/index.css","./themes/*":"./dist/styles/themes/*"},"gitHead":"c21e4e3cdcba06d0e5ee734ae9b400a4d92bfc04","scripts":{"dev":"cd website && vite","lint":"tsc --noEmit","test":"vitest run","build":"tsc && vite build && cp -r src/styles dist/","deploy":"npm run build && npm publish","test:watch":"vitest","deploy:dry-run":"npm run build && npm publish --dry-run","prepublishOnly":"npm run build"},"_npmUser":{"name":"xiaolong.liu666","email":"xlliu2@163.com"},"repository":{"url":"git+https://github.com/xcancloud/Markdown.git","type":"git"},"_npmVersion":"9.5.0","description":"Production-grade, extensible, high-performance Markdown rendering and editing component","directories":{},"sideEffects":["*.css"],"_nodeVersion":"18.15.0","dependencies":{"katex":"^0.16.11","shiki":"^1.24.0","mermaid":"^11.4.0","unified":"^11.0.5","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","rehype-slug":"^6.0.0","remark-math":"^6.0.0","lucide-react":"^0.474.0","rehype-katex":"^7.0.1","remark-emoji":"^4.0.1","remark-parse":"^11.0.0","remark-rehype":"^11.1.1","github-slugger":"^2.0.0","rehype-sanitize":"^6.0.0","@codemirror/view":"^6.34.0","rehype-stringify":"^10.0.1","remark-directive":"^3.0.0","unist-util-visit":"^5.0.0","@codemirror/state":"^6.4.1","remark-frontmatter":"^5.0.0","hast-util-to-string":"^3.0.1","@codemirror/commands":"^6.7.1","@codemirror/language":"^6.10.3","mdast-util-to-string":"^4.0.0","@codemirror/autocomplete":"^6.18.3","rehype-autolink-headings":"^7.1.0","@codemirror/lang-markdown":"^6.3.0","@codemirror/language-data":"^6.5.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.3","jsdom":"^25.0.1","react":"^18.3.1","vitest":"^2.1.8","react-dom":"^18.3.1","typescript":"^5.7.2","@types/katex":"^0.16.7","@types/react":"^18.3.12","vite-plugin-dts":"^4.3.0","@types/react-dom":"^18.3.1","@vitejs/plugin-react":"^4.3.4","@testing-library/react":"^16.1.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/markdown_1.3.2_1774796493952_0.16126276982363819","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@xcan-cloud/markdown","version":"1.4.0","_id":"@xcan-cloud/markdown@1.4.0","maintainers":[{"name":"xiaolong.liu666","email":"xlliu2@163.com"}],"homepage":"https://github.com/xcancloud/Markdown#readme","bugs":{"url":"https://github.com/xcancloud/Markdown/issues"},"dist":{"shasum":"1c610abe0ae640d6496a31b7fd9997a6f0fc4053","tarball":"https://registry.npmjs.org/@xcan-cloud/markdown/-/markdown-1.4.0.tgz","fileCount":240,"integrity":"sha512-Gm3ST5pHUUUl+b9LaObhud2WDZnbaKzXw8mloxzFxHieu8QOULKPDyxSM/XJj4I//sAnFqgbJzDrxbT3t3+FxQ==","signatures":[{"sig":"MEUCIAr2z7/16/rDI/jfVP1Ve4J1qNJmCdSwERnOhUUniQs4AiEAicxqrQUxnhglcz6FMkD0AtLPT6Ch2l+pJ5C2sM+KlOY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17818872},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"},"./styles":"./dist/styles/index.css","./themes/*":"./dist/styles/themes/*"},"gitHead":"f415b02679f52461e5da133dd67bf6b746e3dfd4","scripts":{"dev":"cd website && vite","lint":"tsc --noEmit","test":"vitest run","build":"tsc && vite build && cp -r src/styles dist/","deploy":"npm run build && npm publish","test:watch":"vitest","deploy:dry-run":"npm run build && npm publish --dry-run","prepublishOnly":"npm run build"},"_npmUser":{"name":"xiaolong.liu666","email":"xlliu2@163.com"},"repository":{"url":"git+https://github.com/xcancloud/Markdown.git","type":"git"},"_npmVersion":"9.5.0","description":"Production-grade, extensible, high-performance Markdown rendering and editing component","directories":{},"sideEffects":["*.css"],"_nodeVersion":"18.15.0","dependencies":{"katex":"^0.16.11","shiki":"^1.24.0","mermaid":"^11.4.0","unified":"^11.0.5","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","rehype-slug":"^6.0.0","remark-math":"^6.0.0","lucide-react":"^0.474.0","rehype-katex":"^7.0.1","remark-emoji":"^4.0.1","remark-parse":"^11.0.0","remark-rehype":"^11.1.1","github-slugger":"^2.0.0","rehype-sanitize":"^6.0.0","@codemirror/view":"^6.34.0","rehype-stringify":"^10.0.1","remark-directive":"^3.0.0","unist-util-visit":"^5.0.0","@codemirror/state":"^6.4.1","remark-frontmatter":"^5.0.0","hast-util-to-string":"^3.0.1","@codemirror/commands":"^6.7.1","@codemirror/language":"^6.10.3","mdast-util-to-string":"^4.0.0","@codemirror/autocomplete":"^6.18.3","rehype-autolink-headings":"^7.1.0","@codemirror/lang-markdown":"^6.3.0","@codemirror/language-data":"^6.5.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.3","jsdom":"^25.0.1","react":"^18.3.1","vitest":"^2.1.8","react-dom":"^18.3.1","typescript":"^5.7.2","@types/katex":"^0.16.7","@types/react":"^18.3.12","vite-plugin-dts":"^4.3.0","@types/react-dom":"^18.3.1","@vitejs/plugin-react":"^4.3.4","@testing-library/react":"^16.1.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/markdown_1.4.0_1774843220646_0.5119992977585908","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@xcan-cloud/markdown","version":"1.5.0","_id":"@xcan-cloud/markdown@1.5.0","maintainers":[{"name":"xiaolong.liu666","email":"xlliu2@163.com"}],"homepage":"https://github.com/xcancloud/Markdown#readme","bugs":{"url":"https://github.com/xcancloud/Markdown/issues"},"dist":{"shasum":"8278befb0806d1f865cfd394bb13be24caa6d301","tarball":"https://registry.npmjs.org/@xcan-cloud/markdown/-/markdown-1.5.0.tgz","fileCount":240,"integrity":"sha512-O+fc3/HZJ+EjctY39mSz2DV89bsJ+U+lDlh/XnG+pF082Y/E4aepBFoz/amNIY+nrQK2fU4g/dxW3VLlpNcKKg==","signatures":[{"sig":"MEQCID4ijsM0+2fYc2bTj3JP4zCbGkI5LIsYY05U1oI3vZMSAiAaYLuKRpzuAEEPJzvvBX1v8fDJUk5DVLE1qLdjEWIZ3A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17822585},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"},"./styles":"./dist/styles/index.css","./themes/*":"./dist/styles/themes/*"},"gitHead":"ff50c38d5cd4c2562c72a1930cdaf534c6e6df96","scripts":{"dev":"cd website && vite","lint":"tsc --noEmit","test":"vitest run","build":"tsc && vite build && cp -r src/styles dist/","deploy":"npm run build && npm publish","test:watch":"vitest","deploy:dry-run":"npm run build && npm publish --dry-run","prepublishOnly":"npm run build"},"_npmUser":{"name":"xiaolong.liu666","email":"xlliu2@163.com"},"repository":{"url":"git+https://github.com/xcancloud/Markdown.git","type":"git"},"_npmVersion":"11.4.1","description":"Production-grade, extensible, high-performance Markdown rendering and editing component","directories":{},"sideEffects":["*.css"],"_nodeVersion":"22.9.0","dependencies":{"katex":"^0.16.11","shiki":"^1.24.0","mermaid":"^11.4.0","unified":"^11.0.5","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","rehype-slug":"^6.0.0","remark-math":"^6.0.0","lucide-react":"^0.474.0","rehype-katex":"^7.0.1","remark-emoji":"^4.0.1","remark-parse":"^11.0.0","remark-rehype":"^11.1.1","github-slugger":"^2.0.0","rehype-sanitize":"^6.0.0","@codemirror/view":"^6.34.0","rehype-stringify":"^10.0.1","remark-directive":"^3.0.0","unist-util-visit":"^5.0.0","@codemirror/state":"^6.4.1","remark-frontmatter":"^5.0.0","hast-util-to-string":"^3.0.1","@codemirror/commands":"^6.7.1","@codemirror/language":"^6.10.3","mdast-util-to-string":"^4.0.0","@codemirror/autocomplete":"^6.18.3","rehype-autolink-headings":"^7.1.0","@codemirror/lang-markdown":"^6.3.0","@codemirror/language-data":"^6.5.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.3","jsdom":"^25.0.1","react":"^18.3.1","vitest":"^2.1.8","react-dom":"^18.3.1","typescript":"^5.7.2","@types/katex":"^0.16.7","@types/react":"^18.3.12","vite-plugin-dts":"^4.3.0","@types/react-dom":"^18.3.1","@vitejs/plugin-react":"^4.3.4","@testing-library/react":"^16.1.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/markdown_1.5.0_1776425312066_0.011282025864530087","host":"s3://npm-registry-packages-npm-production"}},"1.5.1":{"name":"@xcan-cloud/markdown","version":"1.5.1","_id":"@xcan-cloud/markdown@1.5.1","maintainers":[{"name":"xiaolong.liu666","email":"xlliu2@163.com"}],"homepage":"https://github.com/xcancloud/Markdown#readme","bugs":{"url":"https://github.com/xcancloud/Markdown/issues"},"dist":{"shasum":"75a331ee0e3d9cb94a5bb31621ba5491ea8ebe03","tarball":"https://registry.npmjs.org/@xcan-cloud/markdown/-/markdown-1.5.1.tgz","fileCount":240,"integrity":"sha512-e+td4VZO6tr8vKkJhas3wTZgZoVwh+8YTKFePB4nKrZ2e0Le3bwNp3jAL/h8uxqSPmfdtyQ6vlABFe4CxGkGmg==","signatures":[{"sig":"MEUCIEmJhwZiBOj6fTamvzFovf7pnKunrI81i+PFpUciJ2ZbAiEA8L2NQutiNqsOcYXR0gKhAAW13j2hlill+IguMDlFRQo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17828032},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"},"./styles":"./dist/styles/index.css","./themes/*":"./dist/styles/themes/*"},"gitHead":"f4a276d6e7d8f448807a227bd0da255447039a33","scripts":{"dev":"cd website && vite","lint":"tsc --noEmit","test":"vitest run","build":"tsc && vite build && cp -r src/styles dist/","deploy":"npm run build && npm publish","test:watch":"vitest","deploy:dry-run":"npm run build && npm publish --dry-run","prepublishOnly":"npm run build"},"_npmUser":{"name":"xiaolong.liu666","email":"xlliu2@163.com"},"repository":{"url":"git+https://github.com/xcancloud/Markdown.git","type":"git"},"_npmVersion":"11.4.1","description":"Production-grade, extensible, high-performance Markdown rendering and editing component","directories":{},"sideEffects":["*.css"],"_nodeVersion":"22.9.0","dependencies":{"katex":"^0.16.11","shiki":"^1.24.0","mermaid":"^11.4.0","unified":"^11.0.5","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","rehype-slug":"^6.0.0","remark-math":"^6.0.0","lucide-react":"^0.474.0","rehype-katex":"^7.0.1","remark-emoji":"^4.0.1","remark-parse":"^11.0.0","remark-rehype":"^11.1.1","github-slugger":"^2.0.0","rehype-sanitize":"^6.0.0","@codemirror/view":"^6.34.0","rehype-stringify":"^10.0.1","remark-directive":"^3.0.0","unist-util-visit":"^5.0.0","@codemirror/state":"^6.4.1","remark-frontmatter":"^5.0.0","hast-util-to-string":"^3.0.1","@codemirror/commands":"^6.7.1","@codemirror/language":"^6.10.3","mdast-util-to-string":"^4.0.0","@codemirror/autocomplete":"^6.18.3","rehype-autolink-headings":"^7.1.0","@codemirror/lang-markdown":"^6.3.0","@codemirror/language-data":"^6.5.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.3","jsdom":"^25.0.1","react":"^18.3.1","vitest":"^2.1.8","react-dom":"^18.3.1","typescript":"^5.7.2","@types/katex":"^0.16.7","@types/react":"^18.3.12","vite-plugin-dts":"^4.3.0","@types/react-dom":"^18.3.1","@vitejs/plugin-react":"^4.3.4","@testing-library/react":"^16.1.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/markdown_1.5.1_1776495789215_0.7971289605545178","host":"s3://npm-registry-packages-npm-production"}},"1.5.2":{"name":"@xcan-cloud/markdown","version":"1.5.2","_id":"@xcan-cloud/markdown@1.5.2","maintainers":[{"name":"xiaolong.liu666","email":"xlliu2@163.com"}],"homepage":"https://github.com/xcancloud/Markdown#readme","bugs":{"url":"https://github.com/xcancloud/Markdown/issues"},"dist":{"shasum":"c66f2d85755fe1a2a57e865f3a4c1e0c8e6e3e9e","tarball":"https://registry.npmjs.org/@xcan-cloud/markdown/-/markdown-1.5.2.tgz","fileCount":240,"integrity":"sha512-vDnfz287pGMVGQLCkMxqyhEpRYRxadFwSj7fnNF1WSRD5jvg3Go05nHZ2AI0ByD2TCx9HmNwm1pXrD6q8ejf/A==","signatures":[{"sig":"MEUCIQCEcW+7J2zEb25d66AFpc8qUaLpYQynLxWY9YV3Vji1tQIga0oqRRCsl3uA4lKlAEgbVSAWMhIPfDaT9R7N8tEVa1E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17830714},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"},"./styles":"./dist/styles/index.css","./themes/*":"./dist/styles/themes/*"},"gitHead":"42b09cb73be7ecc8fb97834c6b0b418d075514f3","scripts":{"dev":"cd website && vite","lint":"tsc --noEmit","test":"vitest run","build":"tsc && vite build && cp -r src/styles dist/","deploy":"npm run build && npm publish","test:watch":"vitest","deploy:dry-run":"npm run build && npm publish --dry-run","prepublishOnly":"npm run build"},"_npmUser":{"name":"xiaolong.liu666","email":"xlliu2@163.com"},"repository":{"url":"git+https://github.com/xcancloud/Markdown.git","type":"git"},"_npmVersion":"11.4.1","description":"Production-grade, extensible, high-performance Markdown rendering and editing component","directories":{},"sideEffects":["*.css"],"_nodeVersion":"22.9.0","dependencies":{"katex":"^0.16.11","shiki":"^1.24.0","mermaid":"^11.4.0","unified":"^11.0.5","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","rehype-slug":"^6.0.0","remark-math":"^6.0.0","lucide-react":"^0.474.0","rehype-katex":"^7.0.1","remark-emoji":"^4.0.1","remark-parse":"^11.0.0","remark-rehype":"^11.1.1","github-slugger":"^2.0.0","rehype-sanitize":"^6.0.0","@codemirror/view":"^6.34.0","rehype-stringify":"^10.0.1","remark-directive":"^3.0.0","unist-util-visit":"^5.0.0","@codemirror/state":"^6.4.1","remark-frontmatter":"^5.0.0","hast-util-to-string":"^3.0.1","@codemirror/commands":"^6.7.1","@codemirror/language":"^6.10.3","mdast-util-to-string":"^4.0.0","@codemirror/autocomplete":"^6.18.3","rehype-autolink-headings":"^7.1.0","@codemirror/lang-markdown":"^6.3.0","@codemirror/language-data":"^6.5.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.3","jsdom":"^25.0.1","react":"^18.3.1","vitest":"^2.1.8","react-dom":"^18.3.1","typescript":"^5.7.2","@types/katex":"^0.16.7","@types/react":"^18.3.12","vite-plugin-dts":"^4.3.0","@types/react-dom":"^18.3.1","@vitejs/plugin-react":"^4.3.4","@testing-library/react":"^16.1.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/markdown_1.5.2_1776498609140_0.9370311639192208","host":"s3://npm-registry-packages-npm-production"}},"1.5.3":{"name":"@xcan-cloud/markdown","version":"1.5.3","_id":"@xcan-cloud/markdown@1.5.3","maintainers":[{"name":"xiaolong.liu666","email":"xlliu2@163.com"}],"homepage":"https://github.com/xcancloud/Markdown#readme","bugs":{"url":"https://github.com/xcancloud/Markdown/issues"},"dist":{"shasum":"168dc066bb906d60d570f49febaa8a5d94db3003","tarball":"https://registry.npmjs.org/@xcan-cloud/markdown/-/markdown-1.5.3.tgz","fileCount":240,"integrity":"sha512-6i2/ZreFFwHSocld3uOII6hl8e/EhWTDJEiPm2WXvWizC+Nd/aoPeNVadwbNUKj+UCFT/CXvcJ13J6lg4277aw==","signatures":[{"sig":"MEUCIQCaJBeV6FPaVniCRcVTVbZaeCVLsDkdIS5obVa9sf9jgAIgUIHsVrwO4dtpKYTz55qBIeSU2rrT3EyS5+6bXxjsF0U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17830738},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"},"./styles":"./dist/styles/index.css","./themes/*":"./dist/styles/themes/*"},"gitHead":"42b09cb73be7ecc8fb97834c6b0b418d075514f3","scripts":{"dev":"cd website && vite","lint":"tsc --noEmit","test":"vitest run","build":"tsc && vite build && cp -r src/styles dist/","deploy":"npm run build && npm publish","test:watch":"vitest","deploy:dry-run":"npm run build && npm publish --dry-run","prepublishOnly":"npm run build"},"_npmUser":{"name":"xiaolong.liu666","email":"xlliu2@163.com"},"repository":{"url":"git+https://github.com/xcancloud/Markdown.git","type":"git"},"_npmVersion":"11.4.1","description":"Production-grade, extensible, high-performance Markdown rendering and editing component","directories":{},"sideEffects":["*.css"],"_nodeVersion":"22.9.0","dependencies":{"katex":"^0.16.11","shiki":"^1.24.0","mermaid":"^11.4.0","unified":"^11.0.5","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","rehype-slug":"^6.0.0","remark-math":"^6.0.0","lucide-react":"^0.474.0","rehype-katex":"^7.0.1","remark-emoji":"^4.0.1","remark-parse":"^11.0.0","remark-rehype":"^11.1.1","github-slugger":"^2.0.0","rehype-sanitize":"^6.0.0","@codemirror/view":"^6.34.0","rehype-stringify":"^10.0.1","remark-directive":"^3.0.0","unist-util-visit":"^5.0.0","@codemirror/state":"^6.4.1","remark-frontmatter":"^5.0.0","hast-util-to-string":"^3.0.1","@codemirror/commands":"^6.7.1","@codemirror/language":"^6.10.3","mdast-util-to-string":"^4.0.0","@codemirror/autocomplete":"^6.18.3","rehype-autolink-headings":"^7.1.0","@codemirror/lang-markdown":"^6.3.0","@codemirror/language-data":"^6.5.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.3","jsdom":"^25.0.1","react":"^18.3.1","vitest":"^2.1.8","react-dom":"^18.3.1","typescript":"^5.7.2","@types/katex":"^0.16.7","@types/react":"^18.3.12","vite-plugin-dts":"^4.3.0","@types/react-dom":"^18.3.1","@vitejs/plugin-react":"^4.3.4","@testing-library/react":"^16.1.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/markdown_1.5.3_1776511246759_0.4960014361931435","host":"s3://npm-registry-packages-npm-production"}},"1.5.4":{"name":"@xcan-cloud/markdown","version":"1.5.4","_id":"@xcan-cloud/markdown@1.5.4","maintainers":[{"name":"xiaolong.liu666","email":"xlliu2@163.com"}],"homepage":"https://github.com/xcancloud/Markdown#readme","bugs":{"url":"https://github.com/xcancloud/Markdown/issues"},"dist":{"shasum":"c9a6967e00a2ef487ab81e8dd51b18395a1e9fbe","tarball":"https://registry.npmjs.org/@xcan-cloud/markdown/-/markdown-1.5.4.tgz","fileCount":240,"integrity":"sha512-w2ewCXEX8FmKvRP/wloZWV7lXv4p37NMAy6wOvJ6VawvU8+Bi35sgBfVsybf0v0xWhpApNX+NYefvebZ39eoLA==","signatures":[{"sig":"MEUCIAeYNe2vb6/vDBLI6jf+ByKDiaRwxt4C5d4ifVKQfob9AiEAz5gKNsO1GM9UkBTAl1QrH2e7F/IPoeHX5ZagBO7sh4E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17830815},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"},"./styles":"./dist/styles/index.css","./themes/*":"./dist/styles/themes/*"},"gitHead":"ee49cdec770a88fa544500256c57fc60cdeedd21","scripts":{"dev":"cd website && vite","lint":"tsc --noEmit","test":"vitest run","build":"tsc && vite build && cp -r src/styles dist/","deploy":"npm run build && npm publish","test:watch":"vitest","deploy:dry-run":"npm run build && npm publish --dry-run","prepublishOnly":"npm run build"},"_npmUser":{"name":"xiaolong.liu666","email":"xlliu2@163.com"},"repository":{"url":"git+https://github.com/xcancloud/Markdown.git","type":"git"},"_npmVersion":"11.4.1","description":"Production-grade, extensible, high-performance Markdown rendering and editing component","directories":{},"sideEffects":["*.css"],"_nodeVersion":"22.9.0","dependencies":{"katex":"^0.16.11","shiki":"^1.24.0","mermaid":"^11.4.0","unified":"^11.0.5","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","rehype-slug":"^6.0.0","remark-math":"^6.0.0","lucide-react":"^0.474.0","rehype-katex":"^7.0.1","remark-emoji":"^4.0.1","remark-parse":"^11.0.0","remark-rehype":"^11.1.1","github-slugger":"^2.0.0","rehype-sanitize":"^6.0.0","@codemirror/view":"^6.34.0","rehype-stringify":"^10.0.1","remark-directive":"^3.0.0","unist-util-visit":"^5.0.0","@codemirror/state":"^6.4.1","remark-frontmatter":"^5.0.0","hast-util-to-string":"^3.0.1","@codemirror/commands":"^6.7.1","@codemirror/language":"^6.10.3","mdast-util-to-string":"^4.0.0","@codemirror/autocomplete":"^6.18.3","rehype-autolink-headings":"^7.1.0","@codemirror/lang-markdown":"^6.3.0","@codemirror/language-data":"^6.5.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.3","jsdom":"^25.0.1","react":"^18.3.1","vitest":"^2.1.8","react-dom":"^18.3.1","typescript":"^5.7.2","@types/katex":"^0.16.7","@types/react":"^18.3.12","vite-plugin-dts":"^4.3.0","@types/react-dom":"^18.3.1","@vitejs/plugin-react":"^4.3.4","@testing-library/react":"^16.1.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/markdown_1.5.4_1776511581039_0.6391938169361022","host":"s3://npm-registry-packages-npm-production"}},"1.5.5":{"name":"@xcan-cloud/markdown","version":"1.5.5","_id":"@xcan-cloud/markdown@1.5.5","maintainers":[{"name":"xiaolong.liu666","email":"xlliu2@163.com"}],"homepage":"https://github.com/xcancloud/Markdown#readme","bugs":{"url":"https://github.com/xcancloud/Markdown/issues"},"dist":{"shasum":"d0e31869640630f490034689cb76f35eee4be1d3","tarball":"https://registry.npmjs.org/@xcan-cloud/markdown/-/markdown-1.5.5.tgz","fileCount":240,"integrity":"sha512-C6Bto950qXjyEtz9RPwBud1+FbKnR++BR0ycUm/2QAhhrdqNDLUU6tc02rUMbv20DZ9KJjownClb/i1YmMAwHw==","signatures":[{"sig":"MEYCIQCw0qmooipHwzzy0bHbncxXP5csq2/wjxM0KJtMVDUybgIhALMjwjZxtaabNy2F//EBb5s+mDqVFEGofyLyh5LF8voU","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17830814},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"},"./styles":"./dist/styles/index.css","./themes/*":"./dist/styles/themes/*"},"gitHead":"b42d50bd6ef504888579946caea0eb60ab0d2f7d","scripts":{"dev":"cd website && vite","lint":"tsc --noEmit","test":"vitest run","build":"tsc && vite build && cp -r src/styles dist/","deploy":"npm run build && npm publish","test:watch":"vitest","deploy:dry-run":"npm run build && npm publish --dry-run","prepublishOnly":"npm run build"},"_npmUser":{"name":"xiaolong.liu666","email":"xlliu2@163.com"},"repository":{"url":"git+https://github.com/xcancloud/Markdown.git","type":"git"},"_npmVersion":"11.4.1","description":"Production-grade, extensible, high-performance Markdown rendering and editing component","directories":{},"sideEffects":["*.css"],"_nodeVersion":"22.9.0","dependencies":{"katex":"^0.16.11","shiki":"^1.24.0","mermaid":"^11.4.0","unified":"^11.0.5","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","rehype-slug":"^6.0.0","remark-math":"^6.0.0","lucide-react":"^0.474.0","rehype-katex":"^7.0.1","remark-emoji":"^4.0.1","remark-parse":"^11.0.0","remark-rehype":"^11.1.1","github-slugger":"^2.0.0","rehype-sanitize":"^6.0.0","@codemirror/view":"^6.34.0","rehype-stringify":"^10.0.1","remark-directive":"^3.0.0","unist-util-visit":"^5.0.0","@codemirror/state":"^6.4.1","remark-frontmatter":"^5.0.0","hast-util-to-string":"^3.0.1","@codemirror/commands":"^6.7.1","@codemirror/language":"^6.10.3","mdast-util-to-string":"^4.0.0","@codemirror/autocomplete":"^6.18.3","rehype-autolink-headings":"^7.1.0","@codemirror/lang-markdown":"^6.3.0","@codemirror/language-data":"^6.5.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.3","jsdom":"^25.0.1","react":"^18.3.1","vitest":"^2.1.8","react-dom":"^18.3.1","typescript":"^5.7.2","@types/katex":"^0.16.7","@types/react":"^18.3.12","vite-plugin-dts":"^4.3.0","@types/react-dom":"^18.3.1","@vitejs/plugin-react":"^4.3.4","@testing-library/react":"^16.1.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/markdown_1.5.5_1776521736559_0.8679435592868785","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"@xcan-cloud/markdown","version":"1.6.0","_id":"@xcan-cloud/markdown@1.6.0","maintainers":[{"name":"xiaolong.liu666","email":"xlliu2@163.com"}],"homepage":"https://github.com/xcancloud/Markdown#readme","bugs":{"url":"https://github.com/xcancloud/Markdown/issues"},"dist":{"shasum":"3e4780639add390050a424ec54515defe3c91636","tarball":"https://registry.npmjs.org/@xcan-cloud/markdown/-/markdown-1.6.0.tgz","fileCount":240,"integrity":"sha512-wT4+ARnJ5wGbx0U5llTytYeRIOcGAh/L7zbxMOB7MW6K/dq0ESikJ/8pcrGKWhLq4shbbg7uk8JTSMlEx3DPVQ==","signatures":[{"sig":"MEUCIQDOJ/sncJRuO9uNOcFuj6h1vePgtBQg8/O7eI26gpS86QIgZR5DrR0Rq9sfq9yISBVAsZwQEe2wFFuIGIDcfHij6TA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17852557},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"},"./styles":"./dist/styles/index.css","./themes/*":"./dist/styles/themes/*"},"gitHead":"b540fd13ad9cba450aa4fdb695ad0fe1adcdbbd1","scripts":{"dev":"cd website && vite","lint":"tsc --noEmit","test":"vitest run","build":"tsc && vite build && cp -r src/styles dist/","deploy":"npm run build && npm publish","test:watch":"vitest","deploy:dry-run":"npm run build && npm publish --dry-run","prepublishOnly":"npm run build"},"_npmUser":{"name":"xiaolong.liu666","email":"xlliu2@163.com"},"repository":{"url":"git+https://github.com/xcancloud/Markdown.git","type":"git"},"_npmVersion":"9.5.0","description":"Production-grade, extensible, high-performance Markdown rendering and editing component","directories":{},"sideEffects":["*.css"],"_nodeVersion":"18.15.0","dependencies":{"katex":"^0.16.11","shiki":"^1.24.0","mermaid":"^11.4.0","unified":"^11.0.5","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","rehype-slug":"^6.0.0","remark-math":"^6.0.0","lucide-react":"^0.474.0","rehype-katex":"^7.0.1","remark-emoji":"^4.0.1","remark-parse":"^11.0.0","remark-rehype":"^11.1.1","github-slugger":"^2.0.0","rehype-sanitize":"^6.0.0","@codemirror/view":"^6.34.0","rehype-stringify":"^10.0.1","remark-directive":"^3.0.0","unist-util-visit":"^5.0.0","@codemirror/state":"^6.4.1","remark-frontmatter":"^5.0.0","hast-util-to-string":"^3.0.1","@codemirror/commands":"^6.7.1","@codemirror/language":"^6.10.3","mdast-util-to-string":"^4.0.0","@codemirror/autocomplete":"^6.18.3","rehype-autolink-headings":"^7.1.0","@codemirror/lang-markdown":"^6.3.0","@codemirror/language-data":"^6.5.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.3","jsdom":"^25.0.1","react":"^18.3.1","vitest":"^2.1.8","react-dom":"^18.3.1","typescript":"^5.7.2","@types/katex":"^0.16.7","@types/react":"^18.3.12","vite-plugin-dts":"^4.3.0","@types/react-dom":"^18.3.1","@vitejs/plugin-react":"^4.3.4","@testing-library/react":"^16.1.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/markdown_1.6.0_1776664188563_0.06468738716227396","host":"s3://npm-registry-packages-npm-production"}},"1.7.0":{"name":"@xcan-cloud/markdown","version":"1.7.0","_id":"@xcan-cloud/markdown@1.7.0","maintainers":[{"name":"xiaolong.liu666","email":"xlliu2@163.com"}],"homepage":"https://github.com/xcancloud/Markdown#readme","bugs":{"url":"https://github.com/xcancloud/Markdown/issues"},"dist":{"shasum":"41fb04fb3f6df37bda44153ddaf6af57f7f5a5b7","tarball":"https://registry.npmjs.org/@xcan-cloud/markdown/-/markdown-1.7.0.tgz","fileCount":241,"integrity":"sha512-Ga+9niG5t8+frqUnzx6dNSn2KPh0nSKLFSD6oVdgL73ec15fPGT18fwF0gifgUmBjRGR8Zr29k9FwxMCNFhS5A==","signatures":[{"sig":"MEUCIQDo8tFQT1P9fSFldEsXtcHBxuR66RGyLzmW5NSHeKFFGgIgZfCZhW967vwK7TVAgXu9KunFAiBSBXL6p/SoxlLHSnc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17877991},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"},"./styles":"./dist/styles/index.css","./themes/*":"./dist/styles/themes/*"},"gitHead":"71e64b936665d15b6bc18e0e4057b8e9e9e01b38","scripts":{"dev":"cd website && vite","lint":"tsc --noEmit","test":"vitest run","build":"tsc && vite build && cp -r src/styles dist/","deploy":"npm run build && npm publish","test:watch":"vitest","deploy:dry-run":"npm run build && npm publish --dry-run","prepublishOnly":"npm run build"},"_npmUser":{"name":"xiaolong.liu666","email":"xlliu2@163.com"},"repository":{"url":"git+https://github.com/xcancloud/Markdown.git","type":"git"},"_npmVersion":"9.5.0","description":"Production-grade, extensible, high-performance Markdown rendering and editing component","directories":{},"sideEffects":["*.css"],"_nodeVersion":"18.15.0","dependencies":{"katex":"^0.16.11","shiki":"^1.24.0","mermaid":"^11.4.0","unified":"^11.0.5","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","rehype-slug":"^6.0.0","remark-math":"^6.0.0","lucide-react":"^0.474.0","rehype-katex":"^7.0.1","remark-emoji":"^4.0.1","remark-parse":"^11.0.0","remark-rehype":"^11.1.1","github-slugger":"^2.0.0","rehype-sanitize":"^6.0.0","@codemirror/view":"^6.34.0","rehype-stringify":"^10.0.1","remark-directive":"^3.0.0","unist-util-visit":"^5.0.0","@codemirror/state":"^6.4.1","remark-frontmatter":"^5.0.0","hast-util-to-string":"^3.0.1","@codemirror/commands":"^6.7.1","@codemirror/language":"^6.10.3","mdast-util-to-string":"^4.0.0","@codemirror/autocomplete":"^6.18.3","rehype-autolink-headings":"^7.1.0","@codemirror/lang-markdown":"^6.3.0","@codemirror/language-data":"^6.5.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.3","jsdom":"^25.0.1","react":"^18.3.1","vitest":"^2.1.8","react-dom":"^18.3.1","typescript":"^5.7.2","@types/katex":"^0.16.7","@types/react":"^18.3.12","vite-plugin-dts":"^4.3.0","@types/react-dom":"^18.3.1","@vitejs/plugin-react":"^4.3.4","@testing-library/react":"^16.1.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/markdown_1.7.0_1781670406059_0.8891988550148195","host":"s3://npm-registry-packages-npm-production"}},"1.7.1":{"name":"@xcan-cloud/markdown","version":"1.7.1","_id":"@xcan-cloud/markdown@1.7.1","maintainers":[{"name":"xiaolong.liu666","email":"xlliu2@163.com"}],"homepage":"https://github.com/xcancloud/Markdown#readme","bugs":{"url":"https://github.com/xcancloud/Markdown/issues"},"dist":{"shasum":"41ee91dc1b861674022238dd513e51c273e8c5cf","tarball":"https://registry.npmjs.org/@xcan-cloud/markdown/-/markdown-1.7.1.tgz","fileCount":241,"integrity":"sha512-QrCZ+Odrrd4HysiuZUV01u7CX82tRB0aFc//oRDdh93PU5amyvA4s1mKWBwzEWD9bdqmoQv58mT6ztOrBQeWlA==","signatures":[{"sig":"MEYCIQCRvaaI1wHH4SXmWxpyndMCRzMJsUOwurboTjZVdNmyWAIhANgymXHpbl/FL9qjbF5o5/E4do6d5qVjWKhnXFQyBFXt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17892103},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"},"./styles":"./dist/styles/index.css","./themes/*":"./dist/styles/themes/*"},"gitHead":"71e64b936665d15b6bc18e0e4057b8e9e9e01b38","scripts":{"dev":"cd website && vite","lint":"tsc --noEmit","test":"vitest run","build":"tsc && vite build && cp -r src/styles dist/","deploy":"npm run build && npm publish","test:watch":"vitest","deploy:dry-run":"npm run build && npm publish --dry-run","prepublishOnly":"npm run build"},"_npmUser":{"name":"xiaolong.liu666","email":"xlliu2@163.com"},"repository":{"url":"git+https://github.com/xcancloud/Markdown.git","type":"git"},"_npmVersion":"9.5.0","description":"Production-grade, extensible, high-performance Markdown rendering and editing component","directories":{},"sideEffects":["*.css"],"_nodeVersion":"18.15.0","dependencies":{"katex":"^0.16.11","shiki":"^1.24.0","mermaid":"^11.4.0","unified":"^11.0.5","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","rehype-slug":"^6.0.0","remark-math":"^6.0.0","lucide-react":"^0.474.0","rehype-katex":"^7.0.1","remark-emoji":"^4.0.1","remark-parse":"^11.0.0","remark-rehype":"^11.1.1","github-slugger":"^2.0.0","rehype-sanitize":"^6.0.0","@codemirror/view":"^6.34.0","rehype-stringify":"^10.0.1","remark-directive":"^3.0.0","unist-util-visit":"^5.0.0","@codemirror/state":"^6.4.1","remark-frontmatter":"^5.0.0","hast-util-to-string":"^3.0.1","@codemirror/commands":"^6.7.1","@codemirror/language":"^6.10.3","mdast-util-to-string":"^4.0.0","@codemirror/autocomplete":"^6.18.3","rehype-autolink-headings":"^7.1.0","@codemirror/lang-markdown":"^6.3.0","@codemirror/language-data":"^6.5.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.3","jsdom":"^25.0.1","react":"^18.3.1","vitest":"^2.1.8","react-dom":"^18.3.1","typescript":"^5.7.2","@types/katex":"^0.16.7","@types/react":"^18.3.12","vite-plugin-dts":"^4.3.0","@types/react-dom":"^18.3.1","@vitejs/plugin-react":"^4.3.4","@testing-library/react":"^16.1.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/markdown_1.7.1_1781691665262_0.37293194353780446","host":"s3://npm-registry-packages-npm-production"}},"1.7.2":{"name":"@xcan-cloud/markdown","version":"1.7.2","_id":"@xcan-cloud/markdown@1.7.2","maintainers":[{"name":"xiaolong.liu666","email":"xlliu2@163.com"}],"homepage":"https://github.com/xcancloud/Markdown#readme","bugs":{"url":"https://github.com/xcancloud/Markdown/issues"},"dist":{"shasum":"bc27f3bffa03dbf9912afcf023b11873e3ec6b01","tarball":"https://registry.npmjs.org/@xcan-cloud/markdown/-/markdown-1.7.2.tgz","fileCount":241,"integrity":"sha512-ZO4+ssmAi33fWMkMBWWWQPIjR2hOeVEPjrIQRI2eACVr+1fsdPSghnIPZcp8gfW+/c7Wxjei5joZBVVQ6qlN0A==","signatures":[{"sig":"MEQCIBtsoOpglGYGkovMHiASg4zB2AZlxV9IcUHe4MHv5/7IAiAg0jq2fWRL6VnFUZ5JJ+SK+1cnUxBFDB/RY5muWcEk5A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17893216},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"},"./styles":"./dist/styles/index.css","./themes/*":"./dist/styles/themes/*"},"gitHead":"4262b9a088dee1f13f9a46af76feb7d3d4234c6c","scripts":{"dev":"cd website && vite","lint":"tsc --noEmit","test":"vitest run","build":"tsc && vite build && cp -r src/styles dist/","deploy":"npm run build && npm publish","test:watch":"vitest","deploy:dry-run":"npm run build && npm publish --dry-run","prepublishOnly":"npm run build"},"_npmUser":{"name":"xiaolong.liu666","email":"xlliu2@163.com"},"repository":{"url":"git+https://github.com/xcancloud/Markdown.git","type":"git"},"_npmVersion":"11.4.1","description":"Production-grade, extensible, high-performance Markdown rendering and editing component","directories":{},"sideEffects":["*.css"],"_nodeVersion":"22.9.0","dependencies":{"katex":"^0.16.11","shiki":"^1.24.0","mermaid":"^11.4.0","unified":"^11.0.5","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","rehype-slug":"^6.0.0","remark-math":"^6.0.0","lucide-react":"^0.474.0","rehype-katex":"^7.0.1","remark-emoji":"^4.0.1","remark-parse":"^11.0.0","remark-rehype":"^11.1.1","github-slugger":"^2.0.0","rehype-sanitize":"^6.0.0","@codemirror/view":"^6.34.0","rehype-stringify":"^10.0.1","remark-directive":"^3.0.0","unist-util-visit":"^5.0.0","@codemirror/state":"^6.4.1","remark-frontmatter":"^5.0.0","hast-util-to-string":"^3.0.1","@codemirror/commands":"^6.7.1","@codemirror/language":"^6.10.3","mdast-util-to-string":"^4.0.0","@codemirror/autocomplete":"^6.18.3","rehype-autolink-headings":"^7.1.0","@codemirror/lang-markdown":"^6.3.0","@codemirror/language-data":"^6.5.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.3","jsdom":"^25.0.1","react":"^18.3.1","vitest":"^2.1.8","react-dom":"^18.3.1","typescript":"^5.7.2","@types/katex":"^0.16.7","@types/react":"^18.3.12","vite-plugin-dts":"^4.3.0","@types/react-dom":"^18.3.1","@vitejs/plugin-react":"^4.3.4","@testing-library/react":"^16.1.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/markdown_1.7.2_1782109036422_0.9349696270441843","host":"s3://npm-registry-packages-npm-production"}},"1.8.0":{"name":"@xcan-cloud/markdown","version":"1.8.0","description":"Production-grade, extensible, high-performance Markdown rendering and editing component","publishConfig":{"registry":"https://registry.npmjs.org/","access":"public"},"repository":{"type":"git","url":"git+https://github.com/xcancloud/Markdown.git"},"type":"module","scripts":{"dev":"cd website && vite","build":"tsc && vite build && cp -r src/styles dist/","test":"vitest run","test:watch":"vitest","lint":"tsc --noEmit","prepublishOnly":"npm run build","deploy":"npm run build && npm publish","deploy:dry-run":"npm run build && npm publish --dry-run"},"main":"./dist/index.cjs","module":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"},"./viewer":{"types":"./dist/viewer.d.ts","import":"./dist/viewer.mjs","require":"./dist/viewer.cjs"},"./renderer":{"types":"./dist/renderer.d.ts","import":"./dist/renderer.mjs","require":"./dist/renderer.cjs"},"./editor":{"types":"./dist/editor.d.ts","import":"./dist/editor.mjs","require":"./dist/editor.cjs"},"./styles":"./dist/styles/index.css","./styles/renderer":"./dist/styles/renderer.css","./styles/editor":"./dist/styles/editor.css","./themes/*":"./dist/styles/themes/*"},"sideEffects":["*.css"],"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"dependencies":{"@codemirror/autocomplete":"^6.18.3","@codemirror/commands":"^6.7.1","@codemirror/lang-markdown":"^6.3.0","@codemirror/language":"^6.10.3","@codemirror/language-data":"^6.5.1","@codemirror/state":"^6.4.1","@codemirror/view":"^6.34.0","github-slugger":"^2.0.0","hast-util-to-string":"^3.0.1","katex":"^0.16.11","lucide-react":"^0.474.0","mdast-util-to-string":"^4.0.0","mermaid":"^11.4.0","rehype-autolink-headings":"^7.1.0","rehype-katex":"^7.0.1","rehype-raw":"^7.0.0","rehype-sanitize":"^6.0.0","rehype-slug":"^6.0.0","rehype-stringify":"^10.0.1","remark-directive":"^3.0.0","remark-emoji":"^4.0.1","remark-frontmatter":"^5.0.0","remark-gfm":"^4.0.0","remark-math":"^6.0.0","remark-parse":"^11.0.0","remark-rehype":"^11.1.1","shiki":"^1.24.0","unified":"^11.0.5","unist-util-visit":"^5.0.0"},"devDependencies":{"@testing-library/react":"^16.1.0","@types/katex":"^0.16.7","@types/react":"^18.3.12","@types/react-dom":"^18.3.1","@vitejs/plugin-react":"^4.3.4","jsdom":"^25.0.1","react":"^18.3.1","react-dom":"^18.3.1","typescript":"^5.7.2","vite":"^6.0.3","vite-plugin-dts":"^4.3.0","vitest":"^2.1.8"},"gitHead":"cc0f9013819aec13e8832a3feb56d6309fe10a53","bugs":{"url":"https://github.com/xcancloud/Markdown/issues"},"homepage":"https://github.com/xcancloud/Markdown#readme","_id":"@xcan-cloud/markdown@1.8.0","_nodeVersion":"18.15.0","_npmVersion":"9.5.0","dist":{"integrity":"sha512-E0E7QCCWc56J042lbSuhBiDipmCDsrPnitBZ+LnIlYlynmPqaaYSFGeeCtAFiEDnvIse0pCcXQaLotBQBqqoqg==","shasum":"9d6d96c468a606c5018318b7821f9775a8a0176e","tarball":"https://registry.npmjs.org/@xcan-cloud/markdown/-/markdown-1.8.0.tgz","fileCount":363,"unpackedSize":16090278,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCKlueUmb6IFYSy2NabXTxns+Q/C3ARIbuAbger089ekAIgGMQll34x1h8fJWpKuvvtVKZHxkSHKFL82UqgHFA9Rq8="}]},"_npmUser":{"name":"xiaolong.liu666","email":"xlliu2@163.com"},"directories":{},"maintainers":[{"name":"xiaolong.liu666","email":"xlliu2@163.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/markdown_1.8.0_1784082041471_0.7929872758297472"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-19T06:34:53.618Z","modified":"2026-07-15T02:20:41.952Z","1.0.0":"2026-03-19T06:34:54.198Z","1.0.1":"2026-03-19T07:58:02.614Z","1.0.2":"2026-03-19T08:16:07.545Z","1.0.3":"2026-03-19T09:26:53.436Z","1.0.4":"2026-03-19T15:30:19.292Z","1.0.5":"2026-03-19T16:30:11.736Z","1.0.6":"2026-03-19T16:41:00.069Z","1.0.7":"2026-03-20T00:35:11.533Z","1.0.8":"2026-03-20T07:29:26.360Z","1.0.9":"2026-03-20T08:08:48.230Z","1.1.0":"2026-03-27T02:27:43.970Z","1.2.0":"2026-03-27T03:26:45.493Z","1.2.1":"2026-03-27T04:09:08.586Z","1.3.0":"2026-03-29T14:12:51.754Z","1.3.1":"2026-03-29T14:51:28.679Z","1.3.2":"2026-03-29T15:01:34.263Z","1.4.0":"2026-03-30T04:00:20.939Z","1.5.0":"2026-04-17T11:28:32.447Z","1.5.1":"2026-04-18T07:03:09.502Z","1.5.2":"2026-04-18T07:50:09.410Z","1.5.3":"2026-04-18T11:20:47.018Z","1.5.4":"2026-04-18T11:26:21.350Z","1.5.5":"2026-04-18T14:15:36.812Z","1.6.0":"2026-04-20T05:49:48.843Z","1.7.0":"2026-06-17T04:26:46.309Z","1.7.1":"2026-06-17T10:21:05.510Z","1.7.2":"2026-06-22T06:17:16.632Z","1.8.0":"2026-07-15T02:20:41.741Z"},"bugs":{"url":"https://github.com/xcancloud/Markdown/issues"},"homepage":"https://github.com/xcancloud/Markdown#readme","repository":{"type":"git","url":"git+https://github.com/xcancloud/Markdown.git"},"description":"Production-grade, extensible, high-performance Markdown rendering and editing component","maintainers":[{"name":"xiaolong.liu666","email":"xlliu2@163.com"}],"readme":"<div align=\"center\">\n\n# Markdown\n\n[![npm version](https://img.shields.io/npm/v/@xcan-cloud/markdown?style=flat-square)](https://www.npmjs.com/package/@xcan-cloud/markdown)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg?style=flat-square)](./LICENSE)\n[![React 18+](https://img.shields.io/badge/react-%3E%3D18-61dafb?style=flat-square)](https://react.dev/)\n\nProduction-grade, extensible Markdown **rendering** and **editing** for React — CommonMark & GFM, math, Mermaid, Shiki highlighting, CodeMirror editor, themes, and i18n in one package.\n\n[English](./README.md) · [简体中文](./README.zh-CN.md) · [Repository](https://github.com/xcancloud/Markdown) · [npm](https://www.npmjs.com/package/@xcan-cloud/markdown)\n\n<br />\n\n<img src=\"./editor.png\" alt=\"Markdown Editor — toolbar, split preview with syntax highlighting, math, tables, task lists, alerts, and TOC sidebar\" width=\"920\" />\n\n<br />\n\n</div>\n\n---\n\n## Table of Contents\n\n- [Features](#features)\n- [Quick Start](#quick-start)\n- [API Reference](#api-reference)\n- [ProcessorOptions](#processoroptions)\n- [Exported Utilities](#exported-utilities)\n- [Hooks](#hooks)\n- [Component Architecture](#component-architecture)\n- [Sub-Projects](#sub-projects)\n- [Inline HTML](#inline-html)\n- [File & Image Upload](#file--image-upload)\n- [Customization](#customization)\n- [Technology Stack](#technology-stack)\n- [Browser Support](#browser-support)\n- [Development](#development)\n- [Contributing](#contributing)\n- [License](#license)\n\n## Features\n\n- **CommonMark & GFM** — Tables, task lists, strikethrough, footnotes, autolinks\n- **Syntax Highlighting** — 30+ languages via [Shiki](https://shiki.style/) (VS Code–quality themes)\n- **Math** — Inline and block KaTeX (`$...$`, `$$...$$`)\n- **Mermaid** — Flowcharts, sequence, Gantt, class diagrams (lazy client render)\n- **SVG Preview** — Fenced ` ```svg ` or ` ```xml ` with SVG content renders as a **sanitized** inline preview (copy / download when not streaming)\n- **Rich Editor** — CodeMirror 6, toolbar, split/tabs layouts, image & file paste/drop/upload, auto-save, shortcuts\n- **Code Block UX** — Copy, download (language-based extension; optional `file:` / comment meta for filename), HTML sandbox preview; optional **Apply** (`onApplyCode` for coding agents)\n- **Chat presets** — optional `CHAT_PROCESSOR_OPTIONS` / `createStreamingProcessor` (does not change library defaults)\n- **GFM Alerts & Containers** — `> [!NOTE]` / `> [!WARNING]` and `:::tip` / `:::warning` directives\n- **TOC Sidebar** — Auto-generated outline with active heading tracking (`MarkdownRenderer`)\n- **Front Matter** — YAML (and TOML) metadata via remark-frontmatter\n- **Emoji** — `:smile:` shortcodes (remark-emoji)\n- **Security** — rehype-sanitize schema, URL handling, XSS-oriented defaults\n- **Accessibility** — rehype a11y helpers, ARIA-oriented output\n- **Streaming** — `streaming` prop for live SSE/chunked content (short debounce coalesce, skip Shiki/Mermaid while streaming, full highlight on stream end, cursor affordance)\n- **Themes** — Light / Dark / Auto mode + `ThemeVariant` skin system (Default / Angus / GitHub / Claude); CSS variables throughout\n- **i18n** — `en-US` and `zh-CN` built-in\n- **Dual Build** — ESM + CJS, TypeScript declarations, subpath entries (`/viewer`, `/renderer`, `/editor`)\n\n## Quick Start\n\n### Installation\n\n```bash\nnpm install @xcan-cloud/markdown\n```\n\nPeer dependencies:\n\n```bash\nnpm install react react-dom\n```\n\nImport styles once in your app:\n\n```tsx\nimport '@xcan-cloud/markdown/styles';\n```\n\n> This single import includes both the renderer and editor styles.\n> Optional theme presets are imported separately (see [Customization](#customization)).\n>\n> For viewer / renderer only (no editor chrome), prefer:\n> ```tsx\n> import '@xcan-cloud/markdown/styles/renderer';\n> // or editor (+ renderer):\n> import '@xcan-cloud/markdown/styles/editor';\n> ```\n\n### Subpath entries (smaller bundles)\n\n| Entry | Use case | CodeMirror |\n| --- | --- | --- |\n| `@xcan-cloud/markdown` | Full surface (backward compatible) | In dependency graph |\n| `@xcan-cloud/markdown/viewer` | Lightweight preview / SSR | No |\n| `@xcan-cloud/markdown/renderer` | Streaming, TOC, Mermaid, code actions | No |\n| `@xcan-cloud/markdown/editor` | Rich editing (includes preview) | Yes |\n\n```tsx\n// Chat / read-only — does not pull CodeMirror\nimport { MarkdownRenderer, MarkdownProvider } from '@xcan-cloud/markdown/renderer';\nimport '@xcan-cloud/markdown/styles/renderer';\n```\n\n### Chat bubble (recommended)\n\n```tsx\nimport {\n  MarkdownRenderer,\n  CHAT_PROCESSOR_OPTIONS,\n  CHAT_RENDERER_DEFAULTS,\n  type CodeBlockInfo,\n} from '@xcan-cloud/markdown/renderer';\nimport '@xcan-cloud/markdown/styles/renderer';\n\nfunction ChatBubble({ md, streaming, onApply }: {\n  md: string;\n  streaming: boolean;\n  onApply?: (info: CodeBlockInfo) => void;\n}) {\n  return (\n    <MarkdownRenderer\n      source={md}\n      streaming={streaming}\n      options={CHAT_PROCESSOR_OPTIONS}\n      {...CHAT_RENDERER_DEFAULTS}\n      onApplyCode={onApply}\n    />\n  );\n}\n```\n\n> `CHAT_*` presets are **opt-in**; they do not change `createProcessor` / `showToc` library defaults.\n\n### Basic Rendering\n\n```tsx\nimport { MarkdownRenderer } from '@xcan-cloud/markdown';\nimport '@xcan-cloud/markdown/styles';\n\nfunction App() {\n  return <MarkdownRenderer source=\"# Hello\\n\\nThis is **Markdown**.\" />;\n}\n```\n\n### Editor (split view)\n\n```tsx\nimport { MarkdownEditor } from '@xcan-cloud/markdown';\nimport '@xcan-cloud/markdown/styles';\n\nfunction App() {\n  return (\n    <MarkdownEditor\n      initialValue=\"# Start editing…\"\n      layout=\"split\"\n      onChange={(value) => console.log(value)}\n    />\n  );\n}\n```\n\n### Theme & Locale Provider\n\n```tsx\nimport {\n  MarkdownProvider,\n  MarkdownEditor,\n  ThemeSwitcher,\n  LocaleSwitcher,\n} from '@xcan-cloud/markdown';\nimport '@xcan-cloud/markdown/styles';\n\nfunction App() {\n  return (\n    // defaultVariant=\"claude\" — Claude skin CSS is bundled in @xcan-cloud/markdown/styles\n    <MarkdownProvider defaultTheme=\"auto\" defaultVariant=\"claude\" defaultLocale=\"en-US\">\n      <div style={{ display: 'flex', gap: 8, marginBottom: 16 }}>\n        <ThemeSwitcher />   {/* switches light / dark / auto */}\n        <LocaleSwitcher />\n      </div>\n      <MarkdownEditor initialValue=\"# Hello\" layout=\"split\" />\n    </MarkdownProvider>\n  );\n}\n```\n\n### SSR-Friendly Viewer (no CodeMirror)\n\n```tsx\nimport { MarkdownViewer } from '@xcan-cloud/markdown';\nimport '@xcan-cloud/markdown/styles';\n\nfunction Page({ markdown }: { markdown: string }) {\n  return <MarkdownViewer source={markdown} theme=\"light\" />;\n}\n```\n\n## API Reference\n\n### `<MarkdownRenderer />`\n\nFull-featured renderer: TOC, Mermaid/SVG post-processing, code actions, streaming.\n\n| Prop | Type | Default | Description |\n| --- | --- | --- | --- |\n| `source` | `string` | — | Markdown source |\n| `options` | `ProcessorOptions` | — | Unified pipeline options |\n| `className` | `string` | `''` | Root element class |\n| `theme` | `'light' \\| 'dark' \\| 'auto'` | from context / `'auto'` | Color mode |\n| `showToc` | `boolean` | `true` | Show TOC sidebar |\n| `tocPosition` | `'left' \\| 'right'` | `'right'` | TOC placement |\n| `debounceMs` | `number` | `150` | Render debounce; still applied while `streaming`, floored at 50ms to coalesce tokens |\n| `onRendered` | `(info: { html: string; toc: TocItem[] }) => void` | — | After successful render |\n| `onLinkClick` | `(href: string, event: MouseEvent) => void` | — | Link click hook |\n| `onImageClick` | `(src: string, alt: string, event: MouseEvent) => void` | — | Image click hook |\n| `components` | `Partial<Record<string, ComponentType<any>>>` | — | **Deprecated / no-op**: HTML pipeline cannot map React components; value is ignored |\n| `onApplyCode` | `(info: CodeBlockInfo) => void` | — | When set, shows an Apply button on fenced code blocks (injected after streaming ends) |\n| `applyLabel` | `string` | i18n `applyCode` | Apply button label |\n| `streaming` | `boolean` | `false` | Live stream: disables Shiki/Mermaid fence transforms for cheap updates; full re-render when streaming ends |\n| `onStreamEnd` | `() => void` | — | Fired when `streaming` goes `true` → `false` |\n| `height` | `string` | — | Fixed height of the renderer container |\n| `minHeight` | `string` | — | Minimum height of the renderer container |\n| `maxHeight` | `string` | — | Maximum height of the renderer container |\n\n### `<MarkdownEditor />`\n\nExtends renderer props **except** `source` is replaced by editor value APIs.\n\n| Prop | Type | Default | Description |\n| --- | --- | --- | --- |\n| `initialValue` | `string` | `''` | Initial markdown |\n| `value` | `string` | — | Controlled value |\n| `onChange` | `(value: string) => void` | — | Content change |\n| `layout` | `LayoutMode` | `'split'` | `split` \\| `tabs` \\| `editor-only` \\| `preview-only` |\n| `layoutModes` | `LayoutMode[]` | `['split', 'tabs', 'editor-only', 'preview-only']` | Controls which layout buttons are shown and the order of `layout` toolbar cycling |\n| `minHeight` / `maxHeight` | `string` | — | Editor area sizing |\n| `toolbar` | `ToolbarConfig` | default set | `false` to hide, or item list |\n| `readOnly` | `boolean` | `false` | Read-only editor |\n| `onImageUpload` | `(file: File) => Promise<string>` | — | Return URL for pasted/dropped/selected images. See [File & Image Upload](#file--image-upload). |\n| `onImageUploadSettled` | `(r: { success: true; url: string; file: File } \\| { success: false; error: unknown; file: File }) => void` | — | Fired after each image upload resolves or rejects (for toast / logging) |\n| `onFileUpload` | `(file: File) => Promise<string>` | — | Return URL for pasted/dropped/selected **non-image** files; inserts a `[name](url)` link. See [File & Image Upload](#file--image-upload). |\n| `onFileUploadSettled` | `(r: { success: true; url: string; file: File } \\| { success: false; error: unknown; file: File }) => void` | — | Fired after each file upload resolves or rejects (for toast / logging) |\n| `acceptFileTypes` | `string` | — | `accept` filter for the toolbar **File** button's native picker (e.g. `.pdf,.zip`) |\n| `mixedPastePolicy` | `'image-first' \\| 'text-first' \\| 'image-and-text'` | `'image-first'` | Strategy when the clipboard contains **both** an image and text |\n| `onPaste` | `(payload: ClipboardPayload, event: ClipboardEvent) => boolean \\| void` | — | Custom paste hook; return `true` to skip the default flow |\n| `onAutoSave` | `(value: string) => void` | — | Periodic save callback |\n| `autoSaveInterval` | `number` | `30000` | Auto-save interval (ms) |\n| `extensions` | `Extension[]` | `[]` | Extra CodeMirror extensions |\n| `shortcuts` | `ShortcutMap` | — | Custom keymap handlers |\n| `maxLength` | `number` | — | Hard limit + counter UI |\n| `placeholder` | `string` | i18n default | Editor placeholder text |\n\nAll **`MarkdownRenderer`** props except `source` also apply to the preview pane (e.g. `options`, `theme`, `showToc`).\n\n### `<MarkdownViewer />`\n\nLightweight viewer using `useMarkdown` (no CodeMirror).\n\n| Prop | Type | Default | Description |\n| --- | --- | --- | --- |\n| `source` | `string` | — | Markdown source |\n| `options` | `ProcessorOptions` | — | Pipeline options |\n| `className` | `string` | `''` | Root class |\n| `theme` | `'light' \\| 'dark' \\| 'auto'` | from context | Theme |\n| `onRendered` | `(info: { html: string; toc: TocItem[] }) => void` | — | Note: `toc` is `[]` in viewer |\n| `height` | `string` | — | Fixed height of the viewer container |\n| `minHeight` | `string` | — | Minimum height of the viewer container |\n| `maxHeight` | `string` | — | Maximum height of the viewer container |\n\n### `<MarkdownProvider />`\n\n| Prop | Type | Default | Description |\n| --- | --- | --- | --- |\n| `children` | `ReactNode` | — | App subtree |\n| `defaultTheme` | `'light' \\| 'dark' \\| 'auto'` | `'auto'` | Light/dark mode |\n| `defaultVariant` | `'default' \\| 'angus' \\| 'github' \\| 'claude'` | `'claude'` | Visual skin |\n| `defaultLocale` | `'en-US' \\| 'zh-CN'` | `'en-US'` | Initial locale |\n\n### `<ThemeSwitcher />` / `<LocaleSwitcher />`\n\nOptional controls; read/write theme and locale via `useTheme()` / `useLocale()`.\n\n### TypeScript (core props)\n\n```tsx\ninterface CodeBlockInfo {\n  code: string;\n  language?: string;\n  filename?: string;\n}\n\ninterface MarkdownRendererProps {\n  source: string;\n  options?: ProcessorOptions;\n  className?: string;\n  theme?: 'light' | 'dark' | 'auto';\n  showToc?: boolean;\n  tocPosition?: 'left' | 'right';\n  debounceMs?: number;\n  onRendered?: (info: { html: string; toc: TocItem[] }) => void;\n  onLinkClick?: (href: string, event: React.MouseEvent) => void;\n  onImageClick?: (src: string, alt: string, event: React.MouseEvent) => void;\n  /** @deprecated ignored — HTML pipeline cannot map React components */\n  components?: Partial<Record<string, React.ComponentType<any>>>;\n  onApplyCode?: (info: CodeBlockInfo) => void;\n  applyLabel?: string;\n  streaming?: boolean;\n  onStreamEnd?: () => void;\n  height?: string;\n  minHeight?: string;\n  maxHeight?: string;\n}\n```\n\n## ProcessorOptions\n\n| Option | Type | Default | Description |\n| --- | --- | --- | --- |\n| `gfm` | `boolean` | `true` | GitHub Flavored Markdown |\n| `math` | `boolean` | `true` | KaTeX |\n| `mermaid` | `boolean` | `true` | Mermaid code blocks (`false` skips mermaid-container rewrite) |\n| `frontmatter` | `boolean` | `true` | YAML/TOML front matter |\n| `emoji` | `boolean` | `true` | Emoji shortcodes |\n| `toc` | `boolean` | `false` | `[[toc]]` / `[toc]` replacement |\n| `sanitize` | `boolean` | `true` | HTML sanitization |\n| `sanitizeSchema` | `Schema` | internal | Custom rehype-sanitize schema |\n| `codeTheme` | `string` | `'github-dark'` | Shiki theme |\n| `highlight` | `boolean` | `true` | Shiki highlighting (async pipeline) |\n| `allowHtml` | `boolean` | `true` | Raw HTML path through remark-rehype |\n| `remarkPlugins` | `Plugin[]` | `[]` | Extra remark plugins |\n| `rehypePlugins` | `Plugin[]` | `[]` | Extra rehype plugins |\n\n## Exported Utilities\n\n| Export | Description |\n| --- | --- |\n| `createProcessor`, `renderMarkdown`, `renderMarkdownSync`, `parseToAst`, `resolveProcessorOptionsForRender`, `processorOptionsCacheKey` | Core unified pipeline and render helpers |\n| `CHAT_PROCESSOR_OPTIONS`, `STREAMING_PROCESSOR_OPTIONS`, `CHAT_RENDERER_DEFAULTS`, `createChatProcessor`, `createStreamingProcessor` | Chat / streaming presets (**does not** change `createProcessor` defaults) |\n| `ProcessorOptions` | Pipeline configuration type |\n| `rehypeHighlightCode` | Shiki highlighting rehype plugin |\n| `renderMermaidDiagram`, `initMermaid` | Client Mermaid helpers |\n| `extractToc`, `remarkToc`, `TocItem` | TOC extraction / remark plugin |\n| `remarkAlert`, `remarkContainer`, `remarkCodeMeta` | Alert, container, code-meta remark plugins |\n| `parseCodeMeta`, `extractCodeBlocks`, `CodeBlockMeta` | Fence meta parsing |\n| `sanitizeUrl`, `processExternalLinks`, `escapeHtml` | Security helpers |\n| `rehypeA11y` | Accessibility rehype plugin |\n| `MarkdownWorkerRenderer`, `RenderCache`, `sharedRenderCache`, `splitHtmlBlocks` | Worker / cache utilities |\n| `copyToClipboard` | Clipboard helper |\n| `slug`, `resetSlugger` | Heading slug utilities |\n| `performImageUpload`, `performFileUpload`, `createImageUploadLifecycle`, `createFileUploadLifecycle`, `encodeMarkdownUrl`, `sanitizeAltText`, `isImageFile`, `collectImageFiles`, `generateUploadId` | Image & file paste/drop/upload helpers (see [File & Image Upload](#file--image-upload)) |\n| `setLocale`, `getLocale`, `t`, `getMessages` | i18n API |\n| `ThemeVariant`, `resolveThemeClass` | Skin type and CSS-class resolver |\n\n## Hooks\n\n| Hook | Description |\n| --- | --- |\n| `useMarkdown(source, options?)` | Returns `{ html, toc, isLoading, error, refresh }` |\n| `useDebouncedValue(value, delay)` | Debounced value |\n| `useScrollSync(editorRef, previewRef)` | Bi-directional scroll sync |\n\n## Component Architecture\n\n```\n┌─────────────────────────────────────────────────────────────┐\n│                    MarkdownProvider                            │\n│              (theme / locale context)                        │\n└───────────────────────────┬─────────────────────────────────┘\n                            │\n        ┌───────────────────┼───────────────────┐\n        ▼                   ▼                   ▼\n ┌──────────────┐  ┌──────────────┐  ┌──────────────────┐\n │ MarkdownEditor│  │MarkdownRenderer│ │ MarkdownViewer  │\n │ ┌──────────┐ │  │ • unified +    │  │ • useMarkdown    │\n │ │ CodeMirror│ │  │   Shiki/KaTeX  │  │ • no CM dep      │\n │ │ + Toolbar │ │  │ • TOC sidebar  │  └──────────────────┘\n │ └──────────┘ │  │ • Mermaid/SVG  │\n │ ┌──────────┐ │  │ • code actions │\n │ │ Preview  │◄┼──┤   (copy/…)     │\n │ │ (Renderer)│ │  └────────────────┘\n │ └──────────┘ │\n └──────────────┘\n```\n\n## Sub-Projects\n\n| Path | Description |\n| --- | --- |\n| [`website/`](./website/) | Vite dev playground / demo app for local development |\n| [`src/styles/`](./src/styles/) | Base `markdown-renderer.css` and theme presets (`themes/github.css`, `themes/angus.css`, `themes/claude.css`) |\n\n## Inline HTML\n\nRaw HTML is supported end-to-end (parse → sanitize → render) when the\ndefault `allowHtml: true` is active. The sanitize schema explicitly\npermits `class`, `style`, `id` and `data-*` on every element, so\n**sized `<img>` tags survive the pipeline**:\n\n```markdown\n<img src=\"diagrams/svg/02-lifecycle.svg\"\n     alt=\"Request lifecycle\"\n     style=\"max-width:1024px;width:100%;height:auto;\" />\n```\n\nSecurity invariants that are still enforced:\n\n- `<script>`, `<iframe>`, `<object>`, `<embed>` are stripped.\n- `href` / `src` with `javascript:` or `vbscript:` schemes are dropped.\n- `data:` URLs are only allowed for images.\n- Unknown tags fall through rehype-sanitize's allowlist.\n\nTo further tighten or loosen the policy, pass a custom `sanitizeSchema`\nvia `ProcessorOptions`.\n\n## File & Image Upload\n\n`MarkdownEditor` supports uploading both **images** and **arbitrary\nfiles** (pdf, zip, docx, …) through three entry points: the toolbar\n**Image** / **File** buttons (native file picker), clipboard **paste**,\nand **drag-and-drop**. Provide the matching uploader(s) and the editor\nhandles everything else — inserting a unique placeholder, swapping in\nthe final Markdown on success, and replacing the placeholder with an\nHTML comment on failure.\n\n- `onImageUpload` inserts an image node: `![alt](url)`.\n- `onFileUpload` inserts a link: `[name](url)`.\n\nEach callback is independent: wire `onImageUpload` only, `onFileUpload`\nonly, or both. The corresponding toolbar button (and paste/drop routing)\nactivates only when its callback is provided.\n\n```tsx\nimport { MarkdownEditor } from '@xcan-cloud/markdown';\n\nasync function uploadToCdn(file: File): Promise<string> {\n  const fd = new FormData();\n  fd.append('file', file);\n  const res = await fetch('/api/upload', { method: 'POST', body: fd });\n  if (!res.ok) throw new Error(`upload failed: ${res.status}`);\n  const { url } = await res.json();\n  return url;\n}\n\n<MarkdownEditor\n  onImageUpload={uploadToCdn}     // images → ![alt](url)\n  onFileUpload={uploadToCdn}      // other files → [name](url)\n  acceptFileTypes=\".pdf,.zip,.docx\"\n  onImageUploadSettled={(r) => {\n    if (r.success) toast.success(`Uploaded ${r.file.name}`);\n    else toast.error(`Upload failed: ${String(r.error)}`);\n  }}\n  onFileUploadSettled={(r) => {\n    if (r.success) toast.success(`Uploaded ${r.file.name}`);\n    else toast.error(`Upload failed: ${String(r.error)}`);\n  }}\n/>\n```\n\nBehavioral guarantees:\n\n- **Toolbar pickers.** The **Image** button opens an `image/*` picker;\n  the **File** button opens a picker filtered by `acceptFileTypes`.\n  Both support multi-select.\n- **Unique placeholders.** Each upload gets a random id so concurrent\n  uploads never overwrite each other's insertion point.\n- **Error resilience.** A rejected uploader replaces the placeholder\n  with `<!-- Upload failed: <reason> -->` (not rendered, visible in\n  source).\n- **Multi-file drop.** Dropping multiple files uploads them in\n  parallel at the drop point.\n- **Read-only safe.** When `readOnly` is set, paste and drop never\n  write to the document (uploads are skipped).\n- **Localization.** Placeholder text uses the active locale\n  (`editor.uploading`, `editor.uploadFailed`).\n- **URL safety.** URLs are percent-encoded for whitespace and `( )`\n  so returned CDN URLs containing spaces or parentheses do not break\n  the `![alt](url)` / `[name](url)` syntax.\n\n### Paste & drop classification\n\nThe editor routes **text vs. image vs. file** pastes separately so\ntyping and rich-text paste are never intercepted unnecessarily:\n\n| Clipboard / drop contents | Default behavior |\n| --- | --- |\n| Plain text / HTML only | Browser default (no interception) |\n| Image file(s) only | Upload each image via `onImageUpload`, insert `![alt](url)` |\n| Image + text (e.g. Windows screenshot) | Controlled by `mixedPastePolicy` |\n| Non-image files only (pdf, zip, …) | Upload each via `onFileUpload`, insert `[name](url)` |\n| Non-image files + text | Controlled by `mixedPastePolicy` (same semantics as image + text) |\n\n> When the relevant callback is **not** provided, that payload falls\n> through to the browser default (e.g. without `onFileUpload`, pasting a\n> PDF is not intercepted).\n\n```tsx\n<MarkdownEditor\n  onImageUpload={uploadToCdn}\n  mixedPastePolicy=\"image-and-text\"   // upload screenshot AND keep caption text\n  onPaste={(payload) => {\n    if (payload.otherFiles.some(f => f.type === 'application/pdf')) {\n      toast.warn('PDF paste ignored');\n      return true; // handled — skip default flow\n    }\n  }}\n/>\n```\n\nThe `classifyClipboard(transfer)` helper that powers this (returns\n`{ images, otherFiles, text, html, uriList, hasImages, hasText, ... }`)\nis exported for custom integrations, alongside `performImageUpload`,\n`performFileUpload`, `createImageUploadLifecycle`,\n`createFileUploadLifecycle`, `encodeMarkdownUrl`, `isImageFile`,\n`collectImageFiles`.\n\n## Customization\n\n### Themes\n\nThe theme system has two orthogonal dimensions:\n\n- **`defaultTheme`** — brightness mode: `'light'`, `'dark'`, `'auto'` (follows `prefers-color-scheme`)\n- **`defaultVariant`** — visual skin: `'default'`, `'angus'`, `'github'`, `'claude'`\n\nThe combination maps to a single CSS class on the root container:\n\n| variant \\ mode | `light` | `dark` |\n| --- | --- | --- |\n| `default` | `markdown-theme-light` | `markdown-theme-dark` |\n| `angus` | `markdown-theme-angus` | `markdown-theme-angus-dark` |\n| `github` | `markdown-theme-github` | `markdown-theme-github-dark` |\n| `claude` | `markdown-theme-claude` | `markdown-theme-claude-dark` |\n\n#### Primary Color Inheritance\n\nThe Claude theme supports inheriting the brand color from the host application. If the host defines `--primary` on `:root`, then `--md-accent` and `--md-link` automatically inherit that value; otherwise they fall back to Claude’s default brand color.\n\n```css\n/* Host application global styles */\n:root {\n  --primary: #3b82f6; /* blue brand */\n}\n/* Markdown links and accent colors automatically become blue */\n```\n\n#### Default skin (light / dark toggle)\n\n```tsx\nimport '@xcan-cloud/markdown/styles';\nimport { MarkdownProvider, MarkdownRenderer } from '@xcan-cloud/markdown';\n\nfunction App() {\n  return (\n    <MarkdownProvider defaultTheme=\"auto\">\n      <MarkdownRenderer source=\"# Hello\" />\n    </MarkdownProvider>\n  );\n}\n```\n\n#### Angus skin\n\nThe Angus skin CSS is **bundled inside** `@xcan-cloud/markdown/styles` — no extra import needed.\n\n```tsx\nimport '@xcan-cloud/markdown/styles';\nimport { MarkdownProvider, MarkdownEditor, ThemeSwitcher } from '@xcan-cloud/markdown';\n\nfunction App() {\n  return (\n    // defaultVariant=\"angus\": light mode → markdown-theme-angus\n    //                          dark mode  → markdown-theme-angus-dark\n    <MarkdownProvider defaultTheme=\"auto\" defaultVariant=\"angus\">\n      <ThemeSwitcher />\n      <MarkdownEditor initialValue=\"# Hello\" layout=\"split\" />\n    </MarkdownProvider>\n  );\n}\n```\n\n#### GitHub skin\n\nThe GitHub skin requires an additional CSS import:\n\n```tsx\nimport '@xcan-cloud/markdown/styles';\nimport '@xcan-cloud/markdown/themes/github.css';   // ← extra import required\nimport { MarkdownProvider, MarkdownRenderer } from '@xcan-cloud/markdown';\n\nfunction App() {\n  return (\n    // defaultVariant=\"github\": light mode → markdown-theme-github\n    //                           dark mode  → markdown-theme-github-dark\n    <MarkdownProvider defaultTheme=\"light\" defaultVariant=\"github\">\n      <MarkdownRenderer source=\"# Hello\" />\n    </MarkdownProvider>\n  );\n}\n```\n\n#### Switching variant at runtime\n\n```tsx\nimport { useTheme } from '@xcan-cloud/markdown';\n\nfunction VariantSwitcher() {\n  const { variant, setVariant } = useTheme();\n  return (\n    <select value={variant} onChange={(e) => setVariant(e.target.value as any)}>\n      <option value=\"default\">Default</option>\n      <option value=\"angus\">Angus</option>\n      <option value=\"github\">GitHub</option>\n    </select>\n  );\n}\n```\n\n### CSS variables\n\nOverride tokens on `.markdown-renderer` (see stylesheet for `--md-*` variables).\n\n### i18n\n\n```tsx\n<MarkdownProvider defaultLocale=\"zh-CN\">\n  <MarkdownEditor initialValue=\"# 你好\" />\n</MarkdownProvider>\n```\n\n```tsx\nimport { setLocale, t } from '@xcan-cloud/markdown';\n\nsetLocale('zh-CN');\n```\n\n### Toolbar\n\n```tsx\n<MarkdownEditor toolbar={false} />\n<MarkdownEditor toolbar={['bold', 'italic', '|', 'code']} />\n```\n\n> In `layout=\"tabs\"`, when `toolbar={false}`, a minimal built-in switcher (Editor / Preview) is still rendered to keep tabs mode operable.\n\n### Layout and layoutModes\n\n`LayoutMode` is publicly exported and can be used in app-side TypeScript:\n\n```tsx\nimport { MarkdownEditor, type LayoutMode } from '@xcan-cloud/markdown';\n```\n\n`layout` controls the currently active layout mode:\n\n- `split`: editor and preview shown side by side\n- `tabs`: one pane at a time (Editor / Preview), switchable by toolbar preview action or built-in tabs switcher\n- `editor-only`: editor pane only\n- `preview-only`: preview pane only\n\n`layoutModes` controls **which modes are available** in the layout UI and **the cycle order** of the `layout` toolbar action.\n\n- Default: `['split', 'tabs', 'editor-only', 'preview-only']`\n- Empty array falls back to the default list\n- If current `layout` is not included in `layoutModes`, it falls back to `layoutModes[0]`\n\nExamples:\n\n```tsx\n// Restrict to edit/preview full-page switching only\n<MarkdownEditor\n  layout=\"editor-only\"\n  layoutModes={['editor-only', 'preview-only']}\n/>\n\n// Keep split + tabs only\n<MarkdownEditor\n  layout=\"tabs\"\n  layoutModes={['tabs', 'split']}\n/>\n```\n\n### Height\n\n```tsx\n// Fixed height\n<MarkdownRenderer source={md} height=\"600px\" />\n<MarkdownViewer source={md} height=\"400px\" />\n\n// Min / max height\n<MarkdownRenderer source={md} minHeight=\"200px\" maxHeight=\"80vh\" />\n\n// Editor CodeMirror pane height\n<MarkdownEditor minHeight=\"300px\" maxHeight=\"700px\" />\n```\n\n### Code fence meta\n\n````markdown\n```python filename=hello.py\nprint(\"hi\")\n```\n````\n\nUse `parseCodeMeta` / `extractCodeBlocks` for external tooling.\n\n## Technology Stack\n\n| Category | Technologies |\n| --- | --- |\n| Framework | React 18+, TypeScript |\n| Markdown | unified, remark, rehype, remark-gfm, remark-math, … |\n| Highlighting | Shiki |\n| Diagrams | Mermaid (client), KaTeX |\n| Editor | CodeMirror 6 |\n| Icons | lucide-react |\n| Build | Vite, vite-plugin-dts |\n\n## Browser Support\n\nModern evergreen browsers (Chrome, Firefox, Safari, Edge — last 2 major versions). Features like `fetch` streams / Workers follow browser capabilities.\n\n## Development\n\n```bash\nnpm install\nnpm run dev      # website demo\nnpm run build    # library dist\nnpm test\nnpm run lint     # tsc --noEmit\n```\n\n## Contributing\n\n1. Fork the repository.\n2. Create a branch: `git checkout -b feat/your-feature`.\n3. Commit with clear messages.\n4. Push and open a Pull Request.\n\nPlease ensure `npm run lint` and `npm run build` pass before submitting.\n\n## License\n\n[MIT](./LICENSE) © Markdown package contributors\n","readmeFilename":"README.md"}