{"_id":"@flyfish-dev/cad-viewer","_rev":"12-dfc365ecefc3cd93fedf6c5dd7096b45","name":"@flyfish-dev/cad-viewer","dist-tags":{"latest":"0.8.2"},"versions":{"0.5.3":{"name":"@flyfish-dev/cad-viewer","version":"0.5.3","keywords":["cad","dwg","dxf","dwf","dwfx","autocad","viewer","canvas","typescript","frontend","libredwg","web-worker","wasm","webgl","gpu","cad-viewer"],"author":{"name":"Yu Wang"},"license":"AGPL-3.0-only","_id":"@flyfish-dev/cad-viewer@0.5.3","maintainers":[{"name":"wybaby168","email":"wybaby168@gmail.com"}],"homepage":"https://cad-viewer-iys.pages.dev","bugs":{"url":"https://github.com/flyfish-dev/cad-viewer/issues"},"dist":{"shasum":"5501c9ef9fba20f1f52dce502d61952415fe6488","tarball":"https://registry.npmjs.org/@flyfish-dev/cad-viewer/-/cad-viewer-0.5.3.tgz","fileCount":58,"integrity":"sha512-DNaDROGSelnV18WdoC0gNfZZfZiwN8RWZsPPfd1iwIuuObg2uN1MO7KmdpUq56qHD66hrgHqSYAmSX9megIMUw==","signatures":[{"sig":"MEQCIFrWo9TZgCEEQ9LePOKzDwBRZVuJOYhhD4DvV3p2v8H6AiAaOJ3Cu2Ydov0szQWM/+IUe+qTr4k4A+1StXiBWkPUYQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8015214},"main":"./dist/cad-viewer.umd.cjs","type":"module","types":"./dist/types/index.d.ts","module":"./dist/cad-viewer.es.js","engines":{"node":">=20.19.0"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/cad-viewer.es.js","default":"./dist/cad-viewer.es.js","require":"./dist/cad-viewer.umd.cjs"},"./style.css":"./dist/style.css","./styles.css":"./dist/style.css","./package.json":"./package.json","./dist/index.js":"./dist/index.js","./dist/index.d.ts":"./dist/index.d.ts","./wasm/libredwg-web.js":"./dist/wasm/libredwg-web.js","./wasm/libredwg-web.wasm":"./dist/wasm/libredwg-web.wasm"},"gitHead":"9f14ec3c9718a705f58956848cb369f39f5d807e","scripts":{"dev":"npm run copy:wasm && vite --config vite.config.ts --host 0.0.0.0","build":"npm run clean && npm run typecheck && npm run build:lib && npm run build:demo","clean":"node ./scripts/clean.cjs","preview":"npm run build:demo && vite preview --config vite.config.ts --host 0.0.0.0","pack:dry":"npm pack --dry-run","build:lib":"npm run copy:wasm && vite build --config vite.lib.config.ts && npm run build:types && npm run build:assets","copy:wasm":"node ./scripts/copy-libredwg-wasm.cjs","pages:dev":"npm run build:demo && wrangler pages dev dist-demo","typecheck":"tsc -p tsconfig.json --noEmit","build:demo":"npm run copy:wasm && vite build --config vite.config.ts","check:wasm":"node ./scripts/check-wasm.cjs","build:types":"tsc -p tsconfig.build.json","release:npm":"npm publish --access public","build:assets":"node ./scripts/copy-dist-assets.cjs","deploy:pages":"npm run build:demo && wrangler pages deploy dist-demo --project-name cad-viewer","preview:demo":"npm run preview","prepublishOnly":"npm run clean && npm run typecheck && npm run build:lib && npm run pack:dry","build:worker-check":"npm run typecheck && npm run build:demo"},"_npmUser":{"name":"wybaby168","email":"wybaby168@gmail.com"},"repository":{"url":"git+https://github.com/flyfish-dev/cad-viewer.git","type":"git"},"_npmVersion":"11.12.1","description":"A production-oriented lightweight frontend CAD viewer for DWG, DXF and DWFx/DWF preview, built with TypeScript, WebGL, Canvas overlays and worker-backed DWG WebAssembly parsing.","directories":{},"sideEffects":["*.css","./dist/style.css","./src/styles.css","./demo/styles.css"],"_nodeVersion":"26.0.0","dependencies":{"fflate":"^0.8.2","dxf-parser":"^1.1.2","@mlightcad/libredwg-web":"^0.7.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^5.4.11","wrangler":"^4.20.0","typescript":"^5.8.3","@types/node":"^20.14.12"},"_npmOperationalInternal":{"tmp":"tmp/cad-viewer_0.5.3_1781172255680_0.10846483848159028","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@flyfish-dev/cad-viewer","version":"0.6.0","keywords":["cad","dwg","dxf","dwf","dwfx","autocad","viewer","canvas","typescript","frontend","libredwg","web-worker","wasm","webgl","gpu","cad-viewer","w2d","w3d","dwf-viewer"],"author":{"name":"Yu Wang"},"license":"AGPL-3.0-only","_id":"@flyfish-dev/cad-viewer@0.6.0","maintainers":[{"name":"wybaby168","email":"wybaby168@gmail.com"}],"homepage":"https://cad-viewer-iys.pages.dev","bugs":{"url":"https://github.com/flyfish-dev/cad-viewer/issues"},"dist":{"shasum":"926a977acdccfc85467468706f07f2e1d1fd311f","tarball":"https://registry.npmjs.org/@flyfish-dev/cad-viewer/-/cad-viewer-0.6.0.tgz","fileCount":59,"integrity":"sha512-Yu/wjSxZrQTRxkXWWzwcyYJn9ptDsciwnMAKJvPm2yspazV3ziRF+OA+YCR3F1F9OdGvKeiB9I2qJpmxRcFI9g==","signatures":[{"sig":"MEYCIQDcCVv+NDkE6O8Sw/KUOEwrcC4rkUsS5wdwWBck/Pi51gIhAMk2FZUTl6nSqXg+9e2ngCzu9vTKl+gcOuj3KxNW1rqx","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8056759},"main":"./dist/cad-viewer.umd.cjs","type":"module","types":"./dist/types/index.d.ts","module":"./dist/cad-viewer.es.js","engines":{"node":">=20.19.0"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/cad-viewer.es.js","default":"./dist/cad-viewer.es.js","require":"./dist/cad-viewer.umd.cjs"},"./style.css":"./dist/style.css","./styles.css":"./dist/style.css","./package.json":"./package.json","./dist/index.js":"./dist/index.js","./dist/index.d.ts":"./dist/index.d.ts","./wasm/libredwg-web.js":"./dist/wasm/libredwg-web.js","./wasm/dwfv-render.wasm":"./dist/wasm/dwfv-render.wasm","./wasm/libredwg-web.wasm":"./dist/wasm/libredwg-web.wasm"},"gitHead":"4d93cf654bbab5112c3dfd3fda24555877ccba0e","scripts":{"dev":"npm run copy:wasm && vite --config vite.config.ts --host 0.0.0.0","build":"npm run clean && npm run typecheck && npm run build:lib && npm run build:demo","clean":"node ./scripts/clean.cjs","preview":"npm run build:demo && vite preview --config vite.config.ts --host 0.0.0.0","pack:dry":"npm pack --dry-run","build:lib":"npm run copy:wasm && vite build --config vite.lib.config.ts && npm run build:types && npm run build:assets","copy:wasm":"node ./scripts/copy-libredwg-wasm.cjs","pages:dev":"npm run build:demo && wrangler pages dev dist-demo","typecheck":"tsc -p tsconfig.json --noEmit","build:demo":"npm run copy:wasm && vite build --config vite.config.ts","check:wasm":"node ./scripts/check-wasm.cjs","build:types":"tsc -p tsconfig.build.json","release:npm":"npm publish --access public --auth-type=web","build:assets":"node ./scripts/copy-dist-assets.cjs","deploy:pages":"npm run build:demo && wrangler pages deploy dist-demo --project-name cad-viewer","preview:demo":"npm run preview","prepublishOnly":"npm run clean && npm run typecheck && npm run build:lib && npm run pack:dry","build:worker-check":"npm run typecheck && npm run build:demo"},"_npmUser":{"name":"wybaby168","email":"wybaby168@gmail.com"},"repository":{"url":"git+https://github.com/flyfish-dev/cad-viewer.git","type":"git"},"_npmVersion":"11.12.1","description":"A production-oriented lightweight frontend CAD viewer for DWG, DXF, DWF and DWFx, built with TypeScript, worker-backed DWG WebAssembly parsing, native dwf-viewer integration, WebGL and Canvas overlays.","directories":{},"sideEffects":["*.css","./dist/style.css","./src/styles.css","./demo/styles.css"],"_nodeVersion":"26.0.0","dependencies":{"dwf-viewer":"^0.5.0","dxf-parser":"^1.1.2","@mlightcad/libredwg-web":"^0.7.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^5.4.11","wrangler":"^4.20.0","typescript":"^5.8.3","@types/node":"^20.14.12"},"_npmOperationalInternal":{"tmp":"tmp/cad-viewer_0.6.0_1781225874697_0.3539358181164103","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"@flyfish-dev/cad-viewer","version":"0.6.1","keywords":["cad","dwg","dxf","dwf","dwfx","xps","autocad","viewer","canvas","typescript","frontend","libredwg","web-worker","wasm","webgl","gpu","cad-viewer","w2d","w3d","dwf-viewer"],"author":{"name":"Yu Wang"},"license":"AGPL-3.0-only","_id":"@flyfish-dev/cad-viewer@0.6.1","maintainers":[{"name":"wybaby168","email":"wybaby168@gmail.com"}],"homepage":"https://cad-viewer-iys.pages.dev","bugs":{"url":"https://github.com/flyfish-dev/cad-viewer/issues"},"dist":{"shasum":"3c0497aac5ee9babae74279882dfaf5094ad082c","tarball":"https://registry.npmjs.org/@flyfish-dev/cad-viewer/-/cad-viewer-0.6.1.tgz","fileCount":59,"integrity":"sha512-rg0iXc6I4xHTALQP9+E3edJDue2nf/LFdXHMcrqHqkIznwstQMjX+EToLj/qeEfIZarI2GkdwTVed8qZpA516A==","signatures":[{"sig":"MEYCIQD8COpD4QxzRdZOBqtjRFGD5o7T/SQJBXx28QKT4D13+QIhAPNVavCcTLP1yqbAPzWE3+1MYhhwQuogj3jicPnNUMjl","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8066363},"main":"./dist/cad-viewer.umd.cjs","type":"module","types":"./dist/types/index.d.ts","module":"./dist/cad-viewer.es.js","engines":{"node":">=20.19.0"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/cad-viewer.es.js","default":"./dist/cad-viewer.es.js","require":"./dist/cad-viewer.umd.cjs"},"./style.css":"./dist/style.css","./styles.css":"./dist/style.css","./package.json":"./package.json","./dist/index.js":"./dist/index.js","./dist/index.d.ts":"./dist/index.d.ts","./wasm/libredwg-web.js":"./dist/wasm/libredwg-web.js","./wasm/dwfv-render.wasm":"./dist/wasm/dwfv-render.wasm","./wasm/libredwg-web.wasm":"./dist/wasm/libredwg-web.wasm"},"gitHead":"f709e32e9cac29432e035fbaf12eda65e9799165","scripts":{"dev":"npm run copy:wasm && vite --config vite.config.ts --host 0.0.0.0","build":"npm run clean && npm run typecheck && npm run build:lib && npm run build:demo","clean":"node ./scripts/clean.cjs","preview":"npm run build:demo && vite preview --config vite.config.ts --host 0.0.0.0","pack:dry":"npm pack --dry-run","build:lib":"npm run copy:wasm && vite build --config vite.lib.config.ts && npm run build:types && npm run build:assets","copy:wasm":"node ./scripts/copy-libredwg-wasm.cjs","pages:dev":"npm run build:demo && wrangler pages dev dist-demo","typecheck":"tsc -p tsconfig.json --noEmit","build:demo":"npm run copy:wasm && vite build --config vite.config.ts","check:wasm":"node ./scripts/check-wasm.cjs","build:types":"tsc -p tsconfig.build.json","release:npm":"npm publish --access public --auth-type=web","build:assets":"node ./scripts/copy-dist-assets.cjs","deploy:pages":"npm run build:demo && wrangler pages deploy dist-demo --project-name cad-viewer","preview:demo":"npm run preview","prepublishOnly":"npm run clean && npm run typecheck && npm run build:lib && npm run pack:dry","build:worker-check":"npm run typecheck && npm run build:demo"},"_npmUser":{"name":"wybaby168","email":"wybaby168@gmail.com"},"repository":{"url":"git+https://github.com/flyfish-dev/cad-viewer.git","type":"git"},"_npmVersion":"11.12.1","description":"A production-oriented lightweight frontend CAD viewer for DWG, DXF, DWF, DWFx and XPS, built with TypeScript, worker-backed DWG WebAssembly parsing, native dwf-viewer integration, WebGL 2D/3D rendering and Canvas overlays.","directories":{},"sideEffects":["*.css","./dist/style.css","./src/styles.css","./demo/styles.css"],"_nodeVersion":"26.0.0","dependencies":{"dwf-viewer":"^0.6.1","dxf-parser":"^1.1.2","@mlightcad/libredwg-web":"^0.7.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^5.4.11","wrangler":"^4.20.0","typescript":"^5.8.3","@types/node":"^20.14.12"},"_npmOperationalInternal":{"tmp":"tmp/cad-viewer_0.6.1_1781233304542_0.7489357152929084","host":"s3://npm-registry-packages-npm-production"}},"0.6.2":{"name":"@flyfish-dev/cad-viewer","version":"0.6.2","keywords":["cad","dwg","dxf","dwf","dwfx","xps","autocad","viewer","canvas","typescript","frontend","libredwg","web-worker","wasm","webgl","gpu","cad-viewer","w2d","w3d","dwf-viewer"],"author":{"name":"Yu Wang"},"license":"AGPL-3.0-only","_id":"@flyfish-dev/cad-viewer@0.6.2","maintainers":[{"name":"wybaby168","email":"wybaby168@gmail.com"}],"homepage":"https://cad-viewer-iys.pages.dev","bugs":{"url":"https://github.com/flyfish-dev/cad-viewer/issues"},"dist":{"shasum":"9951ce9d7fbb628429fb342a3d55b8256334c0f5","tarball":"https://registry.npmjs.org/@flyfish-dev/cad-viewer/-/cad-viewer-0.6.2.tgz","fileCount":59,"integrity":"sha512-bIdWX4vItwrdj+QAFJvvanuTUv5w362/QKVpitM2kAqIhO6XM1k54HKqMo8nsvSEMbE3ZCU7ApWyF0YPbRkM2A==","signatures":[{"sig":"MEYCIQChOmWu5JGw2sc1zvtJmJoWyC0URVy+boQwGPxDYtb9eQIhAPLN277OLHRmplFFdLm9K9Vq3nly6SJlT9x381A9MoWh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8066864},"main":"./dist/cad-viewer.umd.cjs","type":"module","types":"./dist/types/index.d.ts","module":"./dist/cad-viewer.es.js","engines":{"node":">=20.19.0"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/cad-viewer.es.js","default":"./dist/cad-viewer.es.js","require":"./dist/cad-viewer.umd.cjs"},"./style.css":"./dist/style.css","./styles.css":"./dist/style.css","./package.json":"./package.json","./dist/index.js":"./dist/index.js","./dist/index.d.ts":"./dist/index.d.ts","./wasm/libredwg-web.js":"./dist/wasm/libredwg-web.js","./wasm/dwfv-render.wasm":"./dist/wasm/dwfv-render.wasm","./wasm/libredwg-web.wasm":"./dist/wasm/libredwg-web.wasm"},"gitHead":"6cf2201148206b68b27e58de9b8ffea2aa2a4f70","scripts":{"dev":"npm run copy:wasm && vite --config vite.config.ts --host 0.0.0.0","build":"npm run clean && npm run typecheck && npm run build:lib && npm run build:demo","clean":"node ./scripts/clean.cjs","preview":"npm run build:demo && vite preview --config vite.config.ts --host 0.0.0.0","pack:dry":"npm pack --dry-run","build:lib":"npm run copy:wasm && vite build --config vite.lib.config.ts && npm run build:types && npm run build:assets","copy:wasm":"node ./scripts/copy-libredwg-wasm.cjs","pages:dev":"npm run build:demo && wrangler pages dev dist-demo","typecheck":"tsc -p tsconfig.json --noEmit","build:demo":"npm run copy:wasm && vite build --config vite.config.ts","check:wasm":"node ./scripts/check-wasm.cjs","build:types":"tsc -p tsconfig.build.json","release:npm":"npm publish --access public --auth-type=web","build:assets":"node ./scripts/copy-dist-assets.cjs","deploy:pages":"npm run build:demo && wrangler pages deploy dist-demo --project-name cad-viewer","preview:demo":"npm run preview","prepublishOnly":"npm run clean && npm run typecheck && npm run build:lib && npm run pack:dry","build:worker-check":"npm run typecheck && npm run build:demo"},"_npmUser":{"name":"wybaby168","email":"wybaby168@gmail.com"},"repository":{"url":"git+https://github.com/flyfish-dev/cad-viewer.git","type":"git"},"_npmVersion":"11.12.1","description":"A production-oriented lightweight frontend CAD viewer for DWG, DXF, DWF, DWFx and XPS, built with TypeScript, worker-backed DWG WebAssembly parsing, native dwf-viewer integration, WebGL 2D/3D rendering and Canvas overlays.","directories":{},"sideEffects":["*.css","./dist/style.css","./src/styles.css","./demo/styles.css"],"_nodeVersion":"26.0.0","dependencies":{"dwf-viewer":"^0.6.4","dxf-parser":"^1.1.2","@mlightcad/libredwg-web":"^0.7.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^5.4.11","wrangler":"^4.20.0","typescript":"^5.8.3","@types/node":"^20.14.12"},"_npmOperationalInternal":{"tmp":"tmp/cad-viewer_0.6.2_1781253735939_0.23899959840150098","host":"s3://npm-registry-packages-npm-production"}},"0.6.3":{"name":"@flyfish-dev/cad-viewer","version":"0.6.3","keywords":["cad","dwg","dxf","dwf","dwfx","xps","autocad","viewer","canvas","typescript","frontend","libredwg","web-worker","wasm","webgl","gpu","cad-viewer","w2d","w3d","dwf-viewer"],"author":{"name":"Yu Wang"},"license":"AGPL-3.0-only","_id":"@flyfish-dev/cad-viewer@0.6.3","maintainers":[{"name":"wybaby168","email":"wybaby168@gmail.com"}],"homepage":"https://cad-viewer-iys.pages.dev","bugs":{"url":"https://github.com/flyfish-dev/cad-viewer/issues"},"dist":{"shasum":"58265e07fa83547684028f03cb3d5ab44c891a6f","tarball":"https://registry.npmjs.org/@flyfish-dev/cad-viewer/-/cad-viewer-0.6.3.tgz","fileCount":59,"integrity":"sha512-dd8MrXlaipxDTql8SKjMAWgntDJtQJ/E6kD7GEoSI5b4gRo5Qtd5cmvjJJyCXmEXutBgc1vozkEyKGWcpU3kGA==","signatures":[{"sig":"MEUCIQCyLxnCf1sMJIoOOXjYILn1Qf0DxpoTi+g3O3ZWpRdqTgIgM92mbGf7nX8m5cgDSI4WDQPF8RAyPB2lGtywNrBvW6I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8093956},"main":"./dist/cad-viewer.umd.cjs","type":"module","types":"./dist/types/index.d.ts","module":"./dist/cad-viewer.es.js","engines":{"node":">=20.19.0"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/cad-viewer.es.js","default":"./dist/cad-viewer.es.js","require":"./dist/cad-viewer.umd.cjs"},"./style.css":"./dist/style.css","./styles.css":"./dist/style.css","./package.json":"./package.json","./dist/index.js":"./dist/index.js","./dist/index.d.ts":"./dist/index.d.ts","./wasm/libredwg-web.js":"./dist/wasm/libredwg-web.js","./wasm/dwfv-render.wasm":"./dist/wasm/dwfv-render.wasm","./wasm/libredwg-web.wasm":"./dist/wasm/libredwg-web.wasm"},"gitHead":"38b3330dcee32fdbfdce85c07e9c98020df73e03","scripts":{"dev":"npm run copy:wasm && vite --config vite.config.ts --host 0.0.0.0","build":"npm run clean && npm run typecheck && npm run build:lib && npm run build:demo","clean":"node ./scripts/clean.cjs","preview":"npm run build:demo && vite preview --config vite.config.ts --host 0.0.0.0","pack:dry":"npm pack --dry-run","build:lib":"npm run copy:wasm && vite build --config vite.lib.config.ts && npm run build:types && npm run build:assets","copy:wasm":"node ./scripts/copy-libredwg-wasm.cjs","pages:dev":"npm run build:demo && wrangler pages dev dist-demo","typecheck":"tsc -p tsconfig.json --noEmit","build:demo":"npm run copy:wasm && vite build --config vite.config.ts","check:wasm":"node ./scripts/check-wasm.cjs","build:types":"tsc -p tsconfig.build.json","release:npm":"npm publish --access public --auth-type=web","build:assets":"node ./scripts/copy-dist-assets.cjs","deploy:pages":"npm run build:demo && wrangler pages deploy dist-demo --project-name cad-viewer","preview:demo":"npm run preview","prepublishOnly":"npm run clean && npm run typecheck && npm run build:lib && npm run pack:dry","build:worker-check":"npm run typecheck && npm run build:demo"},"_npmUser":{"name":"wybaby168","email":"wybaby168@gmail.com"},"repository":{"url":"git+https://github.com/flyfish-dev/cad-viewer.git","type":"git"},"_npmVersion":"11.12.1","description":"A production-oriented lightweight frontend CAD viewer for DWG, DXF, DWF, DWFx and XPS, built with TypeScript, worker-backed DWG WebAssembly parsing, native dwf-viewer integration, WebGL 2D/3D rendering and Canvas overlays.","directories":{},"sideEffects":["*.css","./dist/style.css","./src/styles.css","./demo/styles.css"],"_nodeVersion":"26.0.0","dependencies":{"dwf-viewer":"^0.6.4","dxf-parser":"^1.1.2","@mlightcad/libredwg-web":"^0.7.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^5.4.11","wrangler":"^4.20.0","typescript":"^5.8.3","@types/node":"^20.14.12"},"_npmOperationalInternal":{"tmp":"tmp/cad-viewer_0.6.3_1781487828650_0.281836515014082","host":"s3://npm-registry-packages-npm-production"}},"0.6.4":{"name":"@flyfish-dev/cad-viewer","version":"0.6.4","keywords":["cad","dwg","dxf","dwf","dwfx","xps","autocad","viewer","canvas","typescript","frontend","libredwg","web-worker","wasm","webgl","gpu","cad-viewer","w2d","w3d","dwf-viewer"],"author":{"name":"Yu Wang"},"license":"AGPL-3.0-only","_id":"@flyfish-dev/cad-viewer@0.6.4","maintainers":[{"name":"wybaby168","email":"wybaby168@gmail.com"}],"homepage":"https://cad-viewer-iys.pages.dev","bugs":{"url":"https://github.com/flyfish-dev/cad-viewer/issues"},"dist":{"shasum":"f455f706e41d665987f5f5f67535eb2140673f86","tarball":"https://registry.npmjs.org/@flyfish-dev/cad-viewer/-/cad-viewer-0.6.4.tgz","fileCount":57,"integrity":"sha512-9GiILTzBfkyACcd65rSYiN9CMhoXzn1Bh9pvwaSMcWAHCkJoAx/xN1wP3M+z2KFtFVGqfipA1SmnPRVZIXaAow==","signatures":[{"sig":"MEUCIQD6AnF3CCQNxCG/o9UkANbt07OwRKxMPY5uOQoq7Lvk5gIgTXkH2wE+00OvkA1TJ34zGc/BDz707wVsnNLSK5qlYSk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8017880},"main":"./dist/cad-viewer.umd.cjs","type":"module","types":"./dist/types/index.d.ts","module":"./dist/cad-viewer.es.js","engines":{"node":">=20.19.0"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/cad-viewer.es.js","default":"./dist/cad-viewer.es.js","require":"./dist/cad-viewer.umd.cjs"},"./style.css":"./dist/style.css","./styles.css":"./dist/style.css","./package.json":"./package.json","./dist/index.js":"./dist/index.js","./dist/index.d.ts":"./dist/index.d.ts","./wasm/dwg-worker.js":"./dist/wasm/dwg-worker.js","./wasm/libredwg-web.js":"./dist/wasm/libredwg-web.js","./wasm/dwfv-render.wasm":"./dist/wasm/dwfv-render.wasm","./wasm/libredwg-web.wasm":"./dist/wasm/libredwg-web.wasm"},"gitHead":"f9c0bb1235aa79336e17811eead559e72b27872a","scripts":{"dev":"npm run copy:wasm && npm run build:worker && npm run copy:worker && vite --config vite.config.ts --host 0.0.0.0","build":"npm run clean && npm run typecheck && npm run build:lib && npm run build:demo","clean":"node ./scripts/clean.cjs","preview":"npm run build:demo && vite preview --config vite.config.ts --host 0.0.0.0","pack:dry":"npm pack --dry-run","build:lib":"npm run copy:wasm && vite build --config vite.lib.config.ts && npm run build:worker && npm run build:types && npm run build:assets","copy:wasm":"node ./scripts/copy-libredwg-wasm.cjs","pages:dev":"npm run build:demo && wrangler pages dev dist-demo","typecheck":"tsc -p tsconfig.json --noEmit","build:demo":"npm run copy:wasm && npm run build:worker && npm run copy:worker && vite build --config vite.config.ts","check:wasm":"node ./scripts/check-wasm.cjs","build:types":"tsc -p tsconfig.build.json","copy:worker":"node ./scripts/copy-worker-asset.cjs","release:npm":"npm publish --access public --auth-type=web","build:assets":"node ./scripts/copy-dist-assets.cjs","build:worker":"vite build --config vite.worker.config.ts","deploy:pages":"npm run build:demo && wrangler pages deploy dist-demo --project-name cad-viewer","preview:demo":"npm run preview","prepublishOnly":"npm run clean && npm run typecheck && npm run build:lib && npm run pack:dry","build:worker-check":"npm run typecheck && npm run build:demo"},"_npmUser":{"name":"wybaby168","email":"wybaby168@gmail.com"},"repository":{"url":"git+https://github.com/flyfish-dev/cad-viewer.git","type":"git"},"_npmVersion":"11.12.1","description":"A production-oriented lightweight frontend CAD viewer for DWG, DXF, DWF, DWFx and XPS, built with TypeScript, worker-backed DWG WebAssembly parsing, native dwf-viewer integration, WebGL 2D/3D rendering and Canvas overlays.","directories":{},"sideEffects":["*.css","./dist/style.css","./src/styles.css","./demo/styles.css"],"_nodeVersion":"26.0.0","dependencies":{"dwf-viewer":"^0.6.4","dxf-parser":"^1.1.2","@mlightcad/libredwg-web":"^0.7.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^5.4.11","wrangler":"^4.20.0","typescript":"^5.8.3","@types/node":"^20.14.12"},"_npmOperationalInternal":{"tmp":"tmp/cad-viewer_0.6.4_1781494721107_0.8077480719551351","host":"s3://npm-registry-packages-npm-production"}},"0.6.5":{"name":"@flyfish-dev/cad-viewer","version":"0.6.5","keywords":["cad","dwg","dxf","dwf","dwfx","xps","autocad","viewer","canvas","typescript","frontend","libredwg","web-worker","wasm","webgl","gpu","cad-viewer","w2d","w3d","dwf-viewer"],"author":{"name":"Yu Wang"},"license":"AGPL-3.0-only","_id":"@flyfish-dev/cad-viewer@0.6.5","maintainers":[{"name":"wybaby168","email":"wybaby168@gmail.com"}],"homepage":"https://cad-viewer-iys.pages.dev","bugs":{"url":"https://github.com/flyfish-dev/cad-viewer/issues"},"dist":{"shasum":"29c64d30c8742e12c07fbc74347d2a1c8ef590bc","tarball":"https://registry.npmjs.org/@flyfish-dev/cad-viewer/-/cad-viewer-0.6.5.tgz","fileCount":61,"integrity":"sha512-FAkk1+yBAv43zmVjvPUtjnvvT2xY2OMwH+Af7DnheUU5QzpljWeycx1Gp+HIYiqm65u+QI9dx2O5Rq5GshkfIQ==","signatures":[{"sig":"MEUCIQDh2iVMo8Kw2nVlKEoNj91/UHkEgg5kYHc4cyRu/cz1xQIgW1NUXZu2noQ8Zr6Z+bV68jM72ajDiUmIjcIij/d8wT0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8212809},"main":"./dist/cad-viewer.umd.cjs","type":"module","types":"./dist/types/index.d.ts","module":"./dist/cad-viewer.es.js","engines":{"node":">=20.19.0"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/cad-viewer.es.js","default":"./dist/cad-viewer.es.js","require":"./dist/cad-viewer.umd.cjs"},"./style.css":"./dist/style.css","./styles.css":"./dist/style.css","./package.json":"./package.json","./dist/index.js":"./dist/index.js","./dist/index.d.ts":"./dist/index.d.ts","./wasm/dwg-worker.js":"./dist/wasm/dwg-worker.js","./wasm/libredwg-web.js":"./dist/wasm/libredwg-web.js","./wasm/dwfv-render.wasm":"./dist/wasm/dwfv-render.wasm","./wasm/libredwg-web.wasm":"./dist/wasm/libredwg-web.wasm"},"gitHead":"3d26fb5ed42bcea6ea5fd54718d04823383a1c96","scripts":{"dev":"npm run copy:wasm && npm run build:worker && npm run copy:worker && vite --config vite.config.ts --host 0.0.0.0","test":"npm run test:regression","build":"npm run clean && npm run typecheck && npm run build:lib && npm run build:demo","clean":"node ./scripts/clean.cjs","preview":"npm run build:demo && vite preview --config vite.config.ts --host 0.0.0.0","pack:dry":"npm pack --dry-run","build:lib":"npm run copy:wasm && vite build --config vite.lib.config.ts && npm run build:worker && npm run build:types && npm run build:assets","copy:wasm":"node ./scripts/copy-libredwg-wasm.cjs","pages:dev":"npm run build:demo && wrangler pages dev dist-demo","typecheck":"tsc -p tsconfig.json --noEmit","build:demo":"npm run copy:wasm && npm run build:worker && npm run copy:worker && vite build --config vite.config.ts","check:wasm":"node ./scripts/check-wasm.cjs","build:types":"tsc -p tsconfig.build.json","copy:worker":"node ./scripts/copy-worker-asset.cjs","release:npm":"npm publish --access public --auth-type=web","build:assets":"node ./scripts/copy-dist-assets.cjs","build:worker":"vite build --config vite.worker.config.ts","deploy:pages":"npm run build:demo && wrangler pages deploy dist-demo --project-name cad-viewer","preview:demo":"npm run preview","prepublishOnly":"npm run clean && npm run typecheck && npm run build:lib && node --test test/*.test.mjs && npm run pack:dry","test:regression":"npm run build:lib && node --test test/*.test.mjs","build:worker-check":"npm run typecheck && npm run build:demo"},"_npmUser":{"name":"wybaby168","email":"wybaby168@gmail.com"},"repository":{"url":"git+https://github.com/flyfish-dev/cad-viewer.git","type":"git"},"_npmVersion":"11.12.1","description":"A production-oriented lightweight frontend CAD viewer for DWG, DXF, DWF, DWFx and XPS, built with TypeScript, worker-backed DWG WebAssembly parsing, native dwf-viewer integration, WebGL 2D/3D rendering and Canvas overlays.","directories":{},"sideEffects":["*.css","./dist/style.css","./src/styles.css","./demo/styles.css"],"_nodeVersion":"26.0.0","dependencies":{"dwf-viewer":"^0.6.4","dxf-parser":"^1.1.2","@mlightcad/libredwg-web":"^0.7.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^5.4.11","wrangler":"^4.20.0","typescript":"^5.8.3","@types/node":"^20.14.12"},"_npmOperationalInternal":{"tmp":"tmp/cad-viewer_0.6.5_1784096317012_0.38214259568309683","host":"s3://npm-registry-packages-npm-production"}},"0.6.6":{"name":"@flyfish-dev/cad-viewer","version":"0.6.6","keywords":["cad","dwg","dxf","dwf","dwfx","xps","autocad","viewer","canvas","typescript","frontend","libredwg","web-worker","wasm","webgl","gpu","cad-viewer","w2d","w3d","dwf-viewer"],"author":{"name":"Yu Wang"},"license":"AGPL-3.0-only","_id":"@flyfish-dev/cad-viewer@0.6.6","maintainers":[{"name":"wybaby168","email":"wybaby168@gmail.com"}],"homepage":"https://cad-viewer-iys.pages.dev","bugs":{"url":"https://github.com/flyfish-dev/cad-viewer/issues"},"dist":{"shasum":"15bd9cf0ed3608db444bb1157bcca2d388728f0e","tarball":"https://registry.npmjs.org/@flyfish-dev/cad-viewer/-/cad-viewer-0.6.6.tgz","fileCount":63,"integrity":"sha512-uONOYBssD2Km0eQUCiA3u7ZzuWsQV04cH7wiPuw6hp38jLz1a2KX0ZvmPjnJwUu0/F4K6oCyD8v0Gb6PU2b5tQ==","signatures":[{"sig":"MEUCIQCHuzZEokjGGIuTl8GKirWowGlT5hNovpfAaJTb2zWnQgIgZ5Lrso4o7RTSw7CHLAv3V0fMIoL52WNIdfzUlivBkVk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8229507},"main":"./dist/cad-viewer.umd.cjs","type":"module","types":"./dist/types/index.d.ts","module":"./dist/cad-viewer.es.js","engines":{"node":">=20.19.0"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/cad-viewer.es.js","default":"./dist/cad-viewer.es.js","require":"./dist/cad-viewer.umd.cjs"},"./style.css":"./dist/style.css","./styles.css":"./dist/style.css","./package.json":"./package.json","./dist/index.js":"./dist/index.js","./dist/index.d.ts":"./dist/index.d.ts","./wasm/dwg-worker.js":"./dist/wasm/dwg-worker.js","./wasm/libredwg-web.js":"./dist/wasm/libredwg-web.js","./wasm/dwfv-render.wasm":"./dist/wasm/dwfv-render.wasm","./wasm/libredwg-web.wasm":"./dist/wasm/libredwg-web.wasm"},"gitHead":"97090d9b49650197ab3f7df2c721ddab85adf29d","scripts":{"dev":"npm run copy:wasm && npm run build:worker && npm run copy:worker && vite --config vite.config.ts --host 0.0.0.0","test":"npm run test:regression","build":"npm run clean && npm run typecheck && npm run build:lib && npm run build:demo","clean":"node ./scripts/clean.cjs","preview":"npm run build:demo && vite preview --config vite.config.ts --host 0.0.0.0","pack:dry":"npm pack --dry-run","build:lib":"npm run copy:wasm && vite build --config vite.lib.config.ts && npm run build:worker && npm run build:types && npm run build:assets","copy:wasm":"node ./scripts/copy-libredwg-wasm.cjs","pages:dev":"npm run build:demo && wrangler pages dev dist-demo","typecheck":"tsc -p tsconfig.json --noEmit","build:demo":"npm run copy:wasm && npm run build:worker && npm run copy:worker && vite build --config vite.config.ts","check:wasm":"node ./scripts/check-wasm.cjs","build:types":"tsc -p tsconfig.build.json","copy:worker":"node ./scripts/copy-worker-asset.cjs","release:npm":"npm publish --access public --auth-type=web","build:assets":"node ./scripts/copy-dist-assets.cjs","build:worker":"vite build --config vite.worker.config.ts","deploy:pages":"npm run build:demo && wrangler pages deploy dist-demo --project-name cad-viewer","preview:demo":"npm run preview","prepublishOnly":"npm run clean && npm run typecheck && npm run build:lib && node --test test/*.test.mjs && npm run pack:dry","test:regression":"npm run build:lib && node --test test/*.test.mjs","build:worker-check":"npm run typecheck && npm run build:demo"},"_npmUser":{"name":"wybaby168","email":"wybaby168@gmail.com"},"repository":{"url":"git+https://github.com/flyfish-dev/cad-viewer.git","type":"git"},"_npmVersion":"11.12.1","description":"A production-oriented lightweight frontend CAD viewer for DWG, DXF, DWF, DWFx and XPS, built with TypeScript, worker-backed DWG WebAssembly parsing, native dwf-viewer integration, WebGL 2D/3D rendering and Canvas overlays.","directories":{},"sideEffects":["*.css","./dist/style.css","./src/styles.css","./demo/styles.css"],"_nodeVersion":"26.0.0","dependencies":{"dwf-viewer":"^0.6.4","dxf-parser":"^1.1.2","@mlightcad/libredwg-web":"^0.7.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^5.4.11","wrangler":"^4.20.0","typescript":"^5.8.3","@types/node":"^20.14.12"},"_npmOperationalInternal":{"tmp":"tmp/cad-viewer_0.6.6_1784098670439_0.6660852477571866","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@flyfish-dev/cad-viewer","version":"0.7.0","keywords":["cad","dwg","dxf","dwf","dwfx","xps","autocad","viewer","canvas","typescript","frontend","libredwg","shx","linetype","web-worker","wasm","webgl","gpu","cad-viewer","w2d","w3d","dwf-viewer"],"author":{"name":"Yu Wang"},"license":"AGPL-3.0-only","_id":"@flyfish-dev/cad-viewer@0.7.0","maintainers":[{"name":"wybaby168","email":"wybaby168@gmail.com"}],"homepage":"https://cad-viewer-iys.pages.dev","bugs":{"url":"https://github.com/flyfish-dev/cad-viewer/issues"},"dist":{"shasum":"b5291ccd2e4ac5101ffc4c44b59eb2b40c617f16","tarball":"https://registry.npmjs.org/@flyfish-dev/cad-viewer/-/cad-viewer-0.7.0.tgz","fileCount":65,"integrity":"sha512-7O9SBWzflo1zz7DpxiYiZrKxc331LY3gCYU2PjIVmAfTPKKCZCVsAEdb/VurnqbXJKMcHTxkpbkEaJgxWmjLLg==","signatures":[{"sig":"MEQCIAPJWM5nnN1n8Nnuv5RoIXHEjXyP7ch0gxFCbE/YA9QGAiAhGjwutnxxkzYO9qcGFeznlKCjCZHayMSxAahkpHh/wA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8677973},"main":"./dist/cad-viewer.umd.cjs","type":"module","types":"./dist/types/index.d.ts","module":"./dist/cad-viewer.es.js","engines":{"node":">=20.19.0"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/cad-viewer.es.js","default":"./dist/cad-viewer.es.js","require":"./dist/cad-viewer.umd.cjs"},"./style.css":"./dist/style.css","./styles.css":"./dist/style.css","./package.json":"./package.json","./dist/index.js":"./dist/index.js","./dist/index.d.ts":"./dist/index.d.ts","./wasm/dwg-worker.js":"./dist/wasm/dwg-worker.js","./wasm/libredwg-web.js":"./dist/wasm/libredwg-web.js","./wasm/dwfv-render.wasm":"./dist/wasm/dwfv-render.wasm","./wasm/libredwg-web.wasm":"./dist/wasm/libredwg-web.wasm"},"gitHead":"d43b4c1b38d252b9df6baaea9fd3461dc118bd11","scripts":{"dev":"npm run copy:wasm && npm run build:worker && npm run copy:worker && vite --config vite.config.ts --host 0.0.0.0","test":"npm run test:regression","build":"npm run clean && npm run typecheck && npm run build:lib && npm run build:demo","clean":"node ./scripts/clean.cjs","preview":"npm run build:demo && vite preview --config vite.config.ts --host 0.0.0.0","pack:dry":"npm pack --dry-run","build:lib":"npm run copy:wasm && vite build --config vite.lib.config.ts && npm run build:worker && npm run build:types && npm run build:assets","copy:wasm":"node ./scripts/copy-libredwg-wasm.cjs","pages:dev":"npm run build:demo && wrangler pages dev dist-demo","typecheck":"tsc -p tsconfig.json --noEmit","build:demo":"npm run copy:wasm && npm run build:worker && npm run copy:worker && vite build --config vite.config.ts","check:wasm":"node ./scripts/check-wasm.cjs","build:types":"tsc -p tsconfig.build.json","copy:worker":"node ./scripts/copy-worker-asset.cjs","release:npm":"npm publish --access public --auth-type=web","build:assets":"node ./scripts/copy-dist-assets.cjs","build:worker":"vite build --config vite.worker.config.ts","deploy:pages":"npm run build:demo && wrangler pages deploy dist-demo --project-name cad-viewer","preview:demo":"npm run preview","prepublishOnly":"npm run clean && npm run typecheck && npm run build:lib && node --test test/*.test.mjs && npm run pack:dry","test:regression":"npm run build:lib && node --test test/*.test.mjs","build:worker-check":"npm run typecheck && npm run build:demo"},"_npmUser":{"name":"wybaby168","email":"wybaby168@gmail.com"},"repository":{"url":"git+https://github.com/flyfish-dev/cad-viewer.git","type":"git"},"_npmVersion":"11.12.1","description":"A production-oriented browser CAD viewer for DWG, DXF, DWF, DWFx and XPS with worker-backed LibreDWG WASM, WebGL/Canvas rendering, external SHX references and native DWF support.","directories":{},"sideEffects":["*.css","./dist/style.css","./src/styles.css","./demo/styles.css"],"_nodeVersion":"26.0.0","dependencies":{"dwf-viewer":"^0.6.4","dxf-parser":"^1.1.2","@mlightcad/shx-parser":"^1.4.5","@mlightcad/libredwg-web":"^0.7.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^5.4.11","wrangler":"^4.20.0","typescript":"^5.8.3","@types/node":"^20.14.12"},"_npmOperationalInternal":{"tmp":"tmp/cad-viewer_0.7.0_1784166834689_0.8275084971647675","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@flyfish-dev/cad-viewer","version":"0.8.0","keywords":["cad","dwg","dxf","dwf","dwfx","xps","autocad","viewer","canvas","typescript","frontend","libredwg","shx","linetype","web-worker","wasm","webgl","gpu","cad-viewer","w2d","w3d","dwf-viewer"],"author":{"name":"Yu Wang"},"license":"AGPL-3.0-only","_id":"@flyfish-dev/cad-viewer@0.8.0","maintainers":[{"name":"wybaby168","email":"wybaby168@gmail.com"}],"homepage":"https://cad-viewer-iys.pages.dev","bugs":{"url":"https://github.com/flyfish-dev/cad-viewer/issues"},"dist":{"shasum":"416cd5a0406c7e07b12d8f5bbfd32b45a3484d9c","tarball":"https://registry.npmjs.org/@flyfish-dev/cad-viewer/-/cad-viewer-0.8.0.tgz","fileCount":69,"integrity":"sha512-oBhcDZ93UlkPPCCtaki3Nskfv6amE+4MnD/sTosE+e9Wv8vX/c2Z7V9aiInIDeI49YFfj6nqS1pj6zNgchkOxw==","signatures":[{"sig":"MEUCIGO2sYywyU7Jts9y74RZYlnP+e0W9ifRZWblbpGy/FbnAiEA78hR9Ha67cu2u7d+s5TKsqNufsbzyJ9x9h3uEn1Vk5s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13061105},"main":"./dist/cad-viewer.umd.cjs","type":"module","types":"./dist/types/index.d.ts","module":"./dist/cad-viewer.es.js","engines":{"node":">=20.19.0"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/cad-viewer.es.js","default":"./dist/cad-viewer.es.js","require":"./dist/cad-viewer.umd.cjs"},"./style.css":"./dist/style.css","./styles.css":"./dist/style.css","./package.json":"./package.json","./dist/index.js":"./dist/index.js","./dist/index.d.ts":"./dist/index.d.ts","./wasm/dwg-worker.js":"./dist/wasm/dwg-worker.js","./wasm/libredwg-web.js":"./dist/wasm/libredwg-web.js","./wasm/dwfv-render.wasm":"./dist/wasm/dwfv-render.wasm","./wasm/libredwg-web.wasm":"./dist/wasm/libredwg-web.wasm"},"gitHead":"2f2861e7831ef42667d6928284f5227cd62ba010","scripts":{"dev":"npm run copy:wasm && npm run build:worker && npm run copy:worker && vite --config vite.config.ts --host 0.0.0.0","test":"npm run test:regression","build":"npm run clean && npm run typecheck && npm run build:lib && npm run build:demo","clean":"node ./scripts/clean.cjs","preview":"npm run build:demo && vite preview --config vite.config.ts --host 0.0.0.0","pack:dry":"npm pack --dry-run","build:lib":"npm run copy:wasm && vite build --config vite.lib.config.ts && npm run build:worker && npm run build:types && npm run build:assets","copy:wasm":"node ./scripts/copy-libredwg-wasm.cjs","pages:dev":"npm run build:demo && wrangler pages dev dist-demo","typecheck":"tsc -p tsconfig.json --noEmit","build:demo":"npm run copy:wasm && npm run build:worker && npm run copy:worker && vite build --config vite.config.ts","check:wasm":"node ./scripts/check-wasm.cjs","build:types":"tsc -p tsconfig.build.json","copy:worker":"node ./scripts/copy-worker-asset.cjs","release:npm":"npm publish --access public --auth-type=web","build:assets":"node ./scripts/copy-dist-assets.cjs","build:worker":"vite build --config vite.worker.config.ts","deploy:pages":"npm run build:demo && wrangler pages deploy dist-demo --project-name cad-viewer","preview:demo":"npm run preview","prepublishOnly":"npm run clean && npm run typecheck && npm run build:lib && node --test test/*.test.mjs && npm run pack:dry","test:regression":"npm run build:lib && node --test test/*.test.mjs","build:worker-check":"npm run typecheck && npm run build:demo"},"_npmUser":{"name":"wybaby168","email":"wybaby168@gmail.com"},"repository":{"url":"git+https://github.com/flyfish-dev/cad-viewer.git","type":"git"},"_npmVersion":"11.12.1","description":"A production-oriented browser CAD viewer for DWG, DXF, DWF, DWFx and XPS with worker-backed LibreDWG WASM, WebGL/Canvas rendering, external SHX references and native DWF support.","directories":{},"sideEffects":["*.css","./dist/style.css","./src/styles.css","./demo/styles.css"],"_nodeVersion":"26.0.0","dependencies":{"dwf-viewer":"^0.6.4","dxf-parser":"^1.1.2","@mlightcad/shx-parser":"^1.4.5","@mlightcad/libredwg-web":"0.7.9"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^5.4.11","wrangler":"^4.20.0","typescript":"^5.8.3","@types/node":"^20.14.12"},"_npmOperationalInternal":{"tmp":"tmp/cad-viewer_0.8.0_1784700914927_0.29624347141200746","host":"s3://npm-registry-packages-npm-production"}},"0.8.1":{"name":"@flyfish-dev/cad-viewer","version":"0.8.1","keywords":["cad","dwg","dxf","dwf","dwfx","xps","autocad","viewer","canvas","typescript","frontend","libredwg","shx","linetype","web-worker","wasm","webgl","gpu","cad-viewer","w2d","w3d","dwf-viewer"],"author":{"name":"Yu Wang"},"license":"AGPL-3.0-only","_id":"@flyfish-dev/cad-viewer@0.8.1","maintainers":[{"name":"wybaby168","email":"wybaby168@gmail.com"}],"homepage":"https://cad-viewer-iys.pages.dev","bugs":{"url":"https://github.com/flyfish-dev/cad-viewer/issues"},"dist":{"shasum":"5cbb8ff5fec2293345c75f1cf5bcf8ef545be217","tarball":"https://registry.npmjs.org/@flyfish-dev/cad-viewer/-/cad-viewer-0.8.1.tgz","fileCount":71,"integrity":"sha512-jdUqHZVdQzgAgX2N8iakkUIKyHMfrUVjk4P1WrUYijzXj6g3s1YcFKTr9K847JuA3JYNmjRaHjIhD/MIJifGLQ==","signatures":[{"sig":"MEQCIFBR8p9oQ3lnLb9zBIfr772vL4M4i6G207j3sdOI0+RFAiB5kE5lZppVk2aPw39TG6eIgi2VwhzlXHCcwtq+CFljDA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13091016},"main":"./dist/cad-viewer.umd.cjs","type":"module","types":"./dist/types/index.d.ts","module":"./dist/cad-viewer.es.js","engines":{"node":">=20.19.0"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/cad-viewer.es.js","default":"./dist/cad-viewer.es.js","require":"./dist/cad-viewer.umd.cjs"},"./style.css":"./dist/style.css","./styles.css":"./dist/style.css","./package.json":"./package.json","./dist/index.js":"./dist/index.js","./dist/index.d.ts":"./dist/index.d.ts","./wasm/dwg-worker.js":"./dist/wasm/dwg-worker.js","./wasm/libredwg-web.js":"./dist/wasm/libredwg-web.js","./wasm/dwfv-render.wasm":"./dist/wasm/dwfv-render.wasm","./wasm/libredwg-web.wasm":"./dist/wasm/libredwg-web.wasm"},"gitHead":"ca73b1084238a4c96613409491ee696a1344f6fa","scripts":{"dev":"npm run copy:wasm && npm run build:worker && npm run copy:worker && vite --config vite.config.ts --host 0.0.0.0","test":"npm run test:regression","build":"npm run clean && npm run typecheck && npm run build:lib && npm run build:demo","clean":"node ./scripts/clean.cjs","preview":"npm run build:demo && vite preview --config vite.config.ts --host 0.0.0.0","pack:dry":"npm pack --dry-run","build:lib":"npm run copy:wasm && vite build --config vite.lib.config.ts && npm run build:worker && npm run build:types && npm run build:assets","copy:wasm":"node ./scripts/copy-libredwg-wasm.cjs","pages:dev":"npm run build:demo && wrangler pages dev dist-demo","typecheck":"tsc -p tsconfig.json --noEmit","build:demo":"npm run copy:wasm && npm run build:worker && npm run copy:worker && vite build --config vite.config.ts","check:wasm":"node ./scripts/check-wasm.cjs","build:types":"tsc -p tsconfig.build.json","copy:worker":"node ./scripts/copy-worker-asset.cjs","release:npm":"npm publish --access public --auth-type=web","build:assets":"node ./scripts/copy-dist-assets.cjs","build:worker":"vite build --config vite.worker.config.ts","deploy:pages":"npm run build:demo && wrangler pages deploy dist-demo --project-name cad-viewer","preview:demo":"npm run preview","prepublishOnly":"npm run clean && npm run typecheck && npm run build:lib && node --test test/*.test.mjs && npm run pack:dry","test:regression":"npm run build:lib && node --test test/*.test.mjs","build:worker-check":"npm run typecheck && npm run build:demo"},"_npmUser":{"name":"wybaby168","email":"wybaby168@gmail.com"},"repository":{"url":"git+https://github.com/flyfish-dev/cad-viewer.git","type":"git"},"_npmVersion":"11.19.0","description":"A production-oriented browser CAD viewer for DWG, DXF, DWF, DWFx and XPS with worker-backed LibreDWG WASM, WebGL/Canvas rendering, external SHX references and native DWF support.","directories":{},"sideEffects":["*.css","./dist/style.css","./src/styles.css","./demo/styles.css"],"_nodeVersion":"24.20.0","dependencies":{"dwf-viewer":"^0.6.6","dxf-parser":"^1.1.2","@mlightcad/shx-parser":"^1.4.5","@mlightcad/libredwg-web":"0.7.9"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^5.4.11","wrangler":"^4.20.0","typescript":"^5.8.3","@types/node":"^20.14.12"},"_npmOperationalInternal":{"tmp":"tmp/cad-viewer_0.8.1_1788597996139_0.24873166589929507","host":"s3://npm-registry-packages-npm-production"}},"0.8.2":{"name":"@flyfish-dev/cad-viewer","version":"0.8.2","description":"A production-oriented browser CAD viewer for DWG, DXF, DWF, DWFx and XPS with worker-backed LibreDWG WASM, WebGL/Canvas rendering, external SHX references and native DWF support.","type":"module","license":"AGPL-3.0-only","author":{"name":"Yu Wang"},"homepage":"https://cad-viewer-iys.pages.dev","repository":{"type":"git","url":"git+https://github.com/flyfish-dev/cad-viewer.git"},"bugs":{"url":"https://github.com/flyfish-dev/cad-viewer/issues"},"keywords":["cad","dwg","dxf","dwf","dwfx","xps","autocad","viewer","canvas","typescript","frontend","libredwg","shx","linetype","web-worker","wasm","webgl","gpu","cad-viewer","w2d","w3d","dwf-viewer"],"sideEffects":["*.css","./dist/style.css","./src/styles.css","./demo/styles.css"],"main":"./dist/cad-viewer.umd.cjs","module":"./dist/cad-viewer.es.js","types":"./dist/types/index.d.ts","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/cad-viewer.es.js","require":"./dist/cad-viewer.umd.cjs","default":"./dist/cad-viewer.es.js"},"./styles.css":"./dist/style.css","./package.json":"./package.json","./style.css":"./dist/style.css","./wasm/libredwg-web.wasm":"./dist/wasm/libredwg-web.wasm","./wasm/libredwg-web.js":"./dist/wasm/libredwg-web.js","./wasm/dwg-worker.js":"./dist/wasm/dwg-worker.js","./dist/index.js":"./dist/index.js","./dist/index.d.ts":"./dist/index.d.ts","./wasm/dwfv-render.wasm":"./dist/wasm/dwfv-render.wasm"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"engines":{"node":">=20.19.0"},"scripts":{"clean":"node ./scripts/clean.cjs","copy:wasm":"node ./scripts/copy-libredwg-wasm.cjs","copy:worker":"node ./scripts/copy-worker-asset.cjs","dev":"npm run copy:wasm && npm run build:worker && npm run copy:worker && vite --config vite.config.ts --host 0.0.0.0","typecheck":"tsc -p tsconfig.json --noEmit","test":"npm run test:regression","test:regression":"npm run build:lib && node --test test/*.test.mjs","build:types":"tsc -p tsconfig.build.json","build:worker":"vite build --config vite.worker.config.ts","build:lib":"npm run copy:wasm && vite build --config vite.lib.config.ts && npm run build:worker && npm run build:types && npm run build:assets","build:demo":"npm run copy:wasm && npm run build:worker && npm run copy:worker && vite build --config vite.config.ts","build":"npm run clean && npm run typecheck && npm run build:lib && npm run build:demo","preview":"npm run build:demo && vite preview --config vite.config.ts --host 0.0.0.0","pack:dry":"npm pack --dry-run","release:npm":"npm publish --access public --auth-type=web","pages:dev":"npm run build:demo && wrangler pages dev dist-demo","deploy:pages":"npm run build:demo && wrangler pages deploy dist-demo --project-name cad-viewer","prepublishOnly":"npm run clean && npm run typecheck && npm run build:lib && node --test test/*.test.mjs && npm run pack:dry","build:worker-check":"npm run typecheck && npm run build:demo","check:wasm":"node ./scripts/check-wasm.cjs","build:assets":"node ./scripts/copy-dist-assets.cjs","preview:demo":"npm run preview"},"dependencies":{"@mlightcad/libredwg-web":"0.7.9","@mlightcad/shx-parser":"^1.4.5","dwf-viewer":"^0.6.7","dxf-parser":"^1.1.2"},"devDependencies":{"@types/node":"^20.14.12","typescript":"^5.8.3","vite":"^7.3.6","wrangler":"^4.129.1"},"_id":"@flyfish-dev/cad-viewer@0.8.2","_integrity":"sha512-GWOFPC741e4BEGWjWN2AuYxA6MJb0LFrRIw51BZPuZ1nv8O4GwHC+hDZ0Vm284QqJNLnfGm1LVEazTC8lY1BAw==","_resolved":"/private/tmp/fv-release-3.0.3/.release/launch-3.0.3/npm-release--flyfish-dev-cad-viewer-0.8.2/flyfish-dev-cad-viewer-0.8.2.tgz","_from":"file:/private/tmp/fv-release-3.0.3/.release/launch-3.0.3/npm-release--flyfish-dev-cad-viewer-0.8.2/flyfish-dev-cad-viewer-0.8.2.tgz","_nodeVersion":"24.20.0","_npmVersion":"11.19.0","dist":{"integrity":"sha512-GWOFPC741e4BEGWjWN2AuYxA6MJb0LFrRIw51BZPuZ1nv8O4GwHC+hDZ0Vm284QqJNLnfGm1LVEazTC8lY1BAw==","shasum":"eb7ed3e63670e07b76516a4a5e13d2300b99a8f2","tarball":"https://registry.npmjs.org/@flyfish-dev/cad-viewer/-/cad-viewer-0.8.2.tgz","fileCount":73,"unpackedSize":13174026,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDsJbcDjg7leEGPB/rYIXjyc6Q6+hPDrb/tfF7m8eduaAIgMnv853p4O2551xgomi6KjJ7S+nJiHrpx/ldMI3VwZz0="}]},"_npmUser":{"name":"wybaby168","email":"wybaby168@gmail.com"},"directories":{},"maintainers":[{"name":"wybaby168","email":"wybaby168@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/cad-viewer_0.8.2_1788878973283_0.1808609479968406"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-11T10:04:15.546Z","modified":"2026-09-08T14:49:33.709Z","0.5.3":"2026-06-11T10:04:15.836Z","0.6.0":"2026-06-12T00:57:54.892Z","0.6.1":"2026-06-12T03:01:44.770Z","0.6.2":"2026-06-12T08:42:16.209Z","0.6.3":"2026-06-15T01:43:48.830Z","0.6.4":"2026-06-15T03:38:41.338Z","0.6.5":"2026-07-15T06:18:37.206Z","0.6.6":"2026-07-15T06:57:50.632Z","0.7.0":"2026-07-16T01:53:54.909Z","0.8.0":"2026-07-22T06:15:15.136Z","0.8.1":"2026-09-05T08:46:36.346Z","0.8.2":"2026-09-08T14:49:33.475Z"},"bugs":{"url":"https://github.com/flyfish-dev/cad-viewer/issues"},"author":{"name":"Yu Wang"},"license":"AGPL-3.0-only","homepage":"https://cad-viewer-iys.pages.dev","keywords":["cad","dwg","dxf","dwf","dwfx","xps","autocad","viewer","canvas","typescript","frontend","libredwg","shx","linetype","web-worker","wasm","webgl","gpu","cad-viewer","w2d","w3d","dwf-viewer"],"repository":{"type":"git","url":"git+https://github.com/flyfish-dev/cad-viewer.git"},"description":"A production-oriented browser CAD viewer for DWG, DXF, DWF, DWFx and XPS with worker-backed LibreDWG WASM, WebGL/Canvas rendering, external SHX references and native DWF support.","maintainers":[{"name":"wybaby168","email":"wybaby168@gmail.com"}],"readme":"# @flyfish-dev/cad-viewer\n\n一个专业、轻量、可扩展的**纯前端 CAD Viewer**。\n\n[![License: AGPL-3.0-only](https://img.shields.io/badge/license-AGPL--3.0--only-b31b1b.svg)](LICENSE)\n[![npm](https://img.shields.io/npm/v/@flyfish-dev/cad-viewer.svg)](https://www.npmjs.com/package/@flyfish-dev/cad-viewer)\n\n**在线 Demo：** [cad-viewer-iys.pages.dev](https://cad-viewer-iys.pages.dev)  \n**源码仓库：** [github.com/flyfish-dev/cad-viewer](https://github.com/flyfish-dev/cad-viewer)\n\n本仓库提供面向浏览器的 loader 架构，支持 **DWG**、**DXF**、**DWF**、**DWFx** 和 **XPS**。DWG/DXF 会归一化为统一 `CadDocument` 并通过 WebGL retained-mode 渲染，文字/图片使用轻量 Canvas overlay；DWF/DWFx/XPS 交给原生 `dwf-viewer` 渲染通道处理 WebGL 加速的 W2D 与 XPS/DWFx 矢量、W3D/HSF eModel、XPS 嵌入字体和可选 WASM fallback。文件在浏览器本地读取，组件不会把图纸上传到服务端。\n\n> DWG 使用 `@mlightcad/libredwg-web` / LibreDWG WebAssembly，并默认运行在 Worker 中。DXF 使用 JavaScript 解析器并带内置 fallback。DWF、DWFx、XPS 由 `dwf-viewer` 0.6.x 驱动，覆盖 DWF 6+ ZIP 包、WHIP/W2D 2D 图纸、W3D/HSF 3D eModel、DWFx/OPC/XPS 页面、自适应 CAD 线宽和可选 raster WASM fallback。\n\n## 0.8.2 候选版（尚未发布）\n\n修复 DXF `LINE` 端点归一化，包括 BLOCK 内的直线。新增 `await viewer.captureCanvas()`，重新绘制后捕获 Canvas2D / WebGL 线条和文字覆盖层，也支持原生 DWF / DWFx。返回画布可通过 `toBlob()` 编码为 PNG / JPEG；不改变源文档或当前视角。它只输出当前视图 / 当前图纸页，不是全部图纸的矢量 PDF 转换。尚未加载或原生 loader 不支持时明确失败，不返回空白成功。\n\n原生自适应对比度需要先发布并安装 `dwf-viewer` 0.6.7 候选版。`canvasOptions.contrastMode: 'adaptive'` 提高与背景接近的矢量和文字颜色的可见性，`'preserve'` 严格保留显示颜色。\n\n## 0.8.0 变更\n\n- 新增类型完整的 BOM 提取，覆盖块属性、`MINSERT` 数量、原生表格、DataTable、XDATA、XRECORD 和高置信度文字表格。\n- 新增 `CadViewer.getBom()`、`extractCadBom()`，以及防电子表格公式注入的 CSV/JSON 导出工具。\n- Demo 新增紧凑的 BOM 检查器；提取逻辑仍与渲染器和浏览器 UI 解耦。\n- 加固 DWG/DXF 元数据归一化，对异常表格数据设置资源上限，并确保 DataLink 外部文件保持离线且不会被读取。\n- LibreDWG WebAssembly 升级到 0.7.9，并兼容空复杂线型 STYLE 引用，避免有效图纸加载失败。\n\n## 0.7.0 变更\n\n- 修正 PLAN/UCS 变换后的块内 DWG 几何，包括 INSERT/文字角度归一化、闭合多段线 fallback 检测，以及常量/顶点线宽保留。\n- Worker 归一化和 INSERT 展开过程现在会保留 TEXT 宽度因子、对齐点、水平/垂直对齐及镜像 flag。\n- Canvas2D 与 retained WebGL 新增 world-space 宽多段线渲染，同时保持 dash 相位及实体/INSERT 线型缩放。\n- 增加完整的外部 SHX 引用处理：通过 metadata 暴露复杂 DWG 线型引用的文件；缺失时安全降级为 marker；补传 `File` 或 `ArrayBuffer` 后会解析、校验、缓存并按真实 shape/text 轮廓重绘，同时保持当前视图不跳变。\n- 增加 `onReferenceStateChange`、`addReferenceFile()`、`addReferenceBuffer()`、`getMissingReferences()` 等资源生命周期 API，并在 Demo 中提供按需出现的 SHX 悬浮上传入口。\n\n## 0.6.6 变更\n\n- 新增基于有效 DWG active VPORT 内有意义几何的自动首屏拟合，避免远距离坐标簇把主图压缩成小黑点。\n- 新增 `fitMode: 'auto' | 'saved-view' | 'extents'` 和 `viewer.fit(mode)`，分别用于智能内容拟合、严格恢复保存视口及查看全部图形范围。\n- 统一 retained WebGL renderer 与 Canvas2D fallback 的边界计算和拟合行为。\n\n## 0.6.5 变更\n\n- 保留 DWG active VPORT/header UCS saved view，并将安全的平面场景变换只应用一次，统一覆盖几何、文字、INSERT、bounds 和交互坐标。\n- 新增 DWG LTYPE 归一化与 Canvas2D/WebGL 线型渲染，支持虚线、点线、BYLAYER、BYBLOCK、多段线连续相位以及实体/全局缩放。\n- 保留 LibreDWG 的闭合多段线标志；对倾斜视图、复杂 SHX 线型 glyph 和异常微小 pattern 提供明确降级策略。\n- 新增公开线型工具、`getSourceDocument()` 和 8 项 DWG normalization 回归测试。\n\n## 0.6.4 变更\n\n- 新增稳定的 package subpath：`@flyfish-dev/cad-viewer/wasm/dwg-worker.js`。\n- DWG worker 默认改为页面相对运行时资源 `wasm/dwg-worker.js`，npm 包资源和静态 Demo 部署使用同一份 worker 文件。\n- dev、demo、Cloudflare Pages 和 npm library 构建都会显式构建并复制 DWG worker 运行时资源。\n\n## 0.6.3 变更\n\n- 新增 `dxfEncoding`，用于旧 DXF 缺少或误写 `$DWGCODEPAGE` 时显式指定文本编码。\n- DXF 解码现在会优先识别 BOM 和 `$DWGCODEPAGE`，支持 `ANSI_936`、`CP936`、`GBK`、`BIG5`、`SHIFT_JIS` 以及 Windows code page，不再把中文 DXF 退到有损的 ISO-8859-1。\n- DXF 文本实体会归一化常见 CAD 转义，例如 `\\U+XXXX`、`%%c`、`%%d`、`%%p` 和 `\\P`。\n\n## 0.6.2 变更\n\n- 原生 DWF 通道升级到 `dwf-viewer` 0.6.4，包含上游 DWF/DWFx bugfix；本包继续按自身 SemVer 发布为 0.6.2。\n- 已确认当前暴露的 `CadViewer` DWF/XPS 配置项仍与最新版 `dwf-viewer` API 匹配。\n\n## 0.6.1 变更\n\n- 原生 DWF 通道升级到 `dwf-viewer` 0.6.1。\n- 同步最新 renderer 行为：WebGL 加速 XPS/DWFx 与 W2D 2D 矢量渲染、W3D/HSF 3D 渲染、XPS 嵌入字体加载和可选 WASM raster fallback。\n- 新增 `dwfLineWeightMode`、`dwfMinStrokeCssPx`、`dwfMaxOverviewStrokeCssPx`、`dwfMinTextCssPx`、`dwfMinFilledAreaCssPx`，用于调节 DWF/XPS 总览渲染效果。\n- 更新 README、格式说明、架构说明和 package metadata，统一最新版 DWF 支持口径。\n\n## 0.6.0 变更\n\n- 使用已发布的 `dwf-viewer` 原生渲染器替换旧 DWFx/XPS 子集解析器。\n- DWF/DWFx/XPS 不再强行转成普通 DWG/DXF 的 2D `CadDocument` 渲染链路，而是通过专用 native viewer 挂载。\n- 新增 DWF 6+ ZIP 包、WHIP/W2D 2D 图纸、W3D/HSF 3D eModel、DWFx/OPC/XPS 页面，以及 dwf-viewer WebGL/WASM 渲染后端集成。\n- 新增 `CadNativeRenderableLoader`，允许某些格式挂载自己的 DOM/WebGL 渲染器。\n- 新增 `dwfWasmUrl`、`dwfPreferWebgl`、`dwfPreferWasm`、`dwfMaxCanvasPixels`、`dwfMaxGpuCacheBytes` 等生产配置。\n- 运行时资源脚本现在会同时复制和校验 `libredwg-web.wasm` 与 `dwfv-render.wasm`。\n- 删除旧 classic-DWF warning 逻辑，并移除本包对 `fflate` 的依赖。\n- 包许可证更新为 AGPL-3.0-only，以匹配集成后的 DWF 渲染器。\n\n## 0.5.3 变更\n\n- 修复 DWG 图层索引色显示。LibreDWG 输出的索引色图层会优先按 ACI 解析，不再被 converter 的 `0xffffff` 占位值渲染成单色白图。\n- 保留 DWG true-color 数值，即使 RGB 整数落在 ACI 范围内，例如 `0x0000ff`。\n- 展开 INSERT/block 时增加 BYBLOCK 颜色继承。\n\n## 0.5.2 变更\n\n- 修复 `@mlightcad/libredwg-web` 入口导致的 Vite 超长 `data:application/wasm;base64,...` warning。\n- DWG worker 构建改为使用 LibreDWG 的轻量 ESM wrapper，并在运行时从 `wasmPath` 加载 `/wasm/libredwg-web.js` 和 `/wasm/libredwg-web.wasm`，避免重复打包内联 wasm。\n- `build:lib` 会生成 `dist/index.js` 兼容入口，兼容仍然请求 `/dist/index.js` 的旧集成方式。\n- Vite dev 模式下新增 `/dist/index.js` 兼容路由，旧 demo 页面会被转到 `/demo/main.ts`，不再直接 404。\n- `npm run preview` 会先构建 demo，干净仓库也可以直接预览。\n\n## 0.5 变更\n\n- 默认渲染后端升级为 **WebGL retained renderer**，首帧把 CAD 图元扁平化并上传为 GPU buffer，缩放/平移只更新 view uniform。\n- 新增空间索引和 viewport culling：线段、三角面、点会按图纸范围分桶，放大查看局部区域时只提交可见 batch。\n- 新增大图纸内存策略：坐标以图纸中心为 origin 存入 `Float32Array`，颜色存入 `Uint8Array`，上传后释放 CPU 临时数组，避免 Canvas2D 每帧重建路径。\n- 文字、图片走独立 overlay，并带屏幕尺寸阈值和最大可见 label 限制，避免高密度图纸在缩放时被文字拖慢。\n- `CadViewer` 新增 `renderer: 'auto' | 'webgl' | 'canvas2d'`；`auto` 优先 WebGL，不可用时回退 Canvas2D。\n- Demo 新增 Renderer、visible primitives、GPU memory 指标，便于排查大图纸性能。\n\n## 0.4 变更\n\n- DWG 解析默认放到**独立 Web Worker** 中执行，LibreDWG WASM 初始化和二进制解析不会阻塞 UI、缩放和平移。\n- Worker 会常驻并复用 LibreDWG WASM 实例，连续打开多个 DWG 时不重复初始化。\n- 增加 `AbortSignal` 取消加载、worker timeout、加载进度事件，以及显式 worker 资源配置。\n- 默认不再把 DWG raw parser 对象传回主线程，降低内存占用并避免 structured clone 失败；确实需要时可显式设置 `keepRaw: true`。\n- Demo 增加加载遮罩、进度条、取消按钮和 loader mode 指示。\n- `viewer.destroy()` 会清理 Canvas 监听器并终止持有的 DWG worker，适合 SPA 路由切换。\n- 导出 `supportsDwgWorker` 和 `DwgWorkerClient`，方便高级集成。\n\n## 功能特性\n\n- **纯前端组件**：`new CadViewer({ container })` 或 `new CadViewer({ canvas })`。\n- **正确的 loader 架构**：DWG / DXF / DWF 独立 loader，可替换、可扩展；native-renderable loader 可以挂载自己的优化渲染器。\n- **DWG 预览**：通过 LibreDWG WebAssembly 在浏览器本地解析，默认在 Web Worker 中执行。\n- **DWG 视图与线型保真**：active 平面 saved view、块内文字对齐和宽度、闭合/宽多段线、LTYPE 表、BYLAYER/BYBLOCK 继承、dash/dot pattern 和稳定线型缩放。\n- **外部 SHX 引用**：识别复杂线型缺失的 shape 字体，接收本地文件或 API 字节，校验必需 glyph，并在 Canvas2D/WebGL 中渲染真实 SHX shape/text 几何。\n- **BOM 读取**：将块属性、CAD 缓存表格、DataTable、XDATA、XRECORD 和高置信度文字网格整理为统一类型 API，并支持安全导出 CSV/JSON。\n- **DXF 预览**：JavaScript 解析，支持常见 ASCII DXF `ENTITIES`，并带 fallback parser。\n- **DWF/DWFx/XPS 预览**：由 `dwf-viewer` 支持 DWF ZIP 包、WebGL 加速 W2D 与 XPS/DWFx 2D 矢量、W3D/HSF eModel、XPS 嵌入字体、自适应 CAD 线宽和 raster fallback。\n- **CAD 颜色处理**：支持 ACI、BYLAYER、BYBLOCK 继承、DWG 图层颜色、true color、填充色、透明度和自适应对比度。\n- **WebGL 高性能交互**：GPU retained buffers、空间分桶、视口裁剪、缩放、平移、适配窗口、世界坐标、缩放百分比。\n- **专业 Demo**：拖拽打开、紧凑工具栏、状态条、解析/渲染耗时、实体类型统计、warnings 展示。\n- **发布友好**：同时提供 npm library build 和 Cloudflare Pages demo build。\n\n## 安装\n\n```bash\nnpm install @flyfish-dev/cad-viewer\n```\n\n本仓库本地开发：\n\n```bash\nnpm install\nnpm run dev\n```\n\nDWG 和 DWF 渲染链路需要把运行时资源放到公开目录：`libredwg-web.js`、`libredwg-web.wasm`、`dwg-worker.js` 和 `dwfv-render.wasm`。Demo 使用以下命令复制、构建并校验到 `public/wasm`：\n\n```bash\nnpm run copy:wasm\nnpm run build:worker\nnpm run copy:worker\nnpm run check:wasm\n```\n\nDemo 会先把 `wasmPath` 解析为绝对 URL，再发送给 DWG worker，并复用同一目录查找 `dwfv-render.wasm`。默认 DWG worker 地址是 `wasm/dwg-worker.js`，相对于页面 URL 解析。你自己的应用也建议使用绝对路径或绝对 URL，例如 `/wasm`、`/wasm/dwg-worker.js` 或 `new URL('wasm/', document.baseURI).href`。不要直接把未解析的 `./wasm` 传入 worker，否则它可能会相对于 worker 请求资源。\n\n发布 npm 包时，`build:lib` 会把这些文件复制到 `dist/wasm` 并作为 package subpath 暴露出来，包括 `./wasm/dwg-worker.js`。应用侧仍需要把运行时资源放到可公开访问的 URL，并把该目录传给 `wasmPath`，或者显式传入 `dwfWasmUrl` / `workerUrl`。\n\n\n## Demo 启动说明\n\n源码 demo 必须通过 Vite 启动：\n\n```bash\nnpm install\nnpm run dev\n```\n\n生产预览使用：\n\n```bash\nnpm run preview\n```\n\n不要直接用普通静态服务器托管源码目录并期望 TypeScript 入口能运行。如果旧页面仍请求 `/dist/index.js`，请先执行 `npm run build:lib` 生成兼容入口，或者直接使用上面的 Vite dev server。\n\n## 基础用法\n\n```ts\nimport { CadViewer } from '@flyfish-dev/cad-viewer';\nimport '@flyfish-dev/cad-viewer/style.css';\n\nconst viewer = new CadViewer({\n  container: document.querySelector('#viewer')!,\n  renderer: 'auto',       // WebGL first, Canvas2D fallback\n  wasmPath: new URL('wasm/', document.baseURI).href,\n  dwfWasmUrl: new URL('wasm/dwfv-render.wasm', document.baseURI).href,\n  canvasOptions: {\n    background: '#05070d',\n    foreground: '#f8fafc',\n    fitMode: 'auto',\n    contrastMode: 'adaptive',\n    minColorContrast: 2.45\n  }\n});\n\nconst input = document.querySelector<HTMLInputElement>('input[type=file]')!;\ninput.addEventListener('change', async () => {\n  const file = input.files?.[0];\n  if (!file) return;\n  await viewer.loadFile(file);\n});\n```\n\n`fitMode: 'auto'` 是默认值。DWG 存在有效 active VPORT 时，会拟合保存视口内有意义的几何内容，避免远距离测绘坐标或辅助实体把主图框压成小黑点。使用 `viewer.fit('saved-view')` 可严格恢复保存视口，使用 `viewer.fit('extents')` 可查看全部坐标簇。\n\n\n## WebGL 渲染与性能策略\n\n默认 `renderer: 'auto'` 会优先创建 `CadWebGLRenderer`。它不是每次缩放都用 Canvas2D 重新遍历实体，而是在 `setDocument()` 时构建一次 retained scene：\n\n```text\nCadDocument\n  ↓\nflatten blocks / curves / fills\n  ↓\nFloat32Array positions + Uint8Array colors\n  ↓\nspatial GPU batches\n  ↓\nWebGL drawArrays with viewport culling\n```\n\n可调参数：\n\n```ts\nnew CadViewer({\n  container,\n  renderer: 'auto', // 'webgl' 强制 WebGL；'canvas2d' 强制兼容模式\n  canvasOptions: {\n    enableSpatialIndex: true,\n    spatialIndexCellCount: 96,\n    maxVerticesPerBatch: 32768,\n    maxCurveSegments: 72,\n    textMinPixelHeight: 4,\n    maxVisibleTextLabels: 2400,\n    powerPreference: 'high-performance',\n    preserveDrawingBuffer: false\n  },\n  onRenderStats(stats) {\n    console.log(stats.backend, stats.visiblePrimitiveCount, stats.gpuMemoryBytes);\n  }\n});\n```\n\n对超大图纸，优先调小 `maxCurveSegments`、增大 `spatialIndexCellCount`，并限制 `maxVisibleTextLabels`。\n\n## Worker 化 DWG 解析\n\n`DwgLoader` 在浏览器里默认使用 module Web Worker。默认 worker 地址是 `wasm/dwg-worker.js`，相对于页面 URL 解析。Worker 内部导入 `@mlightcad/libredwg-web`，初始化 LibreDWG WASM，缓存该 WASM 实例，解码 DWG 字节，并把结果归一化为可 structured-clone 的 `CadDocument` 后发送回 UI 线程。Canvas 渲染仍然留在主线程。\n\n```ts\nconst controller = new AbortController();\n\nconst viewer = new CadViewer({\n  container,\n  wasmPath: new URL('wasm/', document.baseURI).href,\n  dwfWasmUrl: new URL('wasm/dwfv-render.wasm', document.baseURI).href,\n  useWorker: true,\n  workerTimeoutMs: 120_000,\n  onLoadProgress(progress) {\n    console.log(progress.phase, progress.message, progress.percent);\n  }\n});\n\nawait viewer.preloadDwg(); // 可选：首个文件打开前预热 worker\nawait viewer.loadFile(file, { signal: controller.signal });\n\n// 取消大型 DWG 加载\ncontroller.abort();\n```\n\n如果你的构建系统或 CDN 对 worker 资源路径有特殊要求，可以显式传入 worker 地址或构造器：\n\n```ts\nnew CadViewer({\n  container,\n  wasmPath: new URL('wasm/', document.baseURI).href,\n  dwfWasmUrl: new URL('wasm/dwfv-render.wasm', document.baseURI).href,\n  workerUrl: new URL('/assets/dwg-worker.js', window.location.origin)\n});\n```\n\n默认包是 worker-first 设计。非浏览器运行时建议注册自定义 DWG loader，而不是关闭 worker。\n\n## 组件 API\n\n```ts\nconst viewer = new CadViewer({\n  container,             // 容器元素，组件会自动创建 canvas\n  canvas,                // 也可以传入已有 canvas\n  renderer: 'auto',      // 'auto' | 'webgl' | 'canvas2d'\n  wasmPath: '/wasm',     // 包含 libredwg-web.js、libredwg-web.wasm 和 dwfv-render.wasm 的目录\n  dxfEncoding: 'gb18030', // 可选：旧 DXF codepage 元数据错误时显式指定编码\n  dwfWasmUrl: '/wasm/dwfv-render.wasm',\n  autoFit: true,\n  canvasOptions: {\n    background: '#05070d',\n    foreground: '#ffffff',\n    fitMode: 'auto',                 // 'auto' | 'saved-view' | 'extents'\n    contrastMode: 'adaptive',       // 'adaptive' | 'preserve'\n    minColorContrast: 2.45,\n    showPageBounds: true,\n    showUnsupportedMarkers: false,\n    trueColorByteOrder: 'rgb',\n    enableSpatialIndex: true,\n    spatialIndexCellCount: 96,\n    maxVerticesPerBatch: 32768,\n    maxCurveSegments: 72,\n    textMinPixelHeight: 4,\n    maxVisibleTextLabels: 2400\n  },\n  useWorker: true,                 // DWG 默认开启\n  workerUrl: '/wasm/dwg-worker.js', // 可选覆盖；这是默认地址\n  workerTimeoutMs: 0,              // 0 表示不限制\n  dwfPreferWebgl: true,\n  dwfPreferWasm: true,\n  dwfMaxCanvasPixels: 16_777_216,\n  dwfLineWeightMode: 'adaptive',  // 'adaptive' | 'physical' | 'hairline'\n  dwfMinStrokeCssPx: 0.42,\n  dwfMinTextCssPx: 1.05,\n  onLoadProgress(progress) {},\n  onLoad(result) {},\n  onError(error) {},\n  onRenderStats(stats) {},\n  onViewChange(event) {},\n  onReferenceStateChange(state) {} // 外部 SHX 的 missing/loaded 状态\n});\n\nawait viewer.loadFile(file);\nawait viewer.loadBuffer(arrayBuffer, 'drawing.dxf');\nawait viewer.addReferenceFile(shxFile);\nawait viewer.addReferenceBuffer(shxArrayBuffer, 'LSG.SHX');\nviewer.getMissingReferences();      // CadMissingReference[]\nviewer.getLoadedReferences();       // CadLoadedReference[]\nviewer.fit();                       // 自动拟合有意义的首屏内容\nviewer.fit('saved-view');          // 严格恢复 DWG active viewport\nviewer.fit('extents');             // 查看全部几何，包括远距离坐标簇\nviewer.zoomIn();\nviewer.zoomOut();\nawait viewer.preloadDwg();       // 可选 DWG worker/WASM 预热\nviewer.setCanvasOptions({ background: '#f7f8fb', foreground: '#111827' });\nviewer.getDocument();            // 已应用 saved view 的渲染场景 CadDocument\nviewer.getSourceDocument();      // parser 保留的原始 WCS CadDocument\nviewer.getBom();                 // 从源文档读取归一化 CadBom\nviewer.clear();\nviewer.destroy();\n```\n\n### BOM 与图纸属性\n\n`getBom()` 从 parser 保留的源文档生成相互独立的表格。它支持 `ATTDEF` 默认值与 `ATTRIB` 实例覆盖、递归 `INSERT`/`MINSERT` 数量、图纸中已有缓存单元格的原生表格、DataTable、XDATA、XRECORD，以及结构置信度足够高的对齐文字网格。XDATA 和 XRECORD 需要显式启用，因为真实图纸中通常含有大量与 BOM 无关的应用缓存。\n\n```ts\nimport { serializeCadBomCsv, serializeCadBomJson } from '@flyfish-dev/cad-viewer';\n\nawait viewer.loadFile(dwgFile);\nconst bom = viewer.getBom({ aggregateBlocks: true, textTables: 'auto' });\nif (bom) {\n  const csv = serializeCadBomCsv(bom, { tableId: bom.tables[0]?.id });\n  const json = serializeCadBomJson(bom); // 默认隐藏 DataLink connectionString\n}\n\nconst applicationRecords = viewer.getBom({ sources: ['xdata', 'xrecord'] });\n```\n\n组件不会打开或请求 DataLink 指向的外部文件，只返回链接元数据和图纸内部已经缓存的单元格值。JSON 导出默认省略 `connectionString`；仅在可信目标中显式使用 `{ includeSensitiveData: true }`。现代 CAD 表格若未被 parser 暴露单元格，结果会给出结构化 warning，不会猜测数据。原生 DWF/DWFx/XPS 渲染链路目前没有归一化 BOM 元数据。\n\n### 外部 SHX 引用\n\n复杂 DWG 线型按文件名引用 SHX shape/font，DWG 本身不包含对应轮廓。`CadViewer` 会先用 marker 保证图纸可用，并通过 `onReferenceStateChange` 与 `document.metadata.missingReferences` 同步缺失资源。\n\n```ts\nconst viewer = new CadViewer({\n  container,\n  onReferenceStateChange({ missing }) {\n    shxUploadButton.hidden = missing.length === 0;\n    shxUploadButton.textContent = missing.map(({ fileName }) => fileName).join(', ');\n  }\n});\n\nawait viewer.loadFile(dwgFile);\n\n// 用户选择的本地文件。\nawait viewer.addReferenceFile(shxFile);\n\n// 或由业务 API 提供文件内容；fileName 必须保留图纸引用的名称。\nawait viewer.addReferenceBuffer(shxBytes, 'LSG.SHX');\n```\n\n引用可以在图纸加载前或加载后传入。解析后的字体会跨图纸缓存，直到调用 `removeReference()`、`clearReferences()` 或 `destroy()`。替换引用时会校验当前图纸需要的 glyph；同名但不兼容的文件仍会保持 missing 状态。整个过程只在浏览器本地完成。\n\n## Loader 架构\n\n```text\nFile / ArrayBuffer\n  ↓\nCadLoaderRegistry\n  ↓\nDwgLoader | DxfLoader | DwfLoader | 自定义 loader\n  ↓\nDWG/DXF：CadDocument → CadWebGLRenderer | CadCanvasRenderer fallback\nDWF/DWFx/XPS：DwfLoader.mount() → dwf-viewer native WebGL 矢量 / 3D / WASM fallback\n```\n\n所有 loader 都输出统一的 `CadDocument`：\n\n```ts\ninterface CadDocument {\n  format: 'dwg' | 'dxf' | 'dwf' | 'dwfx' | 'xps' | 'unknown';\n  layers: Record<string, CadLayer>;\n  blocks: Record<string, CadBlock>;\n  entities: CadEntity[];\n  pages?: CadPage[];\n  warnings: string[];\n  raw?: unknown;\n}\n```\n\n注册自定义 loader：\n\n```ts\nviewer.registerLoader({\n  id: 'my-cad-format',\n  label: 'My CAD Format',\n  formats: ['unknown'],\n  accepts(input) {\n    return input.fileName?.endsWith('.cad') ?? false;\n  },\n  async load(input) {\n    return {\n      document: {\n        format: 'unknown',\n        layers: {},\n        blocks: {},\n        entities: [],\n        metadata: {},\n        warnings: []\n      },\n      bytes: input.buffer instanceof Uint8Array ? input.buffer.byteLength : 0,\n      elapsedMs: 0,\n      format: 'unknown',\n      warnings: []\n    };\n  }\n});\n```\n\n## 格式支持说明\n\n| 格式 | Loader | 支持范围 |\n|---|---|---|\n| DWG | `DwgLoader` | 使用 LibreDWG WebAssembly。保留 active 平面 saved view、块内文字变换/对齐、闭合及带原始宽度的多段线和 LTYPE 定义；Canvas2D/WebGL 支持 dash/dot 与 BYLAYER/BYBLOCK 继承。外部 SHX 会作为缺失资源报告；补传后按原始缩放、偏移和旋转渲染复杂 shape/text glyph，未提供时使用 marker fallback。 |\n| DXF | `DxfLoader` | 使用 `dxf-parser` + 内置 fallback。支持 codepage-aware 文本解码、CAD 文本转义归一化、基础实体、block/insert、颜色/图层、多段线、hatch boundary、spline 预览。 |\n| DWF | `DwfLoader` + `dwf-viewer` | DWF 6+ ZIP 包、WHIP/W2D 2D 图纸、W3D/HSF 3D eModel、模型树元数据、WebGL 渲染和可选 WASM fallback。 |\n| DWFx / XPS | `DwfLoader` + `dwf-viewer` | DWFx/OPC/XPS 页面，包含 WebGL 加速 vector path、嵌入字体、文本、图片、包内资源和自适应总览线宽，通过原生 DWF 渲染器展示。 |\n\n## 颜色处理\n\n颜色解析遵循 CAD 语义，而不是把所有数字都当成 RGB：\n\n1. 显式 CSS color 或 true color 对象；\n2. 显式 DWG true-color 整数，包括 `0x0000ff` 这类落在 ACI 数值范围内的低 RGB 值；\n3. 实体 ACI：`colorIndex`、`colorNumber`、`color` 的 `1..255`；\n4. 展开 INSERT/block 时处理 BYBLOCK：`0` 继承插入引用颜色；\n5. BYLAYER：`256` 或未设置时查图层颜色；\n6. viewer foreground 兜底。\n\n当 converter 同时暴露有效 ACI 和占位 RGB 值时，图层颜色优先使用 ACI。ACI `7` 会根据画布前景色显示：深色画布上为浅色，浅色画布上为深色。开启 `contrastMode: 'adaptive'` 后，和当前画布背景过近的颜色会被轻量调整，保证可读性。需要严格保留绘图颜色时，可以使用 `contrastMode: 'preserve'`。\n\n如果某个 converter 输出的是 BGR true-color 整数：\n\n```ts\nnew CadViewer({ canvasOptions: { trueColorByteOrder: 'bgr' } });\n```\n\n## 开发命令\n\n使用 Node.js 22.12 或更新版本，候选回归使用 Node.js 24。\n开发工具链使用 Vite 7，发布的 library 仍输出 ES2018，保留 Vue 2 / Webpack 4 兼容性。\n\n```bash\nnpm install\nnpm run dev          # 运行 demo\nnpm run typecheck    # TypeScript 检查\nnpm test             # 构建 library 并运行 DWG normalization 回归测试\nnpm run build        # 构建 library + demo\nnpm run preview      # 预览构建后的 demo\n```\n\n## npm 发布命令\n\n1. 构建并检查包内容：\n\n```bash\nnpm run build:lib\nnpm run pack:dry\n```\n\n2. 发布：\n\n```bash\nnpm login\nnpm publish --access public --auth-type=web\n```\n\n仓库内也提供：\n\n```bash\nnpm run release:npm\n```\n\n## Cloudflare Pages 发布命令\n\n使用 Wrangler Direct Upload：\n\n```bash\nnpm install\nnpm run build:demo\nnpx wrangler pages deploy dist-demo --project-name cad-viewer\n```\n\n或直接使用：\n\n```bash\nnpm run deploy:pages\n```\n\nGitHub Actions 自动发布需要配置仓库 secrets：\n\n```text\nCLOUDFLARE_API_TOKEN\nCLOUDFLARE_ACCOUNT_ID\n```\n\n工作流文件在 `.github/workflows/pages.yml`。\n\n## 目录结构\n\n```text\nsrc/\n  core/          格式检测、颜色、几何、变换、统一类型\n  loaders/       DwgLoader、DxfLoader、DwfLoader、CadLoaderRegistry\n  viewer/        CadViewer 组件和 Canvas renderer\ndemo/            专业 Vite demo UI\ndocs/            中英文架构/格式文档\nscripts/         clean、运行时 WASM 复制与校验脚本\npublic/wasm/     demo 的 WASM 输出目录\n```\n\n## 许可证\n\nAGPL-3.0-only。默认 DWG loader 集成 `@mlightcad/libredwg-web` / LibreDWG，SHX 解码使用 MIT 许可的 `@mlightcad/shx-parser`，DWF 渲染器集成 `dwf-viewer`。二开、分发、嵌入或作为应用组成部分使用时，请保留出处和许可证说明。闭源商用产品需要审阅所有依赖许可证，并在授权模型需要时替换对应 loader。\n","readmeFilename":"README.zh-CN.md"}