{"_id":"@bireturn/word-editor","_rev":"15-d27f3241575ac027372fc6850ba783fb","name":"@bireturn/word-editor","dist-tags":{"latest":"1.0.14"},"versions":{"1.0.0":{"name":"@bireturn/word-editor","version":"1.0.0","_id":"@bireturn/word-editor@1.0.0","maintainers":[{"name":"hujingn","email":"hujingn@qq.com"},{"name":"kanggaoyang","email":"1162172981@qq.com"}],"dist":{"shasum":"3d1e24e9a663fde5bb1b85ba518da8a28ed8574c","tarball":"https://registry.npmjs.org/@bireturn/word-editor/-/word-editor-1.0.0.tgz","fileCount":30,"integrity":"sha512-iebcva5LtGkLSGHa4k86ZFDvOOOKGWTg5k7cVcOMJvzmu88mt652dXbbwH2Da0mKCQy/PZdKJFMDXnVsMPbiSQ==","signatures":[{"sig":"MEYCIQDaVBgvEqhwBTkffLn3lFH2/qs5BCtnHRhd9pOPx4z6FAIhAKz6remBY39hep/vKOk0GcxQHUDKEwuXYaeAsyZLi9uG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":228269},"main":"./lib/word-editor.umd.js","type":"module","types":"./lib/index.d.ts","module":"./lib/word-editor.es.js","exports":{".":{"types":"./lib/index.d.ts","import":"./lib/word-editor.es.js","require":"./lib/word-editor.umd.js"},"./style.css":"./lib/word-editor.css"},"gitHead":"ee41eb5e410a1a20afdd46f140e97702a647a90d","scripts":{"dev":"vite","lint":"eslint . --ext .vue,.ts,.tsx --fix","build":"vue-tsc && vite build","preview":"vite preview","build:lib":"vite build --mode lib","type-check":"vue-tsc --noEmit"},"_npmUser":{"name":"hujingn","email":"hujingn@qq.com"},"_npmVersion":"10.9.3","description":"类 Word 的 Web 富文本编辑器，基于canvas-editor的数据结构渲染","directories":{},"_nodeVersion":"22.19.0","dependencies":{"pinia":"^2.1.7","lodash-es":"^4.18.1","@vueuse/core":"^10.7.0","lucide-vue-next":"^1.0.0","vue-virtual-scroller":"^2.0.0-beta.8"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.38","less":"^4.6.4","vite":"^5.1.0","eslint":"^8.57.0","vue-tsc":"^2.0.0","typescript":"^5.3.3","@types/node":"^20.11.0","@vue/tsconfig":"^0.5.1","vite-plugin-dts":"^5.0.2","eslint-plugin-vue":"^9.21.0","@vitejs/plugin-vue":"^5.0.3","@vitejs/plugin-vue-jsx":"^5.1.5","@typescript-eslint/parser":"^7.0.0","vite-plugin-mock-dev-server":"^2.1.1","@typescript-eslint/eslint-plugin":"^7.0.0"},"peerDependencies":{"vue":"^3.4.0"},"_npmOperationalInternal":{"tmp":"tmp/word-editor_1.0.0_1781773403841_0.9608590536956301","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@bireturn/word-editor","version":"1.0.1","_id":"@bireturn/word-editor@1.0.1","maintainers":[{"name":"hujingn","email":"hujingn@qq.com"},{"name":"kanggaoyang","email":"1162172981@qq.com"}],"dist":{"shasum":"2d7081bf9893054bf94b84e2adcb2e11ac051071","tarball":"https://registry.npmjs.org/@bireturn/word-editor/-/word-editor-1.0.1.tgz","fileCount":30,"integrity":"sha512-BiLLlUFrgm+QBz4Iq1ZS49+wPdJyTQZ0FJ6i5T2YmnfHt1a+OB333vUHem6y9fzA5k51v9TyKq3ZNkqc6SEXLQ==","signatures":[{"sig":"MEUCIQDf1LeU5Vy/EPoO5Ayueor2RV7w44bGyGu/UXMqKzFDRwIgechU19PygSlbX8teAnA0KzBjHR32EwNXHTSMzPgzsqE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":231224},"main":"./lib/word-editor.umd.js","type":"module","types":"./lib/index.d.ts","module":"./lib/word-editor.es.js","exports":{".":{"types":"./lib/index.d.ts","import":"./lib/word-editor.es.js","require":"./lib/word-editor.umd.js"},"./style.css":"./lib/word-editor.css"},"gitHead":"556161bddc1caf31db115b7dfa823c40861442a4","scripts":{"dev":"vite","lint":"eslint . --ext .vue,.ts,.tsx --fix","build":"vue-tsc && vite build","preview":"vite preview","build:lib":"vite build --mode lib","type-check":"vue-tsc --noEmit"},"_npmUser":{"name":"hujingn","email":"hujingn@qq.com"},"_npmVersion":"10.9.3","description":"类 Word 的 Web 富文本编辑器，基于canvas-editor的数据结构渲染","directories":{},"_nodeVersion":"22.19.0","dependencies":{"pinia":"^2.1.7","lodash-es":"^4.18.1","@vueuse/core":"^10.7.0","lucide-vue-next":"^1.0.0","vue-virtual-scroller":"^2.0.0-beta.8"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.38","less":"^4.6.4","vite":"^5.1.0","eslint":"^8.57.0","vue-tsc":"^2.0.0","typescript":"^5.3.3","@types/node":"^20.11.0","@vue/tsconfig":"^0.5.1","vite-plugin-dts":"^5.0.2","eslint-plugin-vue":"^9.21.0","@vitejs/plugin-vue":"^5.0.3","@vitejs/plugin-vue-jsx":"^5.1.5","@typescript-eslint/parser":"^7.0.0","vite-plugin-mock-dev-server":"^2.1.1","@typescript-eslint/eslint-plugin":"^7.0.0"},"peerDependencies":{"vue":"^3.4.0"},"_npmOperationalInternal":{"tmp":"tmp/word-editor_1.0.1_1782204739758_0.8294820529046198","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@bireturn/word-editor","version":"1.0.2","_id":"@bireturn/word-editor@1.0.2","maintainers":[{"name":"hujingn","email":"hujingn@qq.com"},{"name":"kanggaoyang","email":"1162172981@qq.com"}],"dist":{"shasum":"abb13d9599a9ea19fa36a43978c3519c2d3e7132","tarball":"https://registry.npmjs.org/@bireturn/word-editor/-/word-editor-1.0.2.tgz","fileCount":30,"integrity":"sha512-luRhsEvLjJO6TIB6t4aqEmLOfKvVUok72PYTjd7FPl2GTQdCrVUKtQo09S7MKY1OYUyBAutd3i6VtPKGnpoeqg==","signatures":[{"sig":"MEYCIQDLeFhKO0zy8tpixEiUFquoIZpiXdH4EQkYXIEtUzaqNgIhAP67wdwG1xBYPWWyJk7Q0/Tm7pJREb/LTdhf3XkCGpHR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":230663},"main":"./lib/word-editor.umd.js","type":"module","types":"./lib/index.d.ts","module":"./lib/word-editor.es.js","exports":{".":{"types":"./lib/index.d.ts","import":"./lib/word-editor.es.js","require":"./lib/word-editor.umd.js"},"./style.css":"./lib/word-editor.css"},"gitHead":"91384fa05d827a8308c948b92b9abc9b3b964b8f","scripts":{"dev":"vite","lint":"eslint . --ext .vue,.ts,.tsx --fix","build":"vue-tsc && vite build","preview":"vite preview","build:lib":"vite build --mode lib","type-check":"vue-tsc --noEmit"},"_npmUser":{"name":"hujingn","email":"hujingn@qq.com"},"_npmVersion":"10.9.3","description":"类 Word 的 Web 富文本编辑器，基于canvas-editor的数据结构渲染","directories":{},"_nodeVersion":"22.19.0","dependencies":{"pinia":"^2.1.7","lodash-es":"^4.18.1","@vueuse/core":"^10.7.0","lucide-vue-next":"^1.0.0","vue-virtual-scroller":"^2.0.0-beta.8"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.38","less":"^4.6.4","vite":"^5.1.0","eslint":"^8.57.0","vue-tsc":"^2.0.0","typescript":"^5.3.3","@types/node":"^20.11.0","@vue/tsconfig":"^0.5.1","vite-plugin-dts":"^5.0.2","eslint-plugin-vue":"^9.21.0","@vitejs/plugin-vue":"^5.0.3","@vitejs/plugin-vue-jsx":"^5.1.5","@typescript-eslint/parser":"^7.0.0","vite-plugin-mock-dev-server":"^2.1.1","@typescript-eslint/eslint-plugin":"^7.0.0"},"peerDependencies":{"vue":"^3.4.0"},"_npmOperationalInternal":{"tmp":"tmp/word-editor_1.0.2_1782443331926_0.49455015212467024","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@bireturn/word-editor","version":"1.0.3","_id":"@bireturn/word-editor@1.0.3","maintainers":[{"name":"hujingn","email":"hujingn@qq.com"},{"name":"kanggaoyang","email":"1162172981@qq.com"}],"dist":{"shasum":"36486545228112384e9519dc513f0176fe6a12f1","tarball":"https://registry.npmjs.org/@bireturn/word-editor/-/word-editor-1.0.3.tgz","fileCount":30,"integrity":"sha512-FoScrz60B1dooebgGVxwNc/0FT8lfH7wiB1lyjDFaGviGJWVXqg4l0im5Zul3CSGmyKHUU+gNxzj2fw/cwqP9w==","signatures":[{"sig":"MEQCIBZHZYTsV7jZXGB8L0N27MJyylog5qUsdnf/B0+QBKg1AiBnrVL8UtCEz4fDuU/GpfQhWOU1Nb4tFIiqSvCxFIk6VQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":232704},"main":"./lib/word-editor.umd.js","type":"module","types":"./lib/index.d.ts","module":"./lib/word-editor.es.js","exports":{".":{"types":"./lib/index.d.ts","import":"./lib/word-editor.es.js","require":"./lib/word-editor.umd.js"},"./style.css":"./lib/word-editor.css"},"gitHead":"b4077347b3e5c546cbbb991a2532a234c6eed406","scripts":{"dev":"vite","lint":"eslint . --ext .vue,.ts,.tsx --fix","build":"vue-tsc && vite build","preview":"vite preview","build:lib":"vite build --mode lib","type-check":"vue-tsc --noEmit"},"_npmUser":{"name":"hujingn","email":"hujingn@qq.com"},"_npmVersion":"10.9.3","description":"类 Word 的 Web 富文本编辑器，基于canvas-editor的数据结构渲染","directories":{},"_nodeVersion":"22.19.0","dependencies":{"pinia":"^2.1.7","lodash-es":"^4.18.1","@vueuse/core":"^10.7.0","lucide-vue-next":"^1.0.0","vue-virtual-scroller":"^2.0.0-beta.8"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.38","less":"^4.6.4","vite":"^5.1.0","eslint":"^8.57.0","vue-tsc":"^2.0.0","typescript":"^5.3.3","@types/node":"^20.11.0","@vue/tsconfig":"^0.5.1","vite-plugin-dts":"^5.0.2","eslint-plugin-vue":"^9.21.0","@vitejs/plugin-vue":"^5.0.3","@vitejs/plugin-vue-jsx":"^5.1.5","@typescript-eslint/parser":"^7.0.0","vite-plugin-mock-dev-server":"^2.1.1","@typescript-eslint/eslint-plugin":"^7.0.0"},"peerDependencies":{"vue":"^3.4.0"},"_npmOperationalInternal":{"tmp":"tmp/word-editor_1.0.3_1782960810709_0.005456435571595808","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@bireturn/word-editor","version":"1.0.4","_id":"@bireturn/word-editor@1.0.4","maintainers":[{"name":"hujingn","email":"hujingn@qq.com"},{"name":"kanggaoyang","email":"1162172981@qq.com"}],"dist":{"shasum":"e4638eb54de09f6851f12585543042301e4dfa85","tarball":"https://registry.npmjs.org/@bireturn/word-editor/-/word-editor-1.0.4.tgz","fileCount":2,"integrity":"sha512-gAg0SSw8GF1F8WlqNdledO8FEsG/5pc1J6fgJ1jOyxiWZSIyhC9UeebzjEWCKjVqpr02JjNeC6eoL2kim9Odhw==","signatures":[{"sig":"MEUCIQD5uIt0JusGD9lzCjsU/ES+PY8dv7xQpDRREL69Ymm8gAIgOL9NiJ1wNtbKSyyLhGnJwvcieiTodz1/FrmMkBgjEvg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":12330},"main":"./lib/word-editor.umd.js","type":"module","types":"./lib/index.d.ts","module":"./lib/word-editor.es.js","exports":{".":{"types":"./lib/index.d.ts","import":"./lib/word-editor.es.js","require":"./lib/word-editor.umd.js"},"./style.css":"./lib/word-editor.css"},"gitHead":"c1a9e90324675b12fec7ba702a2e036bf49f3213","scripts":{"dev":"vite","lint":"eslint . --ext .vue,.ts,.tsx --fix","build":"vue-tsc && vite build","preview":"vite preview","build:lib":"vite build --mode lib","type-check":"vue-tsc --noEmit"},"_npmUser":{"name":"kanggaoyang","email":"1162172981@qq.com"},"_npmVersion":"10.8.2","description":"类 Word 的 Web 富文本编辑器，基于canvas-editor的数据结构渲染","directories":{},"_nodeVersion":"20.19.2","dependencies":{"pinia":"^2.1.7","lodash-es":"^4.18.1","@vueuse/core":"^10.7.0","lucide-vue-next":"^1.0.0","vue-virtual-scroller":"^2.0.0-beta.8"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.38","less":"^4.6.4","vite":"^5.1.0","eslint":"^8.57.0","vue-tsc":"^2.0.0","typescript":"^5.3.3","@types/node":"^20.11.0","@vue/tsconfig":"^0.5.1","vite-plugin-dts":"^5.0.2","eslint-plugin-vue":"^9.21.0","@vitejs/plugin-vue":"^5.0.3","@vitejs/plugin-vue-jsx":"^5.1.5","@typescript-eslint/parser":"^7.0.0","vite-plugin-mock-dev-server":"^2.1.1","@typescript-eslint/eslint-plugin":"^7.0.0"},"peerDependencies":{"vue":"^3.4.0"},"_npmOperationalInternal":{"tmp":"tmp/word-editor_1.0.4_1783392990450_0.7370834845907706","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@bireturn/word-editor","version":"1.0.5","_id":"@bireturn/word-editor@1.0.5","maintainers":[{"name":"hujingn","email":"hujingn@qq.com"},{"name":"kanggaoyang","email":"1162172981@qq.com"}],"dist":{"shasum":"7ec298302f0a2e8d9c0d9c79785d9bee53001a3a","tarball":"https://registry.npmjs.org/@bireturn/word-editor/-/word-editor-1.0.5.tgz","fileCount":31,"integrity":"sha512-JLjDSfzDuSW3Gvnp8GF7Q01GlH9gRnHythD7TotHMR7/IVkuj12uLeK2NtZQ0pmCRVU4FjJJvfGXoh6G4t2WQg==","signatures":[{"sig":"MEQCIBTdkh5IM6IlGd9WuiN6cP2DcAYbl+r4gAXJn+JmlPbEAiB8OO+rjdpWWhfzaPi2UYRrragqOHqWNYjXCUm8qmc8Vw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":238016},"main":"./lib/word-editor.umd.js","type":"module","types":"./lib/index.d.ts","module":"./lib/word-editor.es.js","exports":{".":{"types":"./lib/index.d.ts","import":"./lib/word-editor.es.js","require":"./lib/word-editor.umd.js"},"./style.css":"./lib/word-editor.css"},"gitHead":"37e4e5a935a59035b6ca23de7d7b3c28b953c526","scripts":{"dev":"vite","lint":"eslint . --ext .vue,.ts,.tsx --fix","build":"vue-tsc && vite build","preview":"vite preview","build:lib":"vite build --mode lib","type-check":"vue-tsc --noEmit","prepublishOnly":"npm run build:lib"},"_npmUser":{"name":"kanggaoyang","email":"1162172981@qq.com"},"_npmVersion":"10.8.2","description":"类 Word 的 Web 富文本编辑器，基于canvas-editor的数据结构渲染","directories":{},"_nodeVersion":"20.19.2","dependencies":{"pinia":"^2.1.7","lodash-es":"^4.18.1","@vueuse/core":"^10.7.0","lucide-vue-next":"^1.0.0","vue-virtual-scroller":"^2.0.0-beta.8"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.38","less":"^4.6.4","vite":"^5.1.0","eslint":"^8.57.0","vue-tsc":"^2.0.0","typescript":"^5.3.3","@types/node":"^20.11.0","@vue/tsconfig":"^0.5.1","vite-plugin-dts":"^5.0.2","eslint-plugin-vue":"^9.21.0","@vitejs/plugin-vue":"^5.0.3","@vitejs/plugin-vue-jsx":"^5.1.5","@typescript-eslint/parser":"^7.0.0","vite-plugin-mock-dev-server":"^2.1.1","@typescript-eslint/eslint-plugin":"^7.0.0"},"peerDependencies":{"vue":"^3.4.0"},"_npmOperationalInternal":{"tmp":"tmp/word-editor_1.0.5_1783394084784_0.19150052574787257","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@bireturn/word-editor","version":"1.0.6","_id":"@bireturn/word-editor@1.0.6","maintainers":[{"name":"hujingn","email":"hujingn@qq.com"},{"name":"kanggaoyang","email":"1162172981@qq.com"}],"dist":{"shasum":"e92bd1fdd88385fac928e66c65442670637a0f6a","tarball":"https://registry.npmjs.org/@bireturn/word-editor/-/word-editor-1.0.6.tgz","fileCount":31,"integrity":"sha512-4CyZCJjLSdT2ZPcmTUBCSoB06jRSzf3232Ih5lo+aCBINPmNycpQh7Yr5heXRkouBtDWad7kxyYzSn/a/hHqrA==","signatures":[{"sig":"MEUCIHdJSStJ65hx7Qs0w7pAEkvaOKF+/DxL0o4OCGIby8JTAiEAmsDvE1ddw8z6k5b2FtfDOG7lDHOmLhz9erv+Xs6rhs8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":241075},"main":"./lib/word-editor.umd.js","type":"module","types":"./lib/index.d.ts","module":"./lib/word-editor.es.js","exports":{".":{"types":"./lib/index.d.ts","import":"./lib/word-editor.es.js","require":"./lib/word-editor.umd.js"},"./style.css":"./lib/word-editor.css"},"gitHead":"61e70ee1e3a1b757072275bb4a48b7309ad91a68","scripts":{"dev":"vite","lint":"eslint . --ext .vue,.ts,.tsx --fix","build":"vue-tsc && vite build","preview":"vite preview","build:lib":"vite build --mode lib","type-check":"vue-tsc --noEmit","prepublishOnly":"npm run build:lib"},"_npmUser":{"name":"kanggaoyang","email":"1162172981@qq.com"},"_npmVersion":"10.8.2","description":"类 Word 的 Web 富文本编辑器，基于canvas-editor的数据结构渲染","directories":{},"_nodeVersion":"20.19.2","dependencies":{"pinia":"^2.1.7","lodash-es":"^4.18.1","@vueuse/core":"^10.7.0","lucide-vue-next":"^1.0.0","vue-virtual-scroller":"^2.0.0-beta.8"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.38","less":"^4.6.4","vite":"^5.1.0","eslint":"^8.57.0","vue-tsc":"^2.0.0","typescript":"^5.3.3","@types/node":"^20.11.0","@vue/tsconfig":"^0.5.1","vite-plugin-dts":"^5.0.2","eslint-plugin-vue":"^9.21.0","@vitejs/plugin-vue":"^5.0.3","@vitejs/plugin-vue-jsx":"^5.1.5","@typescript-eslint/parser":"^7.0.0","vite-plugin-mock-dev-server":"^2.1.1","@typescript-eslint/eslint-plugin":"^7.0.0"},"peerDependencies":{"vue":"^3.4.0"},"_npmOperationalInternal":{"tmp":"tmp/word-editor_1.0.6_1783414366809_0.27151191025942034","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"@bireturn/word-editor","version":"1.0.7","_id":"@bireturn/word-editor@1.0.7","maintainers":[{"name":"hujingn","email":"hujingn@qq.com"},{"name":"kanggaoyang","email":"1162172981@qq.com"}],"dist":{"shasum":"048e16d22a315b60eee4852478e215f73c85d564","tarball":"https://registry.npmjs.org/@bireturn/word-editor/-/word-editor-1.0.7.tgz","fileCount":31,"integrity":"sha512-pQkCqho78WOVBmqjGNbcnEkFzHN4tDjOWmapFFatOPI5rQOQ6tIUbMsQLLieqdjr9D/HyIGATFLsEcKTvYC5Rg==","signatures":[{"sig":"MEUCIE0JMyOof3xQp6fwuzwhuhrogxOMomiqNPH5IsJpDViuAiEAr3xUP3S1dgQbk3A9hycGCNLBeEInjO7+r3Gu2V4Cobc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":241367},"main":"./lib/word-editor.umd.js","type":"module","types":"./lib/index.d.ts","module":"./lib/word-editor.es.js","exports":{".":{"types":"./lib/index.d.ts","import":"./lib/word-editor.es.js","require":"./lib/word-editor.umd.js"},"./style.css":"./lib/word-editor.css"},"gitHead":"debead94da705cd20d49982a95eaff533b10f5aa","scripts":{"dev":"vite","lint":"eslint . --ext .vue,.ts,.tsx --fix","build":"vue-tsc && vite build","preview":"vite preview","build:lib":"vite build --mode lib","type-check":"vue-tsc --noEmit","prepublishOnly":"npm run build:lib"},"_npmUser":{"name":"kanggaoyang","email":"1162172981@qq.com"},"_npmVersion":"10.8.2","description":"类 Word 的 Web 富文本编辑器，基于canvas-editor的数据结构渲染","directories":{},"_nodeVersion":"20.19.2","dependencies":{"pinia":"^2.1.7","lodash-es":"^4.18.1","@vueuse/core":"^10.7.0","lucide-vue-next":"^1.0.0","vue-virtual-scroller":"^2.0.0-beta.8"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.38","less":"^4.6.4","vite":"^5.1.0","eslint":"^8.57.0","vue-tsc":"^2.0.0","typescript":"^5.3.3","@types/node":"^20.11.0","@vue/tsconfig":"^0.5.1","vite-plugin-dts":"^5.0.2","eslint-plugin-vue":"^9.21.0","@vitejs/plugin-vue":"^5.0.3","@vitejs/plugin-vue-jsx":"^5.1.5","@typescript-eslint/parser":"^7.0.0","vite-plugin-mock-dev-server":"^2.1.1","@typescript-eslint/eslint-plugin":"^7.0.0"},"peerDependencies":{"vue":"^3.4.0"},"_npmOperationalInternal":{"tmp":"tmp/word-editor_1.0.7_1783423318893_0.8849105854471653","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"@bireturn/word-editor","version":"1.0.8","_id":"@bireturn/word-editor@1.0.8","maintainers":[{"name":"hujingn","email":"hujingn@qq.com"},{"name":"kanggaoyang","email":"1162172981@qq.com"}],"dist":{"shasum":"a6c2f2244f544b693011f9748f04ede4abdd0db7","tarball":"https://registry.npmjs.org/@bireturn/word-editor/-/word-editor-1.0.8.tgz","fileCount":31,"integrity":"sha512-ZWP4/wp4bNd6XNIG3l8jB0O8FmbqqmXKjtjCJZZqt6wIZK/+d5BWls6W+RT4/izT/yxgrkLG1De+26DuXZxDbA==","signatures":[{"sig":"MEUCIDLKne4w5W46N2mDHQRppjoqUBphSV7K+UUwWSlsnJpsAiEAnmUhMbJHWlwhoZUhlGF6OtOpL4W7ZIPtAHVtTkv1mdk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":242076},"main":"./lib/word-editor.umd.js","type":"module","types":"./lib/index.d.ts","module":"./lib/word-editor.es.js","exports":{".":{"types":"./lib/index.d.ts","import":"./lib/word-editor.es.js","require":"./lib/word-editor.umd.js"},"./style.css":"./lib/word-editor.css"},"gitHead":"497e15dc579c4d3846e9e79e43759368c90039bc","scripts":{"dev":"vite","lint":"eslint . --ext .vue,.ts,.tsx --fix","build":"vue-tsc && vite build","preview":"vite preview","build:lib":"vite build --mode lib","type-check":"vue-tsc --noEmit","prepublishOnly":"npm run build:lib"},"_npmUser":{"name":"kanggaoyang","email":"1162172981@qq.com"},"_npmVersion":"10.8.2","description":"类 Word 的 Web 富文本编辑器，基于canvas-editor的数据结构渲染","directories":{},"_nodeVersion":"20.19.2","dependencies":{"pinia":"^2.1.7","lodash-es":"^4.18.1","@vueuse/core":"^10.7.0","lucide-vue-next":"^1.0.0","vue-virtual-scroller":"^2.0.0-beta.8"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.38","less":"^4.6.4","vite":"^5.1.0","eslint":"^8.57.0","vue-tsc":"^2.0.0","typescript":"^5.3.3","@types/node":"^20.11.0","@vue/tsconfig":"^0.5.1","vite-plugin-dts":"^5.0.2","eslint-plugin-vue":"^9.21.0","@vitejs/plugin-vue":"^5.0.3","@vitejs/plugin-vue-jsx":"^5.1.5","@typescript-eslint/parser":"^7.0.0","vite-plugin-mock-dev-server":"^2.1.1","@typescript-eslint/eslint-plugin":"^7.0.0"},"peerDependencies":{"vue":"^3.4.0"},"_npmOperationalInternal":{"tmp":"tmp/word-editor_1.0.8_1783479183165_0.15495680179190252","host":"s3://npm-registry-packages-npm-production"}},"1.0.9":{"name":"@bireturn/word-editor","version":"1.0.9","_id":"@bireturn/word-editor@1.0.9","maintainers":[{"name":"hujingn","email":"hujingn@qq.com"},{"name":"kanggaoyang","email":"1162172981@qq.com"}],"dist":{"shasum":"877ebcac30a9f702d3c51c1ccb7818945b1ef0ac","tarball":"https://registry.npmjs.org/@bireturn/word-editor/-/word-editor-1.0.9.tgz","fileCount":31,"integrity":"sha512-z6GP7Sw6PPTCRMnNdw1gEvQqJrSyiaE+vNXV5iCABA0dd8qW1spXYG4rpIsnhUKUdOFfc0zETv5hzoj9FK/Y/g==","signatures":[{"sig":"MEQCIDYChdPwzn2njMk6Rkh5pvqKWRB3LiKU8mORDdPxb5Q7AiA9RmqoklDd2Z392BcPnCuRUonTroaaxY0jJOuJZkaiJg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":242964},"main":"./lib/word-editor.umd.js","type":"module","types":"./lib/index.d.ts","module":"./lib/word-editor.es.js","exports":{".":{"types":"./lib/index.d.ts","import":"./lib/word-editor.es.js","require":"./lib/word-editor.umd.js"},"./style.css":"./lib/word-editor.css"},"gitHead":"47deca03fe70b6ee3ca5dc2adf9316cf259886ef","scripts":{"dev":"vite","lint":"eslint . --ext .vue,.ts,.tsx --fix","build":"vue-tsc && vite build","preview":"vite preview","build:lib":"vite build --mode lib","type-check":"vue-tsc --noEmit","prepublishOnly":"npm run build:lib"},"_npmUser":{"name":"kanggaoyang","email":"1162172981@qq.com"},"_npmVersion":"10.8.2","description":"类 Word 的 Web 富文本编辑器，基于canvas-editor的数据结构渲染","directories":{},"_nodeVersion":"20.19.2","dependencies":{"pinia":"^2.1.7","lodash-es":"^4.18.1","@vueuse/core":"^10.7.0","lucide-vue-next":"^1.0.0","vue-virtual-scroller":"^2.0.0-beta.8"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.38","less":"^4.6.4","vite":"^5.1.0","eslint":"^8.57.0","vue-tsc":"^2.0.0","typescript":"^5.3.3","@types/node":"^20.11.0","@vue/tsconfig":"^0.5.1","vite-plugin-dts":"^5.0.2","eslint-plugin-vue":"^9.21.0","@vitejs/plugin-vue":"^5.0.3","@vitejs/plugin-vue-jsx":"^5.1.5","@typescript-eslint/parser":"^7.0.0","vite-plugin-mock-dev-server":"^2.1.1","@typescript-eslint/eslint-plugin":"^7.0.0"},"peerDependencies":{"vue":"^3.4.0"},"_npmOperationalInternal":{"tmp":"tmp/word-editor_1.0.9_1783503642780_0.6016456414124112","host":"s3://npm-registry-packages-npm-production"}},"1.0.10":{"name":"@bireturn/word-editor","version":"1.0.10","_id":"@bireturn/word-editor@1.0.10","maintainers":[{"name":"hujingn","email":"hujingn@qq.com"},{"name":"kanggaoyang","email":"1162172981@qq.com"}],"dist":{"shasum":"06d32b9291fd77c4922d3077a5b6b3f0ce2b3884","tarball":"https://registry.npmjs.org/@bireturn/word-editor/-/word-editor-1.0.10.tgz","fileCount":31,"integrity":"sha512-SEYx29ZA29t7DbupDPBKZG8kJTL1m/ZyMztBDLDcWl4IOUI/Ctf6nCf5N7xerW71FRk9lif539WwpMw4qhnP4g==","signatures":[{"sig":"MEQCIB9ZgtW1Gq9FY4/hVYBNm6e3xUA6EmgsozFOLl5SOjnXAiBeW4KAGOYQsWDk3qvZQpOaYo9WdLdG/HFEJkZPtZtnpw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":243086},"main":"./lib/word-editor.umd.js","type":"module","types":"./lib/index.d.ts","module":"./lib/word-editor.es.js","exports":{".":{"types":"./lib/index.d.ts","import":"./lib/word-editor.es.js","require":"./lib/word-editor.umd.js"},"./style.css":"./lib/word-editor.css"},"gitHead":"6c5cc1df1d833257acaefb8793d6ddc6d8206e87","scripts":{"dev":"vite","lint":"eslint . --ext .vue,.ts,.tsx --fix","build":"vue-tsc && vite build","preview":"vite preview","build:lib":"vite build --mode lib","type-check":"vue-tsc --noEmit","prepublishOnly":"npm run build:lib"},"_npmUser":{"name":"kanggaoyang","email":"1162172981@qq.com"},"_npmVersion":"10.8.2","description":"类 Word 的 Web 富文本编辑器，基于canvas-editor的数据结构渲染","directories":{},"_nodeVersion":"20.19.2","dependencies":{"pinia":"^2.1.7","lodash-es":"^4.18.1","@vueuse/core":"^10.7.0","lucide-vue-next":"^1.0.0","vue-virtual-scroller":"^2.0.0-beta.8"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.38","less":"^4.6.4","vite":"^5.1.0","eslint":"^8.57.0","vue-tsc":"^2.0.0","typescript":"^5.3.3","@types/node":"^20.11.0","@vue/tsconfig":"^0.5.1","vite-plugin-dts":"^5.0.2","eslint-plugin-vue":"^9.21.0","@vitejs/plugin-vue":"^5.0.3","@vitejs/plugin-vue-jsx":"^5.1.5","@typescript-eslint/parser":"^7.0.0","vite-plugin-mock-dev-server":"^2.1.1","@typescript-eslint/eslint-plugin":"^7.0.0"},"peerDependencies":{"vue":"^3.4.0"},"_npmOperationalInternal":{"tmp":"tmp/word-editor_1.0.10_1783578472576_0.6891768100731248","host":"s3://npm-registry-packages-npm-production"}},"1.0.11":{"name":"@bireturn/word-editor","version":"1.0.11","_id":"@bireturn/word-editor@1.0.11","maintainers":[{"name":"hujingn","email":"hujingn@qq.com"},{"name":"kanggaoyang","email":"1162172981@qq.com"}],"dist":{"shasum":"7fde4dfea2b892a04c95eebc12ae2c5806d36ed5","tarball":"https://registry.npmjs.org/@bireturn/word-editor/-/word-editor-1.0.11.tgz","fileCount":31,"integrity":"sha512-isl/Ief+4vGqLBB2IkvTrJBLST6HRNYet7y3q34uEvMogFRALk9zS1Ct9686v5tJ4LZy72zpUybCHtmksqn82g==","signatures":[{"sig":"MEUCIQCGOKOFviAAeo/QTWZlBPBlS0XZ1UTXkNPtCl+xw1jVgQIgBscJCv5Q3BK9E4RPaNE+Gowc42AW3/RfnlhkVkxwQ60=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":243084},"main":"./lib/word-editor.umd.js","type":"module","types":"./lib/index.d.ts","module":"./lib/word-editor.es.js","exports":{".":{"types":"./lib/index.d.ts","import":"./lib/word-editor.es.js","require":"./lib/word-editor.umd.js"},"./style.css":"./lib/word-editor.css"},"gitHead":"bba4ba492a78493d8b870fd71837ba9cff0e12a8","scripts":{"dev":"vite","lint":"eslint . --ext .vue,.ts,.tsx --fix","build":"vue-tsc && vite build","preview":"vite preview","build:lib":"vite build --mode lib","type-check":"vue-tsc --noEmit","prepublishOnly":"npm run build:lib"},"_npmUser":{"name":"kanggaoyang","email":"1162172981@qq.com"},"_npmVersion":"10.8.2","description":"类 Word 的 Web 富文本编辑器，基于canvas-editor的数据结构渲染","directories":{},"_nodeVersion":"20.19.2","dependencies":{"pinia":"^2.1.7","lodash-es":"^4.18.1","@vueuse/core":"^10.7.0","lucide-vue-next":"^1.0.0","vue-virtual-scroller":"^2.0.0-beta.8"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.38","less":"^4.6.4","vite":"^5.1.0","eslint":"^8.57.0","vue-tsc":"^2.0.0","typescript":"^5.3.3","@types/node":"^20.11.0","@vue/tsconfig":"^0.5.1","vite-plugin-dts":"^5.0.2","eslint-plugin-vue":"^9.21.0","@vitejs/plugin-vue":"^5.0.3","@vitejs/plugin-vue-jsx":"^5.1.5","@typescript-eslint/parser":"^7.0.0","vite-plugin-mock-dev-server":"^2.1.1","@typescript-eslint/eslint-plugin":"^7.0.0"},"peerDependencies":{"vue":"^3.4.0"},"_npmOperationalInternal":{"tmp":"tmp/word-editor_1.0.11_1783588184067_0.6723489443262625","host":"s3://npm-registry-packages-npm-production"}},"1.0.12":{"name":"@bireturn/word-editor","version":"1.0.12","_id":"@bireturn/word-editor@1.0.12","maintainers":[{"name":"hujingn","email":"hujingn@qq.com"},{"name":"kanggaoyang","email":"1162172981@qq.com"}],"dist":{"shasum":"517db0fb4f150f3ea941f19ccd08978fb3cf5686","tarball":"https://registry.npmjs.org/@bireturn/word-editor/-/word-editor-1.0.12.tgz","fileCount":31,"integrity":"sha512-2pEyJyVhiaI/fHW/3TMXrnSDSJjezOBcry2+zrwaEOzwWi/5GdG9Q5M0DoIDjJCIoJt+AXgf3n38MYnWP0w2Gg==","signatures":[{"sig":"MEUCIQCPlZz8q199wh2Q7DjY/C3K7PoBxn61fVZRdB3W5tvSRQIgEznSzoDaZ7vvWrAzma3taFYpvDJP+u7v8l8F7CV86OE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":243468},"main":"./lib/word-editor.umd.js","type":"module","types":"./lib/index.d.ts","module":"./lib/word-editor.es.js","exports":{".":{"types":"./lib/index.d.ts","import":"./lib/word-editor.es.js","require":"./lib/word-editor.umd.js"},"./style.css":"./lib/word-editor.css"},"gitHead":"2ca4a1a61c2550783fa7cb5dc093e7cd1e16defe","scripts":{"dev":"vite","lint":"eslint . --ext .vue,.ts,.tsx --fix","build":"vue-tsc && vite build","preview":"vite preview","build:lib":"vite build --mode lib","type-check":"vue-tsc --noEmit","prepublishOnly":"npm run build:lib"},"_npmUser":{"name":"kanggaoyang","email":"1162172981@qq.com"},"_npmVersion":"10.8.2","description":"类 Word 的 Web 富文本编辑器，基于canvas-editor的数据结构渲染","directories":{},"_nodeVersion":"20.19.2","dependencies":{"pinia":"^2.1.7","lodash-es":"^4.18.1","@vueuse/core":"^10.7.0","lucide-vue-next":"^1.0.0","vue-virtual-scroller":"^2.0.0-beta.8"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.38","less":"^4.6.4","vite":"^5.1.0","eslint":"^8.57.0","vue-tsc":"^2.0.0","typescript":"^5.3.3","@types/node":"^20.11.0","@vue/tsconfig":"^0.5.1","vite-plugin-dts":"^5.0.2","eslint-plugin-vue":"^9.21.0","@vitejs/plugin-vue":"^5.0.3","@vitejs/plugin-vue-jsx":"^5.1.5","@typescript-eslint/parser":"^7.0.0","vite-plugin-mock-dev-server":"^2.1.1","@typescript-eslint/eslint-plugin":"^7.0.0"},"peerDependencies":{"vue":"^3.4.0"},"_npmOperationalInternal":{"tmp":"tmp/word-editor_1.0.12_1783599013187_0.02510980075895719","host":"s3://npm-registry-packages-npm-production"}},"1.0.13":{"name":"@bireturn/word-editor","version":"1.0.13","_id":"@bireturn/word-editor@1.0.13","maintainers":[{"name":"hujingn","email":"hujingn@qq.com"},{"name":"kanggaoyang","email":"1162172981@qq.com"}],"dist":{"shasum":"f886957578ca1c18852c5d2dbed9f21bda66bc8c","tarball":"https://registry.npmjs.org/@bireturn/word-editor/-/word-editor-1.0.13.tgz","fileCount":31,"integrity":"sha512-T33wpK3PO9WLn4Fy9q5w2/MrZkXTWlXHlmqdimrAL+Be253GapBO5uAzRuH+3wbLNaAKZRirXy+qvHIpkPC58Q==","signatures":[{"sig":"MEUCIQDv1M1aXstAlAb7X0FtXoGDPfsKxbgmNujVH7ZwR/ngegIgOoEGP1nEtjVbxciMz3o2GHppSI+cB66Sc9a8gsb7r8E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":243486},"main":"./lib/word-editor.umd.js","type":"module","types":"./lib/index.d.ts","module":"./lib/word-editor.es.js","exports":{".":{"types":"./lib/index.d.ts","import":"./lib/word-editor.es.js","require":"./lib/word-editor.umd.js"},"./style.css":"./lib/word-editor.css"},"gitHead":"5f5ea73e392b106578556cb54a067d66ebd7b91a","scripts":{"dev":"vite","lint":"eslint . --ext .vue,.ts,.tsx --fix","build":"vue-tsc && vite build","preview":"vite preview","build:lib":"vite build --mode lib","type-check":"vue-tsc --noEmit","prepublishOnly":"npm run build:lib"},"_npmUser":{"name":"kanggaoyang","email":"1162172981@qq.com"},"_npmVersion":"10.8.2","description":"类 Word 的 Web 富文本编辑器，基于canvas-editor的数据结构渲染","directories":{},"_nodeVersion":"20.19.2","dependencies":{"pinia":"^2.1.7","lodash-es":"^4.18.1","@vueuse/core":"^10.7.0","lucide-vue-next":"^1.0.0","vue-virtual-scroller":"^2.0.0-beta.8"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.38","less":"^4.6.4","vite":"^5.1.0","eslint":"^8.57.0","vue-tsc":"^2.0.0","typescript":"^5.3.3","@types/node":"^20.11.0","@vue/tsconfig":"^0.5.1","vite-plugin-dts":"^5.0.2","eslint-plugin-vue":"^9.21.0","@vitejs/plugin-vue":"^5.0.3","@vitejs/plugin-vue-jsx":"^5.1.5","@typescript-eslint/parser":"^7.0.0","vite-plugin-mock-dev-server":"^2.1.1","@typescript-eslint/eslint-plugin":"^7.0.0"},"peerDependencies":{"vue":"^3.4.0"},"_npmOperationalInternal":{"tmp":"tmp/word-editor_1.0.13_1783670837517_0.39467525253158997","host":"s3://npm-registry-packages-npm-production"}},"1.0.14":{"name":"@bireturn/word-editor","version":"1.0.14","description":"类 Word 的 Web 富文本编辑器，基于canvas-editor的数据结构渲染","type":"module","main":"./lib/word-editor.umd.js","module":"./lib/word-editor.es.js","types":"./lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","import":"./lib/word-editor.es.js","require":"./lib/word-editor.umd.js"},"./style.css":"./lib/word-editor.css"},"scripts":{"dev":"vite","build":"vue-tsc && vite build","build:lib":"vite build --mode lib","prepublishOnly":"npm run build:lib","preview":"vite preview","lint":"eslint . --ext .vue,.ts,.tsx --fix","type-check":"vue-tsc --noEmit"},"peerDependencies":{"vue":"^3.4.0"},"dependencies":{"@vueuse/core":"^10.7.0","lodash-es":"^4.18.1","lucide-vue-next":"^1.0.0","pinia":"^2.1.7","vue-virtual-scroller":"^2.0.0-beta.8"},"devDependencies":{"@types/node":"^20.11.0","@typescript-eslint/eslint-plugin":"^7.0.0","@typescript-eslint/parser":"^7.0.0","@vitejs/plugin-vue":"^5.0.3","@vitejs/plugin-vue-jsx":"^5.1.5","@vue/tsconfig":"^0.5.1","eslint":"^8.57.0","eslint-plugin-vue":"^9.21.0","less":"^4.6.4","typescript":"^5.3.3","vite":"^5.1.0","vite-plugin-dts":"^5.0.2","vite-plugin-mock-dev-server":"^2.1.1","vue":"^3.5.38","vue-tsc":"^2.0.0"},"_id":"@bireturn/word-editor@1.0.14","gitHead":"88d7c6810fe672a6f9e61861dffb9fadd8f4b083","_nodeVersion":"20.19.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-RWrDomH/qanLTYmpN4QMt+t5L+yLpPyZ/rLspt4NOoGtjoeP3CTj17GFVmPAv9x9Ch1Q13n9Nv6Zoud7bwSj7A==","shasum":"ab9502e95b3234038518bccd0dd7a2ff6a469edc","tarball":"https://registry.npmjs.org/@bireturn/word-editor/-/word-editor-1.0.14.tgz","fileCount":31,"unpackedSize":243518,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIERBgWV/K462lWRbM8KzR4MM47LZAnaoBatLFrJE17QTAiEA5FMtd0UQDq2iPJOS6tqPtibDMx5eaNNuev5lWwAF63k="}]},"_npmUser":{"name":"kanggaoyang","email":"1162172981@qq.com"},"directories":{},"maintainers":[{"name":"hujingn","email":"hujingn@qq.com"},{"name":"kanggaoyang","email":"1162172981@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/word-editor_1.0.14_1783827592728_0.04931587816206662"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-18T09:03:23.724Z","modified":"2026-07-12T03:39:53.066Z","1.0.0":"2026-06-18T09:03:23.990Z","1.0.1":"2026-06-23T08:52:19.928Z","1.0.2":"2026-06-26T03:08:52.195Z","1.0.3":"2026-07-02T02:53:30.896Z","1.0.4":"2026-07-07T02:56:30.575Z","1.0.5":"2026-07-07T03:14:44.950Z","1.0.6":"2026-07-07T08:52:46.933Z","1.0.7":"2026-07-07T11:21:59.024Z","1.0.8":"2026-07-08T02:53:03.321Z","1.0.9":"2026-07-08T09:40:42.899Z","1.0.10":"2026-07-09T06:27:52.720Z","1.0.11":"2026-07-09T09:09:44.197Z","1.0.12":"2026-07-09T12:10:13.376Z","1.0.13":"2026-07-10T08:07:17.639Z","1.0.14":"2026-07-12T03:39:52.884Z"},"description":"类 Word 的 Web 富文本编辑器，基于canvas-editor的数据结构渲染","maintainers":[{"name":"hujingn","email":"hujingn@qq.com"},{"name":"kanggaoyang","email":"1162172981@qq.com"}],"readme":"# @bireturn/word-editor\r\n\r\n类 Word 的 Web 富文本编辑器，目前只实现了只读渲染功能，基于 Vue 3 + Vite + TypeScript。参考 [canvas-editor](https://github.com/Hufe921/canvas-editor) 的数据结构与命令系统设计，但使用 **DOM 渲染**代替 Canvas，并通过虚拟滚动支撑大文档。\r\n\r\n## 安装\r\n\r\n```bash\r\nnpm install @bireturn/word-editor\r\n```\r\n\r\n> 需宿主项目提供 `vue ^3.4`（已声明为 `peerDependency`，避免重复打包与多实例）。\r\n\r\n## 使用\r\n\r\n数据由使用方通过 `props` 传入，组件本身不发请求：\r\n\r\n```vue\r\n<script setup>\r\nimport { EditorContainer } from '@bireturn/word-editor'\r\nimport '@bireturn/word-editor/style.css'   // 必须引入样式\r\nimport { ref, onMounted } from 'vue'\r\n\r\nconst docData = ref([])   // IElement[]，来源由使用方决定\r\nconst loading = ref(false)\r\n\r\nonMounted(async () => {\r\n  loading.value = true\r\n  docData.value = await fetchDoc()   // 使用方自己的数据源\r\n  loading.value = false\r\n})\r\n</script>\r\n\r\n<template>\r\n  <EditorContainer :data=\"docData\" :loading=\"loading\" />\r\n</template>\r\n```\r\n\r\n也可通过 `app.use()` 全局注册：\r\n\r\n```ts\r\nimport WordEditor from '@bireturn/word-editor'\r\nimport '@bireturn/word-editor/style.css'\r\n\r\napp.use(WordEditor)   // 注册全局组件 <EditorContainer />\r\n```\r\n\r\n### Props\r\n\r\n| 名称 | 类型 | 默认值 | 说明 |\r\n| --- | --- | --- | --- |\r\n| `data` | `IElement[]` | `[]` | 文档结构数据，渲染所需的行内元素列表 |\r\n| `loading` | `boolean` | `false` | 外部数据加载态，为 `true` 时显示加载占位 |\r\n\r\n## 特性\r\n\r\n- 数据驱动渲染：文档数据模型是唯一数据源，DOM 仅作视图\r\n- 命令系统（Command Pattern）：所有写操作经 `editor.exec()` 分发，统一支持撤销/重做\r\n- 虚拟滚动：以段落为最小单元，配合自研 `VirtualTable` 支撑大文档\r\n- A4 分页排版：按页面内容高度自动分页，支持页眉/页脚、连续图片与表格跨页拆分\r\n- 富内容：文本、图片、超链接、表格、控件（文本/输入/单选）、上下标、复选框等\r\n- 插件机制：通过 `editor.use()` 注入自定义命令与能力\r\n\r\n## 技术栈\r\n\r\n| 类别 | 选型 |\r\n| --- | --- |\r\n| 框架 | Vue 3（Composition API） |\r\n| 构建 | Vite 5 + TypeScript 5 |\r\n| 状态 | Pinia |\r\n| 图标 | lucide-vue-next |\r\n| 工具 | @vueuse/core、lodash-es |\r\n| 虚拟滚动 | vue-virtual-scroller + 自研 VirtualTable |\r\n| Mock | vite-plugin-mock-dev-server |\r\n\r\n## 快速开始\r\n\r\n```bash\r\nnpm install          # 安装依赖\r\nnpm run dev          # 启动开发服务器（默认 http://localhost:5173）\r\n```\r\n\r\n开发态接口由 `mock/` 提供，可完全离线运行，无需后端。\r\n\r\n## 常用命令\r\n\r\n```bash\r\nnpm run dev          # 启动开发服务器\r\nnpm run build        # 构建可部署的应用产物\r\nnpm run build:lib    # 构建组件库产物（lib/，含 ESM/UMD + 类型声明）\r\nnpm run preview      # 本地预览构建产物\r\nnpm run lint         # ESLint 检查并自动修复\r\nnpm run type-check   # 仅做 TypeScript 类型检查\r\n```\r\n\r\n## 构建与本地联调\r\n\r\n本项目可同时作为**独立应用**与**组件库**使用。`vite.config.ts` 按 `mode` 区分两种产物：默认模式构建应用，`--mode lib`（即 `npm run build:lib`）构建组件库。\r\n\r\n### 构建产物\r\n\r\n```bash\r\nnpm run build:lib\r\n```\r\n\r\n产物输出到 `lib/`：\r\n\r\n| 文件 | 说明 |\r\n| --- | --- |\r\n| `word-editor.es.js` | ESM 格式,供打包工具按需引入 |\r\n| `word-editor.umd.js` | UMD 格式,供浏览器/旧环境直接引用 |\r\n| `word-editor.css` | 组件样式,需由使用方手动引入 |\r\n| `index.d.ts` | TypeScript 类型声明 |\r\n\r\n`vue` 被声明为 `peerDependencies` 并在构建时外置,由使用方提供,避免重复打包与多实例问题。\r\n\r\n### 本地联调（不发布到 npm）\r\n\r\n构建后,在**消费方项目**通过本地路径安装,推荐 `file:` 方式：\r\n\r\n```jsonc\r\n// 消费方 package.json\r\n{\r\n  \"dependencies\": {\r\n    \"@bireturn/word-editor\": \"file:../word-editor\"   // 改成实际路径\r\n  }\r\n}\r\n```\r\n\r\n```bash\r\nnpm install\r\n```\r\n\r\n改动本库后,重跑 `npm run build:lib` 并重启消费方 dev server 即可生效。也可用 `npm pack` 生成 `.tgz` 后安装(更贴近真实发布),或 `npm link`(改库实时联动)。\r\n\r\n> ⚠️ 若用 `file:` / `npm link` 出现 Vue 响应式失效或 inject 报错,通常是加载了两份 Vue。在消费方 `vite.config.ts` 加 `resolve.dedupe: ['vue']` 与 `optimizeDeps.include: ['@bireturn/word-editor']` 去重即可。\r\n\r\n### 发布到 npm\r\n\r\n```bash\r\nnpm run build:lib        # 先构建产物到 lib/\r\nnpm publish --access public   # scoped 包首次发布需加 --access public\r\n```\r\n\r\n> 仅 `lib/` 会随包发布（由 `package.json` 的 `files` 字段约定）。\r\n\r\n## Mock 数据\r\n\r\n开发态接口基于 [vite-plugin-mock-dev-server](https://github.com/pengzhanbo/vite-plugin-mock-dev-server) 实现，配置见 [`mock/api.mock.ts`](mock/api.mock.ts)，数据文件存放于 [`mock/json/`](mock/json/)，可完全离线运行、无需后端。\r\n\r\n### 接口约定\r\n\r\n前端通过 [`src/api/file.ts`](src/api/file.ts) 的 `getStructInfo()` 请求 `/api/info`，期望返回文档结构数组 `IElement[]`（即 `DocumentModel` 渲染所需的行内元素列表）。\r\n\r\n`mock/api.mock.ts` 中有两类挂载方式：\r\n\r\n- **约定式**（`apiList`）：`/api/xxx` 自动读取 `mock/json/xxx.json`，默认延迟 300ms\r\n- **自定义式**（`customApis`）：显式指定 url 与数据文件，可单独设置延迟。当前 `/api/info` 即在此挂载\r\n\r\n### 切换测试数据\r\n\r\n修改 `customApis` 中 `/api/info` 读取的 json 文件即可切换渲染数据，例如：\r\n\r\n```ts\r\nconst customApis = [\r\n  {\r\n    url: '/api/info',\r\n    delay: 1000,\r\n    body: () =>\r\n      JSON.parse(\r\n        fs.readFileSync(path.resolve(root, `./mock/json/info.json`), 'utf8')\r\n      )\r\n  }\r\n]\r\n```\r\n\r\n### 数据文件清单\r\n\r\n所有文件均为顶层 `IElement[]` 数组，元素以 `type` 区分（`text` / `table` / `image` / `hyperlink` / `control` / `list` 等）。\r\n\r\n| 文件 | 体积 | 元素数 | 主要内容 | 用途 |\r\n| --- | --- | --- | --- | --- |\r\n| `info.json` | ~1.6 MB | 81 | 文本、9 个表格、控件、超链接 | 常规文档，功能演示基线 |\r\n| `pagetable.json` | ~388 KB | 1 | 单个跨页大表格（77 行） | 表格分页与行渲染调试 |\r\n| `page1000.json` | ~32 MB | 84 | 84 个表格 | 大量表格的分页/性能压测 |\r\n| `page69.json` | ~85 MB | 2323 | 文本、198 表格、列表、控件 | 超大文档虚拟滚动压测 |\r\n| `page69i.json` | ~85 MB | 2344 | 在 `page69` 基础上增加 18 张图片 | 含图片的超大文档压测 |\r\n\r\n> 说明：`page69*` / `page1000` 体积较大，仅用于性能与边界场景验证，日常开发建议使用 `info.json` 或 `pagetable.json`。\r\n\r\n### 元素数据结构\r\n\r\n各 `type` 的字段含义见 [`docs/0.JSON数据类型说明.md`](docs/0.JSON数据类型说明.md) 与 [`docs/1.页面样式属性说明.md`](docs/1.页面样式属性说明.md)。\r\n\r\n## 核心设计原则\r\n\r\n1. **数据模型是唯一数据源**，DOM 只是视图，不存储状态\r\n2. **contenteditable 仅用于输入捕获**，不用于渲染（透明 overlay 模式）\r\n3. **所有写操作必须通过 `editor.exec()`**，不能直接修改 `docModel`\r\n4. **大文档通过虚拟滚动**实现，段落是虚拟列表的最小单元\r\n\r\n## 目录结构\r\n\r\n```\r\nsrc/\r\n├── core/                       # 纯 TypeScript，与 Vue 无关\r\n│   ├── editor/Editor.ts        # 编辑器主类，所有子系统的聚合入口\r\n│   ├── model/DocumentModel.ts  # 文档数据模型，所有原子修改方法在此\r\n│   ├── command/                # 命令系统\r\n│   │   ├── CommandManager.ts   # exec() 分发，注册/执行命令\r\n│   │   └── commands/           # InsertText / Delete / Format / InsertParagraph 等\r\n│   ├── selection/SelectionManager.ts  # 模型坐标系的光标/选区\r\n│   ├── history/HistoryManager.ts      # undo/redo 栈\r\n│   └── input/InputHandler.ts   # DOM 事件 → exec() 转换层\r\n├── composables/\r\n│   ├── useEditor.ts            # provide/inject Editor 实例\r\n│   └── useDocumentData.ts      # 从 docModel 提取响应式数据\r\n├── components/\r\n│   ├── Editor/                 # 编辑器根组件（含分页、表格、页眉页脚渲染）\r\n│   └── VirtualTable/           # 自研虚拟表格组件\r\n├── api/                        # 接口请求封装\r\n└── types/                      # 全局类型（document/selection/command/plugin）\r\n\r\nmock/                           # vite mock，离线可用的接口数据\r\ndocs/                           # 功能说明与问题分析文档\r\n```\r\n\r\n## 架构\r\n\r\n### 数据流\r\n\r\n```\r\n用户输入（键盘/鼠标）\r\n  → InputHandler（DOM 事件拦截）\r\n  → editor.exec(commandName, payload)\r\n  → CommandManager（查找命令工厂）\r\n  → ICommand.execute()（修改 DocumentModel）\r\n  → Vue 响应式自动触发重渲染\r\n  → 组件根据最新 docModel 渲染 DOM\r\n```\r\n\r\n### 数据模型\r\n\r\n```\r\nDocumentModel\r\n  └── sections[]          # 节（分页/分栏单位）\r\n        └── paragraphs[]  # 段落（块级，虚拟滚动的最小单元）\r\n              └── children: IElement[]  # 行内元素（文本/图片/超链接/表格等）\r\n```\r\n\r\n### 坐标系\r\n\r\n所有位置用 `ModelPoint` 表示：\r\n\r\n```ts\r\n{ sectionIndex, paragraphIndex, elementIndex, offset }\r\n```\r\n\r\nDOM 元素通过 `data-si / data-pi / data-ei` 属性反向映射回模型坐标（见 `SelectionManager.domToModelPoint`）。\r\n\r\n## 扩展\r\n\r\n### 注册命令\r\n\r\n在 `CommandManager._registerBuiltinCommands()` 中注册，或通过插件注入：\r\n\r\n```ts\r\neditor.commands.register('myCommand', (payload) => new MyCommand(...))\r\n```\r\n\r\n命令须实现 `ICommand`（`execute` + `undo`），可选实现 `canMergeWith` / `merge` 以支持连续输入合并。\r\n\r\n### 插件\r\n\r\n```ts\r\neditor.use({\r\n  name: 'my-plugin',\r\n  install(editor) {\r\n    editor.commands.register('customCommand', ...)\r\n  }\r\n})\r\n```\r\n\r\n### 新增元素类型\r\n\r\n需同时更新：\r\n\r\n- `src/types/document.ts`（类型定义）\r\n- `src/components/Editor/index.vue`（渲染逻辑）\r\n\r\n## 关键约束\r\n\r\n- 禁止在渲染组件中直接修改 `docModel`\r\n- 禁止在 `InputHandler` 中直接修改 `docModel`（必须通过 `exec`）\r\n- `DocumentModel` 的原子方法（`insertText` / `deleteAt` 等）只能由 Command 调用\r\n\r\n## 文档\r\n\r\n更多功能说明与问题分析见 [`docs/`](docs/) 目录。\r\n","readmeFilename":"README.md"}