{"_id":"@heojeongbo/fluxion-render","_rev":"53-e043fa9643e2829c718bf81c3ece7402","name":"@heojeongbo/fluxion-render","dist-tags":{"latest":"1.6.0"},"versions":{"0.2.0":{"name":"@heojeongbo/fluxion-render","version":"0.2.0","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"url":"https://github.com/HeoJeongBo","name":"heojeongbo","email":"heojungbo@gmail.com"},"license":"MIT","_id":"@heojeongbo/fluxion-render@0.2.0","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"homepage":"https://github.com/HeoJeongBo/fluxion-render#readme","bugs":{"url":"https://github.com/HeoJeongBo/fluxion-render/issues"},"dist":{"shasum":"cfa426c5d28e803a31208259843aa5ae13b504d7","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-0.2.0.tgz","fileCount":17,"integrity":"sha512-tXAqh1KiFzzyNIfIw391s0wgc3oywLm8UDg3llprdvxROQ9Ycv7vULjROw/Ho7pE8sGHCITehvOgZsmee+AS9w==","signatures":[{"sig":"MEUCIGCYrBrOGlouIgtzMzMa4Mc2XJUrrhLnVhXWj1hcrvxRAiEAmK0+5rh0+8z99zCha1DFv5bBPRzsXTio2sFNcgT5evo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":158683},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"}},"gitHead":"3185abc2a22c0f6e9dc8f7b320a4172ac1f2a5fe","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","release":"release-it","typecheck":"tsc --noEmit","test:watch":"vitest","release:dry":"release-it --dry-run","release:major":"release-it major","release:minor":"release-it minor","release:patch":"release-it patch"},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"repository":{"url":"git+https://github.com/HeoJeongBo/fluxion-render.git","type":"git","directory":"packages/fluxion-render"},"_npmVersion":"10.9.2","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","directories":{},"sideEffects":false,"_nodeVersion":"22.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","react":"^18.3.1","vitest":"^4.1.4","happy-dom":"^20.8.9","react-dom":"^18.3.1","release-it":"^19.2.4","typescript":"^5.5.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.3.2","@release-it/conventional-changelog":"^10.0.6"},"peerDependencies":{"react":">=18"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/fluxion-render_0.2.0_1775919148157_0.7483512678673205","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@heojeongbo/fluxion-render","version":"0.2.1","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"url":"https://github.com/HeoJeongBo","name":"heojeongbo","email":"heojungbo@gmail.com"},"license":"MIT","_id":"@heojeongbo/fluxion-render@0.2.1","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"homepage":"https://github.com/HeoJeongBo/fluxion-render#readme","bugs":{"url":"https://github.com/HeoJeongBo/fluxion-render/issues"},"dist":{"shasum":"b139eb58d0911828b1c7887bce2adb8c9c0006a3","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-0.2.1.tgz","fileCount":18,"integrity":"sha512-6Rilx5wzvX18x2KIiSj+q24gnmot47K0dm+qh/r4ow1NkGvpAJAbwsyUe9+G+TMXC/AAZsflPtM9hmLbzxg3+w==","signatures":[{"sig":"MEQCIDKjlRlcc4Q2Uji3GIS0gQbtCgc1kXrInSAC1osaszEUAiAQv6blq3Dw5MmrTFigJm+bUW3Oy3qVRmHt354tQXSZsg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":162512},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"}},"gitHead":"792bd66ff860f50877c6404c458a2ff79f2ac4a9","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","release":"release-it","typecheck":"tsc --noEmit","test:watch":"vitest","release:dry":"release-it --dry-run","release:major":"release-it major","release:minor":"release-it minor","release:patch":"release-it patch"},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"repository":{"url":"git+https://github.com/HeoJeongBo/fluxion-render.git","type":"git","directory":"packages/fluxion-render"},"_npmVersion":"10.9.2","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","directories":{},"sideEffects":false,"_nodeVersion":"22.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","react":"^18.3.1","vitest":"^4.1.4","happy-dom":"^20.8.9","react-dom":"^18.3.1","release-it":"^19.2.4","typescript":"^5.5.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.3.2","@release-it/conventional-changelog":"^10.0.6"},"peerDependencies":{"react":">=18"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/fluxion-render_0.2.1_1775922091488_0.8810837221903012","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@heojeongbo/fluxion-render","version":"0.2.2","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"url":"https://github.com/HeoJeongBo","name":"heojeongbo","email":"heojungbo@gmail.com"},"license":"MIT","_id":"@heojeongbo/fluxion-render@0.2.2","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"homepage":"https://github.com/HeoJeongBo/fluxion-render#readme","bugs":{"url":"https://github.com/HeoJeongBo/fluxion-render/issues"},"dist":{"shasum":"85d59bca2273408da56414ce00ed24ce1998dca8","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-0.2.2.tgz","fileCount":18,"integrity":"sha512-EiayOM6WWvbGQ14ARUhUS400RmNifadxZFfUd0bro/UjLUfudZQymQW3wYQ8RxpqRM8Yzfdj3Wa3WnN4cvmeng==","signatures":[{"sig":"MEUCIFXbTVDBNbVvDsG+VjGiWDlaiSXokhKhcBaS8mm1aPilAiEAqO6DCpeX5BNQsPuujuhNl5wKYgf9JQRY8M6tQxLMKfI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":183217},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"}},"gitHead":"b84c72ae1431674e7320114098d1da89119884cd","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","release":"release-it","typecheck":"tsc --noEmit","test:watch":"vitest","release:dry":"release-it --dry-run","release:major":"release-it major","release:minor":"release-it minor","release:patch":"release-it patch"},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"repository":{"url":"git+https://github.com/HeoJeongBo/fluxion-render.git","type":"git","directory":"packages/fluxion-render"},"_npmVersion":"11.6.2","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","react":"^18.3.1","vitest":"^4.1.4","happy-dom":"^20.8.9","react-dom":"^18.3.1","release-it":"^19.2.4","typescript":"^5.5.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.3.2","@release-it/conventional-changelog":"^10.0.6"},"peerDependencies":{"react":">=18"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/fluxion-render_0.2.2_1776307092989_0.45399787724609597","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@heojeongbo/fluxion-render","version":"0.2.3","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"url":"https://github.com/HeoJeongBo","name":"heojeongbo","email":"heojungbo@gmail.com"},"license":"MIT","_id":"@heojeongbo/fluxion-render@0.2.3","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"homepage":"https://github.com/HeoJeongBo/fluxion-render#readme","bugs":{"url":"https://github.com/HeoJeongBo/fluxion-render/issues"},"dist":{"shasum":"52f983a68082a059db59a1f29d5cca21baee37bb","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-0.2.3.tgz","fileCount":18,"integrity":"sha512-/n5gOHNnzoszZCykb4wP1k6NWmRkLH26kxwQrSL2tWcWiGsJD5EqHa5gx0ILUqLWV6F0IV57+ha6L10dGG6urw==","signatures":[{"sig":"MEQCIHANcAhZOrWMK6k6E1oCj7j3mRy0Syjt7S/dNOmUDhzQAiBHGAvSncKtGB6O5pU375/1K8eXC4uDMhNJ25yS/tgxmQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":192980},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"}},"gitHead":"d825cb608c8d657e16a064ad247c4eb7a4640329","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","release":"release-it","typecheck":"tsc --noEmit","test:watch":"vitest","release:dry":"release-it --dry-run","release:major":"release-it major","release:minor":"release-it minor","release:patch":"release-it patch"},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"repository":{"url":"git+https://github.com/HeoJeongBo/fluxion-render.git","type":"git","directory":"packages/fluxion-render"},"_npmVersion":"11.6.2","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","react":"^18.3.1","vitest":"^4.1.4","happy-dom":"^20.8.9","react-dom":"^18.3.1","release-it":"^19.2.4","typescript":"^5.5.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.3.2","@release-it/conventional-changelog":"^10.0.6"},"peerDependencies":{"react":">=18"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/fluxion-render_0.2.3_1776312142935_0.0136230640949353","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"@heojeongbo/fluxion-render","version":"0.2.4","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"url":"https://github.com/HeoJeongBo","name":"heojeongbo","email":"heojungbo@gmail.com"},"license":"MIT","_id":"@heojeongbo/fluxion-render@0.2.4","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"homepage":"https://github.com/HeoJeongBo/fluxion-render#readme","bugs":{"url":"https://github.com/HeoJeongBo/fluxion-render/issues"},"dist":{"shasum":"0b16d829c50e6987b89684504eeee118d95f3df9","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-0.2.4.tgz","fileCount":18,"integrity":"sha512-1U9VyxLi7YqEUbPvL/vU4RA1CB/dnh7zwicdZqBsGXCQ+0bdFWmYXmKZSxXrb2PMeDTD+8++/NuDoHDouc5UDg==","signatures":[{"sig":"MEUCICvvQ/zGeIdLPNyD+L7LD/ZGfhoDz+pen9iGlZWKPv2EAiEA251FZFtj0KJXjX3616EYD6uCiyCIx+aPfUUsrMnMyDU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":194243},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"}},"gitHead":"7e660cee2671a859c0fed401e86843f30a8d5b36","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","release":"release-it","typecheck":"tsc --noEmit","test:watch":"vitest","release:dry":"release-it --dry-run","release:major":"release-it major","release:minor":"release-it minor","release:patch":"release-it patch"},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"repository":{"url":"git+https://github.com/HeoJeongBo/fluxion-render.git","type":"git","directory":"packages/fluxion-render"},"_npmVersion":"11.6.2","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","react":"^18.3.1","vitest":"^4.1.4","happy-dom":"^20.8.9","react-dom":"^18.3.1","release-it":"^19.2.4","typescript":"^5.5.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.3.2","@release-it/conventional-changelog":"^10.0.6"},"peerDependencies":{"react":">=18"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/fluxion-render_0.2.4_1776331140853_0.8871892897118621","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@heojeongbo/fluxion-render","version":"0.3.0","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"url":"https://github.com/HeoJeongBo","name":"heojeongbo","email":"heojungbo@gmail.com"},"license":"MIT","_id":"@heojeongbo/fluxion-render@0.3.0","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"homepage":"https://github.com/HeoJeongBo/fluxion-render#readme","bugs":{"url":"https://github.com/HeoJeongBo/fluxion-render/issues"},"dist":{"shasum":"6e69b48b67440f8c05b6b65da43970d4a4550785","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-0.3.0.tgz","fileCount":16,"integrity":"sha512-nkiqLURU3pk9Nhy9FvCLOVFJctH9WhuDZFzRFYmRm+r9FFFz1ebBt2yb/UiD3v2Z1E0A/L6Y446nk7BWwNIBXA==","signatures":[{"sig":"MEQCIHKIVMxUrB+2BH8XDLtJQGsPRSUJ8cijtmvlRRFaWI6CAiB74rDIMKMpHxfl1XbT+ZGfHmqlATdfuQ/sMYLDYPs0YA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":220402},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"}},"gitHead":"5c21bc68c71dab64e6e39d0f2962ceae86d99a42","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","release":"release-it","typecheck":"tsc --noEmit","test:watch":"vitest","release:dry":"release-it --dry-run","release:major":"release-it major","release:minor":"release-it minor","release:patch":"release-it patch"},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"repository":{"url":"git+https://github.com/HeoJeongBo/fluxion-render.git","type":"git","directory":"packages/fluxion-render"},"_npmVersion":"11.6.2","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","react":"^18.3.1","vitest":"^4.1.4","happy-dom":"^20.8.9","react-dom":"^18.3.1","release-it":"^19.2.4","typescript":"^5.5.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.3.2","@release-it/conventional-changelog":"^10.0.6"},"peerDependencies":{"react":">=18"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/fluxion-render_0.3.0_1776423371780_0.6654664052874719","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@heojeongbo/fluxion-render","version":"0.3.1","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"url":"https://github.com/HeoJeongBo","name":"heojeongbo","email":"heojungbo@gmail.com"},"license":"MIT","_id":"@heojeongbo/fluxion-render@0.3.1","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"homepage":"https://github.com/HeoJeongBo/fluxion-render#readme","bugs":{"url":"https://github.com/HeoJeongBo/fluxion-render/issues"},"dist":{"shasum":"21ce002ae9740e371967089556d32ed3670abc6b","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-0.3.1.tgz","fileCount":16,"integrity":"sha512-tVMXY6nJj+fuqMi6MFwhwN3jzWkvH4uMqHiKrFxRNVYA/zyqKBc5Io2LK0t2nG3APiIhEtro8TKDrsrdOXITQQ==","signatures":[{"sig":"MEQCICJtHYSWofPfzyaY+Lr4ymIQFUpfhq0Y1chtW0V/M3zkAiBNfM0tF+UH4LdINOBh+gJUCdfpzNgj+vtqfM+6MJapKA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":242487},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"}},"gitHead":"d91b7dc93dcf54603da8728b4ddd6f0bf7a2a094","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","release":"release-it","typecheck":"tsc --noEmit","test:watch":"vitest","release:dry":"release-it --dry-run","release:major":"release-it major","release:minor":"release-it minor","release:patch":"release-it patch"},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"repository":{"url":"git+https://github.com/HeoJeongBo/fluxion-render.git","type":"git","directory":"packages/fluxion-render"},"_npmVersion":"10.9.2","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","directories":{},"sideEffects":false,"_nodeVersion":"22.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","react":"^18.3.1","vitest":"^4.1.4","happy-dom":"^20.8.9","react-dom":"^18.3.1","release-it":"^19.2.4","typescript":"^5.5.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.3.2","@release-it/conventional-changelog":"^10.0.6"},"peerDependencies":{"react":">=18"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/fluxion-render_0.3.1_1776522787935_0.7843805612668426","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@heojeongbo/fluxion-render","version":"0.3.2","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"url":"https://github.com/HeoJeongBo","name":"heojeongbo","email":"heojungbo@gmail.com"},"license":"MIT","_id":"@heojeongbo/fluxion-render@0.3.2","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"homepage":"https://github.com/HeoJeongBo/fluxion-render#readme","bugs":{"url":"https://github.com/HeoJeongBo/fluxion-render/issues"},"dist":{"shasum":"d5e7e176fd0378fa7840bd891fe5778d44518193","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-0.3.2.tgz","fileCount":16,"integrity":"sha512-kC2gUKOm1Lb2COxh1Aw6y3TS/CwE2v+8wHNhCb8wTnWWKxhh86CKTqjXFGugbzHZyeSxaHcZNmddrqEs4Mgtag==","signatures":[{"sig":"MEQCIF0UJrfq5a9W/YRk4HV7ZpCmyrdhwDS+rVXynUhmkvltAiAI/fr9g59hEf9NeUDOldFbTTSoyroSzlEo7r0BzobsPQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":244152},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"}},"gitHead":"0e7dc6b550441a35e9df409b69cbc64fe031a11e","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","release":"release-it","typecheck":"tsc --noEmit","test:watch":"vitest","release:dry":"release-it --dry-run","release:major":"release-it major","release:minor":"release-it minor","release:patch":"release-it patch"},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"repository":{"url":"git+https://github.com/HeoJeongBo/fluxion-render.git","type":"git","directory":"packages/fluxion-render"},"_npmVersion":"11.6.2","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","react":"^18.3.1","vitest":"^4.1.4","happy-dom":"^20.8.9","react-dom":"^18.3.1","release-it":"^19.2.4","typescript":"^5.5.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.3.2","@release-it/conventional-changelog":"^10.0.6"},"peerDependencies":{"react":">=18"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/fluxion-render_0.3.2_1776666436769_0.9731502008037038","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"name":"@heojeongbo/fluxion-render","version":"0.3.3","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"url":"https://github.com/HeoJeongBo","name":"heojeongbo","email":"heojungbo@gmail.com"},"license":"MIT","_id":"@heojeongbo/fluxion-render@0.3.3","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"homepage":"https://github.com/HeoJeongBo/fluxion-render#readme","bugs":{"url":"https://github.com/HeoJeongBo/fluxion-render/issues"},"dist":{"shasum":"aa10d9a05121c9084b3e75f7e005e8c572c0d8c7","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-0.3.3.tgz","fileCount":16,"integrity":"sha512-foTcLA7gfoOwsGT/ffjxGX1G4pmU7QphI+rCSJ9gIGdLIh7DuWfYFiRqb39cTbxSEOpUQ0JQ5wKhxB8VgWA0Xg==","signatures":[{"sig":"MEUCIQCyJ2x2cKS0XAtXvdTUjblxyYezvijbPz6BEBbbhLfbVgIgBpTS0iF/tswkn+sHAZlqlo3Abw8UosjENwZ6sLBTTh0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":248091},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"}},"gitHead":"8a1af5ab93439af7f84d2a458f1c0a5b77ea57bd","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","release":"release-it","typecheck":"tsc --noEmit","test:watch":"vitest","release:dry":"release-it --dry-run","release:major":"release-it major","release:minor":"release-it minor","release:patch":"release-it patch"},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"repository":{"url":"git+https://github.com/HeoJeongBo/fluxion-render.git","type":"git","directory":"packages/fluxion-render"},"_npmVersion":"11.6.2","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","react":"^18.3.1","vitest":"^4.1.4","happy-dom":"^20.8.9","react-dom":"^18.3.1","release-it":"^19.2.4","typescript":"^5.5.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.3.2","@release-it/conventional-changelog":"^10.0.6"},"peerDependencies":{"react":">=18"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/fluxion-render_0.3.3_1776736504584_0.42667309623410365","host":"s3://npm-registry-packages-npm-production"}},"0.3.4":{"name":"@heojeongbo/fluxion-render","version":"0.3.4","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"url":"https://github.com/HeoJeongBo","name":"heojeongbo","email":"heojungbo@gmail.com"},"license":"MIT","_id":"@heojeongbo/fluxion-render@0.3.4","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"homepage":"https://github.com/HeoJeongBo/fluxion-render#readme","bugs":{"url":"https://github.com/HeoJeongBo/fluxion-render/issues"},"dist":{"shasum":"678de8f45ded74a278d3494a808fc02afa8f74a2","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-0.3.4.tgz","fileCount":16,"integrity":"sha512-aR+1BdZ6MFIFOOWJ4NTCT9VxOvJ/ENaJFsJQrOcXT8AkDBbKa2kOIB3s7rkO5wKgdhKjdiYioS7GxQM04+/gkA==","signatures":[{"sig":"MEUCIGbhSUyu87k2o3FSLDp5NzEuMKA9uLo6Toiq48jQBtphAiEAxtyeiJsbvi2a6TmcEU2mRCjGZO/5gntE8QbAvsYITFg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":254856},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"}},"gitHead":"2017777342e0a561f810878b1f0898d3037fcc03","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","release":"release-it","typecheck":"tsc --noEmit","test:watch":"vitest","release:dry":"release-it --dry-run","release:major":"release-it major","release:minor":"release-it minor","release:patch":"release-it patch"},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"repository":{"url":"git+https://github.com/HeoJeongBo/fluxion-render.git","type":"git","directory":"packages/fluxion-render"},"_npmVersion":"11.6.2","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","react":"^18.3.1","vitest":"^4.1.4","happy-dom":"^20.8.9","react-dom":"^18.3.1","release-it":"^19.2.4","typescript":"^5.5.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.3.2","@release-it/conventional-changelog":"^10.0.6"},"peerDependencies":{"react":">=18"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/fluxion-render_0.3.4_1776751832546_0.49450146550340146","host":"s3://npm-registry-packages-npm-production"}},"0.3.5":{"name":"@heojeongbo/fluxion-render","version":"0.3.5","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"url":"https://github.com/HeoJeongBo","name":"heojeongbo","email":"heojungbo@gmail.com"},"license":"MIT","_id":"@heojeongbo/fluxion-render@0.3.5","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"homepage":"https://github.com/HeoJeongBo/fluxion-render#readme","bugs":{"url":"https://github.com/HeoJeongBo/fluxion-render/issues"},"dist":{"shasum":"b4680a4c18cf12113b96473984a5d3f6ba6bfdad","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-0.3.5.tgz","fileCount":16,"integrity":"sha512-mulPiSudF3O1zdVZ64F1UVotVUN9ESJsSh9JxMhvWYpONrVVRGCg83Pq1Qvu9EtghU4QlGBoox3gJQCt7Gi33A==","signatures":[{"sig":"MEQCIFwmb0Uj++ar0u8CQJsp3D+HsW/bJy6IVXP+pfVF0JpwAiBATp9pnj6/lqYB/Aq2ELbSmSqe+b+v+8qU0O462pgjPg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":265662},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"}},"gitHead":"93fe677a8fb670097088df902f39c01f887f94a7","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","release":"release-it","typecheck":"tsc --noEmit","test:watch":"vitest","release:dry":"release-it --dry-run","release:major":"release-it major","release:minor":"release-it minor","release:patch":"release-it patch"},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"repository":{"url":"git+https://github.com/HeoJeongBo/fluxion-render.git","type":"git","directory":"packages/fluxion-render"},"_npmVersion":"11.6.2","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","react":"^18.3.1","vitest":"^4.1.4","happy-dom":"^20.8.9","react-dom":"^18.3.1","release-it":"^19.2.4","typescript":"^5.5.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.3.2","@release-it/conventional-changelog":"^10.0.6"},"peerDependencies":{"react":">=18"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/fluxion-render_0.3.5_1776753342699_0.09899161823201297","host":"s3://npm-registry-packages-npm-production"}},"0.3.6":{"name":"@heojeongbo/fluxion-render","version":"0.3.6","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"url":"https://github.com/HeoJeongBo","name":"heojeongbo","email":"heojungbo@gmail.com"},"license":"MIT","_id":"@heojeongbo/fluxion-render@0.3.6","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"homepage":"https://github.com/HeoJeongBo/fluxion-render#readme","bugs":{"url":"https://github.com/HeoJeongBo/fluxion-render/issues"},"dist":{"shasum":"59ae31ceb1b7e374f9716cc69ccdcde904cb6ca2","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-0.3.6.tgz","fileCount":16,"integrity":"sha512-DpR4PKoOPFC6uANkfCxy3v2S2ndOBQR4GCIWEXFdhCf+zV6Er8zYSlNg9XbQrz08ECx04/obWj04EU0e3BG0fg==","signatures":[{"sig":"MEUCIQDYkbaWx7nc23A4ya75TDxRtLO8gBmUYpyEsK8xVEli9wIgK5M5gqGxf6rV1WqMFEoZ4Y8Zdb+bz7LLLfkxzHgPA10=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":270404},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"}},"gitHead":"ae039ba69b67903758626a16c8760c80f48ce163","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","release":"release-it","typecheck":"tsc --noEmit","test:watch":"vitest","release:dry":"release-it --dry-run","release:major":"release-it major","release:minor":"release-it minor","release:patch":"release-it patch"},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"repository":{"url":"git+https://github.com/HeoJeongBo/fluxion-render.git","type":"git","directory":"packages/fluxion-render"},"_npmVersion":"11.6.2","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","react":"^18.3.1","vitest":"^4.1.4","happy-dom":"^20.8.9","react-dom":"^18.3.1","release-it":"^19.2.4","typescript":"^5.5.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.3.2","@release-it/conventional-changelog":"^10.0.6"},"peerDependencies":{"react":">=18"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/fluxion-render_0.3.6_1776758355868_0.808597669382918","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@heojeongbo/fluxion-render","version":"0.4.0","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"url":"https://github.com/HeoJeongBo","name":"heojeongbo","email":"heojungbo@gmail.com"},"license":"MIT","_id":"@heojeongbo/fluxion-render@0.4.0","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"homepage":"https://github.com/HeoJeongBo/fluxion-render#readme","bugs":{"url":"https://github.com/HeoJeongBo/fluxion-render/issues"},"dist":{"shasum":"a8433a157588962e15a32b6f3eff43b0dcf0dbb6","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-0.4.0.tgz","fileCount":16,"integrity":"sha512-t9iwjhVJFHUedj4aZtFyAA0XwZStqaSLPMnGw4syal8YwTtUPwuFUO4Aav5q0EzYPC7mFEzKP4nBDB50N8WzGQ==","signatures":[{"sig":"MEUCIQChNKFswaMvLU6XY/Uup7oR8aHgvv7/Lh1U89H73uKIKgIgBD9uP22/7tBl4K0t+hxV1UGhe4m5lskeQfxSMJbrxwE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":291728},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"}},"gitHead":"61ad0dbc5dba7af6dc05e0d13b6c2a041d98f822","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","release":"release-it","typecheck":"tsc --noEmit","test:watch":"vitest","release:dry":"release-it --dry-run","release:major":"release-it major","release:minor":"release-it minor","release:patch":"release-it patch"},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"repository":{"url":"git+https://github.com/HeoJeongBo/fluxion-render.git","type":"git","directory":"packages/fluxion-render"},"_npmVersion":"11.6.2","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","react":"^18.3.1","vitest":"^4.1.4","happy-dom":"^20.8.9","react-dom":"^18.3.1","release-it":"^19.2.4","typescript":"^5.5.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.3.2","@release-it/conventional-changelog":"^10.0.6"},"peerDependencies":{"react":">=18"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/fluxion-render_0.4.0_1776761189509_0.9762063626761652","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@heojeongbo/fluxion-render","version":"0.4.1","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"url":"https://github.com/HeoJeongBo","name":"heojeongbo","email":"heojungbo@gmail.com"},"license":"MIT","_id":"@heojeongbo/fluxion-render@0.4.1","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"homepage":"https://github.com/HeoJeongBo/fluxion-render#readme","bugs":{"url":"https://github.com/HeoJeongBo/fluxion-render/issues"},"dist":{"shasum":"2d6839255555f47ba4dc6c74b3a691b3c577d673","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-0.4.1.tgz","fileCount":16,"integrity":"sha512-/tlLyUjTvQ4kc0EhHj8nj2pTld43ArcZtIaZBD677LyAn9dr4937avYj66TVuym6nbxofEI7duwMRjrhJHtDIQ==","signatures":[{"sig":"MEYCIQCEVtZakhDjl4nx8gpZjfDIlErD3lhrw3IhnZkw3u220AIhAIQwOygMngbNV5TQUlt/vZxH446azVt4hoIDWTTcZ30e","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":295103},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"}},"gitHead":"bf93bf2bbd98205b51486231b8e0b0dde8750961","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","release":"release-it","typecheck":"tsc --noEmit","test:watch":"vitest","release:dry":"release-it --dry-run","release:major":"release-it major","release:minor":"release-it minor","release:patch":"release-it patch"},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"repository":{"url":"git+https://github.com/HeoJeongBo/fluxion-render.git","type":"git","directory":"packages/fluxion-render"},"_npmVersion":"11.6.2","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","react":"^18.3.1","vitest":"^4.1.4","happy-dom":"^20.8.9","react-dom":"^18.3.1","release-it":"^19.2.4","typescript":"^5.5.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.3.2","@release-it/conventional-changelog":"^10.0.6"},"peerDependencies":{"react":">=18"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/fluxion-render_0.4.1_1776774111363_0.6796878778693347","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@heojeongbo/fluxion-render","version":"0.5.0","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"url":"https://github.com/HeoJeongBo","name":"heojeongbo","email":"heojungbo@gmail.com"},"license":"MIT","_id":"@heojeongbo/fluxion-render@0.5.0","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"homepage":"https://github.com/HeoJeongBo/fluxion-render#readme","bugs":{"url":"https://github.com/HeoJeongBo/fluxion-render/issues"},"dist":{"shasum":"4647369172eecdd49ffc4bb7fe13217061f5bb6a","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-0.5.0.tgz","fileCount":16,"integrity":"sha512-HUMvqd3XdRyNpwgmYx+w7I8Ro+m7cKLH1LiGpfea5UHZSSSI7lCGkb0BEeNDfNAno4Hl9PXJL8biYpf7PkGsXw==","signatures":[{"sig":"MEYCIQDPck2yYmBkACRxdNC7Uteob9Sz/RaYfCijYqqUsdDxeQIhAMqit+V2XmkOQFXq9dmrSrn+pi/RhPua5dlteDFRoy4C","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":327312},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"}},"gitHead":"5af3285fbe89514ca0699e4094dc942b8cf21577","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","release":"release-it","typecheck":"tsc --noEmit","test:watch":"vitest","release:dry":"release-it --dry-run","release:major":"release-it major","release:minor":"release-it minor","release:patch":"release-it patch"},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"repository":{"url":"git+https://github.com/HeoJeongBo/fluxion-render.git","type":"git","directory":"packages/fluxion-render"},"_npmVersion":"11.6.2","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","react":"^18.3.1","vitest":"^4.1.4","happy-dom":"^20.8.9","react-dom":"^18.3.1","release-it":"^19.2.4","typescript":"^5.5.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@vitest/coverage-v8":"^4.1.4","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.3.2","@release-it/conventional-changelog":"^10.0.6"},"peerDependencies":{"react":">=18"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/fluxion-render_0.5.0_1777005392562_0.47937881945992755","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@heojeongbo/fluxion-render","version":"0.6.0","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"url":"https://github.com/HeoJeongBo","name":"heojeongbo","email":"heojungbo@gmail.com"},"license":"MIT","_id":"@heojeongbo/fluxion-render@0.6.0","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"homepage":"https://github.com/HeoJeongBo/fluxion-render#readme","bugs":{"url":"https://github.com/HeoJeongBo/fluxion-render/issues"},"dist":{"shasum":"e237d76952452b212f516fb3ef34fe2f0064fa51","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-0.6.0.tgz","fileCount":16,"integrity":"sha512-5iZjl9Wd7poXk+8AZ3mxKw+o3A1iE2rIKAHjIMRLfMOcMYYTwy6xHh/T8PljwcbL06sFr8pUn1EP8ye/NxLEIg==","signatures":[{"sig":"MEUCIHylgSXFBGzapAGFrPebusvwg7xIchV+TgqhyZ9gUE6tAiEA+h+az/dzgTFvcRd3Fn5zHDNE8aBaoFEWqoQ3K+1mhnU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":335353},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"}},"gitHead":"5572dcf8579aecb877900e29cfb022a449425c22","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","release":"release-it","typecheck":"tsc --noEmit","test:watch":"vitest","release:dry":"release-it --dry-run","release:major":"release-it major","release:minor":"release-it minor","release:patch":"release-it patch"},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"repository":{"url":"git+https://github.com/HeoJeongBo/fluxion-render.git","type":"git","directory":"packages/fluxion-render"},"_npmVersion":"11.6.2","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","dependencies":{"@heojeongbo/fluxion-worker":"workspace:*"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","react":"^18.3.1","vitest":"^4.1.4","happy-dom":"^20.8.9","react-dom":"^18.3.1","release-it":"^19.2.4","typescript":"^5.5.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@vitest/coverage-v8":"^4.1.4","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.3.2","@release-it/conventional-changelog":"^10.0.6"},"peerDependencies":{"react":">=18"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/fluxion-render_0.6.0_1778209813077_0.5439257887986486","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@heojeongbo/fluxion-render","version":"0.7.0","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"url":"https://github.com/HeoJeongBo","name":"heojeongbo","email":"heojungbo@gmail.com"},"license":"MIT","_id":"@heojeongbo/fluxion-render@0.7.0","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"homepage":"https://github.com/HeoJeongBo/fluxion-render#readme","bugs":{"url":"https://github.com/HeoJeongBo/fluxion-render/issues"},"dist":{"shasum":"1a3cbf7ee0a5d640574b5d0375b06bc7e15a8929","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-0.7.0.tgz","fileCount":16,"integrity":"sha512-a4UNO/W85inBAf0eNC1TtWGVXDLpVV42a7tdNaQ/w3CX+VZpzcmda2ey4O9yFjtR54Q8v8P69wCaJuH5h+oyrQ==","signatures":[{"sig":"MEUCIQCKqkUELayJq9QpLHX7YBJfEUbQlT/2ZhnSOkVNGXQcwgIgExpKnFIFeo5a+LDWpAj12q2hDTB0P/dmgchGpdg6uVM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":335347},"main":"./dist/index.js","type":"module","_from":"file:heojeongbo-fluxion-render-0.7.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","release":"release-it","typecheck":"tsc --noEmit","test:watch":"vitest","release:dry":"release-it --dry-run","release:major":"release-it major","release:minor":"release-it minor","release:patch":"release-it patch"},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"_resolved":"/private/var/folders/bk/pnm1xqz17gz0dfh_gp638hh80000gn/T/553f0af31ec9ba5a97f344f9ae0d5726/heojeongbo-fluxion-render-0.7.0.tgz","_integrity":"sha512-a4UNO/W85inBAf0eNC1TtWGVXDLpVV42a7tdNaQ/w3CX+VZpzcmda2ey4O9yFjtR54Q8v8P69wCaJuH5h+oyrQ==","repository":{"url":"git+https://github.com/HeoJeongBo/fluxion-render.git","type":"git","directory":"packages/fluxion-render"},"_npmVersion":"11.6.2","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","dependencies":{"@heojeongbo/fluxion-worker":"0.1.10"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","react":"^18.3.1","vitest":"^4.1.4","happy-dom":"^20.8.9","react-dom":"^18.3.1","release-it":"^19.2.4","typescript":"^5.5.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@vitest/coverage-v8":"^4.1.4","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.3.2","@release-it/conventional-changelog":"^10.0.6"},"peerDependencies":{"react":">=18"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/fluxion-render_0.7.0_1778471450335_0.6958384972310065","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"@heojeongbo/fluxion-render","version":"0.7.1","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"url":"https://github.com/HeoJeongBo","name":"heojeongbo","email":"heojungbo@gmail.com"},"license":"MIT","_id":"@heojeongbo/fluxion-render@0.7.1","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"homepage":"https://github.com/HeoJeongBo/fluxion-render#readme","bugs":{"url":"https://github.com/HeoJeongBo/fluxion-render/issues"},"dist":{"shasum":"8dc6626e8451bc85f99c7a43b8d0094f0c695a66","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-0.7.1.tgz","fileCount":16,"integrity":"sha512-uXlQc8Mm9MBWUo5B4ypIjrub9wR66m9A+q3mo56NkFeeTr+y2jHnqWNNQDTMdSIQg8iz6VIcaSD1HKtDow9G3A==","signatures":[{"sig":"MEYCIQDD2Rzk6okz9LXWq0Lsi/M97H1PO+m8cwcaPipiQL2YsQIhAJ+lWKg54NiCwvbkwXG36hEsBlRNj8zd5mJYoPMLSUi1","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":404207},"main":"./dist/index.js","type":"module","_from":"file:heojeongbo-fluxion-render-0.7.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","release":"release-it","typecheck":"tsc --noEmit","test:watch":"vitest","release:dry":"release-it --dry-run","release:major":"release-it major","release:minor":"release-it minor","release:patch":"release-it patch"},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"_resolved":"/private/var/folders/bk/pnm1xqz17gz0dfh_gp638hh80000gn/T/ab8adf61cd6eb9c496f78b6dd1b2d550/heojeongbo-fluxion-render-0.7.1.tgz","_integrity":"sha512-uXlQc8Mm9MBWUo5B4ypIjrub9wR66m9A+q3mo56NkFeeTr+y2jHnqWNNQDTMdSIQg8iz6VIcaSD1HKtDow9G3A==","repository":{"url":"git+https://github.com/HeoJeongBo/fluxion-render.git","type":"git","directory":"packages/fluxion-render"},"_npmVersion":"11.6.2","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","dependencies":{"@heojeongbo/fluxion-worker":"0.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","react":"^18.3.1","vitest":"^4.1.4","happy-dom":"^20.8.9","react-dom":"^18.3.1","release-it":"^19.2.4","typescript":"^5.5.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@vitest/coverage-v8":"^4.1.4","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.3.2","@release-it/conventional-changelog":"^10.0.6"},"peerDependencies":{"react":">=18"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/fluxion-render_0.7.1_1778638364629_0.6000203623874059","host":"s3://npm-registry-packages-npm-production"}},"0.7.2":{"name":"@heojeongbo/fluxion-render","version":"0.7.2","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"url":"https://github.com/HeoJeongBo","name":"heojeongbo","email":"heojungbo@gmail.com"},"license":"MIT","_id":"@heojeongbo/fluxion-render@0.7.2","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"homepage":"https://github.com/HeoJeongBo/fluxion-render#readme","bugs":{"url":"https://github.com/HeoJeongBo/fluxion-render/issues"},"dist":{"shasum":"3391330b4117ed67b39218743a1720041fb80dcd","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-0.7.2.tgz","fileCount":16,"integrity":"sha512-94u3WN2vztYTffQ083tXujHFCyIs3WavMGmiAB+LPf8kBieAsHx98N0G10A8NdC98TzkOMECdWK4uCV6aCfioA==","signatures":[{"sig":"MEUCIFQDd8OiEq7tVscY2BXZOm4GqAWiWOBYrcZJW+Zj1MsoAiEAhtobiNgl717lKxwRKwmmmfnZ2BZVWydQhOUa+QFfwVk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":403886},"main":"./dist/index.js","type":"module","_from":"file:heojeongbo-fluxion-render-0.7.2.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","release":"release-it","typecheck":"tsc --noEmit","test:watch":"vitest","release:dry":"release-it --dry-run","release:major":"release-it major","release:minor":"release-it minor","release:patch":"release-it patch"},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"_resolved":"/private/var/folders/bk/pnm1xqz17gz0dfh_gp638hh80000gn/T/137a9a8fcfe541a5fb48366f8ace3de3/heojeongbo-fluxion-render-0.7.2.tgz","_integrity":"sha512-94u3WN2vztYTffQ083tXujHFCyIs3WavMGmiAB+LPf8kBieAsHx98N0G10A8NdC98TzkOMECdWK4uCV6aCfioA==","repository":{"url":"git+https://github.com/HeoJeongBo/fluxion-render.git","type":"git","directory":"packages/fluxion-render"},"_npmVersion":"11.6.2","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","dependencies":{"@heojeongbo/fluxion-worker":"0.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","react":"^18.3.1","vitest":"^4.1.4","happy-dom":"^20.8.9","react-dom":"^18.3.1","release-it":"^19.2.4","typescript":"^5.5.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@vitest/coverage-v8":"^4.1.4","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.3.2","@release-it/conventional-changelog":"^10.0.6"},"peerDependencies":{"react":">=18"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/fluxion-render_0.7.2_1778673160546_0.08988608753181748","host":"s3://npm-registry-packages-npm-production"}},"0.7.3":{"name":"@heojeongbo/fluxion-render","version":"0.7.3","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"url":"https://github.com/HeoJeongBo","name":"heojeongbo","email":"heojungbo@gmail.com"},"license":"MIT","_id":"@heojeongbo/fluxion-render@0.7.3","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"homepage":"https://github.com/HeoJeongBo/fluxion-render#readme","bugs":{"url":"https://github.com/HeoJeongBo/fluxion-render/issues"},"dist":{"shasum":"25d5c2904ce8b8175edc0c8b6ca693e0934ff560","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-0.7.3.tgz","fileCount":16,"integrity":"sha512-KLAcUSEE1dLQ9sgccmEMZsFXBBjHIoC76bzD43ymOA/A4MrwqbzTIy9RUBVQdMZgtQcnUVjRPHqjUNhw9c6M5g==","signatures":[{"sig":"MEUCIQD/0OXfsn7hAbGb44uLTvGb9j/xUiyJ3pc2E1rrFnqB4AIgToP9h2zaAOkmZUqvyBeHLDeXY/Pnd8SsF24auSu+6wE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":437559},"main":"./dist/index.js","type":"module","_from":"file:heojeongbo-fluxion-render-0.7.3.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","release":"release-it","typecheck":"tsc --noEmit","test:watch":"vitest","release:dry":"release-it --dry-run","release:major":"release-it major","release:minor":"release-it minor","release:patch":"release-it patch"},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"_resolved":"/private/var/folders/bk/pnm1xqz17gz0dfh_gp638hh80000gn/T/d59c40f32c21cacd76e0689986b66654/heojeongbo-fluxion-render-0.7.3.tgz","_integrity":"sha512-KLAcUSEE1dLQ9sgccmEMZsFXBBjHIoC76bzD43ymOA/A4MrwqbzTIy9RUBVQdMZgtQcnUVjRPHqjUNhw9c6M5g==","repository":{"url":"git+https://github.com/HeoJeongBo/fluxion-render.git","type":"git","directory":"packages/fluxion-render"},"_npmVersion":"11.6.2","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","dependencies":{"@heojeongbo/fluxion-worker":"0.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","react":"^18.3.1","vitest":"^4.1.4","happy-dom":"^20.8.9","react-dom":"^18.3.1","release-it":"^19.2.4","typescript":"^5.5.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@vitest/coverage-v8":"^4.1.4","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.3.2","@release-it/conventional-changelog":"^10.0.6"},"peerDependencies":{"react":">=18"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/fluxion-render_0.7.3_1779093834108_0.6578009509674672","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@heojeongbo/fluxion-render","version":"0.8.0","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"url":"https://github.com/HeoJeongBo","name":"heojeongbo","email":"heojungbo@gmail.com"},"license":"MIT","_id":"@heojeongbo/fluxion-render@0.8.0","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"homepage":"https://github.com/HeoJeongBo/fluxion-render#readme","bugs":{"url":"https://github.com/HeoJeongBo/fluxion-render/issues"},"dist":{"shasum":"9af96ea539803a70422e469b53148b12e22fd445","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-0.8.0.tgz","fileCount":16,"integrity":"sha512-LnAwFSds8yrXw9kJpPQW6VmD7PhRYzp6DMcGMSfPLU7fDlRnpZ0GDzXNqWBT7gEIU9pgPIKDopQVPuvMUnaGjg==","signatures":[{"sig":"MEUCIHXWQhJZG9orar0saA5DMQntxmOM4S8MnOc14blTduO9AiEAj+FlCdGAiF/XN9ROZ2NKPm7AqFwRKvaVvSYKLo0kYZ8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":558697},"main":"./dist/index.js","type":"module","_from":"file:heojeongbo-fluxion-render-0.8.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","release":"release-it","typecheck":"tsc --noEmit","test:watch":"vitest","release:dry":"release-it --dry-run","release:major":"release-it major","release:minor":"release-it minor","release:patch":"release-it patch"},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"_resolved":"/private/var/folders/bk/pnm1xqz17gz0dfh_gp638hh80000gn/T/a64790879b33b45fbef1ff32fd17a35b/heojeongbo-fluxion-render-0.8.0.tgz","_integrity":"sha512-LnAwFSds8yrXw9kJpPQW6VmD7PhRYzp6DMcGMSfPLU7fDlRnpZ0GDzXNqWBT7gEIU9pgPIKDopQVPuvMUnaGjg==","repository":{"url":"git+https://github.com/HeoJeongBo/fluxion-render.git","type":"git","directory":"packages/fluxion-render"},"_npmVersion":"11.6.2","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","dependencies":{"@heojeongbo/fluxion-worker":"0.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","react":"^18.3.1","vitest":"^4.1.4","happy-dom":"^20.8.9","react-dom":"^18.3.1","release-it":"^19.2.4","typescript":"^5.5.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@vitest/coverage-v8":"^4.1.4","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.3.2","@release-it/conventional-changelog":"^10.0.6"},"peerDependencies":{"react":">=18"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/fluxion-render_0.8.0_1779102342245_0.5176975834035198","host":"s3://npm-registry-packages-npm-production"}},"0.8.1":{"name":"@heojeongbo/fluxion-render","version":"0.8.1","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"url":"https://github.com/HeoJeongBo","name":"heojeongbo","email":"heojungbo@gmail.com"},"license":"MIT","_id":"@heojeongbo/fluxion-render@0.8.1","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"homepage":"https://github.com/HeoJeongBo/fluxion-render#readme","bugs":{"url":"https://github.com/HeoJeongBo/fluxion-render/issues"},"dist":{"shasum":"7beffb2d51a87d3ff9d9e7d9fb946bbff8eed8b1","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-0.8.1.tgz","fileCount":16,"integrity":"sha512-LcPbLMGqtUgHbDjpeAqw7SVnLpY3nLgfCiaiA2d4xapaWW4WNm2hTo379YabyVhbLmzMhTVJklxVrmmvqYIgsg==","signatures":[{"sig":"MEYCIQDBp/gn8d+TT6vkSe2K9bDh5DCFD4T6zHfXeSf2M/QcFQIhAOYLEF1J9k/kTY/m1aVt7VXQze7o0tb7DPWLduowLbse","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":584425},"main":"./dist/index.js","type":"module","_from":"file:heojeongbo-fluxion-render-0.8.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","release":"release-it","typecheck":"tsc --noEmit","test:watch":"vitest","release:dry":"release-it --dry-run","release:major":"release-it major","release:minor":"release-it minor","release:patch":"release-it patch"},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"_resolved":"/private/var/folders/bk/pnm1xqz17gz0dfh_gp638hh80000gn/T/5269db2a1f55cd34466bdeb640318a87/heojeongbo-fluxion-render-0.8.1.tgz","_integrity":"sha512-LcPbLMGqtUgHbDjpeAqw7SVnLpY3nLgfCiaiA2d4xapaWW4WNm2hTo379YabyVhbLmzMhTVJklxVrmmvqYIgsg==","repository":{"url":"git+https://github.com/HeoJeongBo/fluxion-render.git","type":"git","directory":"packages/fluxion-render"},"_npmVersion":"11.6.2","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","dependencies":{"@heojeongbo/fluxion-worker":"0.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","react":"^18.3.1","vitest":"^4.1.4","happy-dom":"^20.8.9","react-dom":"^18.3.1","release-it":"^19.2.4","typescript":"^5.5.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@vitest/coverage-v8":"^4.1.4","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.3.2","@release-it/conventional-changelog":"^10.0.6"},"peerDependencies":{"react":">=18"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/fluxion-render_0.8.1_1779157293787_0.7922660518002265","host":"s3://npm-registry-packages-npm-production"}},"0.8.2":{"name":"@heojeongbo/fluxion-render","version":"0.8.2","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"url":"https://github.com/HeoJeongBo","name":"heojeongbo","email":"heojungbo@gmail.com"},"license":"MIT","_id":"@heojeongbo/fluxion-render@0.8.2","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"homepage":"https://github.com/HeoJeongBo/fluxion-render#readme","bugs":{"url":"https://github.com/HeoJeongBo/fluxion-render/issues"},"dist":{"shasum":"0281b76d637e2ef432b7562e55bc7905812cb44a","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-0.8.2.tgz","fileCount":16,"integrity":"sha512-qlobH03MhquMYYkoZIJVRwav/PURWJf743kxcM6e6CWknI9VBLDkIYr7X2vO2kPcLK2+gjAE6dTcl73kyr0e/w==","signatures":[{"sig":"MEYCIQD4lYS/7ZeHUJnJuFoMmNS0WTyLKbw05DgydFf7ImpU4QIhALQgPJg36gbW1c89zExO2sYG7KCB/saWYbZs7HJrJdpR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":641703},"main":"./dist/index.js","type":"module","_from":"file:heojeongbo-fluxion-render-0.8.2.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","release":"release-it","typecheck":"tsc --noEmit","test:watch":"vitest","release:dry":"release-it --dry-run","release:major":"release-it major","release:minor":"release-it minor","release:patch":"release-it patch"},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"_resolved":"/private/var/folders/bk/pnm1xqz17gz0dfh_gp638hh80000gn/T/8eddcb8e02d23a77db6d84bd9f6ba3ab/heojeongbo-fluxion-render-0.8.2.tgz","_integrity":"sha512-qlobH03MhquMYYkoZIJVRwav/PURWJf743kxcM6e6CWknI9VBLDkIYr7X2vO2kPcLK2+gjAE6dTcl73kyr0e/w==","repository":{"url":"git+https://github.com/HeoJeongBo/fluxion-render.git","type":"git","directory":"packages/fluxion-render"},"_npmVersion":"11.6.2","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","dependencies":{"@heojeongbo/fluxion-worker":"0.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","react":"^18.3.1","vitest":"^4.1.4","happy-dom":"^20.8.9","react-dom":"^18.3.1","release-it":"^19.2.4","typescript":"^5.5.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@vitest/coverage-v8":"^4.1.4","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.3.2","@release-it/conventional-changelog":"^10.0.6"},"peerDependencies":{"react":">=18"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/fluxion-render_0.8.2_1779178899399_0.8430512306955149","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@heojeongbo/fluxion-render","version":"0.9.0","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"url":"https://github.com/HeoJeongBo","name":"heojeongbo","email":"heojungbo@gmail.com"},"license":"MIT","_id":"@heojeongbo/fluxion-render@0.9.0","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"homepage":"https://github.com/HeoJeongBo/fluxion-render#readme","bugs":{"url":"https://github.com/HeoJeongBo/fluxion-render/issues"},"dist":{"shasum":"caa48772dab3c5cf1957b1815b529073099d2df2","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-0.9.0.tgz","fileCount":16,"integrity":"sha512-RTAwGboqknvV0gg8vb3Pmg/0wZys4tRzd2xOIJUNPiD7uZ5IrNaJtX+YPA3ChvGEtQlkW79WgX0nkijA8xfODg==","signatures":[{"sig":"MEUCIAUcASJa1enajJyF+pCA75M6fZx12Z+HFoEv2sgsJni6AiEA4DHAC2IPxV1QAQI88gp0ORmAfV6nvd4uVMipkDaEfRQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":650535},"main":"./dist/index.js","type":"module","_from":"file:heojeongbo-fluxion-render-0.9.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","release":"release-it","typecheck":"tsc --noEmit","test:watch":"vitest","release:dry":"release-it --dry-run","release:major":"release-it major","release:minor":"release-it minor","release:patch":"release-it patch"},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"_resolved":"/private/var/folders/p9/5qtvjw911xv03sg7ygrhx94w0000gn/T/7d6905a99b514433e92835b5b5d6e88d/heojeongbo-fluxion-render-0.9.0.tgz","_integrity":"sha512-RTAwGboqknvV0gg8vb3Pmg/0wZys4tRzd2xOIJUNPiD7uZ5IrNaJtX+YPA3ChvGEtQlkW79WgX0nkijA8xfODg==","repository":{"url":"git+https://github.com/HeoJeongBo/fluxion-render.git","type":"git","directory":"packages/fluxion-render"},"_npmVersion":"10.9.2","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","directories":{},"sideEffects":false,"_nodeVersion":"22.14.0","dependencies":{"@heojeongbo/fluxion-worker":"0.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","react":"^18.3.1","vitest":"^4.1.4","happy-dom":"^20.8.9","react-dom":"^18.3.1","release-it":"^19.2.4","typescript":"^5.5.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@vitest/coverage-v8":"^4.1.4","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.3.2","@release-it/conventional-changelog":"^10.0.6"},"peerDependencies":{"react":">=18"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/fluxion-render_0.9.0_1779642928001_0.20272219549626946","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"@heojeongbo/fluxion-render","version":"0.10.0","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"url":"https://github.com/HeoJeongBo","name":"heojeongbo","email":"heojungbo@gmail.com"},"license":"MIT","_id":"@heojeongbo/fluxion-render@0.10.0","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"homepage":"https://github.com/HeoJeongBo/fluxion-render#readme","bugs":{"url":"https://github.com/HeoJeongBo/fluxion-render/issues"},"dist":{"shasum":"3faabc3a52f1911d0fb9562b0e96deb261118e9d","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-0.10.0.tgz","fileCount":19,"integrity":"sha512-2QIHhUofwM5LFu4+sK0fQPf6Lo4JIajLGkum7xPk6YCkHyrBb31Y4hsTRcGOdR0SZtwIm2MRGJhOkNhoMIBAXw==","signatures":[{"sig":"MEUCIAK1BwADDwP+qImOMCaQ63qf5Q+ywHAEwJlNozvxk19uAiEA21655FWm0HGRZxkm0gDJS0Z20wx5Pe8y1Gew0DnO/pI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":672902},"main":"./dist/index.js","type":"module","_from":"file:heojeongbo-fluxion-render-0.10.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","release":"release-it","typecheck":"tsc --noEmit","test:watch":"vitest","release:dry":"release-it --dry-run","release:major":"release-it major","release:minor":"release-it minor","release:patch":"release-it patch"},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"_resolved":"/private/var/folders/p9/5qtvjw911xv03sg7ygrhx94w0000gn/T/c4115683d89e7638539e0e7dbc70cb4e/heojeongbo-fluxion-render-0.10.0.tgz","_integrity":"sha512-2QIHhUofwM5LFu4+sK0fQPf6Lo4JIajLGkum7xPk6YCkHyrBb31Y4hsTRcGOdR0SZtwIm2MRGJhOkNhoMIBAXw==","repository":{"url":"git+https://github.com/HeoJeongBo/fluxion-render.git","type":"git","directory":"packages/fluxion-render"},"_npmVersion":"10.9.2","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","directories":{},"sideEffects":false,"_nodeVersion":"22.14.0","dependencies":{"@heojeongbo/fluxion-worker":"0.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","react":"^18.3.1","vitest":"^4.1.4","happy-dom":"^20.8.9","react-dom":"^18.3.1","release-it":"^19.2.4","typescript":"^5.5.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@vitest/coverage-v8":"^4.1.4","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.3.2","@release-it/conventional-changelog":"^10.0.6"},"peerDependencies":{"react":">=18"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/fluxion-render_0.10.0_1779651608456_0.5790301627463659","host":"s3://npm-registry-packages-npm-production"}},"0.10.1":{"name":"@heojeongbo/fluxion-render","version":"0.10.1","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"url":"https://github.com/HeoJeongBo","name":"heojeongbo","email":"heojungbo@gmail.com"},"license":"MIT","_id":"@heojeongbo/fluxion-render@0.10.1","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"homepage":"https://github.com/HeoJeongBo/fluxion-render#readme","bugs":{"url":"https://github.com/HeoJeongBo/fluxion-render/issues"},"dist":{"shasum":"9f7a0039b4dedc2975d027c9dc4d466a3634de0d","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-0.10.1.tgz","fileCount":19,"integrity":"sha512-SNf2GYMj/Yu62xxKffxQuCnnB5nPnhKZsn5JVJ7SaJlmO1Ct0i/Vz6cDCHlbPFTARkX0Oxew8Bp7Is4zk+2rqA==","signatures":[{"sig":"MEYCIQCiEH0HxlqxYLib/HX3zOB27QPgZyGoTKHbZzR3ST4PdAIhAMeW3xM9NZLtw/Pty18/382dOsQtGOcM5Te3E0QLtUt3","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":672924},"main":"./dist/index.js","type":"module","_from":"file:heojeongbo-fluxion-render-0.10.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","release":"release-it","typecheck":"tsc --noEmit","test:watch":"vitest","release:dry":"release-it --dry-run","release:major":"release-it major","release:minor":"release-it minor","release:patch":"release-it patch"},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"_resolved":"/private/var/folders/bk/pnm1xqz17gz0dfh_gp638hh80000gn/T/ab42c8c1279805b4561558b1edef2d16/heojeongbo-fluxion-render-0.10.1.tgz","_integrity":"sha512-SNf2GYMj/Yu62xxKffxQuCnnB5nPnhKZsn5JVJ7SaJlmO1Ct0i/Vz6cDCHlbPFTARkX0Oxew8Bp7Is4zk+2rqA==","repository":{"url":"git+https://github.com/HeoJeongBo/fluxion-render.git","type":"git","directory":"packages/fluxion-render"},"_npmVersion":"11.6.2","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","dependencies":{"@heojeongbo/fluxion-worker":"0.3.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","react":"^18.3.1","vitest":"^4.1.4","happy-dom":"^20.8.9","react-dom":"^18.3.1","release-it":"^19.2.4","typescript":"^5.5.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@vitest/coverage-v8":"^4.1.4","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.3.2","@release-it/conventional-changelog":"^10.0.6"},"peerDependencies":{"react":">=18"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/fluxion-render_0.10.1_1780280808009_0.3561153432371871","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"@heojeongbo/fluxion-render","version":"0.11.0","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"url":"https://github.com/HeoJeongBo","name":"heojeongbo","email":"heojungbo@gmail.com"},"license":"MIT","_id":"@heojeongbo/fluxion-render@0.11.0","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"homepage":"https://github.com/HeoJeongBo/fluxion-render#readme","bugs":{"url":"https://github.com/HeoJeongBo/fluxion-render/issues"},"dist":{"shasum":"74772d25fdf3c6ad704f56fb5e45d0db7733bfa6","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-0.11.0.tgz","fileCount":25,"integrity":"sha512-HvYo3ujTaErNNfVvNHCQL6HTF6pbV1gJXib8V02qdkg454lvh51EwoMWVu+Tg/rPEwtTeI0hYqLjbOTPCzsyPw==","signatures":[{"sig":"MEQCIHyhiLHvTp0Gom8cD1RNOC7TIZrrFsCECsvygxl/0b++AiBfNeOpd5mPSyJKN/KlRy1uEL/ZwZW3b4am5u5SUPgz2g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":685920},"main":"./dist/index.js","type":"module","_from":"file:heojeongbo-fluxion-render-0.11.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","release":"release-it","typecheck":"tsc --noEmit","test:watch":"vitest","release:dry":"release-it --dry-run","release:major":"release-it major","release:minor":"release-it minor","release:patch":"release-it patch"},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"_resolved":"/private/var/folders/bk/pnm1xqz17gz0dfh_gp638hh80000gn/T/ea29d5d7904b6100c695e2542e5a0827/heojeongbo-fluxion-render-0.11.0.tgz","_integrity":"sha512-HvYo3ujTaErNNfVvNHCQL6HTF6pbV1gJXib8V02qdkg454lvh51EwoMWVu+Tg/rPEwtTeI0hYqLjbOTPCzsyPw==","repository":{"url":"git+https://github.com/HeoJeongBo/fluxion-render.git","type":"git","directory":"packages/fluxion-render"},"_npmVersion":"11.6.2","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","dependencies":{"@heojeongbo/fluxion-worker":"0.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","react":"^18.3.1","vitest":"^4.1.4","happy-dom":"^20.8.9","react-dom":"^18.3.1","release-it":"^19.2.4","typescript":"^5.5.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@vitest/coverage-v8":"^4.1.4","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.3.2","@release-it/conventional-changelog":"^10.0.6"},"peerDependencies":{"react":">=18"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/fluxion-render_0.11.0_1780298860853_0.19889309956888446","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"@heojeongbo/fluxion-render","version":"0.12.0","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"url":"https://github.com/HeoJeongBo","name":"heojeongbo","email":"heojungbo@gmail.com"},"license":"MIT","_id":"@heojeongbo/fluxion-render@0.12.0","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"homepage":"https://github.com/HeoJeongBo/fluxion-render#readme","bugs":{"url":"https://github.com/HeoJeongBo/fluxion-render/issues"},"dist":{"shasum":"23f96230fbad6f71accccb3825851e1c1d60c5f3","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-0.12.0.tgz","fileCount":25,"integrity":"sha512-WLVus/kwHkxv8QCn1g2sj1bjmFGE3B4XCtPeL1ovwy95w60McQMwvCwpnJa/4Bmzn/zv1YmcX4F6iu7mMuFRNw==","signatures":[{"sig":"MEUCIFmLzTUUNqE75lXe9xwWddd7UYRT7vd9snK3YoduAb63AiEA5Xd/+nJy/QrOQZ6CJpZNOefoI/JZ8fTqomebbGOLeM8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":698098},"main":"./dist/index.js","type":"module","_from":"file:heojeongbo-fluxion-render-0.12.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","release":"release-it","typecheck":"tsc --noEmit","test:watch":"vitest","release:dry":"release-it --dry-run","release:major":"release-it major","release:minor":"release-it minor","release:patch":"release-it patch"},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"_resolved":"/private/var/folders/bk/pnm1xqz17gz0dfh_gp638hh80000gn/T/a1d2b4cfa0836e1201c0d50a8ef01cd4/heojeongbo-fluxion-render-0.12.0.tgz","_integrity":"sha512-WLVus/kwHkxv8QCn1g2sj1bjmFGE3B4XCtPeL1ovwy95w60McQMwvCwpnJa/4Bmzn/zv1YmcX4F6iu7mMuFRNw==","repository":{"url":"git+https://github.com/HeoJeongBo/fluxion-render.git","type":"git","directory":"packages/fluxion-render"},"_npmVersion":"11.6.2","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","dependencies":{"@heojeongbo/fluxion-worker":"0.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","react":"^18.3.1","vitest":"^4.1.4","happy-dom":"^20.8.9","react-dom":"^18.3.1","release-it":"^19.2.4","typescript":"^5.5.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@vitest/coverage-v8":"^4.1.4","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.3.2","@release-it/conventional-changelog":"^10.0.6"},"peerDependencies":{"react":">=18"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/fluxion-render_0.12.0_1780303284667_0.2473607971338554","host":"s3://npm-registry-packages-npm-production"}},"0.12.1":{"name":"@heojeongbo/fluxion-render","version":"0.12.1","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"url":"https://github.com/HeoJeongBo","name":"heojeongbo","email":"heojungbo@gmail.com"},"license":"MIT","_id":"@heojeongbo/fluxion-render@0.12.1","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"homepage":"https://github.com/HeoJeongBo/fluxion-render#readme","bugs":{"url":"https://github.com/HeoJeongBo/fluxion-render/issues"},"dist":{"shasum":"eb99fe5b283c1d42997c8de8ddb977031f17656c","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-0.12.1.tgz","fileCount":25,"integrity":"sha512-XS/pFbRKVT7PkHdm08fEzHD2xk9S428341vAFpFymh7FVl+fuL99HVPT6N3pC6+VJoTKb/Ftd0gJXDC401KyCg==","signatures":[{"sig":"MEUCIQCPMrw9r1gNUZ170XtZqIiUIx/8AoUTqi71NlpQdKgUewIgLcdloRL/nfw/Bv4E7qnAoc7btBL86y8LftlSP1WuE10=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":701974},"main":"./dist/index.js","type":"module","_from":"file:heojeongbo-fluxion-render-0.12.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","release":"release-it","typecheck":"tsc --noEmit","test:watch":"vitest","release:dry":"release-it --dry-run","release:major":"release-it major","release:minor":"release-it minor","release:patch":"release-it patch"},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"_resolved":"/private/var/folders/bk/pnm1xqz17gz0dfh_gp638hh80000gn/T/0f3bdeb6e84c200dfc5855481028b03d/heojeongbo-fluxion-render-0.12.1.tgz","_integrity":"sha512-XS/pFbRKVT7PkHdm08fEzHD2xk9S428341vAFpFymh7FVl+fuL99HVPT6N3pC6+VJoTKb/Ftd0gJXDC401KyCg==","repository":{"url":"git+https://github.com/HeoJeongBo/fluxion-render.git","type":"git","directory":"packages/fluxion-render"},"_npmVersion":"11.6.2","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","dependencies":{"@heojeongbo/fluxion-worker":"0.5.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","react":"^18.3.1","vitest":"^4.1.4","happy-dom":"^20.8.9","react-dom":"^18.3.1","release-it":"^19.2.4","typescript":"^5.5.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@vitest/coverage-v8":"^4.1.4","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.3.2","@release-it/conventional-changelog":"^10.0.6"},"peerDependencies":{"react":">=18"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/fluxion-render_0.12.1_1780303640409_0.006962570794353473","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"@heojeongbo/fluxion-render","version":"0.13.0","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"url":"https://github.com/HeoJeongBo","name":"heojeongbo","email":"heojungbo@gmail.com"},"license":"MIT","_id":"@heojeongbo/fluxion-render@0.13.0","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"homepage":"https://github.com/HeoJeongBo/fluxion-render#readme","bugs":{"url":"https://github.com/HeoJeongBo/fluxion-render/issues"},"dist":{"shasum":"e4f7e6dd9bc72a0363aaee0f4303fa1655315c94","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-0.13.0.tgz","fileCount":25,"integrity":"sha512-zr57nitZdC7sPRnZSESFIM/YHkq+N0DL1edQgNoJGrFll3c2dDmchlJcLt+n0kplt2vm5JS6tRaJF4Mt9Drzzg==","signatures":[{"sig":"MEQCIBfRXwEu65n7w1uf6+HZrmqseAnJNkqSdk/vb/vht6YzAiBe6kTWVN+irW3QdhWXgR4uzyMELBaFsfh9jBVOiZUBow==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":708339},"main":"./dist/index.js","type":"module","_from":"file:heojeongbo-fluxion-render-0.13.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","release":"release-it","typecheck":"tsc --noEmit","test:watch":"vitest","release:dry":"release-it --dry-run","release:major":"release-it major","release:minor":"release-it minor","release:patch":"release-it patch"},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"_resolved":"/private/var/folders/bk/pnm1xqz17gz0dfh_gp638hh80000gn/T/bfceff83c9762c5bdb30ce25011bef64/heojeongbo-fluxion-render-0.13.0.tgz","_integrity":"sha512-zr57nitZdC7sPRnZSESFIM/YHkq+N0DL1edQgNoJGrFll3c2dDmchlJcLt+n0kplt2vm5JS6tRaJF4Mt9Drzzg==","repository":{"url":"git+https://github.com/HeoJeongBo/fluxion-render.git","type":"git","directory":"packages/fluxion-render"},"_npmVersion":"11.6.2","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","dependencies":{"@heojeongbo/fluxion-worker":"0.5.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","react":"^18.3.1","vitest":"^4.1.4","happy-dom":"^20.8.9","react-dom":"^18.3.1","release-it":"^19.2.4","typescript":"^5.5.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@vitest/coverage-v8":"^4.1.4","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.3.2","@release-it/conventional-changelog":"^10.0.6"},"peerDependencies":{"react":">=18"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/fluxion-render_0.13.0_1780312699959_0.43092649799526384","host":"s3://npm-registry-packages-npm-production"}},"0.14.0":{"name":"@heojeongbo/fluxion-render","version":"0.14.0","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"url":"https://github.com/HeoJeongBo","name":"heojeongbo","email":"heojungbo@gmail.com"},"license":"MIT","_id":"@heojeongbo/fluxion-render@0.14.0","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"homepage":"https://github.com/HeoJeongBo/fluxion-render#readme","bugs":{"url":"https://github.com/HeoJeongBo/fluxion-render/issues"},"dist":{"shasum":"b55f43fef930dc089e9c95b64e3436ff69a3bddf","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-0.14.0.tgz","fileCount":25,"integrity":"sha512-yrNq2KuF6YcizsgTEMx0QQ+my0aT/rb/4t76uHh2phSlm69Q8UlUInQJCjuwEQ6A4Juk2Z3L4C1V3UGLEvT2FA==","signatures":[{"sig":"MEUCIHrXj0/nHGLBB+OXalPyq4iIa+gkm5P4XYN+082IDPdaAiEA9WjEZxLvXxZU1suD5+/7dycQ8+YGv/JJkpQ+9Myr0Jg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":709812},"main":"./dist/index.js","type":"module","_from":"file:heojeongbo-fluxion-render-0.14.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","release":"release-it","typecheck":"tsc --noEmit","test:watch":"vitest","release:dry":"release-it --dry-run","release:major":"release-it major","release:minor":"release-it minor","release:patch":"release-it patch"},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"_resolved":"/private/var/folders/bk/pnm1xqz17gz0dfh_gp638hh80000gn/T/00a8cdb0db2bc7ee0848b7341687b879/heojeongbo-fluxion-render-0.14.0.tgz","_integrity":"sha512-yrNq2KuF6YcizsgTEMx0QQ+my0aT/rb/4t76uHh2phSlm69Q8UlUInQJCjuwEQ6A4Juk2Z3L4C1V3UGLEvT2FA==","repository":{"url":"git+https://github.com/HeoJeongBo/fluxion-render.git","type":"git","directory":"packages/fluxion-render"},"_npmVersion":"11.6.2","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","dependencies":{"@heojeongbo/fluxion-worker":"0.5.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","react":"^18.3.1","vitest":"^4.1.4","happy-dom":"^20.8.9","react-dom":"^18.3.1","release-it":"^19.2.4","typescript":"^5.5.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@vitest/coverage-v8":"^4.1.4","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.3.2","@release-it/conventional-changelog":"^10.0.6"},"peerDependencies":{"react":">=18"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/fluxion-render_0.14.0_1780319378076_0.7940023065059225","host":"s3://npm-registry-packages-npm-production"}},"0.15.0":{"name":"@heojeongbo/fluxion-render","version":"0.15.0","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"url":"https://github.com/HeoJeongBo","name":"heojeongbo","email":"heojungbo@gmail.com"},"license":"MIT","_id":"@heojeongbo/fluxion-render@0.15.0","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"homepage":"https://github.com/HeoJeongBo/fluxion-render#readme","bugs":{"url":"https://github.com/HeoJeongBo/fluxion-render/issues"},"dist":{"shasum":"459bd073d894814e35a0e787a1db96907dc352ce","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-0.15.0.tgz","fileCount":25,"integrity":"sha512-aUDIPpIdCaWLSt71K6ntHBFvbOhMXmlduKBqgGVguC35JqAS8VSoS+boG37w3IN8LWfN6Mx8BJI2OuThyfj3gw==","signatures":[{"sig":"MEUCIQCEu4edGz7snwK/OXDKeZQmpsc1HbYbHGcY2Vtwy771jwIgEqLqp8ZL6oWiqhlDxNyzIr2zJsYLgq7hegok2vegwOI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":709898},"main":"./dist/index.js","type":"module","_from":"file:heojeongbo-fluxion-render-0.15.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","release":"release-it","typecheck":"tsc --noEmit","test:watch":"vitest","release:dry":"release-it --dry-run","release:major":"release-it major","release:minor":"release-it minor","release:patch":"release-it patch"},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"_resolved":"/private/tmp/claude-501/6956c20f6187e343a45dd21e3955a5c2/heojeongbo-fluxion-render-0.15.0.tgz","_integrity":"sha512-aUDIPpIdCaWLSt71K6ntHBFvbOhMXmlduKBqgGVguC35JqAS8VSoS+boG37w3IN8LWfN6Mx8BJI2OuThyfj3gw==","repository":{"url":"git+https://github.com/HeoJeongBo/fluxion-render.git","type":"git","directory":"packages/fluxion-render"},"_npmVersion":"11.6.2","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","react":"^18.3.1","vitest":"^4.1.4","happy-dom":"^20.8.9","react-dom":"^18.3.1","release-it":"^19.2.4","typescript":"^5.5.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@vitest/coverage-v8":"^4.1.4","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.3.2","@heojeongbo/fluxion-worker":"0.5.1","@release-it/conventional-changelog":"^10.0.6"},"peerDependencies":{"react":">=18","@heojeongbo/fluxion-worker":"^0.5.0"},"peerDependenciesMeta":{"react":{"optional":true},"@heojeongbo/fluxion-worker":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/fluxion-render_0.15.0_1780544167098_0.8131461761048036","host":"s3://npm-registry-packages-npm-production"}},"0.16.0":{"name":"@heojeongbo/fluxion-render","version":"0.16.0","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"url":"https://github.com/HeoJeongBo","name":"heojeongbo","email":"heojungbo@gmail.com"},"license":"MIT","_id":"@heojeongbo/fluxion-render@0.16.0","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"homepage":"https://github.com/HeoJeongBo/fluxion-render#readme","bugs":{"url":"https://github.com/HeoJeongBo/fluxion-render/issues"},"dist":{"shasum":"cd75da50647dbd29b4983e754a6dd3a31e6324a1","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-0.16.0.tgz","fileCount":25,"integrity":"sha512-Uiw/3Tjx9ta+KeFRY9tQ8c7MaPM/Wp9SaOgvjas+Q+iMpQ5ouR6TeR6wlgXGC+pBB20kxYkB9fOkiFkI5QlCrA==","signatures":[{"sig":"MEYCIQCpEKGBLfpvrjheYlIir6lIBYPi8lWaPYPYcQvN8VR3RQIhAMqzYs6ruAY+q7ku4RzTNVgcfniWHhk//HbO629E+5da","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":716306},"main":"./dist/index.js","type":"module","_from":"file:heojeongbo-fluxion-render-0.16.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","release":"release-it","typecheck":"tsc --noEmit","test:watch":"vitest","release:dry":"release-it --dry-run","release:major":"release-it major","release:minor":"release-it minor","release:patch":"release-it patch"},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"_resolved":"/private/tmp/claude-501/abed08b5d187907e6c14a60cfea40188/heojeongbo-fluxion-render-0.16.0.tgz","_integrity":"sha512-Uiw/3Tjx9ta+KeFRY9tQ8c7MaPM/Wp9SaOgvjas+Q+iMpQ5ouR6TeR6wlgXGC+pBB20kxYkB9fOkiFkI5QlCrA==","repository":{"url":"git+https://github.com/HeoJeongBo/fluxion-render.git","type":"git","directory":"packages/fluxion-render"},"_npmVersion":"11.6.2","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","react":"^18.3.1","vitest":"^4.1.4","happy-dom":"^20.8.9","react-dom":"^18.3.1","release-it":"^19.2.4","typescript":"^5.5.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@vitest/coverage-v8":"^4.1.4","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.3.2","@heojeongbo/fluxion-worker":"0.5.1","@release-it/conventional-changelog":"^10.0.6"},"peerDependencies":{"react":">=18","@heojeongbo/fluxion-worker":"^0.5.0"},"peerDependenciesMeta":{"react":{"optional":true},"@heojeongbo/fluxion-worker":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/fluxion-render_0.16.0_1780660785323_0.7983835498983267","host":"s3://npm-registry-packages-npm-production"}},"0.17.0":{"name":"@heojeongbo/fluxion-render","version":"0.17.0","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"url":"https://github.com/HeoJeongBo","name":"heojeongbo","email":"heojungbo@gmail.com"},"license":"MIT","_id":"@heojeongbo/fluxion-render@0.17.0","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"homepage":"https://github.com/HeoJeongBo/fluxion-render#readme","bugs":{"url":"https://github.com/HeoJeongBo/fluxion-render/issues"},"dist":{"shasum":"9fc48238d316b29e72d78fe0fcc6576982dba9a8","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-0.17.0.tgz","fileCount":25,"integrity":"sha512-gyavV8IiZWlJq5sqOT+kIXAVTm01/QtNHzZ6lVgZsambC+3BKv53/zW9X5vxlTwkYbFoKWkqRhq03CU/4DsO7g==","signatures":[{"sig":"MEUCIERSZSRyxcRIGH3fimbPtktTWx7cClOb6hoAgGEbg0qSAiEAjkBE4zqoqE95GHsP0XO5Rr+nPB/WkxOYlhQhUGKKnrk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":722851},"main":"./dist/index.js","type":"module","_from":"file:heojeongbo-fluxion-render-0.17.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","release":"release-it","typecheck":"tsc --noEmit","test:watch":"vitest","release:dry":"release-it --dry-run","release:major":"release-it major","release:minor":"release-it minor","release:patch":"release-it patch"},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"_resolved":"/private/var/folders/bk/pnm1xqz17gz0dfh_gp638hh80000gn/T/8b27d48e112fbf92bb8eba1332757fcb/heojeongbo-fluxion-render-0.17.0.tgz","_integrity":"sha512-gyavV8IiZWlJq5sqOT+kIXAVTm01/QtNHzZ6lVgZsambC+3BKv53/zW9X5vxlTwkYbFoKWkqRhq03CU/4DsO7g==","repository":{"url":"git+https://github.com/HeoJeongBo/fluxion-render.git","type":"git","directory":"packages/fluxion-render"},"_npmVersion":"11.6.2","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","react":"^18.3.1","vitest":"^4.1.4","happy-dom":"^20.8.9","react-dom":"^18.3.1","release-it":"^19.2.4","typescript":"^5.5.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@vitest/coverage-v8":"^4.1.4","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.3.2","@heojeongbo/fluxion-worker":"0.5.1","@release-it/conventional-changelog":"^10.0.6"},"peerDependencies":{"react":">=18","@heojeongbo/fluxion-worker":"^0.5.0"},"peerDependenciesMeta":{"react":{"optional":true},"@heojeongbo/fluxion-worker":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/fluxion-render_0.17.0_1781242125295_0.286397765983204","host":"s3://npm-registry-packages-npm-production"}},"0.17.1":{"name":"@heojeongbo/fluxion-render","version":"0.17.1","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"url":"https://github.com/HeoJeongBo","name":"heojeongbo","email":"heojungbo@gmail.com"},"license":"MIT","_id":"@heojeongbo/fluxion-render@0.17.1","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"homepage":"https://github.com/HeoJeongBo/fluxion-render#readme","bugs":{"url":"https://github.com/HeoJeongBo/fluxion-render/issues"},"dist":{"shasum":"8cd6be02958576462f20dffb6007d407c0ad2d89","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-0.17.1.tgz","fileCount":25,"integrity":"sha512-S8AOTld4Mowimha0l0nlscPaLTafMZrv2aO3tWObkxphDB7UggnKm20QMYJ5tTPSVeZkelRdBBPUhmcegyR/3w==","signatures":[{"sig":"MEUCIQDCnDR2ds9If5iNVPQSnPfvQs2r1fcAqppn3bFt0jNv0AIgVmZWPONIucd4rNN9r8m0VfO7qH4vR8r9ZhWCs3HGLRg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":722855},"main":"./dist/index.js","type":"module","_from":"file:heojeongbo-fluxion-render-0.17.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","release":"release-it","typecheck":"tsc --noEmit","test:watch":"vitest","release:dry":"release-it --dry-run","release:major":"release-it major","release:minor":"release-it minor","release:patch":"release-it patch"},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"_resolved":"/private/var/folders/bk/pnm1xqz17gz0dfh_gp638hh80000gn/T/95162b139a2846953528970651b5012d/heojeongbo-fluxion-render-0.17.1.tgz","_integrity":"sha512-S8AOTld4Mowimha0l0nlscPaLTafMZrv2aO3tWObkxphDB7UggnKm20QMYJ5tTPSVeZkelRdBBPUhmcegyR/3w==","repository":{"url":"git+https://github.com/HeoJeongBo/fluxion-render.git","type":"git","directory":"packages/fluxion-render"},"_npmVersion":"11.6.2","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","react":"^18.3.1","vitest":"^4.1.4","happy-dom":"^20.8.9","react-dom":"^18.3.1","release-it":"^19.2.4","typescript":"^5.5.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@vitest/coverage-v8":"^4.1.4","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.3.2","@heojeongbo/fluxion-worker":"0.5.1","@release-it/conventional-changelog":"^10.0.6"},"peerDependencies":{"react":">=18","@heojeongbo/fluxion-worker":">=0.5.0 <1"},"peerDependenciesMeta":{"react":{"optional":true},"@heojeongbo/fluxion-worker":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/fluxion-render_0.17.1_1781244355496_0.43749785782007744","host":"s3://npm-registry-packages-npm-production"}},"0.18.0":{"name":"@heojeongbo/fluxion-render","version":"0.18.0","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"url":"https://github.com/HeoJeongBo","name":"heojeongbo","email":"heojungbo@gmail.com"},"license":"MIT","_id":"@heojeongbo/fluxion-render@0.18.0","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"homepage":"https://github.com/HeoJeongBo/fluxion-render#readme","bugs":{"url":"https://github.com/HeoJeongBo/fluxion-render/issues"},"dist":{"shasum":"747620edf87fd36a56684ed88a90531c6d86f237","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-0.18.0.tgz","fileCount":27,"integrity":"sha512-8tevJoCuOs6wZU0JzeIa3W2qG2iAiYk3MsErPSQps0UYkwjeqpIPnsNwesxee+nKJvxD/G1s4D1QhVhVji0kHw==","signatures":[{"sig":"MEYCIQDuwkvCwV4bilNSXtlHdfuZkh9si4NB+2KQSzhGsjb3JAIhAJkmNopoK+3+pEj3K7S1C6akd1rXT5fpdgNNmj3ZVhQ5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1079837},"main":"./dist/index.js","type":"module","_from":"file:heojeongbo-fluxion-render-0.18.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","release":"release-it","typecheck":"tsc --noEmit","test:watch":"vitest","release:dry":"release-it --dry-run; s=$?; git checkout -- package.json; exit $s","release:major":"release-it major","release:minor":"release-it minor","release:patch":"release-it patch","release:major:dry":"release-it major --dry-run; s=$?; git checkout -- package.json; exit $s","release:minor:dry":"release-it minor --dry-run; s=$?; git checkout -- package.json; exit $s","release:patch:dry":"release-it patch --dry-run; s=$?; git checkout -- package.json; exit $s"},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"_resolved":"/private/var/folders/bk/pnm1xqz17gz0dfh_gp638hh80000gn/T/035c4b772dab1aa877d9caf326faa094/heojeongbo-fluxion-render-0.18.0.tgz","_integrity":"sha512-8tevJoCuOs6wZU0JzeIa3W2qG2iAiYk3MsErPSQps0UYkwjeqpIPnsNwesxee+nKJvxD/G1s4D1QhVhVji0kHw==","repository":{"url":"git+https://github.com/HeoJeongBo/fluxion-render.git","type":"git","directory":"packages/fluxion-render"},"_npmVersion":"11.6.2","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","react":"^18.3.1","vitest":"^4.1.4","happy-dom":"^20.8.9","react-dom":"^18.3.1","release-it":"^19.2.4","typescript":"^5.5.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@vitest/coverage-v8":"^4.1.4","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.3.2","@heojeongbo/fluxion-worker":"0.5.1","@release-it/conventional-changelog":"^10.0.6"},"peerDependencies":{"react":">=18","@heojeongbo/fluxion-worker":">=0.5.0 <1"},"peerDependenciesMeta":{"react":{"optional":true},"@heojeongbo/fluxion-worker":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/fluxion-render_0.18.0_1781854384864_0.5099459193556213","host":"s3://npm-registry-packages-npm-production"}},"0.19.0":{"name":"@heojeongbo/fluxion-render","version":"0.19.0","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"url":"https://github.com/HeoJeongBo","name":"heojeongbo","email":"heojungbo@gmail.com"},"license":"MIT","_id":"@heojeongbo/fluxion-render@0.19.0","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"homepage":"https://github.com/HeoJeongBo/fluxion-render#readme","bugs":{"url":"https://github.com/HeoJeongBo/fluxion-render/issues"},"dist":{"shasum":"62e47fba24a4f0e9b6e547f60d30c40dd91a5b92","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-0.19.0.tgz","fileCount":27,"integrity":"sha512-YCNyI0m35lpIpwi+qzYjEq9t9IGm2EHXp+13XKxWjJyhSwzqxpHHa8u0umNyFNlonzHvykjocZcgPtS06X8DQQ==","signatures":[{"sig":"MEQCIHanSLcWWKqHqrZCok3No/6WXsH5ThYpDgcwVEPCnbmfAiAXSFmVSwx37jFaCHzREO8pPZyPlHzdBB8rqISBwBNnKA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1141004},"main":"./dist/index.js","type":"module","_from":"file:heojeongbo-fluxion-render-0.19.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","release":"release-it","typecheck":"tsc --noEmit","test:watch":"vitest","release:dry":"release-it --dry-run; s=$?; git checkout -- package.json; exit $s","release:major":"release-it major","release:minor":"release-it minor","release:patch":"release-it patch","release:major:dry":"release-it major --dry-run; s=$?; git checkout -- package.json; exit $s","release:minor:dry":"release-it minor --dry-run; s=$?; git checkout -- package.json; exit $s","release:patch:dry":"release-it patch --dry-run; s=$?; git checkout -- package.json; exit $s"},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"_resolved":"/private/var/folders/bk/pnm1xqz17gz0dfh_gp638hh80000gn/T/0d2418e32065a30fc3122db2b48dd571/heojeongbo-fluxion-render-0.19.0.tgz","_integrity":"sha512-YCNyI0m35lpIpwi+qzYjEq9t9IGm2EHXp+13XKxWjJyhSwzqxpHHa8u0umNyFNlonzHvykjocZcgPtS06X8DQQ==","repository":{"url":"git+https://github.com/HeoJeongBo/fluxion-render.git","type":"git","directory":"packages/fluxion-render"},"_npmVersion":"11.6.2","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","react":"^18.3.1","vitest":"^4.1.4","happy-dom":"^20.8.9","react-dom":"^18.3.1","release-it":"^19.2.4","typescript":"^5.5.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@vitest/coverage-v8":"^4.1.4","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.3.2","@heojeongbo/fluxion-worker":"0.6.0","@release-it/conventional-changelog":"^10.0.6"},"peerDependencies":{"react":">=18","@heojeongbo/fluxion-worker":">=0.5.0 <1"},"peerDependenciesMeta":{"react":{"optional":true},"@heojeongbo/fluxion-worker":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/fluxion-render_0.19.0_1782366127687_0.9040172791104655","host":"s3://npm-registry-packages-npm-production"}},"0.19.1":{"name":"@heojeongbo/fluxion-render","version":"0.19.1","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"url":"https://github.com/HeoJeongBo","name":"heojeongbo","email":"heojungbo@gmail.com"},"license":"MIT","_id":"@heojeongbo/fluxion-render@0.19.1","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"homepage":"https://github.com/HeoJeongBo/fluxion-render#readme","bugs":{"url":"https://github.com/HeoJeongBo/fluxion-render/issues"},"dist":{"shasum":"52eba786a0c046a52574e35c01c3f4522a16a524","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-0.19.1.tgz","fileCount":27,"integrity":"sha512-XSZxM2qIfqxd6P127qwqA+2jlipyXLuNM3hld6kyEQMjbwDRItkdUPBEdxJetbnOY4ihrSqxedLBsqX6wwstkQ==","signatures":[{"sig":"MEQCIFACFFnj6HE9OG/9vIrD26mbI/cXgD9OTcq04wG+pGI7AiB6cxw15UqosxKZb7Ruk+vMCvtIv6k5gMNl+Y8ke9wdDA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1143303},"main":"./dist/index.js","type":"module","_from":"file:heojeongbo-fluxion-render-0.19.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","release":"release-it","typecheck":"tsc --noEmit","test:watch":"vitest","release:dry":"release-it --dry-run; s=$?; git checkout -- package.json; exit $s","release:major":"release-it major","release:minor":"release-it minor","release:patch":"release-it patch","release:major:dry":"release-it major --dry-run; s=$?; git checkout -- package.json; exit $s","release:minor:dry":"release-it minor --dry-run; s=$?; git checkout -- package.json; exit $s","release:patch:dry":"release-it patch --dry-run; s=$?; git checkout -- package.json; exit $s"},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"_resolved":"/private/var/folders/bk/pnm1xqz17gz0dfh_gp638hh80000gn/T/1561456043e6a967f3c2e82e2278d6a3/heojeongbo-fluxion-render-0.19.1.tgz","_integrity":"sha512-XSZxM2qIfqxd6P127qwqA+2jlipyXLuNM3hld6kyEQMjbwDRItkdUPBEdxJetbnOY4ihrSqxedLBsqX6wwstkQ==","repository":{"url":"git+https://github.com/HeoJeongBo/fluxion-render.git","type":"git","directory":"packages/fluxion-render"},"_npmVersion":"11.6.2","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","react":"^18.3.1","vitest":"^4.1.4","happy-dom":"^20.8.9","react-dom":"^18.3.1","release-it":"^19.2.4","typescript":"^5.5.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@vitest/coverage-v8":"^4.1.4","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.3.2","@heojeongbo/fluxion-worker":"0.6.0","@release-it/conventional-changelog":"^10.0.6"},"peerDependencies":{"react":">=18","@heojeongbo/fluxion-worker":">=0.5.0 <1"},"peerDependenciesMeta":{"react":{"optional":true},"@heojeongbo/fluxion-worker":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/fluxion-render_0.19.1_1782389429500_0.5574756866764365","host":"s3://npm-registry-packages-npm-production"}},"0.20.0":{"name":"@heojeongbo/fluxion-render","version":"0.20.0","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"url":"https://github.com/HeoJeongBo","name":"heojeongbo","email":"heojungbo@gmail.com"},"license":"MIT","_id":"@heojeongbo/fluxion-render@0.20.0","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"homepage":"https://github.com/HeoJeongBo/fluxion-render#readme","bugs":{"url":"https://github.com/HeoJeongBo/fluxion-render/issues"},"dist":{"shasum":"edcb0f2b03ecfba83fa975a55b97a3a305351a86","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-0.20.0.tgz","fileCount":27,"integrity":"sha512-ESXxrtg/Q0N9cJdWCCNee8WYjKvlR2ISWECtU5UNtLiyrUtRdqMa/4G+iLkhxLHnCLYcpNJbleQfY1tWQYsrHA==","signatures":[{"sig":"MEUCIQDLObvjUaPzR9f4Gsif/yjjXxpv28F2pwR2C9k8GrntegIgdD9D2ry3ngI4nOU+Urff5qyRt5FfUR5Dm0UxbB3Qeas=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1177758},"main":"./dist/index.js","type":"module","_from":"file:heojeongbo-fluxion-render-0.20.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","release":"release-it","typecheck":"tsc --noEmit","test:watch":"vitest","release:dry":"release-it --dry-run; s=$?; git checkout -- package.json; exit $s","release:major":"release-it major","release:minor":"release-it minor","release:patch":"release-it patch","release:major:dry":"release-it major --dry-run; s=$?; git checkout -- package.json; exit $s","release:minor:dry":"release-it minor --dry-run; s=$?; git checkout -- package.json; exit $s","release:patch:dry":"release-it patch --dry-run; s=$?; git checkout -- package.json; exit $s"},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"_resolved":"/private/var/folders/bk/pnm1xqz17gz0dfh_gp638hh80000gn/T/373ae1d2317d468adc6f27381397fee6/heojeongbo-fluxion-render-0.20.0.tgz","_integrity":"sha512-ESXxrtg/Q0N9cJdWCCNee8WYjKvlR2ISWECtU5UNtLiyrUtRdqMa/4G+iLkhxLHnCLYcpNJbleQfY1tWQYsrHA==","repository":{"url":"git+https://github.com/HeoJeongBo/fluxion-render.git","type":"git","directory":"packages/fluxion-render"},"_npmVersion":"11.6.2","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","react":"^18.3.1","vitest":"^4.1.4","happy-dom":"^20.8.9","react-dom":"^18.3.1","release-it":"^19.2.4","typescript":"^5.5.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@vitest/coverage-v8":"^4.1.4","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.3.2","@heojeongbo/fluxion-worker":"0.6.0","@release-it/conventional-changelog":"^10.0.6"},"peerDependencies":{"react":">=18","@heojeongbo/fluxion-worker":">=0.5.0 <1"},"peerDependenciesMeta":{"react":{"optional":true},"@heojeongbo/fluxion-worker":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/fluxion-render_0.20.0_1782454275710_0.7556795335162918","host":"s3://npm-registry-packages-npm-production"}},"0.21.0":{"name":"@heojeongbo/fluxion-render","version":"0.21.0","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"url":"https://github.com/HeoJeongBo","name":"heojeongbo","email":"heojungbo@gmail.com"},"license":"MIT","_id":"@heojeongbo/fluxion-render@0.21.0","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"homepage":"https://github.com/HeoJeongBo/fluxion-render#readme","bugs":{"url":"https://github.com/HeoJeongBo/fluxion-render/issues"},"dist":{"shasum":"62b675fecf9799093a4d01f33e023d2cb6e9c38e","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-0.21.0.tgz","fileCount":27,"integrity":"sha512-SNyPzO+xWQur0vCgolkOQlBNAhgupqlE+Uaxve1z9arMM6f+2nRFJ/RVP59ZkKz84y3E1lEdZPXRvbiiptKKaA==","signatures":[{"sig":"MEQCIFg7yMK2ADwb3osT7LIsIl2C2DlipYpHorCRb8+HnXDMAiAm3K3Q0cNg4qtQYc+kEF2PjsqFijRh1AwrDlPFpqFWmg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1195046},"main":"./dist/index.js","type":"module","_from":"file:heojeongbo-fluxion-render-0.21.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","release":"release-it","typecheck":"tsc --noEmit","test:watch":"vitest","release:dry":"release-it --dry-run; s=$?; git checkout -- package.json; exit $s","release:major":"release-it major","release:minor":"release-it minor","release:patch":"release-it patch","release:major:dry":"release-it major --dry-run; s=$?; git checkout -- package.json; exit $s","release:minor:dry":"release-it minor --dry-run; s=$?; git checkout -- package.json; exit $s","release:patch:dry":"release-it patch --dry-run; s=$?; git checkout -- package.json; exit $s"},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"_resolved":"/private/var/folders/bk/pnm1xqz17gz0dfh_gp638hh80000gn/T/9157bd1ad77ed816e1658b2ff3e477dd/heojeongbo-fluxion-render-0.21.0.tgz","_integrity":"sha512-SNyPzO+xWQur0vCgolkOQlBNAhgupqlE+Uaxve1z9arMM6f+2nRFJ/RVP59ZkKz84y3E1lEdZPXRvbiiptKKaA==","repository":{"url":"git+https://github.com/HeoJeongBo/fluxion-render.git","type":"git","directory":"packages/fluxion-render"},"_npmVersion":"11.6.2","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","react":"^18.3.1","vitest":"^4.1.4","happy-dom":"^20.8.9","react-dom":"^18.3.1","release-it":"^19.2.4","typescript":"^5.5.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@vitest/coverage-v8":"^4.1.4","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.3.2","@heojeongbo/fluxion-worker":"0.6.0","@release-it/conventional-changelog":"^10.0.6"},"peerDependencies":{"react":">=18","@heojeongbo/fluxion-worker":">=0.5.0 <1"},"peerDependenciesMeta":{"react":{"optional":true},"@heojeongbo/fluxion-worker":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/fluxion-render_0.21.0_1782461985594_0.9930157456904256","host":"s3://npm-registry-packages-npm-production"}},"0.22.0":{"name":"@heojeongbo/fluxion-render","version":"0.22.0","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"url":"https://github.com/HeoJeongBo","name":"heojeongbo","email":"heojungbo@gmail.com"},"license":"MIT","_id":"@heojeongbo/fluxion-render@0.22.0","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"homepage":"https://github.com/HeoJeongBo/fluxion-render#readme","bugs":{"url":"https://github.com/HeoJeongBo/fluxion-render/issues"},"dist":{"shasum":"ea14bc36259432b96b0ad655202bf17e6ede17cb","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-0.22.0.tgz","fileCount":31,"integrity":"sha512-S9mI90bepHng7nE3OvVplYLdWTAPXHKw/MNCFzQyYJGDLuWTgfmDNGYjrZqd5AFGHuG1+pgTilB53ukeUsKzBQ==","signatures":[{"sig":"MEQCIEDCL6kQBO+VobqXOgx3Rdh1p+U8IxwdWNVC0pYo773fAiB089db+/ZbocedpU50lf5MkuuC/yREvVLFhQf37iOAbQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1251074},"main":"./dist/index.js","type":"module","_from":"file:heojeongbo-fluxion-render-0.22.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18","pnpm":">=9"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","release":"release-it","typecheck":"tsc --noEmit","test:watch":"vitest","release:dry":"release-it --dry-run; s=$?; git checkout -- package.json; exit $s","release:major":"release-it major","release:minor":"release-it minor","release:patch":"release-it patch","release:major:dry":"release-it major --dry-run; s=$?; git checkout -- package.json; exit $s","release:minor:dry":"release-it minor --dry-run; s=$?; git checkout -- package.json; exit $s","release:patch:dry":"release-it patch --dry-run; s=$?; git checkout -- package.json; exit $s"},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"_resolved":"/private/var/folders/bk/pnm1xqz17gz0dfh_gp638hh80000gn/T/6086b2d40d02098d4691cfba891e67fb/heojeongbo-fluxion-render-0.22.0.tgz","_integrity":"sha512-S9mI90bepHng7nE3OvVplYLdWTAPXHKw/MNCFzQyYJGDLuWTgfmDNGYjrZqd5AFGHuG1+pgTilB53ukeUsKzBQ==","repository":{"url":"git+https://github.com/HeoJeongBo/fluxion-render.git","type":"git","directory":"packages/fluxion-render"},"_npmVersion":"11.6.2","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","react":"^18.3.1","vitest":"^4.1.4","happy-dom":"^20.8.9","react-dom":"^18.3.1","release-it":"^19.2.4","typescript":"^5.5.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@vitest/coverage-v8":"^4.1.4","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.3.2","@heojeongbo/fluxion-worker":"0.6.0","@release-it/conventional-changelog":"^10.0.6"},"peerDependencies":{"react":">=18","@heojeongbo/fluxion-worker":">=0.5.0 <1"},"peerDependenciesMeta":{"react":{"optional":true},"@heojeongbo/fluxion-worker":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/fluxion-render_0.22.0_1782560477461_0.028298680905096463","host":"s3://npm-registry-packages-npm-production"}},"0.23.0":{"name":"@heojeongbo/fluxion-render","version":"0.23.0","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"url":"https://github.com/HeoJeongBo","name":"heojeongbo","email":"heojungbo@gmail.com"},"license":"MIT","_id":"@heojeongbo/fluxion-render@0.23.0","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"homepage":"https://github.com/HeoJeongBo/fluxion-render#readme","bugs":{"url":"https://github.com/HeoJeongBo/fluxion-render/issues"},"dist":{"shasum":"db4cb29287b03b12cf9f0738bb76e081a10ddbca","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-0.23.0.tgz","fileCount":31,"integrity":"sha512-CW6Nz9AKG+oGWjqJ5DSI+7tyns4Tz2BgsmZxPDyNVPIdVWUND/3xpwNrhe94LEJWGHCaQuVB8dSSGj5HWNhFhg==","signatures":[{"sig":"MEQCIGXVGVKJJolHo+aEk7fpKxYCFfedlvJ4SqOO5gYpD5FMAiALnRCDxDnnZsF8AkwfGScyvQaFJHZNIFaNOkEvdgVGjg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1275174},"main":"./dist/index.js","type":"module","_from":"file:heojeongbo-fluxion-render-0.23.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18","pnpm":">=9"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","release":"release-it","typecheck":"tsc --noEmit","test:watch":"vitest","release:dry":"release-it --dry-run; s=$?; git checkout -- package.json; exit $s","release:major":"release-it major","release:minor":"release-it minor","release:patch":"release-it patch","release:major:dry":"release-it major --dry-run; s=$?; git checkout -- package.json; exit $s","release:minor:dry":"release-it minor --dry-run; s=$?; git checkout -- package.json; exit $s","release:patch:dry":"release-it patch --dry-run; s=$?; git checkout -- package.json; exit $s"},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"_resolved":"/private/var/folders/bk/pnm1xqz17gz0dfh_gp638hh80000gn/T/204697ec006bdb63205d6358950de774/heojeongbo-fluxion-render-0.23.0.tgz","_integrity":"sha512-CW6Nz9AKG+oGWjqJ5DSI+7tyns4Tz2BgsmZxPDyNVPIdVWUND/3xpwNrhe94LEJWGHCaQuVB8dSSGj5HWNhFhg==","repository":{"url":"git+https://github.com/HeoJeongBo/fluxion-render.git","type":"git","directory":"packages/fluxion-render"},"_npmVersion":"11.6.2","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","react":"^18.3.1","vitest":"^4.1.4","happy-dom":"^20.8.9","react-dom":"^18.3.1","release-it":"^19.2.4","typescript":"^5.5.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@vitest/coverage-v8":"^4.1.4","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.3.2","@heojeongbo/fluxion-worker":"0.6.0","@release-it/conventional-changelog":"^10.0.6"},"peerDependencies":{"react":">=18","@heojeongbo/fluxion-worker":">=0.5.0 <1"},"peerDependenciesMeta":{"react":{"optional":true},"@heojeongbo/fluxion-worker":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/fluxion-render_0.23.0_1782706071850_0.4000410592008976","host":"s3://npm-registry-packages-npm-production"}},"0.24.0":{"name":"@heojeongbo/fluxion-render","version":"0.24.0","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"url":"https://github.com/HeoJeongBo","name":"heojeongbo","email":"heojungbo@gmail.com"},"license":"MIT","_id":"@heojeongbo/fluxion-render@0.24.0","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"homepage":"https://github.com/HeoJeongBo/fluxion-render#readme","bugs":{"url":"https://github.com/HeoJeongBo/fluxion-render/issues"},"dist":{"shasum":"dc0b139abde86b4d94c6ab98c0d95145a646ce8a","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-0.24.0.tgz","fileCount":31,"integrity":"sha512-ah0xyrTtEGwuY3UhoRdxkJ1tGsHAD4rVT8cdgx3xOhqoJnsryapOoPgfwRs4mGB0nw7Qw/G2ul1hGzgceapqhA==","signatures":[{"sig":"MEYCIQCbGOuIG+1HL7mfa11zTRpEVFiWZ5VB5HEejhvCSObYbwIhAMatMRgh+evxeQRiXAs2vtFmqwP4dcJPEn5obRaaBHm8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1316630},"main":"./dist/index.js","type":"module","_from":"file:heojeongbo-fluxion-render-0.24.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18","pnpm":">=9"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","release":"release-it","typecheck":"tsc --noEmit","test:watch":"vitest","release:dry":"release-it --dry-run; s=$?; git checkout -- package.json; exit $s","release:major":"release-it major","release:minor":"release-it minor","release:patch":"release-it patch","release:major:dry":"release-it major --dry-run; s=$?; git checkout -- package.json; exit $s","release:minor:dry":"release-it minor --dry-run; s=$?; git checkout -- package.json; exit $s","release:patch:dry":"release-it patch --dry-run; s=$?; git checkout -- package.json; exit $s"},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"_resolved":"/private/var/folders/bk/pnm1xqz17gz0dfh_gp638hh80000gn/T/842a714367a2555b8ca0e8f560e97e0e/heojeongbo-fluxion-render-0.24.0.tgz","_integrity":"sha512-ah0xyrTtEGwuY3UhoRdxkJ1tGsHAD4rVT8cdgx3xOhqoJnsryapOoPgfwRs4mGB0nw7Qw/G2ul1hGzgceapqhA==","repository":{"url":"git+https://github.com/HeoJeongBo/fluxion-render.git","type":"git","directory":"packages/fluxion-render"},"_npmVersion":"11.6.2","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","react":"^18.3.1","vitest":"^4.1.4","happy-dom":"^20.8.9","react-dom":"^18.3.1","release-it":"^19.2.4","typescript":"^5.5.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@vitest/coverage-v8":"^4.1.4","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.3.2","@heojeongbo/fluxion-worker":"0.6.0","@release-it/conventional-changelog":"^10.0.6"},"peerDependencies":{"react":">=18","@heojeongbo/fluxion-worker":">=0.5.0 <1"},"peerDependenciesMeta":{"react":{"optional":true},"@heojeongbo/fluxion-worker":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/fluxion-render_0.24.0_1783313361555_0.2454205665236362","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@heojeongbo/fluxion-render","version":"1.0.0","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"url":"https://github.com/HeoJeongBo","name":"heojeongbo","email":"heojungbo@gmail.com"},"license":"MIT","_id":"@heojeongbo/fluxion-render@1.0.0","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"homepage":"https://github.com/HeoJeongBo/fluxion-render#readme","bugs":{"url":"https://github.com/HeoJeongBo/fluxion-render/issues"},"dist":{"shasum":"92bc81fc60fe8c28d84135bb199637f31452d442","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-1.0.0.tgz","fileCount":31,"integrity":"sha512-hQtZSnXFn6s7GhMWUPEbSMa4/o+MAIGupOo8mkzZoAb9bGv1NayNJLyIcxyB/9XKTGdqcxNl+9DZXY+q8eKoXQ==","signatures":[{"sig":"MEQCIFPpHnGHyuh6kdp7KPpBf9aQvA0aP8ssw83ZuGwZRFtWAiAvPii7WRWyoWwHtgLl7YGNeYQxavKAOWPuJBod2B/ekQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1324226},"main":"./dist/index.js","type":"module","_from":"file:heojeongbo-fluxion-render-1.0.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18","pnpm":">=9"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","release":"release-it","typecheck":"tsc --noEmit","test:watch":"vitest","release:dry":"release-it --dry-run; s=$?; git checkout -- package.json; exit $s","release:major":"release-it major","release:minor":"release-it minor","release:patch":"release-it patch","release:major:dry":"release-it major --dry-run; s=$?; git checkout -- package.json; exit $s","release:minor:dry":"release-it minor --dry-run; s=$?; git checkout -- package.json; exit $s","release:patch:dry":"release-it patch --dry-run; s=$?; git checkout -- package.json; exit $s"},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"_resolved":"/private/var/folders/bk/pnm1xqz17gz0dfh_gp638hh80000gn/T/7ca2bff173c464b26cfa42e7ad878613/heojeongbo-fluxion-render-1.0.0.tgz","_integrity":"sha512-hQtZSnXFn6s7GhMWUPEbSMa4/o+MAIGupOo8mkzZoAb9bGv1NayNJLyIcxyB/9XKTGdqcxNl+9DZXY+q8eKoXQ==","repository":{"url":"git+https://github.com/HeoJeongBo/fluxion-render.git","type":"git","directory":"packages/fluxion-render"},"_npmVersion":"11.6.2","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","dependencies":{"@heojeongbo/fluxion-worker":"^0.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","react":"^18.3.1","vitest":"^4.1.4","happy-dom":"^20.8.9","react-dom":"^18.3.1","release-it":"^19.2.4","typescript":"^5.5.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@vitest/coverage-v8":"^4.1.4","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.3.2","@release-it/conventional-changelog":"^10.0.6"},"peerDependencies":{"react":">=18"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/fluxion-render_1.0.0_1783333515497_0.5960644093334411","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@heojeongbo/fluxion-render","version":"1.0.1","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"url":"https://github.com/HeoJeongBo","name":"heojeongbo","email":"heojungbo@gmail.com"},"license":"MIT","_id":"@heojeongbo/fluxion-render@1.0.1","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"homepage":"https://github.com/HeoJeongBo/fluxion-render#readme","bugs":{"url":"https://github.com/HeoJeongBo/fluxion-render/issues"},"dist":{"shasum":"39a49ddcd89d9901aac12b9dc03d3df474b97946","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-1.0.1.tgz","fileCount":31,"integrity":"sha512-a1Kz+RJL9LM0UHqk9MUvAkv2ibjyPk8cnVcjImehDjlJSbMqAO1fgCXcTv0KpJlVR37GZxRsV4ui/wtzEg6cKA==","signatures":[{"sig":"MEUCIB+VhykcRH92XL47+OJC8lmEHkIQ3/OFqArFPegGGTecAiEAh7HYG0tB0B4yrGOry4i0EeQN0sEB9qZDoGPjrbZXfYk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1324649},"main":"./dist/index.js","type":"module","_from":"file:heojeongbo-fluxion-render-1.0.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18","pnpm":">=9"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","release":"release-it","typecheck":"tsc --noEmit","test:watch":"vitest","release:dry":"release-it --dry-run; s=$?; git checkout -- package.json; exit $s","release:major":"release-it major","release:minor":"release-it minor","release:patch":"release-it patch","release:major:dry":"release-it major --dry-run; s=$?; git checkout -- package.json; exit $s","release:minor:dry":"release-it minor --dry-run; s=$?; git checkout -- package.json; exit $s","release:patch:dry":"release-it patch --dry-run; s=$?; git checkout -- package.json; exit $s"},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"_resolved":"/private/var/folders/bk/pnm1xqz17gz0dfh_gp638hh80000gn/T/3576dc91588712b732a2136ce0881a62/heojeongbo-fluxion-render-1.0.1.tgz","_integrity":"sha512-a1Kz+RJL9LM0UHqk9MUvAkv2ibjyPk8cnVcjImehDjlJSbMqAO1fgCXcTv0KpJlVR37GZxRsV4ui/wtzEg6cKA==","repository":{"url":"git+https://github.com/HeoJeongBo/fluxion-render.git","type":"git","directory":"packages/fluxion-render"},"_npmVersion":"11.6.2","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","dependencies":{"@heojeongbo/fluxion-worker":"^0.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","react":"^18.3.1","vitest":"^4.1.4","happy-dom":"^20.8.9","react-dom":"^18.3.1","release-it":"^19.2.4","typescript":"^5.5.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@vitest/coverage-v8":"^4.1.4","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.3.2","@release-it/conventional-changelog":"^10.0.6"},"peerDependencies":{"react":">=18"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/fluxion-render_1.0.1_1784876897402_0.41704834041165273","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@heojeongbo/fluxion-render","version":"1.0.2","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"url":"https://github.com/HeoJeongBo","name":"heojeongbo","email":"heojungbo@gmail.com"},"license":"MIT","_id":"@heojeongbo/fluxion-render@1.0.2","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"homepage":"https://github.com/HeoJeongBo/fluxion-render#readme","bugs":{"url":"https://github.com/HeoJeongBo/fluxion-render/issues"},"dist":{"shasum":"9cf5a05f7f5704ec80119b76972d3ce362d9bc99","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-1.0.2.tgz","fileCount":31,"integrity":"sha512-rww3+dx6psebCgywCyJt6udBmIp7fms8WkXTtndCrElgDOyIyNCUF63+pD0gswVH0MdJ9AkMbIRudRvpcQ6LMA==","signatures":[{"sig":"MEUCIQCc+1UpzxTp9nHKB69knHs5EeV5IXxmb7jA8JsH85ZQ3AIgHngA5C6+X6/aXU7UIruKKCGhVqn6EVSwGNzkamhhrYo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1360276},"main":"./dist/index.js","type":"module","_from":"file:heojeongbo-fluxion-render-1.0.2.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18","pnpm":">=9"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","release":"release-it","typecheck":"tsc --noEmit","test:watch":"vitest","release:dry":"release-it --dry-run; s=$?; git checkout -- package.json; exit $s","release:major":"release-it major","release:minor":"release-it minor","release:patch":"release-it patch","release:major:dry":"release-it major --dry-run; s=$?; git checkout -- package.json; exit $s","release:minor:dry":"release-it minor --dry-run; s=$?; git checkout -- package.json; exit $s","release:patch:dry":"release-it patch --dry-run; s=$?; git checkout -- package.json; exit $s"},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"_resolved":"/private/var/folders/bk/pnm1xqz17gz0dfh_gp638hh80000gn/T/2d18bc3af5eab7e9de3bfdd6a506f9bf/heojeongbo-fluxion-render-1.0.2.tgz","_integrity":"sha512-rww3+dx6psebCgywCyJt6udBmIp7fms8WkXTtndCrElgDOyIyNCUF63+pD0gswVH0MdJ9AkMbIRudRvpcQ6LMA==","repository":{"url":"git+https://github.com/HeoJeongBo/fluxion-render.git","type":"git","directory":"packages/fluxion-render"},"_npmVersion":"11.6.2","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","dependencies":{"@heojeongbo/fluxion-worker":"^0.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","react":"^18.3.1","vitest":"^4.1.4","happy-dom":"^20.8.9","react-dom":"^18.3.1","release-it":"^19.2.4","typescript":"^5.5.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@vitest/coverage-v8":"^4.1.4","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.3.2","@release-it/conventional-changelog":"^10.0.6"},"peerDependencies":{"react":">=18"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/fluxion-render_1.0.2_1785322920300_0.7308184950920762","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@heojeongbo/fluxion-render","version":"1.0.3","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"url":"https://github.com/HeoJeongBo","name":"heojeongbo","email":"heojungbo@gmail.com"},"license":"MIT","_id":"@heojeongbo/fluxion-render@1.0.3","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"homepage":"https://github.com/HeoJeongBo/fluxion-render#readme","bugs":{"url":"https://github.com/HeoJeongBo/fluxion-render/issues"},"dist":{"shasum":"7d5212b0eb1537df698b3a0ce5a0c70d8cac095d","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-1.0.3.tgz","fileCount":31,"integrity":"sha512-w+0DVPV8eU4SUcfebTTLdkWg8/Wt/G08Y0d9teBuGV+kphq4Xp6LKigIS8N4Y9b0LVeB4JWi0Rt3i1bI+r9S2Q==","signatures":[{"sig":"MEUCIQD6ZhAlBVUnGdUQXJeSQk4WK2SJ4ijOjKDR8GRCnv3dwAIgBOaj0afpeUKdNGeAxCBX78mXDDhop3H1o7o8Tb375IM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1384254},"main":"./dist/index.js","type":"module","_from":"file:heojeongbo-fluxion-render-1.0.3.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18","pnpm":">=9"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","release":"release-it","typecheck":"tsc --noEmit","test:watch":"vitest","release:dry":"release-it --dry-run; s=$?; git checkout -- package.json; exit $s","release:major":"release-it major","release:minor":"release-it minor","release:patch":"release-it patch","release:major:dry":"release-it major --dry-run; s=$?; git checkout -- package.json; exit $s","release:minor:dry":"release-it minor --dry-run; s=$?; git checkout -- package.json; exit $s","release:patch:dry":"release-it patch --dry-run; s=$?; git checkout -- package.json; exit $s"},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"_resolved":"/private/var/folders/bk/pnm1xqz17gz0dfh_gp638hh80000gn/T/69433a03aeddfecbc746f3fd03bff952/heojeongbo-fluxion-render-1.0.3.tgz","_integrity":"sha512-w+0DVPV8eU4SUcfebTTLdkWg8/Wt/G08Y0d9teBuGV+kphq4Xp6LKigIS8N4Y9b0LVeB4JWi0Rt3i1bI+r9S2Q==","repository":{"url":"git+https://github.com/HeoJeongBo/fluxion-render.git","type":"git","directory":"packages/fluxion-render"},"_npmVersion":"11.6.2","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","dependencies":{"@heojeongbo/fluxion-worker":"^0.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","react":"^18.3.1","vitest":"^4.1.4","happy-dom":"^20.8.9","react-dom":"^18.3.1","release-it":"^19.2.4","typescript":"^5.5.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@vitest/coverage-v8":"^4.1.4","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.3.2","@release-it/conventional-changelog":"^10.0.6"},"peerDependencies":{"react":">=18"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/fluxion-render_1.0.3_1785335072432_0.6952895473841587","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@heojeongbo/fluxion-render","version":"1.1.0","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"url":"https://github.com/HeoJeongBo","name":"heojeongbo","email":"heojungbo@gmail.com"},"license":"MIT","_id":"@heojeongbo/fluxion-render@1.1.0","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"homepage":"https://github.com/HeoJeongBo/fluxion-render#readme","bugs":{"url":"https://github.com/HeoJeongBo/fluxion-render/issues"},"dist":{"shasum":"86b54ec7a675cd6848a56807ecf337aae7accd5f","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-1.1.0.tgz","fileCount":31,"integrity":"sha512-twYXcDe7qforLsxdWCYHRx0fBlYBD7Wh0d4NrTGNu4ZIA71wB0k7hc3f+I9N0aHah7rdGUa+9Qk5zDp7VLFGeQ==","signatures":[{"sig":"MEQCICOaB8DaBD1g9s7FxxVt7UA2Z57t5wDTNUPfjcQa+xbJAiBKA6/9bYNpGq8pskQTvWtts4KVZI2Wj4zns2Oizhp6Qg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1406177},"main":"./dist/index.js","type":"module","_from":"file:heojeongbo-fluxion-render-1.1.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18","pnpm":">=9"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","release":"release-it","typecheck":"tsc --noEmit","test:watch":"vitest","release:dry":"release-it --dry-run; s=$?; git checkout -- package.json; exit $s","release:major":"release-it major","release:minor":"release-it minor","release:patch":"release-it patch","release:major:dry":"release-it major --dry-run; s=$?; git checkout -- package.json; exit $s","release:minor:dry":"release-it minor --dry-run; s=$?; git checkout -- package.json; exit $s","release:patch:dry":"release-it patch --dry-run; s=$?; git checkout -- package.json; exit $s"},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"_resolved":"/private/var/folders/bk/pnm1xqz17gz0dfh_gp638hh80000gn/T/bff87efe6edd0ac43e21ab44df225595/heojeongbo-fluxion-render-1.1.0.tgz","_integrity":"sha512-twYXcDe7qforLsxdWCYHRx0fBlYBD7Wh0d4NrTGNu4ZIA71wB0k7hc3f+I9N0aHah7rdGUa+9Qk5zDp7VLFGeQ==","repository":{"url":"git+https://github.com/HeoJeongBo/fluxion-render.git","type":"git","directory":"packages/fluxion-render"},"_npmVersion":"11.6.2","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","dependencies":{"@heojeongbo/fluxion-worker":"^0.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","react":"^18.3.1","vitest":"^4.1.4","happy-dom":"^20.8.9","react-dom":"^18.3.1","release-it":"^19.2.4","typescript":"^5.5.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@vitest/coverage-v8":"^4.1.4","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.3.2","@release-it/conventional-changelog":"^10.0.6"},"peerDependencies":{"react":">=18"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/fluxion-render_1.1.0_1785380148204_0.6825574498872313","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@heojeongbo/fluxion-render","version":"1.2.0","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"url":"https://github.com/HeoJeongBo","name":"heojeongbo","email":"heojungbo@gmail.com"},"license":"MIT","_id":"@heojeongbo/fluxion-render@1.2.0","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"homepage":"https://github.com/HeoJeongBo/fluxion-render#readme","bugs":{"url":"https://github.com/HeoJeongBo/fluxion-render/issues"},"dist":{"shasum":"848aede406e5f7de2ba136acce33fdea2c98e713","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-1.2.0.tgz","fileCount":31,"integrity":"sha512-t1xzbB147dQLHVgMRn1d8ctMqPObqcKG83+iV6Cb2ZcbP8Wm5FWvoQOdRTpqTWN0GD0BwsXoP+2wo+3ZwAHsNg==","signatures":[{"sig":"MEQCIEMG3npCudC6C8m6oUv1P/hTxpxBdyb7AXUB19+9WFiBAiBTCJtwhqniG0PZ3N6Sn1GrpsHcEVBbJSo3dT8YgNMggQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1509875},"main":"./dist/index.js","type":"module","_from":"file:heojeongbo-fluxion-render-1.2.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18","pnpm":">=9"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","release":"release-it","typecheck":"tsc --noEmit","test:watch":"vitest","release:dry":"release-it --dry-run; s=$?; git checkout -- package.json; exit $s","release:major":"release-it major","release:minor":"release-it minor","release:patch":"release-it patch","release:major:dry":"release-it major --dry-run; s=$?; git checkout -- package.json; exit $s","release:minor:dry":"release-it minor --dry-run; s=$?; git checkout -- package.json; exit $s","release:patch:dry":"release-it patch --dry-run; s=$?; git checkout -- package.json; exit $s"},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"_resolved":"/private/var/folders/bk/pnm1xqz17gz0dfh_gp638hh80000gn/T/08c77a0bdfdfcdc5a837f4a59dd99349/heojeongbo-fluxion-render-1.2.0.tgz","_integrity":"sha512-t1xzbB147dQLHVgMRn1d8ctMqPObqcKG83+iV6Cb2ZcbP8Wm5FWvoQOdRTpqTWN0GD0BwsXoP+2wo+3ZwAHsNg==","repository":{"url":"git+https://github.com/HeoJeongBo/fluxion-render.git","type":"git","directory":"packages/fluxion-render"},"_npmVersion":"11.6.2","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","dependencies":{"@heojeongbo/fluxion-worker":"^0.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","react":"^18.3.1","vitest":"^4.1.4","happy-dom":"^20.8.9","react-dom":"^18.3.1","release-it":"^19.2.4","typescript":"^5.5.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@vitest/coverage-v8":"^4.1.4","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.3.2","@release-it/conventional-changelog":"^10.0.6"},"peerDependencies":{"react":">=18"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/fluxion-render_1.2.0_1785386513209_0.6846576053166638","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@heojeongbo/fluxion-render","version":"1.3.0","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"url":"https://github.com/HeoJeongBo","name":"heojeongbo","email":"heojungbo@gmail.com"},"license":"MIT","_id":"@heojeongbo/fluxion-render@1.3.0","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"homepage":"https://github.com/HeoJeongBo/fluxion-render#readme","bugs":{"url":"https://github.com/HeoJeongBo/fluxion-render/issues"},"dist":{"shasum":"5a2fb2b423c076f8c6c72b8092fe426ce3dfc39d","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-1.3.0.tgz","fileCount":31,"integrity":"sha512-Qomj7Bb/Y91j0/cpurbYyQZ3ehiib9MT+FSO8KajFTzpAXDm61fpRA0CH+QLNLX6+ltAunPVdtNel+5SWbi8FQ==","signatures":[{"sig":"MEUCIQCDiXm/TLr4E8eAzR2shjsdzAlD3BBCquky34nTbDGNlAIgamxLnid65szPsJmU46iVyC0/SHLq2Q3W3+ejgkpad5A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1536902},"main":"./dist/index.js","type":"module","_from":"file:heojeongbo-fluxion-render-1.3.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18","pnpm":">=9"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","release":"release-it","typecheck":"tsc --noEmit","test:watch":"vitest","release:dry":"release-it --dry-run; s=$?; git checkout -- package.json; exit $s","release:major":"release-it major","release:minor":"release-it minor","release:patch":"release-it patch","release:major:dry":"release-it major --dry-run; s=$?; git checkout -- package.json; exit $s","release:minor:dry":"release-it minor --dry-run; s=$?; git checkout -- package.json; exit $s","release:patch:dry":"release-it patch --dry-run; s=$?; git checkout -- package.json; exit $s"},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"_resolved":"/private/var/folders/bk/pnm1xqz17gz0dfh_gp638hh80000gn/T/357e80880a3c5564914b4a8fc453e43a/heojeongbo-fluxion-render-1.3.0.tgz","_integrity":"sha512-Qomj7Bb/Y91j0/cpurbYyQZ3ehiib9MT+FSO8KajFTzpAXDm61fpRA0CH+QLNLX6+ltAunPVdtNel+5SWbi8FQ==","repository":{"url":"git+https://github.com/HeoJeongBo/fluxion-render.git","type":"git","directory":"packages/fluxion-render"},"_npmVersion":"11.6.2","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","dependencies":{"@heojeongbo/fluxion-worker":"^0.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","react":"^18.3.1","vitest":"^4.1.4","happy-dom":"^20.8.9","react-dom":"^18.3.1","release-it":"^19.2.4","typescript":"^5.5.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@vitest/coverage-v8":"^4.1.4","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.3.2","@release-it/conventional-changelog":"^10.0.6"},"peerDependencies":{"react":">=18"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/fluxion-render_1.3.0_1785476375460_0.5794171195754034","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@heojeongbo/fluxion-render","version":"1.4.0","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"url":"https://github.com/HeoJeongBo","name":"heojeongbo","email":"heojungbo@gmail.com"},"license":"MIT","_id":"@heojeongbo/fluxion-render@1.4.0","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"homepage":"https://github.com/HeoJeongBo/fluxion-render#readme","bugs":{"url":"https://github.com/HeoJeongBo/fluxion-render/issues"},"dist":{"shasum":"614d1d3e7b7fd5691eaa62e8c54f10454692a981","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-1.4.0.tgz","fileCount":32,"integrity":"sha512-ff0UyUfnocHryI9UTRjJ2sNKRo83AXTEir0HwzVqDOMBZpMoK+mRmoYnacAwGIEuH9eeUvmYE7Za/dIbqmukFQ==","signatures":[{"sig":"MEQCIFX9yLgc77eTaJjmYgktZeFkuf2lzpdIRBAyc5pGhDgoAiBUSVHNB1VAQkOWxQx5imnGbsOBtaQuukNEJORrzNqe8A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1547757},"main":"./dist/index.js","type":"module","_from":"file:heojeongbo-fluxion-render-1.4.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18","pnpm":">=9"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","release":"release-it","typecheck":"tsc --noEmit","test:watch":"vitest","release:dry":"release-it --dry-run; s=$?; git checkout -- package.json; exit $s","release:major":"release-it major","release:minor":"release-it minor","release:patch":"release-it patch","release:major:dry":"release-it major --dry-run; s=$?; git checkout -- package.json; exit $s","release:minor:dry":"release-it minor --dry-run; s=$?; git checkout -- package.json; exit $s","release:patch:dry":"release-it patch --dry-run; s=$?; git checkout -- package.json; exit $s"},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"_resolved":"/private/var/folders/bk/pnm1xqz17gz0dfh_gp638hh80000gn/T/8058610ec0c42a0e77823bc5e743eb31/heojeongbo-fluxion-render-1.4.0.tgz","_integrity":"sha512-ff0UyUfnocHryI9UTRjJ2sNKRo83AXTEir0HwzVqDOMBZpMoK+mRmoYnacAwGIEuH9eeUvmYE7Za/dIbqmukFQ==","repository":{"url":"git+https://github.com/HeoJeongBo/fluxion-render.git","type":"git","directory":"packages/fluxion-render"},"_npmVersion":"11.6.2","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","dependencies":{"@heojeongbo/fluxion-worker":"^0.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","react":"^18.3.1","vitest":"^4.1.4","happy-dom":"^20.8.9","react-dom":"^18.3.1","release-it":"^19.2.4","typescript":"^5.5.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@vitest/coverage-v8":"^4.1.4","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.3.2","@release-it/conventional-changelog":"^10.0.6"},"peerDependencies":{"react":">=18"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/fluxion-render_1.4.0_1785767193223_0.3139660462753504","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@heojeongbo/fluxion-render","version":"1.5.0","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"url":"https://github.com/HeoJeongBo","name":"heojeongbo","email":"heojungbo@gmail.com"},"license":"MIT","_id":"@heojeongbo/fluxion-render@1.5.0","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"homepage":"https://github.com/HeoJeongBo/fluxion-render#readme","bugs":{"url":"https://github.com/HeoJeongBo/fluxion-render/issues"},"dist":{"shasum":"305eb8ea44a9951318ad1333ce81d890ed12edd8","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-1.5.0.tgz","fileCount":32,"integrity":"sha512-TUOwFGaVudY/ykXtzMstB4beOnWoejjx9/nXhv4rOob71UpAP55z7iKN8G5GA5ydszZbM7TZqPlk73SZXTe8CQ==","signatures":[{"sig":"MEUCIQCxZnnBzH7PiKAdGZl4FuozYs6/Ao+CZVXEY3C+uaa0rwIgX6Utw8ZRgsRYvYBbVqKBGOR8LIWS1vyoFhL7yion+tk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1596286},"main":"./dist/index.js","type":"module","_from":"file:heojeongbo-fluxion-render-1.5.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18","pnpm":">=9"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js"}},"scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","release":"release-it","typecheck":"tsc --noEmit","test:watch":"vitest","release:dry":"release-it --dry-run; s=$?; git checkout -- package.json; exit $s","release:major":"release-it major","release:minor":"release-it minor","release:patch":"release-it patch","release:major:dry":"release-it major --dry-run; s=$?; git checkout -- package.json; exit $s","release:minor:dry":"release-it minor --dry-run; s=$?; git checkout -- package.json; exit $s","release:patch:dry":"release-it patch --dry-run; s=$?; git checkout -- package.json; exit $s"},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"_resolved":"/private/var/folders/bk/pnm1xqz17gz0dfh_gp638hh80000gn/T/eb3449d9b97983c0d1099a0263d036ec/heojeongbo-fluxion-render-1.5.0.tgz","_integrity":"sha512-TUOwFGaVudY/ykXtzMstB4beOnWoejjx9/nXhv4rOob71UpAP55z7iKN8G5GA5ydszZbM7TZqPlk73SZXTe8CQ==","repository":{"url":"git+https://github.com/HeoJeongBo/fluxion-render.git","type":"git","directory":"packages/fluxion-render"},"_npmVersion":"11.6.2","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","directories":{},"sideEffects":false,"_nodeVersion":"24.11.1","dependencies":{"@heojeongbo/fluxion-worker":"^0.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.2.4","react":"^18.3.1","vitest":"^4.1.4","happy-dom":"^20.8.9","react-dom":"^18.3.1","release-it":"^19.2.4","typescript":"^5.5.4","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@vitest/coverage-v8":"^4.1.4","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.3.2","@release-it/conventional-changelog":"^10.0.6"},"peerDependencies":{"react":">=18"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/fluxion-render_1.5.0_1786012329207_0.3333900606601743","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"@heojeongbo/fluxion-render","version":"1.6.0","description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","type":"module","sideEffects":false,"main":"./dist/index.js","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./react":{"types":"./dist/react.d.ts","import":"./dist/react.js"},"./testing":{"types":"./dist/testing.d.ts","import":"./dist/testing.js"},"./worker":{"types":"./dist/worker.d.ts","import":"./dist/worker.js"}},"keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"author":{"name":"heojeongbo","email":"heojungbo@gmail.com","url":"https://github.com/heojeongbo"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/heojeongbo/fluxion-render.git","directory":"packages/fluxion-render"},"homepage":"https://github.com/heojeongbo/fluxion-render#readme","bugs":{"url":"https://github.com/heojeongbo/fluxion-render/issues"},"engines":{"node":">=18","pnpm":">=9"},"publishConfig":{"access":"public"},"dependencies":{"@heojeongbo/fluxion-worker":"^0.6.0"},"peerDependencies":{"react":">=18"},"peerDependenciesMeta":{"react":{"optional":true}},"devDependencies":{"@release-it/conventional-changelog":"^10.0.6","@testing-library/dom":"^10.4.1","@testing-library/react":"^16.3.2","@types/react":"^18.3.3","@types/react-dom":"^18.3.0","@vitejs/plugin-react":"^4.3.1","@vitest/coverage-v8":"^4.1.4","happy-dom":"^20.8.9","react":"^18.3.1","react-dom":"^18.3.1","release-it":"^19.2.4","tsup":"^8.2.4","typescript":"^5.5.4","vitest":"^4.1.4"},"scripts":{"build":"tsup","dev":"tsup --watch","typecheck":"tsc --noEmit","test":"vitest run","test:watch":"vitest","test:coverage":"vitest run --coverage","release":"release-it","release:minor":"release-it minor","release:major":"release-it major","release:patch":"release-it patch","release:dry":"release-it --dry-run; s=$?; git checkout -- package.json; exit $s","release:patch:dry":"release-it patch --dry-run; s=$?; git checkout -- package.json; exit $s","release:minor:dry":"release-it minor --dry-run; s=$?; git checkout -- package.json; exit $s","release:major:dry":"release-it major --dry-run; s=$?; git checkout -- package.json; exit $s"},"_id":"@heojeongbo/fluxion-render@1.6.0","_integrity":"sha512-TWTIllrTGow5gW8DcmfV7sf3kfvF9tPtZvKn78jnBRy0Dm/ZwFyCNNPHR/FQwQ0iZMQ1/QftFeANl5/8UZRixg==","_resolved":"/home/runner/work/_temp/heojeongbo-fluxion-render-1.6.0.tgz","_from":"file:/home/runner/work/_temp/heojeongbo-fluxion-render-1.6.0.tgz","_nodeVersion":"22.23.2","_npmVersion":"10.9.8","dist":{"integrity":"sha512-TWTIllrTGow5gW8DcmfV7sf3kfvF9tPtZvKn78jnBRy0Dm/ZwFyCNNPHR/FQwQ0iZMQ1/QftFeANl5/8UZRixg==","shasum":"c2258ce552c098a6da99d58ca7a426c09024ad12","tarball":"https://registry.npmjs.org/@heojeongbo/fluxion-render/-/fluxion-render-1.6.0.tgz","fileCount":32,"unpackedSize":1664168,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@heojeongbo%2ffluxion-render@1.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIDPrVvFYhbIT0QSFjNQAvve5uHP80kOuIF7eK5xxD9TkAiAg+veyd/vLyqGB7fm6yMIwYnkk0wZ0dbUpj4xYlzw8dw=="}]},"_npmUser":{"name":"heojeongbo","email":"heojungbo@gmail.com"},"directories":{},"maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/fluxion-render_1.6.0_1787628554756_0.9065829306273021"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-11T14:52:28.060Z","modified":"2026-08-25T03:29:15.229Z","0.2.0":"2026-04-11T14:52:28.318Z","0.2.1":"2026-04-11T15:41:31.621Z","0.2.2":"2026-04-16T02:38:13.131Z","0.2.3":"2026-04-16T04:02:23.094Z","0.2.4":"2026-04-16T09:19:00.995Z","0.3.0":"2026-04-17T10:56:11.954Z","0.3.1":"2026-04-18T14:33:08.073Z","0.3.2":"2026-04-20T06:27:16.969Z","0.3.3":"2026-04-21T01:55:04.735Z","0.3.4":"2026-04-21T06:10:32.687Z","0.3.5":"2026-04-21T06:35:42.867Z","0.3.6":"2026-04-21T07:59:16.039Z","0.4.0":"2026-04-21T08:46:29.798Z","0.4.1":"2026-04-21T12:21:51.507Z","0.5.0":"2026-04-24T04:36:32.748Z","0.6.0":"2026-05-08T03:10:13.216Z","0.7.0":"2026-05-11T03:50:50.515Z","0.7.1":"2026-05-13T02:12:44.805Z","0.7.2":"2026-05-13T11:52:40.786Z","0.7.3":"2026-05-18T08:43:54.288Z","0.8.0":"2026-05-18T11:05:42.471Z","0.8.1":"2026-05-19T02:21:33.946Z","0.8.2":"2026-05-19T08:21:39.607Z","0.9.0":"2026-05-24T17:15:28.155Z","0.10.0":"2026-05-24T19:40:08.646Z","0.10.1":"2026-06-01T02:26:48.154Z","0.11.0":"2026-06-01T07:27:41.026Z","0.12.0":"2026-06-01T08:41:24.861Z","0.12.1":"2026-06-01T08:47:20.648Z","0.13.0":"2026-06-01T11:18:20.119Z","0.14.0":"2026-06-01T13:09:38.320Z","0.15.0":"2026-06-04T03:36:07.265Z","0.16.0":"2026-06-05T11:59:45.457Z","0.17.0":"2026-06-12T05:28:45.489Z","0.17.1":"2026-06-12T06:05:55.813Z","0.18.0":"2026-06-19T07:33:05.098Z","0.19.0":"2026-06-25T05:42:07.862Z","0.19.1":"2026-06-25T12:10:29.644Z","0.20.0":"2026-06-26T06:11:15.869Z","0.21.0":"2026-06-26T08:19:45.768Z","0.22.0":"2026-06-27T11:41:17.650Z","0.23.0":"2026-06-29T04:07:52.002Z","0.24.0":"2026-07-06T04:49:21.743Z","1.0.0":"2026-07-06T10:25:15.680Z","1.0.1":"2026-07-24T07:08:17.604Z","1.0.2":"2026-07-29T11:02:00.467Z","1.0.3":"2026-07-29T14:24:32.599Z","1.1.0":"2026-07-30T02:55:48.415Z","1.2.0":"2026-07-30T04:41:53.345Z","1.3.0":"2026-07-31T05:39:35.620Z","1.4.0":"2026-08-03T14:26:33.395Z","1.5.0":"2026-08-06T10:32:09.395Z","1.6.0":"2026-08-25T03:29:14.897Z"},"bugs":{"url":"https://github.com/heojeongbo/fluxion-render/issues"},"author":{"name":"heojeongbo","email":"heojungbo@gmail.com","url":"https://github.com/heojeongbo"},"license":"MIT","homepage":"https://github.com/heojeongbo/fluxion-render#readme","keywords":["fluxion","render","canvas","offscreencanvas","webworker","chart","streaming","lidar","robotics","ros2","real-time","visualization"],"repository":{"type":"git","url":"git+https://github.com/heojeongbo/fluxion-render.git","directory":"packages/fluxion-render"},"description":"High-performance OffscreenCanvas rendering engine for real-time robotics data (charts, LiDAR, streaming).","maintainers":[{"name":"heojeongbo","email":"heojungbo@gmail.com"}],"readme":"# @heojeongbo/fluxion-render\n\n[![npm](https://img.shields.io/npm/v/@heojeongbo/fluxion-render)](https://www.npmjs.com/package/@heojeongbo/fluxion-render)\n[![coverage](https://img.shields.io/badge/coverage-100%25%20lines-brightgreen)](#testing)\n\nHigh-performance OffscreenCanvas rendering engine for real-time data visualization.\n\nBuilt for robotics and sensor systems: streaming line charts, LiDAR point clouds, and high-frequency data pipelines up to 120Hz+. Rendering runs entirely in Web Workers — the main thread is never blocked.\n\n```bash\nnpm install @heojeongbo/fluxion-render\n```\n\n> **Need time-travel replay?** See [`@heojeongbo/fluxion-replay`](https://www.npmjs.com/package/@heojeongbo/fluxion-replay) — record any data stream and scrub back through the last N minutes, including video. Part of a three-package set: **fluxion-worker ← fluxion-render ← fluxion-replay**.\n\n### Requirements & entry points\n\n- **ESM-only.** The package ships ES modules (no CommonJS `require` build). Use a bundler or Node's native ESM.\n- **Browser baseline.** Rendering uses `OffscreenCanvas` + `canvas.transferControlToOffscreen()` in a Web Worker: **Chrome/Edge 69+, Firefox 105+, Safari 16.4+**. There is no main-thread fallback.\n- **Client-only.** The engine touches `Worker`, `OffscreenCanvas`, and (in `/react`) DOM refs — it does not run during SSR. In Next.js/Remix, render `<FluxionCanvas>` (and any `useFluxion*` hook) only on the client; server-render a placeholder. In **Next.js** the cleanest guard is a client-only dynamic import:\n\n  ```tsx\n  // ChartPanel.tsx starts with 'use client' and imports from '@heojeongbo/fluxion-render/react'\n  const ChartPanel = dynamic(() => import('./ChartPanel'), { ssr: false });\n  ```\n\n  In **Remix** wrap the chart in a `<ClientOnly>` (from `remix-utils`) or a mounted-state guard (`const [m, setM] = useState(false); useEffect(() => setM(true), [])`). Optionally feature-detect `typeof OffscreenCanvas !== 'undefined'` before mounting to degrade gracefully on unsupported browsers.\n- **Import paths:**\n  - `@heojeongbo/fluxion-render` — framework-agnostic core: `FluxionHost`, `FluxionWorkerPool`, layer factories, protocol types. **No React.**\n  - `@heojeongbo/fluxion-render/react` — a superset of the core **plus** all hooks/components. React apps import from here (core types like `AreaChartConfig` are re-exported, so one import is enough).\n  - `@heojeongbo/fluxion-render/worker` — for a custom worker script: `Engine`, `Op`/`WorkerOp`, and message types (`HostMsg`, `EngineOutMsg`, …).\n  - `@heojeongbo/fluxion-render/testing` — deterministic test helpers (`flushLifecycleScheduler`, signal synths).\n\n---\n\n## Contents\n\n- [Quick Start](#quick-start) · [Worker Pool](#worker-pool) · [Performance / many charts](#performance--many-charts)\n- [Layer Types](#layer-types) — every streaming / static / robot layer and its config\n- [React API](#react-api) — hooks (`useFluxionCanvas`, `useFluxionStream`, crosshair, table, …) + components\n- [Vanilla JS API](#vanilla-js-api) — `FluxionHost` / `FluxionWorkerPool` without React\n- [Data Format](#data-format) · [Custom Worker Script](#custom-worker-script-zero-copy-stream) · [Architecture](#architecture)\n- [Troubleshooting](#troubleshooting) · [Upgrading](#upgrading) · [Testing](#testing)\n\n### Recipes — jump to the answer\n\n| I want to… | Go to |\n| --- | --- |\n| Theme charts (light/dark toggle, `FluxionThemeProvider`) | [Theming](#theming-lightdark--colors-css-cant-reach) |\n| Set app-wide defaults once (`configureFluxionDefaults`) | [Theming → app-wide defaults](#theming-lightdark--colors-css-cant-reach) |\n| Render 100s of charts smoothly | [Performance / many charts](#performance--many-charts) |\n| Stop rendering scrolled-off charts | [`pauseWhenOffscreen`](#pausing-off-screen-charts-pausewhenoffscreen) |\n| Speed up Firefox with the GPU backend | [WebGL renderer](#webgl-renderer-renderer-webgl--the-firefox-prescription) |\n| Reuse hosts under mount/unmount churn | [`recyclePool`](#recycling-hosts-under-heavy-churn-recyclepool) |\n| Use it in Next.js / Remix (SSR) | [Requirements & entry points](#requirements--entry-points) |\n| Use it without React (vanilla) | [Vanilla JS API](#vanilla-js-api) |\n\n---\n\n## Features\n\n- **Worker Pool** — charts share an adaptive pool that grows with load. Zero config required.\n- **Automatic load shedding** — per-worker frame governors (JS budget + rAF cadence) and a main-thread flush governor degrade render rate gracefully under saturation instead of janking the whole browser. Nothing is dropped; `maxFps` remains the explicit ceiling.\n- **Inline axes** — `inlineAxes` renders axes into main-canvas margins: one compositor surface per chart (vs up to three with external axis canvases), the preferred mode for large grids\n- **Pause off-screen charts** — `pauseWhenOffscreen` stops rendering scrolled-out charts via a shared IntersectionObserver; data keeps buffering, so scrolling back shows full history (no gap). The big win for tall scroll grids\n- **WebGL renderer** — `renderer: 'webgl'` bypasses Firefox's fixed ~1 ms/render worker-canvas2d pipeline cost with GPU line/grid/label programs (−78 % worker busy at 60×25 Hz, 2.8× throughput at 200×60 Hz). Firefox-targeted; keep `'2d'` on Chromium (live-context cap)\n- **Host recycling** — reuse warm chart hosts across mount/unmount for churny UIs (virtualized lists, accordions) instead of paying create/destroy each time\n- **OffscreenCanvas** — all rendering happens off the main thread\n- **Zero-copy data** — `Float32Array` ownership is transferred to the worker, never copied\n- **React integration** — hooks and components included (`/react` subpath)\n- **Framework-agnostic core** — use `FluxionHost` directly without React\n\n---\n\n## Quick Start\n\n### React (recommended)\n\n```tsx\nimport {\n  axisGridLayer,\n  lineLayer,\n  useFluxionCanvas,\n  useFluxionStream,\n  useTimeOrigin,\n} from '@heojeongbo/fluxion-render/react';\n\nfunction Chart() {\n  const timeOrigin = useTimeOrigin(); // stable Date.now() snapshot from first render\n\n  const { containerRef, host } = useFluxionCanvas({\n    layers: [\n      axisGridLayer('axis', {\n        xMode: 'time',\n        timeWindowMs: 5000,\n        timeOrigin,\n        yMode: 'auto',\n      }),\n      lineLayer('signal', { color: '#4fc3f7', lineWidth: 1.5, capacity: 4096 }),\n    ],\n  });\n\n  useFluxionStream({\n    host,\n    intervalMs: 1000 / 60,\n    setup: (h) => h.line('signal'),\n    tick: (tMs, handle) => {\n      handle.push({ t: tMs, y: Math.sin(tMs / 500) });\n      return 1;\n    },\n  });\n\n  return <div ref={containerRef} style={{ width: '100%', height: 300 }} />;\n}\n```\n\n### Even simpler: `useSimpleChart`\n\nFor the common \"just show me live data\" case, `useSimpleChart` bundles the time\norigin, the `axis-grid + line` pair (capacity auto-sized from `hz` + `windowMs`),\nand the stream pump behind a single `sample` callback:\n\n```tsx\nimport { FluxionCanvas, useSimpleChart } from '@heojeongbo/fluxion-render/react';\n\nfunction Live() {\n  const { layers, setHost } = useSimpleChart({\n    hz: 60,\n    windowMs: 5000,\n    color: '#4fc3f7',\n    sample: (t) => Math.sin(t / 500),     // y at host-relative t (ms)\n    axis: { gridDashArray: [3, 3] },      // optional theme overrides\n  });\n\n  return <FluxionCanvas layers={layers} onReady={setHost} style={{ height: 300 }} />;\n}\n```\n\n**Multiple series?** `useMultiSeriesChart` takes a `series: { id, color, sample }[]`\nand fans each tick out to every line — no manual layers/setup/tick triple-edit.\n(Changing the *number* of series at runtime needs a `<FluxionCanvas key={...}>`\nremount — config changes are reconciled, structural ones aren't.)\n\n```tsx\nconst { layers, setHost } = useMultiSeriesChart({\n  hz: 60,\n  windowMs: 5000,\n  distinguishBy: 'dash', // ← solid / dashed / dotted across the series\n  series: [\n    { id: 'a', color: '#4fc3f7', sample: (t) => Math.sin(t / 500) },\n    { id: 'b', color: '#ffb060', sample: (t) => Math.cos(t / 400) },\n  ],\n});\nreturn <FluxionCanvas key={2} layers={layers} onReady={setHost} />;\n```\n\n**Overlapping series?** When values sit on top of each other (flat or\nslowly-varying signals), color alone can't separate the lines. `distinguishBy`\nkeeps them readable, deterministically (no runtime overlap detection):\n\n- `distinguishBy: 'dash'` — each series gets a distinct dash pattern, cycling\n  the exported `DASH_PATTERNS` palette (`dashPatternFor(i)`). Honest about\n  position.\n- `distinguishBy: 'offset'` (with `offsetStep` in data units) — spreads the\n  series vertically (waterfall), lifting series *i* by `i * offsetStep`.\n- Combine: `distinguishBy: ['dash', 'offset']`.\n\nBoth are color-independent and skip any series that sets the matching field\nitself (`dashArray` / `yOffset`). It's pure styling — hover, export, and the\nunderlying samples are unaffected; with `'offset'`, auto-scaling grows to fit\nthe shifted lines so nothing clips. (You can also set `dashArray` / `yOffset`\ndirectly on any `lineLayer` / `areaLayer` / `stepLayer`.)\n\n**Heavily overlapping? Use lanes.** `'offset'` keeps one shared y-axis, so a\nbig spread makes the axis labels misleading. For genuinely overlapping streams,\n`layout: 'lanes'` draws **each series in its own horizontal band**, auto-\nnormalized to *its own* range (small multiples / ECG style) — there is no\nshared y-axis to lie about. The helper suppresses the y grid/labels and ignores\n`offset` in this mode (`dash` still works per lane).\n\n```tsx\nconst { layers, setHost } = useMultiSeriesChart({\n  hz: 60, windowMs: 5000, layout: 'lanes',\n  series: [\n    { id: 'a', color: '#4fc3f7', sample: (t) => Math.sin(t / 500) },\n    { id: 'b', color: '#ffb060', sample: (t) => 0.5 + Math.sin(t / 510) * 0.02 },\n  ],\n});\n```\n\nLow-level: set `laneIndex` / `laneCount` (+ optional `laneGapPx`) on any\n`lineLayer` / `areaLayer` / `stepLayer` to band it yourself.\n\n#### Dash palette (`DASH_PATTERNS` / `dashPatternFor`)\n\n`distinguishBy: 'dash'` cycles a deterministic 5-entry palette. Import it to set\n`dashArray` on a layer by hand, or to mirror the palette in a legend:\n\n```ts\nimport { DASH_PATTERNS, dashPatternFor } from '@heojeongbo/fluxion-render';\n\ndashPatternFor(i); // → a fresh copy of DASH_PATTERNS[i % 5], safe to pass to a config\n```\n\n| `i` | pattern | look |\n|----|---------|------|\n| 0 | `[]` | solid |\n| 1 | `[6, 4]` | dashed |\n| 2 | `[2, 3]` | dotted |\n| 3 | `[10, 4, 2, 4]` | dash-dot |\n| 4 | `[8, 3]` | long dash |\n\n`DASH_PATTERNS` is `readonly`; `dashPatternFor(i)` returns a mutable copy so it\ncan be handed straight to `lineLayer({ dashArray })`.\n\n### Vanilla JS\n\n```ts\nimport { FluxionHost } from '@heojeongbo/fluxion-render';\n\nconst canvas = document.getElementById('canvas') as HTMLCanvasElement;\nconst host = new FluxionHost(canvas, { bgColor: '#0b0d12' });\n\nhost.addLayer('axis', 'axis-grid', { xMode: 'time', timeWindowMs: 5000, yMode: 'auto' });\nconst line = host.addLineLayer('signal', { color: '#4fc3f7', capacity: 4096 });\n\nconst t0 = Date.now();\nsetInterval(() => {\n  line.push({ t: Date.now() - t0, y: Math.sin(Date.now() / 500) });\n}, 1000 / 60);\n```\n\n---\n\n## Worker Pool\n\nEvery `FluxionHost` automatically uses a shared module-level pool — no setup\nneeded. Mounting 60 charts creates 60 hosts but only a handful of OS threads.\n\nThe default pool is **adaptive**: it starts small (**2 workers**) and grows on\ndemand toward a cap of `min(16, hardwareConcurrency − 1)` as charts mount, with\n`targetPerWorker` tuned low because render-heavy charts benefit from spreading\nacross more threads. (Previously the default was a fixed 4 workers.)\n\n```tsx\n// No config — workers shared automatically, pool grows as charts mount\n<FluxionCanvas layers={[...]} />\n<FluxionCanvas layers={[...]} />\n// ... 60 of these all share the same adaptive pool\n```\n\n**Adjust the pool** (call before creating any host):\n\n```ts\nimport { configureDefaultPool } from '@heojeongbo/fluxion-render';\n\nconfigureDefaultPool({ size: 2 });               // fixed 2-worker pool\nconfigureDefaultPool({ size: 2, maxSize: 8 });   // start at 2, grow to 8 on demand\n```\n\n`getDefaultPool()` returns the current singleton pool (lazily created on first\nuse), and `configureDefaultPool({ size?, maxSize?, targetPerWorker?, workerFactory? })`\nreplaces it (disposing the old one) — call it before creating any host.\n\n| Option | Type | Default | Description |\n|--------|------|---------|-------------|\n| `size` | `number` | `2` (default pool) | Initial worker count, clamped `[1, 16]` |\n| `maxSize` | `number` | `= size` (growth off) | Upper bound for runtime growth. When `> size`, the pool starts at `size` and spawns more on demand (up to `maxSize`) as average active hosts per worker reaches `targetPerWorker`. Clamped `[size, 16]` |\n| `targetPerWorker` | `number` | `12` (min 1) | Active hosts per worker that triggers growth toward `maxSize`. Lower it for heavier per-host workloads (e.g. high-Hz streaming charts) so hosts spread across more workers sooner. Only matters when `maxSize > size` |\n\nSince the pool can't observe per-stream Hz, **`targetPerWorker` is the tuning\nknob**: high-Hz apps set it lower for more headroom per worker.\n\n**Scoped pool** (React) — useful when a page needs its own isolated pool:\n\n```tsx\nimport { useFluxionWorkerPool, FluxionCanvas } from '@heojeongbo/fluxion-render/react';\n\nfunction Dashboard() {\n  const pool = useFluxionWorkerPool({ size: 4 }); // disposed on unmount\n\n  return (\n    <>\n      {charts.map((id) => (\n        <FluxionCanvas key={id} hostOptions={{ pool }} layers={[...]} />\n      ))}\n    </>\n  );\n}\n```\n\n**Custom worker factory** — bypasses the pool entirely (solo mode):\n\n```ts\nconst host = new FluxionHost(canvas, {\n  workerFactory: () => new Worker('/my-worker.js', { type: 'module' }),\n});\n```\n\n---\n\n## Performance / many charts\n\n`FluxionHostOptions` (the second arg to `new FluxionHost`, also passed as\n`hostOptions` to `<FluxionCanvas>` / `useFluxionCanvas`) carries the throughput\nknobs below. The defaults already coalesce and decimate, so a grid of high-rate\nstreams is cheap out of the box; the rest are opt-outs for niche cases.\n\n| Option | Type | Default | Description |\n|--------|------|---------|-------------|\n| `coalesce` | `boolean` | `true` | Coalesce high-frequency per-sample handle `push()` calls into **one** `Op.DATA` message per layer per animation frame instead of one `postMessage` per sample. Cuts postMessage volume from O(samples/sec) to O(layers × fps) and removes the per-sample `Float32Array(2)` allocation — essential for many high-rate (e.g. 500 Hz) streams. Adds up to one frame (~16 ms) of latency. Only the streaming handles' `push()` fast-path is coalesced; raw `pushData`, `pushBatch`, and the replace-style `set*` calls always post immediately (and first flush any pending staged data for that layer, preserving order). Set `false` to restore immediate per-sample posting |\n| `coalesceMaxFloats` | `number` | `1_000_000` | Backpressure cap on staged Float32 elements per layer between flushes; on overflow the layer flushes immediately (never drops samples) |\n| `maxFps` | `number` | uncapped | Cap the worker engine's render rate. For a large grid of streaming charts sharing a worker, capping to e.g. `30` roughly halves worker scan+draw CPU and is visually indistinguishable for a scrolling time window. Skipped frames keep pending data — nothing is dropped |\n| `emitBounds` | `boolean` | `true` | Whether the worker posts `BOUNDS_UPDATE` to the main thread on auto y-bounds change. Set `false` when nothing consumes `onBoundsChange` / `getMetrics().bounds` (e.g. a thumbnail grid) to skip the per-frame postMessage |\n| `emitTicks` | `boolean` | `true` | Whether the worker posts `TICK_UPDATE` for React-side axis rendering. Only relevant with `externalAxes={false}` and no `onTickUpdate` consumer; set `false` to skip per-frame tick computation + postMessage. No effect when axis canvases render in the worker (`externalAxes` / `xAxisElement` / `yAxisElement`) |\n| `transparent` | `boolean` | `false` | Keep the canvas's alpha channel so the page shows through where the chart doesn't paint. Default `false` (opaque): the engine fills `bgColor` every frame, so an opaque 2D context (`alpha: false`) composites faster — a real win for a wall of many charts. Set `true` only if you use a translucent `bgColor` and want the page visible behind the plot |\n| `emitRenderStats` | `boolean` | `false` | Diagnostics opt-in (not a throughput knob): periodically post worker-side render load to `onRenderStats` for a perf HUD. Off by default — zero overhead. See [Diagnostics](#diagnostics-getmetrics--onmetricsupdate) |\n| `inlineAxes` | `boolean` | `false` | Reserve `yAxisWidth`/`xAxisHeight` margins INSIDE the main canvas and let the worker draw axis ticks/labels there — ONE canvas surface per chart instead of up to three. See [Inline axes](#inline-axes-inlineaxes--one-canvas-surface-per-chart). Construction-fixed (part of the recycle key); mutually exclusive with `xAxisElement`/`yAxisElement` |\n| `renderer` | `'2d' \\| 'webgl'` | `'2d'` | Paint backend for the worker engine. `'webgl'` bypasses Firefox's worker-canvas2d pipeline (a measured **fixed ~0.5–1.2 ms cost per render**, regardless of content) and draws lines/grid/labels with GPU programs instead — ~4–30× less worker busy time per render on Firefox. See [WebGL renderer](#webgl-renderer-renderer-webgl--the-firefox-prescription). Construction-fixed (part of the recycle key) |\n\n(Plus `bgColor`, `pool`, `workerFactory` covered above.)\n\n**Putting it together for a wall of charts.** The adaptive default pool spreads\nhosts across workers as charts mount; `coalesce` (on by default) collapses\nper-sample posts to one message per layer per frame; per-layer `decimate` (auto)\nmakes each draw O(width) rather than O(samples); `yMode: 'auto'` tracks each\nlayer's visible-window min/max with a sliding-window deque (O(log n) per frame)\ninstead of rescanning the ring, so auto-scaling cost stays flat as the retained\nwindow grows; and `maxFps` caps the shared worker's frame rate. On top of the\nexplicit knobs, the engine **load-sheds automatically under saturation**: each\nworker's shared frame loop throttles itself when its per-frame render budget is\nexceeded or its rAF delivery degrades, and the main-thread flush frame sheds\nthe data cadence when the page's own rAF slows under compositor pressure (the\nmany-canvas present flood). Both engage only under overload, keep skipped\nframes' data latched (nothing is dropped), and back off in steps once the\nsystem recovers — `maxFps` remains the deterministic ceiling when you want a\nguaranteed rate. For a read-only\nthumbnail grid, also set\n`emitBounds: false` / `emitTicks: false` to drop the per-frame bookkeeping\npostMessages. And when the grid **scrolls** (most charts out of view at any\nmoment), add `pauseWhenOffscreen` — off-screen charts stop rendering entirely\nwhile still buffering data (see [Pausing off-screen charts](#pausing-off-screen-charts-pausewhenoffscreen)),\nthe single biggest lever for a tall scroll grid:\n\n```tsx\n<FluxionCanvas\n  pauseWhenOffscreen                              // stop rendering scrolled-out charts\n  hostOptions={{ coalesce: true, maxFps: 30, emitBounds: false, emitTicks: false }}\n  layers={[\n    axisGridLayer('axis', { xMode: 'time', timeWindowMs: 5000, yMode: 'auto' }),\n    lineLayer('s', { color: '#4fc3f7', maxHz: 500 }), // decimate auto-engages\n  ]}\n/>\n```\n\n**Robustness.** A single throwing frame or listener no longer permanently stops\nan engine: the worker render loop isolates the error (logs it and keeps the loop\nrunning), and the bounds/tick/metrics emitters and the shared streaming ticker\nisolate a throwing listener so it can't skip the others.\n\n**Mount/unmount churn is safe.** Charts can be freely mounted and unmounted in\nbulk — accordions, tabs, virtualized grids — without leaking GPU memory. Each\nhost's OffscreenCanvas backing store is released on `dispose()` (the canvas is\nshrunk to `0×0` immediately rather than waiting for garbage collection), so\nrapidly opening/closing a section of many charts can't accumulate orphaned GPU\nsurfaces and exhaust the context budget.\n\n**Staggered mounts are on by default (`staggerMount`).** Mounting many charts in\na single frame — an accordion section expanding, a grid appearing — would run\nevery host's `transferControlToOffscreen` + worker init + first render at once,\nspiking the main thread. To prevent that, **`<FluxionCanvas>` and\n`useFluxionCanvas` defer host creation through a shared frame-throttled queue by\ndefault**: the placeholder `<canvas>` is attached immediately, but the host spins\nup on a later frame, so a burst spreads out instead of landing in one frame.\n`host` / `onReady` therefore arrive **one frame deferred** (even for a lone\nchart) — always read the host from `onReady`, never synchronously after mount.\n\nPass `staggerMount={false}` to opt out (synchronous creation) — e.g. when you\nmust call `getHost()` imperatively the moment the chart mounts. Tune the rate\nglobally:\n\n```tsx\nimport { configureLifecycleScheduler } from '@heojeongbo/fluxion-render/react';\n\nconfigureLifecycleScheduler({\n  perFrame: 6,       // host creations/teardowns per frame (default 4)\n  resizePerFrame: 12, // host resizes applied per frame (default 8)\n});\n\n<FluxionCanvas layers={[/* … */]} hostOptions={{ pool }} />          // staggered (default)\n<FluxionCanvas staggerMount={false} layers={[/* … */]} />            // synchronous (opt out)\n```\n\nA chart unmounted before its turn in the queue is simply dropped — it never\ncreates a host, and a host that *was* created is always disposed on unmount\n(GPU backing released), so rapid mount/unmount churn leaks nothing.\n\nBecause the host only spins up on a later frame, a deferred chart receives **no\nstream data until it mounts** — anything pushed in the meantime had no engine to\nland in. This is most visible with a shared broadcast feed (one packet fans out\nto every chart each tick): a late-mounting chart starts empty and fills forward\nfrom its mount moment rather than showing the history that already streamed past.\nIf a chart must look full the instant it appears, backfill the trailing window in\n`onReady` from history you retained (or, for a synthetic/recomputable source,\nregenerate it) and push it once with `handle.pushBatch(...)` — or\n`handle.reset(latestT)` then `pushBatch(...)` to also rewind the time axis. The\nbackfill and the live stream share one ring and merge in push order, so keep the\nbackfilled timestamps `<=` the next live sample.\n\n**Resize bursts are frame-budgeted too.** One layout change — a split-pane drag,\na window resize, a devicePixelRatio flip — fires *every* chart's ResizeObserver\nin the same tick, and each resize reallocates up to three GPU backing stores\n(main + axis canvases) in the worker. Applying all of them at once is the same\nfreeze as an unstaggered mount burst, so resizes flow through the shared\nscheduler as a **latest-wins-per-chart lane**: at most `resizePerFrame`\n(default 8) charts are resized per animation frame, repeated schedules for the\nsame chart coalesce to the newest size, and a pending resize is dropped if the\nchart unmounts first. A grid-wide resize settles over a few frames (charts\nCSS-stretch briefly instead of the page freezing); a lone chart's resize gains\nat most one frame of latency. This is on top of the per-chart 100 ms debounce,\nwhich merges repeated changes for one chart but can't spread a cross-chart\nburst.\n\nTo see what the queues are doing (e.g. while profiling a freeze), read the live\ncounters:\n\n```ts\nimport { getLifecycleStats } from '@heojeongbo/fluxion-render/react';\n\ngetLifecycleStats();\n// { mountsRun, disposesRun, resizesApplied, pendingTasks, pendingResizes }\n```\n\nPair it with `recyclePool.stats` (below) to tell cold-create storms apart from\nresize storms.\n\n### Pausing off-screen charts (`pauseWhenOffscreen`)\n\nIn a tall scroll grid most charts are out of view, yet each still pays the\nper-frame render + present cost — the dominant cost on both engines (Firefox's\nfixed per-render overhead, Chromium's present flood). Pass `pauseWhenOffscreen`\nto `<FluxionCanvas>` / `useFluxionCanvas` to **pause a chart's RENDERING while\nit's scrolled off-screen**, via a single shared `IntersectionObserver` for the\nwhole grid. It composes with page visibility: a chart renders only while it's\nboth on-screen and its tab is visible (a hidden tab now fully stops rendering,\nnot just its scrolling clock).\n\n```tsx\n<FluxionCanvas pauseWhenOffscreen layers={[/* … */]} hostOptions={{ pool }} />\n```\n\nMeasured with `scroll-bench` (headed, dpr 2, grid scrolled so most charts are\noff-screen, one shared feed pushing to *every* chart in both cases — so the\ndelta is pure render saving; median of 3). Aggregate worker render time summed\nacross all engines:\n\n| Browser | Charts | Worker busy `off` | Worker busy `on` | Reduction |\n|---|---|---|---|---|\n| Chromium | 60 | 78 ms/s | 15 ms/s | **−80 %** |\n| Chromium | 200 | 147 ms/s | 24 ms/s | **−84 %** |\n| Firefox | 60 | 1135 ms/s | 208 ms/s | **−82 %** |\n| Firefox | 200 | 4340 ms/s | 255 ms/s | **−94 %** |\n\nRenders/sec drops from ~1300–4500 to ~110 (only the on-screen charts still\ndraw), and the saving scales with the off-screen fraction. Firefox's absolute\nnumbers are ~15× Chromium's (its fixed per-render cost), so the absolute relief\nis largest exactly where it hurts most.\n\n**Data is never paused — only the paint is.** Samples keep streaming into the\nworker's ring buffer while a chart is off-screen, so scrolling it back into view\n**repaints the full buffered history in one frame** rather than starting empty\nat the moment it reappeared. There is nothing to backfill (contrast the\nstaggered-mount note above, where a *late-created* host genuinely missed the\nstream): here the host exists the whole time and just stops drawing.\n\nThe one requirement for \"full history on scroll-in\" is the usual streaming\ncontract — the layer's **ring capacity must cover the visible window** (set\n`capacity`, or `retentionMs` + `maxHz`). If capacity is smaller than the window,\nthe oldest in-window samples are evicted while off-screen exactly as they would\nbe on-screen; size it so the window fits. (The undersized-capacity warning only\nfires while a chart is rendering, so verify sizing on-screen.)\n\nTune the shared observer globally — a pre-warm margin so charts paint just\nbefore they scroll into view (default `\"200px\"`), and an alternate scroll root\nfor a nested scroll pane:\n\n```tsx\nimport { configureOnScreenObserver } from '@heojeongbo/fluxion-render/react';\n\nconfigureOnScreenObserver({ rootMargin: '400px', root: scrollPaneEl });\n```\n\nOpt-in (**default off**) — existing charts render exactly as before. Where no\n`IntersectionObserver` exists (SSR, old runtimes) charts simply always render.\nIt's a runtime signal, not construction-fixed, so it composes freely with host\nrecycling.\n\n### WebGL renderer (`renderer: 'webgl'`) — the Firefox prescription\n\nFirefox executes worker-canvas2d through a remote command pipeline with a\nmeasured **fixed ~0.5–1.2 ms submission cost per render** — insensitive to\npixels, command count, and messages, so no amount of draw-path trimming\nremoves it. `renderer: 'webgl'` sidesteps the pipeline entirely: the engine\ndraws lines (raw `(t, y)` vertices, data→pixel affine in the vertex shader),\ngrid/ticks (batched `gl.LINES` snapped to the same pixel centers as the 2d\nstrokes), and labels (the shared label-sprite cache uploaded as textures,\nblitted at identical positions) with GPU programs.\n\n```tsx\n<FluxionCanvas\n  hostOptions={{ renderer: 'webgl', inlineAxes: true, maxFps: 30 }}\n  layers={[/* … */]}\n/>\n```\n\nMeasured (Playwright headed, dpr 2, inline axes, median of 3):\n\n| Browser | Load | `'2d'` busy/render | `'webgl'` busy/render | renders/s delivered |\n|---|---|---|---|---|\n| Firefox | 60 charts × 25 Hz | 1.18 ms | **0.27 ms (−78 %)** | 1408 → 1346 |\n| Firefox | 200 charts × 60 Hz | 0.94 ms (saturated, 0.5 % jank) | **0.27 ms (0 % jank)** | 3749 → **10392 (2.8×)** |\n| Chromium | 60 charts × 25 Hz | 0.038 ms | 0.033 ms | ≈ same |\n\n**Use it on Firefox; keep `'2d'` on Chromium.**\n\n- **Chromium caps live WebGL contexts (~16 per process).** Mounting more\n  webgl charts than the cap forcibly loses the oldest contexts, and they do\n  **not** restore while over the cap — charts freeze (measured: 28 lost at\n  60 charts). Chromium's worker canvas2d has no fixed per-render cost, so\n  `'webgl'` buys nothing there anyway. Firefox's cap is far higher (~300):\n  60–200 charts run without a single context loss.\n- Pair with `inlineAxes` (recommended): external axis canvases are 2d-drawn\n  and are skipped with a warn under `'webgl'` (React-side `useAxisTicks`\n  fallback still works).\n- Construction-fixed, like `inlineAxes` — part of the recycle-pool key, so\n  recycled `'webgl'` hosts never mix with `'2d'` hosts.\n- If the WebGL context can't be created at init (blocklisted driver,\n  headless), the engine logs a warn and falls back to `'2d'` — the chart\n  always renders.\n\n**v1 limitations** (each warns once and degrades gracefully): only `line` and\n`axis-grid` layers have GPU paths — other layer kinds are skipped under\n`'webgl'`; `dashArray`/`gridDashArray` draw solid; line width is clamped to\nthe device's aliased-line range (commonly 1 device px under ANGLE); GL lines\nare not antialiased on most drivers (crisper, slightly more stair-stepped\nthan 2d); colors must be `#hex` / `rgb()` / `rgba()` (named CSS colors warn\nand fall back to white).\n\n### Theming (light/dark) — colors CSS can't reach\n\nThe chart is drawn on an OffscreenCanvas **inside a Web Worker**, so CSS\nvariables and Tailwind `dark:` classes never touch its pixels. A light/dark\ntoggle re-themes the chart by pushing resolved color *values* in. Three\nsurfaces, all reconciled to the **live host with no `key` remount** — flip a\ntheme and the chart repaints in place:\n\n| Surface | How to set it | Runtime path |\n| --- | --- | --- |\n| Canvas background | `hostOptions.bgColor` (or `host.setBgColor()`) | reconciled on change |\n| External axis strip | `<FluxionCanvas axisColor=… axisFont=…>` / `host.setAxisStyle()` | `SET_AXIS_STYLE` |\n| In-canvas grid / axis / labels | `axis-grid` layer config (`gridColor`, `axisColor`, `labelColor`) | `configLayer` |\n\n```tsx\n// theme is your app's resolved palette; changing it re-themes without remount.\nconst layers = useMemo(() => [\n  axisGridLayer('axis', { gridColor: theme.grid, axisColor: theme.axis, labelColor: theme.label }),\n  lineLayer('s1', { color: seriesColor }),   // series colors are usually theme-independent identities\n], [theme, seriesColor]);\n\n<FluxionCanvas layers={layers} axisColor={theme.label} hostOptions={{ bgColor: theme.bg }} />\n```\n\n`bgColor` and `axisStyle` are otherwise mount-only; the hook reconciles just\nthese two on change (seeded at mount, so an unchanged value never re-posts\nacross a large grid). Series colors already reconcile through the normal layer\nconfig path.\n\n**Batteries-included: `<FluxionThemeProvider>`.** Rather than thread `bgColor`\nand `axisStyle` through every chart, wrap a subtree once — every `FluxionCanvas`\nunderneath inherits them from the theme, and a light/dark switch re-themes them\nall at once (no remount, thanks to the reconcile above). Precedence is\n`theme < per-chart hostOptions < axis props`, so a chart can still override.\n\n```tsx\nimport { FluxionThemeProvider, useFluxionTheme } from '@heojeongbo/fluxion-render/react';\n\n// Wrap the app (or any chart subtree). `defaultMode=\"system\"` tracks the OS\n// prefers-color-scheme and follows it live; use \"light\" / \"dark\" to pin.\n<FluxionThemeProvider defaultMode=\"system\">\n  <Dashboard />\n</FluxionThemeProvider>;\n\n// A toggle anywhere inside — setMode re-themes every chart under the provider.\nfunction ThemeToggle() {\n  const { resolvedMode, setMode } = useFluxionTheme();\n  return (\n    <button onClick={() => setMode(resolvedMode === 'dark' ? 'light' : 'dark')}>\n      {resolvedMode === 'dark' ? '🌙 Dark' : '☀️ Light'}\n    </button>\n  );\n}\n```\n\nCustomize the palettes with `themes` (a partial merges over the built-in\n`darkTheme` / `lightTheme`, so overriding one field keeps the rest):\n\n```tsx\n<FluxionThemeProvider\n  defaultMode=\"dark\"\n  themes={{ dark: { bgColor: 'oklch(0.2 0.02 260)' } }} // keeps the preset axis style\n/>\n```\n\nThe themed `bgColor` reaches INIT, so a first frame is correctly themed (no\nflash — same guarantee as `configureFluxionDefaults` below). The provider covers\nthe canvas background + external/inline axis styling; **in-canvas grid/label\ncolors** (the `axis-grid` layer's `gridColor`/`axisColor`/`labelColor`) are still\nper-layer — theme those via the layer config shown above. `useFluxionTheme()`\nreturns `{ theme, mode, resolvedMode, setMode }` and throws outside a provider.\n\n**Pass `bgColor` at construction for a correct first frame.** The default\ncanvas context is opaque, so the worker fills `bgColor` into the backing\nsynchronously at INIT — a light-theme chart paints its background on the very\nfirst frame instead of flashing the opaque-black default. That fill uses the\ncolor known at INIT, i.e. `hostOptions.bgColor`. If you instead leave `bgColor`\nunset at mount and apply the theme only via a later `setBgColor` (e.g. after\nresolving CSS variables in an effect), the **first** frame uses the dark default\n`#0b0d12` and the light color lands on the next frame. So resolve the theme\nbefore mount and pass it in `hostOptions.bgColor`.\n\n**App-wide defaults — `configureFluxionDefaults()`.** Rather than repeat\n`hostOptions={{ bgColor }}` (and `maxFps`, `renderer`, `axisStyle`, …) on every\nchart — and risk forgetting it and getting the black first frame — set them once\nat app startup. Every chart then inherits them; a per-chart `hostOptions` field\nstill overrides. Because it feeds the same INIT as `hostOptions.bgColor`, the\nfirst frame is correctly themed everywhere.\n\n```ts\nimport { configureFluxionDefaults } from '@heojeongbo/fluxion-render';\n\n// once, at app entry (before any chart mounts)\nconfigureFluxionDefaults({ bgColor: theme.canvasBg, maxFps: 30, renderer: 'webgl' });\n```\n\nIt accepts any `FluxionHostOptions` fields and accumulates across calls. The\ndefault is merged before the recycle-pool key is computed, so a default\n`renderer`/`maxFps`/etc. buckets warm hosts correctly. (Set the worker `pool`\nvia `configureDefaultPool` instead.) The values are read at chart construction,\nso call it before mounting; per-chart props remain the way to override or to\nre-theme a live chart.\n\n**Color format — `oklch()` and CSS variables work.** Every color field\n(`bgColor`, layer `color`, axis `color`) is assigned straight to the canvas\n`fillStyle`/`strokeStyle`, so it accepts any CSS `<color>` the browser's canvas\nsupports — including `oklch(…)`, `rgb()/rgba()`, `hsl()`, and named colors\n(OffscreenCanvas in a worker supports the same set as the main thread; `oklch`\nin canvas is Chrome 111+ / Safari 15.4+ / Firefox 113+). So you can read a\nshadcn-style `--background: oklch(…)` token and pass it through as-is on modern\nbrowsers. Two caveats: (1) the **`area` layer fill** and the **colormap /\ngradient utilities** (`heatmap`, `scatter-colored`, occupancy) parse **hex\nonly** — give those `#rrggbb`; (2) to support browsers without canvas-`oklch`,\nresolve the token to `rgb()` on the main thread first (set it on a throwaway\nelement's `style.color`, then read back `getComputedStyle(el).color`) and pass\nthe normalized string in. The worker can't do this — CSS resolution is\nmain-thread only.\n\n### Spreading the React mount of a big grid (`useStaggeredMount`)\n\n`staggerMount` defers each host's *worker* creation, but React still mounts all N\n`<FluxionCanvas>` **components** in a single commit — reconciling N components and\ncreating N canvases (and their layout) synchronously. For a large grid appearing\nat once that synchronous commit can spike the main thread on its own.\n\n`useStaggeredMount` lets the **library spread the component mount across frames**:\nit returns a `shown` count that grows from one batch up to `total` at `perFrame`\nitems per frame; render `shown` of your list. Every chart still mounts — this is a\nfast progressive reveal (a few frames), NOT virtualization (nothing is unmounted\noffscreen) and NOT a slow drip.\n\n```tsx\nimport { useStaggeredMount, FluxionCanvas } from '@heojeongbo/fluxion-render/react';\n\nfunction Grid({ items }) {\n  const shown = useStaggeredMount(items.length, { perFrame: 24 });\n  return items.slice(0, shown).map((it) => <FluxionCanvas key={it.id} {...it} />);\n}\n```\n\n- A `total <= perFrame` list shows in full on the first frame (no delay for small\n  grids). To re-run the reveal for a grid that periodically remounts, give the\n  rendering subtree a React `key` so the hook re-mounts.\n- It composes with `staggerMount` (host stagger) and `recyclePool`: the reveal\n  bounds how many components mount per frame, the host scheduler bounds how many\n  workers spin up per frame, and recycling makes each of those cheap.\n- The internal `ResizeObserver` reads each chart's size from the observer entry\n  (not a synchronous `getBoundingClientRect`), so a large reveal batch doesn't\n  force a per-chart reflow.\n\n### Recycling hosts under heavy churn (`recyclePool`)\n\nStaggering spreads the cost of a host's creation across frames, but it doesn't\n*remove* it. In a UI that mounts and unmounts charts continuously — a virtualized\nlist scrolling, an accordion toggling sections, a grid that periodically remounts\n— the create→destroy cycle itself dominates CPU: every mount runs\n`transferControlToOffscreen` + worker init (new engine + GPU alloc) + a first\nrender, and every unmount tears it all down.\n\nA **host recycle pool** keeps a host *warm* on unmount instead of destroying it,\nthen hands it back on the next compatible mount. Reuse is cheap: the parked host\nis reset to a pristine state and its `<canvas>` is re-parented into the new slot —\nnone of the transfer/init/first-render cost. Create one with `useHostRecyclePool`\nand pass it to each `<FluxionCanvas>` whose churn you want to absorb:\n\n```tsx\nimport { useHostRecyclePool, FluxionCanvas } from '@heojeongbo/fluxion-render/react';\n\nfunction Grid({ items }) {\n  const recyclePool = useHostRecyclePool({ max: 16 }); // disposed on unmount\n  return items.map((it) => (\n    <FluxionCanvas\n      key={it.id}\n      recyclePool={recyclePool}\n      layers={it.layers}\n      hostOptions={{ pool, maxFps: 30 }}\n    />\n  ));\n}\n```\n\n- **Compatibility.** Warm hosts are only reused for a mount with matching\n  construction-fixed options — same worker `pool` (or `workerFactory`), axis-canvas\n  presence, `maxFps`, `transparent`, `emitBounds`/`emitTicks`/`emitRenderStats`.\n  The key is derived\n  automatically; pass `recycleKey=\"…\"` to force-separate structurally different\n  chart families that share one pool. A request with no compatible warm host\n  simply falls back to a cold create — recycling never changes correctness, only\n  cost.\n- **`max`** caps warm hosts kept *per key* (default `8`). Higher = fewer cold\n  creates under churn, but more idle memory held (each warm host keeps its\n  worker-side engine + OffscreenCanvas alive). For a virtualized list whose visible\n  working set is small, `8`–`16` is plenty; for a grid that remounts *everything*\n  at once, raise it toward the concurrent count so the whole set recycles —\n  `stats.highWater` reports the peak working set actually observed, and the pool\n  `console.warn`s once per bucket when overflow churn says `max` is undersized\n  (threshold `warnAfterOverflow`, default 16 overflow disposes; `0` disables).\n- **`idleShrinkMs`** (default off) makes a *large* `max` safe: after a host has\n  been parked that long, its worker-side GPU backings are released (canvases\n  shrink to `0×0`) while the host stays warm and reusable — the next acquire's\n  resize re-allocates them inside the frame-budgeted mount task. Without it, a\n  pool sized for a 64-chart grid parks up to ~200 full-size idle GPU surfaces.\n- **Teardown is deferred.** When a release overflows a full bucket, or the pool\n  itself is disposed (route change), the real `host.dispose()` calls drain\n  through the same frame-throttled queue as staggered mounts — a bulk unmount\n  can't burst-free dozens of GPU backings inside one React commit. Bundles\n  become unreachable immediately; only the teardown work is spread out.\n- **Stacks with `staggerMount`.** A warm reuse is far cheaper than a cold create,\n  so the per-frame mount budget goes much further. The pool is disposed (tearing\n  down every warm host) when the component holding `useHostRecyclePool` unmounts.\n\nThe **Mount/Unmount Churn** demo (`examples/vite-demo`) has a `recycle` toggle and\na `created` / `recycled` readout: flip it on and `created` stops climbing while\n`recycled` rises and CPU drops.\n\n---\n\n## Layer Types\n\n### `line` — Streaming time-series\n\nAppends `{ t, y }` samples to a ring buffer. Ideal for sensor data at 30–120Hz.\n\n```ts\nlineLayer('signal', {\n  color?: string,        // e.g. '#4fc3f7'\n  lineWidth?: number,    // default 1\n  capacity?: number,     // ring buffer size in samples (explicit)\n  retentionMs?: number,  // data retention window in ms\n  maxHz?: number,        // expected max sample rate — auto-calculates capacity\n  visible?: boolean,     // show/hide without reinitialising the layer (default true)\n  decimate?: boolean,    // min/max-decimate the DRAW at high sample density.\n                         // Tri-state: omitted = AUTO (decimate only when oversampled),\n                         // true = always when oversampled, false = always draw every\n                         // sample. Also on area/step/scatter — see \"Streaming decimation\"\n  maxGapMs?: number,     // break the stroke when consecutive samples are farther apart\n                         // than this (bursty/intermittent streams show real holes\n                         // instead of a bridging diagonal); also on area/step layers\n  dashArray?: number[],  // setLineDash pattern in CSS px, default [] (solid). Use to\n                         // distinguish overlapping series, e.g. [6, 4]; also on\n                         // area/step layers (area dashes the outline, not the fill).\n                         // Visual only — data, hover, and auto-scaling are unaffected.\n  yOffset?: number,      // vertical offset added to every y at draw time, in DATA\n                         // units, default 0. Lifts the series up/down to spread\n                         // overlapping lines (waterfall); auto-scale grows to fit.\n                         // Also on area/step layers. Visual only (hover/export = raw y).\n  laneIndex?: number,    // lane (small-multiples) mode: draw this series in band\n  laneCount?: number,    // `laneIndex` of `laneCount`, auto-normalized to its OWN\n  laneGapPx?: number,    // y-range (own band, no shared y-axis). gap default 6 px.\n                         // Also on area/step. See useMultiSeriesChart layout:'lanes'.\n  opacity?: number,      // global stroke opacity 0–1, default 1. De-emphasize a\n                         // series or let overlapping lines show through. Saved/\n                         // restored around the draw so it never leaks into other\n                         // layers. Also on `scatterLayer`. Visual only.\n})\n```\n\n`retentionMs` + `maxHz` auto-calculate `capacity = ceil(retentionMs/1000 * maxHz * 1.1)`.  \nExplicit `capacity` always takes priority when both are set. If the ring is too\nsmall for the visible window — i.e. samples are evicted while still on screen —\nthe layer logs a one-time `[fluxion] Layer \"id\": ring capacity … is smaller than\nthe visible window` warning so silent data loss is visible during development.\n\n#### Streaming decimation (`decimate`)\n\n`decimate` is a shared, **tri-state** option on the `line`, `step`, `area`, and\n`scatter` streaming layers that makes high-rate (e.g. 500 Hz) charts **O(width)**\ninstead of O(samples) to draw:\n\n- **omitted (default) → AUTO** — decimate only when oversampled (visible samples\n  > 2× pixel width).\n- **`true`** — decimate whenever oversampled (same effect as auto).\n- **`false`** — always draw every sample.\n\nFor `line` / `step` / `area` it draws a min/max envelope (~2–4 points per x-pixel\ncolumn), so it's **visually lossless** — every peak/trough at display resolution\nis preserved; for `scatter` it thins to each column's min-y / max-y points. The\nring buffer still holds **every** sample, so hover, scan (y-auto bounds), and\nexport are unaffected.\n\n**Toggling series visibility** — set `visible` to show/hide a layer without reinitialising the host or losing buffered data. For a single layer, `useLayerConfig` sends one lightweight CONFIG message:\n\n```tsx\nconst [enabled, setEnabled] = useState({ s1: true, s2: true, s3: false });\n\n// layers is fixed on mount — never recreated on toggle\nconst layers = useMemo(() => [\n  axisGridLayer('axis', { ... }),\n  lineLayer('s1', { color: '#4fc3f7' }),\n  lineLayer('s2', { color: '#80ffa0' }),\n  lineLayer('s3', { color: '#ffb060' }),\n], []);\n\nuseLayerConfig(host, lineLayer('s1', { visible: enabled.s1 }));\n```\n\n**Toggling many series at once** — calling `useLayerConfig` per layer fires N postMessages and trips the rules-of-hooks lint when done in a loop. Use **`useLayersConfig`** (plural): it diffs the whole array and sends a **single batched** `CONFIG_BATCH` message containing only the changed layers:\n\n```tsx\n// One message per toggle, no matter how many series — and loop-friendly.\nuseLayersConfig(\n  host,\n  keys.map((k) => lineLayer(k, { visible: enabled[k] })),\n);\n```\n\nOutside React, the host exposes the same batching directly:\n\n```ts\nhost.configLayers([\n  { id: 's1', config: { visible: false } },\n  { id: 's2', config: { lineWidth: 2 } },\n]);                                    // one postMessage, applied + redrawn once\n\nhost.setLayerVisibility('s1', false);  // single-layer convenience\nhost.setLayerVisibility({ s1: true, s2: false, s3: true }); // map → one batch\n```\n\n```ts\n// Keep 10 seconds of data at up to 60Hz → capacity = 660\nlineLayer('signal', { retentionMs: 10_000, maxHz: 60 })\n```\n\nPush data via `LineLayerHandle`:\n\n```ts\nconst handle = host.addLineLayer('signal', { color: '#4fc3f7', capacity: 4096 });\n\n// Single sample\nhandle.push({ t: tMs, y: value });\n\n// Batch (more efficient at high rates)\nhandle.pushBatch([{ t: t1, y: v1 }, { t: t2, y: v2 }]);\n```\n\n### `line-static` — One-shot XY plot\n\nReplaces the entire dataset on each push. For pre-computed or snapshot data.\n\n```ts\nlineStaticLayer('plot', {\n  color?: string,\n  lineWidth?: number,\n  layout?: 'xy' | 'y',  // 'xy': interleaved [x,y,x,y,...], 'y': y-only array\n})\n```\n\n```ts\nconst handle = host.addLineStaticLayer('plot', { color: '#80ffa0' });\n\n// XY pairs\nhandle.pushXy([{ x: 0, y: 0 }, { x: 1, y: 1 }]);\n\n// Y-only (x = index)\nhandle.pushY([0.1, 0.4, 0.9, 1.6]);\n```\n\n### `lidar` — Point cloud scatter\n\nEfficient batch rendering of large point clouds (30k+ points at 120Hz). Uses counting-sort by intensity to minimize GPU state changes.\n\n```ts\nlidarLayer('scan', {\n  stride?: 2 | 3 | 4,  // points per element: [x,y] | [x,y,z] | [x,y,z,intensity]\n  pointSize?: number,\n  intensityMax?: number,\n  color?: string,       // base color (used when stride < 4)\n})\n```\n\n```ts\nconst handle = host.addLidarLayer('scan', { stride: 4, pointSize: 2 });\n\n// Push raw Float32Array: [x, y, z, intensity, x, y, z, intensity, ...]\nhandle.pushRaw(float32Array);\n\n// Or push structured points\nhandle.push([{ x: 1.2, y: -0.4, z: 0, intensity: 0.8 }]);\n```\n\n### `area` / `step` — Filled / stepped time-series\n\nSame streaming `{ t, y }` model and config as `line` (including `capacity` /\n`retentionMs` / `maxHz`, `decimate`, `maxGapMs`, `dashArray`, `yOffset`, and the\n`laneIndex` / `laneCount` / `laneGapPx` lane fields). `areaLayer` fills below the\nstroke (dash applies to the outline, not the fill); `stepLayer` draws a\nsample-and-hold staircase. Handles `AreaLayerHandle` / `StepLayerHandle` push the\nsame way as `LineLayerHandle` (`push` / `pushBatch` / `reset`).\n\n```ts\nareaLayer('a', { color: '#4fc3f7', /* …same fields as lineLayer */ });\nstepLayer('s', { color: '#80ffa0' });\n```\n\n### More chart layers\n\nThe same `host.addLayer(id, kind, config)` / factory-spec pattern covers a family\nof additional layer types. Each takes a `Float32Array` (or a typed handle method)\nin the layout shown below; `t` is host-relative ms for streaming layers.\n\n| Factory | `kind` | Data layout (stride) | Flow | Handle → key methods |\n|---------|--------|----------------------|------|----------------------|\n| `barLayer` | `bar` | `[x,y,…]` (2) or `[y,…]` (1, `layout:'y'`) | static | `BarLayerHandle` → `setXY` / `setY` |\n| `scatterLayer` | `scatter` | `[t,y,…]` (2) | stream | `ScatterLayerHandle` → `push` / `pushBatch` / `reset` |\n| `scatterColoredLayer` | `scatter-colored` | `[t,y,color,size,…]` (4, color/size 0–1) | stream | `ScatterColoredHandle` → `push` / `pushBatch` / `reset` |\n| `candlestickLayer` | `candlestick` | `[t,open,high,low,close,…]` (5) | stream | `CandlestickLayerHandle` → `push` / `pushBatch` / `reset` |\n| `eventMarkerLayer` | `event-marker` | `[t,severity,…]` (2; sev 0/1/2) | static | `EventMarkerHandle` → `setEvents` / `clearEvents` |\n| `heatmapLayer` | `heatmap` | `[x,y,value,…]` (3) | static | `HeatmapLayerHandle` → `setGrid` |\n| `heatmapStreamLayer` | `heatmap-stream` | `[t, v0…v_{yBins-1}]` (yBins+1) | stream | `HeatmapStreamHandle` → `pushColumn(t, values)` |\n| `poseArrowLayer` | `pose-arrow` | `[t,y,theta,…]` (3; θ rad) | stream | `PoseArrowHandle` → `push` / `pushBatch` / `reset` |\n| `referenceLineLayer` | `reference-line` | config-only (no data) | config | `ReferenceLineHandle` → `setReference(config)` |\n\nNotable config fields (all have sensible defaults):\n\n- **`barLayer`** — `color`, `barWidth`=8, `layout`=`'xy'|'y'`, `xRange`=`[0,1]` (for `'y'`).\n- **`scatterLayer`** — `color`, `pointSize`=3, `shape`=`'square'|'circle'`, `opacity`=1 (global point opacity 0–1), `decimate` (tri-state, see [Streaming decimation](#streaming-decimation-decimate) — thins to per-column min-y/max-y points), ring sizing via `capacity`=2048 / `retentionMs` / `maxHz`.\n- **`scatterColoredLayer`** — `colormap`=`'viridis'|'plasma'|'hot'|'gradient'` (+ `minColor`/`maxColor` for `'gradient'`), `minSize`=2 / `maxSize`=8, `shape`=`'circle'`.\n- **`candlestickLayer`** — `upColor`=`#26a69a`, `downColor`=`#ef5350`, `bodyWidth`=6.\n- **`eventMarkerLayer`** — `colors`=`[info, warning, error]`, `markerSize`=8, `lineWidth`=1.\n- **`heatmapLayer`** / **`heatmapStreamLayer`** — `colormap`=`'viridis'|'plasma'|'hot'`, optional `minValue`/`maxValue` (auto if omitted); stream adds `yBins`=32, `maxCols`=256, `yRange`=`[0,1]`.\n- **`poseArrowLayer`** — `arrowLength`=14, `arrowWidth`=5, `color`.\n- **`referenceLineLayer`** — `y` (required), optional `bandMin`/`bandMax` (+ `bandOpacity`=0.12), `color`, `label`, `lineWidth`=1.5.\n\n### Robot & distribution layers\n\nDomain layers for robot dashboards and statistics. `t` is host-relative ms;\nworld-coordinate layers expect `axisGridLayer({ xMode: \"fixed\" })`.\n\n| Factory | `kind` | Data layout (stride) | Flow | Handle → key methods |\n|---------|--------|----------------------|------|----------------------|\n| `trajectoryLayer` | `trajectory` | `[x,y,t,…]` (3; world x/y) | stream | `TrajectoryHandle` → `push` / `pushBatch` / `reset` |\n| `occupancyGridLayer` | `occupancy-grid` | `[originX,originY,res,cols,rows,…cells]` | static | `OccupancyGridHandle` → `setGrid` |\n| `histogramLayer` | `histogram` | `[v0,v1,…]` raw values (binned in-layer) | static | `HistogramHandle` → `setValues` |\n| `stackedAreaLayer` | `stacked-area` | `[t,y0,y1,…]` (seriesCount+1) | stream | `StackedAreaHandle` → `push` / `pushBatch` / `reset` |\n| `boxPlotLayer` | `box-plot` | `[x,min,q1,median,q3,max,…]` (6) | static | `BoxPlotHandle` → `setBoxes` |\n| `polarLayer` | `polar` | `[theta,r,…]` (2; θ rad, r≥0) | static | `PolarHandle` → `setPoints` |\n| `spectrogramLayer` | (`heatmap-stream` preset) | columns via `pushColumn(t, magnitudes)` | stream | `HeatmapStreamHandle` → `pushColumn` |\n\nNotable config fields:\n\n- **`trajectoryLayer`** — `color`, `colorByTime` (+ `colormap`=`'viridis'|'plasma'|'hot'`), `headMarker`=true / `headMarkerSize`=4, `fadeOlderMs`=0, ring sizing via `capacity`/`retentionMs`/`maxHz`.\n- **`occupancyGridLayer`** — `occupiedColor`/`freeColor`/`unknownColor` (cell `-1`=unknown, `0..100`=probability), `showGridLines`, `gridLineColor`.\n- **`histogramLayer`** — `binCount`=20, fixed or auto `range`, `density`, `gapPx`=1, `color`.\n- **`stackedAreaLayer`** — `seriesCount` (sets stride), `colors[]`, `fillOpacity`=0.85, `normalize` (percent-stacked), `lineWidth`.\n- **`boxPlotLayer`** — `color`/`lineColor`, `fillOpacity`=0.35, `boxWidth`=24, `capRatio`=0.5, `lineWidth`=1.5.\n- **`polarLayer`** — `rMax` (auto if omitted), `closed`=true, `fillOpacity`, `showPoints`/`pointSize`, `showRings`=true / `ringCount`=4, `gridColor`, `insetPx`=8. Self-contained polar→pixel mapping (give it its own canvas; ignores cartesian y-scaling).\n- **`spectrogramLayer`** — `freqBins`=64, `freqRange`=`[0,1]`, `maxCols`=256, `colormap`, `minDb`/`maxDb`. Thin preset over `heatmap-stream` (push a magnitude/dB column per frame).\n\n### `axis-grid` — Axes and grid\n\nControls the viewport bounds for all layers. Does not receive data — configure via `axisGridLayer()` or `host.configLayer()`.\n\n```ts\naxisGridLayer('axis', {\n  // X axis\n  xMode?: 'fixed' | 'time',   // 'fixed': static range, 'time': sliding window\n  xRange?: [min, max],        // xMode: 'fixed' only\n  timeWindowMs?: number,      // xMode: 'time' only\n  timeOrigin?: number,        // Date.now() at stream start (for clock labels)\n  followClock?: boolean,      // xMode: 'time' — right edge tracks Date.now()-timeOrigin every\n                              // frame (scrolls continuously with no data); requires timeOrigin\n  xTickFormat?: string | { pattern?, precision?, suffix?, si? } | ((v: number) => string),\n                              // string clock-pattern, worker-safe object, or function.\n                              // object form works on every render path (see table below);\n                              // function form applies React-side only\n\n  // Y axis\n  yMode?: 'fixed' | 'auto',   // 'auto': fits to visible data\n  yRange?: [min, max],        // yMode: 'fixed' only\n  yAutoPadding?: number,      // fractional padding for auto mode (default 0.1)\n  yTickFormat?: { precision?, suffix?, si? } | ((v: number) => string),\n                              // object form is worker-safe (works with externalAxes:\n                              // precision via toFixed, unit suffix, k/M/G scaling);\n                              // function form applies on the React side only\n\n  // Appearance\n  gridColor?: string,\n  gridLineWidth?: number,     // grid line width in CSS px (default 1)\n  axisColor?: string,\n  labelColor?: string,\n  font?: string,\n  showXGrid?: boolean,\n  showYGrid?: boolean,\n  showAxes?: boolean,\n  showXLabels?: boolean,\n  showYLabels?: boolean,\n})\n```\n\n#### Inline axes (`inlineAxes`) — one canvas surface per chart\n\n`externalAxes` renders axes on **separate** canvases, so every frame of a\nscrolling chart presents two or three surfaces to the compositor (main +\nx-axis, + y-axis when bounds move). For large grids that per-surface present\ncost is the dominant axis expense. `inlineAxes` instead reserves margins\nINSIDE the main canvas (`yAxisWidth` left, `xAxisHeight` bottom) and has the\nworker draw ticks/labels there itself — **one** canvas surface per chart:\n\n```tsx\n<FluxionCanvas\n  inlineAxes                 // takes precedence over externalAxes\n  yAxisWidth={60}            // left margin (CSS px)\n  xAxisHeight={30}           // bottom margin\n  layers={[axisGridLayer('axis', { xMode: 'time', timeWindowMs: 5000, yMode: 'auto' }), …]}\n/>\n```\n\nData and grid are clipped to the plot rect; in-plot labels are automatically\nsuppressed; `axisColor`/`axisFont`/`axisTickSize`/`axisTickMargin` style the\nmargin ticks exactly like external axes. Caveat: pointer→data overlays map px\nover the whole element, so pass the same left margin to the crosshair\n(`useFluxionCrosshair({ insetLeft: 60, … })`); the brush overlay currently\nassumes a full-width plot.\n\n#### Tick formatters and `externalAxes`\n\nBy default (`externalAxes`, the recommended path) tick labels are drawn by the\nworker on a dedicated axis canvas. In-plot labels (`showXLabels`/`showYLabels`)\nare **automatically suppressed** for a side whose external axis canvas is\nattached, so labels are never formatted and drawn twice per frame. Tick\nvalues/labels are cached between step crossings and label strings are\nrasterized once into a sprite cache, so a steadily scrolling axis costs a\nhandful of bitmap blits per frame instead of per-label text rasterization. A **function** formatter can't cross the\nworker boundary — it's stripped before `postMessage` and only re-applied on the\nReact side. Use the **string** or **object** form for worker-drawn labels:\n\n| `xTickFormat` / `yTickFormat` form | Worker-drawn axis (`externalAxes`) | React-side tick set |\n| --- | --- | --- |\n| `string` (x: clock pattern `\"HH:mm:ss\"`) | ✅ | ✅ |\n| object (`{ pattern?, precision?, suffix?, si? }`) | ✅ | ✅ |\n| function `(v) => string` | ❌ (falls back to raw value) | ✅ |\n\nFor non-time axes or numeric labels, prefer the object form:\n`xTickFormat: { precision: 1, suffix: 'ms' }`, `yTickFormat: { si: true, suffix: 'B' }`.\n\nFor wall-clock strings outside the axis (HUDs, table cells), `formatClock` and\n`makeClockFormatter` apply the same pattern tokens (`HH` `H` `mm` `m` `ss` `s`\n`SSS` `S`; anything else is literal):\n\n```ts\nimport { formatClock, makeClockFormatter } from '@heojeongbo/fluxion-render';\n\nformatClock(Date.now(), 'HH:mm:ss.SSS');     // → \"14:07:32.481\"\nconst fmt = makeClockFormatter('HH:mm:ss');   // reusable formatter\nfmt(epochMs);\n```\n\n---\n\n## React API\n\n### `useFluxionCanvas(options)`\n\nCreates the canvas, worker, and all layers. Returns a ref to attach to a container `<div>` and the `FluxionHost` instance.\n\n```ts\nconst { containerRef, host } = useFluxionCanvas({\n  layers: FluxionLayerSpec[],       // layer declarations (configs are live — see below)\n  hostOptions?: FluxionHostOptions, // bgColor, pool, workerFactory + perf knobs\n                                    // (coalesce / maxFps / emitBounds / emitTicks —\n                                    // see \"Performance / many charts\")\n  onReady?: (host) => void,         // called once after initialization\n  staggerMount?: boolean,           // defer host creation across frames (default true)\n  recyclePool?: HostRecyclePool,    // reuse warm hosts on mount/unmount instead of\n  recycleKey?: string,              // create/destroy — see \"Recycling hosts under\n                                    // heavy churn\" in Performance / many charts\n  pauseWhenOffscreen?: boolean,     // pause rendering while scrolled off-screen\n                                    // (default false; data keeps buffering) — see\n                                    // \"Pausing off-screen charts\". Tune the shared\n                                    // observer with configureOnScreenObserver.\n});\n```\n\nLayer **configs** inside `layers` are reconciled: when the array reference\nchanges, each layer's config is diffed by content and only changed ones are\nre-sent to the worker. Memoize the array and list your config inputs as deps:\n\n```tsx\nconst layers = useMemo(() => [\n  axisGridLayer('axis', { xMode: 'time', followClock: isLive }),\n  lineLayer('s1', { color, visible }),\n], [isLive, color, visible]); // config changes auto-apply — no manual configLayer\n```\n\nStructural changes (adding/removing layers, changing a layer's `kind`) are\nnot reconciled — remount with a different `key` for those.\n\n### `<FluxionThemeProvider>` / `useFluxionTheme()`\n\nApp-wide chart theming (see [Theming](#theming-lightdark--colors-css-cant-reach)).\nSupplies `bgColor` + `axisStyle` as the option-merge base for every\n`FluxionCanvas` below it, so a light/dark switch re-themes all charts with no\nremount.\n\n```tsx\n<FluxionThemeProvider\n  defaultMode?=\"system\"    // \"system\" (tracks + follows prefers-color-scheme) | \"light\" | \"dark\"\n  themes?={{ light?, dark? }} // partial overrides merged over the built-in presets\n  onModeChange?={(mode) => …}  // fires on toggle or a live OS change\n>{children}</FluxionThemeProvider>;\n\nconst { theme, mode, resolvedMode, setMode } = useFluxionTheme(); // throws outside a provider\n```\n\n`resolvedMode` is the concrete `\"light\" | \"dark\"` (`\"system\"` resolved); `setMode`\ndrives a toggle. `darkTheme` / `lightTheme` (the presets) and the `FluxionTheme`\ntype are exported for building custom palettes.\n\n### `useFluxionStream(options)`\n\nDrives a data loop via `setInterval`. Returns a measured sample rate.\n\n```ts\nconst { rate } = useFluxionStream({\n  host,                   // from useFluxionCanvas\n  intervalMs: number,     // e.g. 1000/60 for 60Hz\n  setup: (host) => T,     // called once — resolve typed handles here\n  tick: (tMs, state) => number, // called every interval, return sample count\n  shared?: boolean,       // opt into the shared ticker (default false) — see below\n  trackRate?: boolean,    // measure pushed-samples/sec into `rate` (default true) — see below\n});\n```\n\n`tMs` is milliseconds since the first tick (not `Date.now()`). Use it as the `t` value for line samples.\n\n**Many streams at the same rate?** Pass `shared: true`. Instead of each stream\nowning its own `setInterval`, all same-`intervalMs` streams coalesce onto **one**\nprocess-wide timer that fans out to every subscriber — and it **pauses while the\npage is hidden** (`document.hidden`), so background tabs stop pumping. This cuts\ntimer overhead dramatically on dashboards with dozens of small charts. Default\n`false` preserves the original one-interval-per-stream behavior exactly.\n\n**Not displaying `rate`?** Pass `trackRate: false`. By default (`true`) the hook\ntracks the pushed-samples-per-second `rate` and refreshes it every 500 ms via\n`setState` — a periodic re-render per stream. With it off, that periodic\nre-render is skipped (and `rate` stays `0`), which matters for large grids of\nhundreds of charts.\n\nNeed the shared timer outside `useFluxionStream`? Use the primitive directly:\n\n```ts\nimport { useSharedTicker, subscribeTicker } from '@heojeongbo/fluxion-render/react';\n\n// React: subscribe for the component's lifetime\nuseSharedTicker(1000 / 60, (now) => { /* … */ });\n\n// Imperative: returns an unsubscribe; timer is cleared when the last sub leaves\nconst unsubscribe = subscribeTicker(1000 / 60, (now) => { /* … */ });\n```\n\n### `useTimeOrigin()`\n\nReturns a stable `Date.now()` snapshot captured on the first render of the component. Use it as `timeOrigin` for `axisGridLayer` so timestamps on all charts are relative to the same epoch.\n\n```ts\nconst timeOrigin = useTimeOrigin();\n// timeOrigin is fixed for the lifetime of the component — never changes on re-render\n```\n\n### `useSyncedTimeWindow(initialMs?)`\n\nManages a shared `timeWindowMs` across a set of charts. Returns a state value plus utilities for syncing it to multiple hosts.\n\n```ts\nconst {\n  windowMs,          // current time window in ms (default 5000)\n  setWindowMs,       // update the window and re-render\n  timeOrigin,        // stable Date.now() snapshot (same as useTimeOrigin)\n  syncConfig,        // () => { timeWindowMs, timeOrigin } — pass to axisGridLayer\n  bind,              // (host, axisId?) => void — apply config to a live host\n} = useSyncedTimeWindow(initialMs?);\n```\n\n```tsx\nconst tw = useSyncedTimeWindow(5000);\n// ...\naxisGridLayer('axis', { xMode: 'time', ...tw.syncConfig() })\n// later, to change window for all bound hosts:\ntw.setWindowMs(10000);\n```\n\n### `useFluxionWorkerPool(options)`\n\nCreates a scoped `FluxionWorkerPool` that is disposed when the component unmounts.\n\n```ts\nconst pool = useFluxionWorkerPool({\n  size?: number,              // initial worker count, default 4\n  maxSize?: number,           // grow on demand up to this (default = size, growth off)\n  targetPerWorker?: number,   // hosts/worker that triggers growth (default 12)\n  workerFactory: () => Worker, // required\n});\n```\n\n### `useHostRecyclePool(options)`\n\nCreates a scoped host **recycle** pool (disposed, tearing down every warm host,\nwhen the component unmounts). Pass it as `recyclePool` to each `<FluxionCanvas>` /\n`useFluxionCanvas` whose mount/unmount churn you want to absorb — warm hosts are\nreused instead of re-created. See\n[Recycling hosts under heavy churn](#recycling-hosts-under-heavy-churn-recyclepool)\nfor when and how.\n\n```ts\nconst recyclePool = useHostRecyclePool({\n  max?: number,               // warm hosts kept per recycle key, default 8 (higher =\n                              // fewer cold creates, more idle worker/GPU memory held)\n  idleShrinkMs?: number,      // release a parked host's GPU backings after this long\n                              // idle (default off) — makes a large `max` safe\n  warnAfterOverflow?: number, // once-per-bucket console.warn after this many overflow\n                              // disposes (default 16, 0 disables)\n});\n\n// recyclePool.stats → { created, recycled, overflowDisposed, highWater, shrunk }\n// recyclePool.size                            // currently parked hosts\n\n<FluxionCanvas recyclePool={recyclePool} hostOptions={{ pool }} layers={…} />;\n```\n\n`stats` is handy for a HUD that shows the recycling working (flip the chart churn\non and watch `recycled` climb while `created` plateaus). `highWater` is the peak\nconcurrent","readmeFilename":"README.md"}