{"_id":"annotation-canvas","_rev":"32-f31b5509d90319cd1b4a0d4638e7ce22","name":"annotation-canvas","dist-tags":{"latest":"0.45.1"},"versions":{"0.38.1":{"name":"annotation-canvas","version":"0.38.1","author":{"name":"Martin Schneider","email":"martin.schneider@codetopic.eu"},"_id":"annotation-canvas@0.38.1","maintainers":[{"name":"xreav3r","email":"martin.schneider@codetopic.eu"}],"dist":{"shasum":"3fbe7cead7b0e8a038409ceba202ae78e2363ce4","tarball":"https://registry.npmjs.org/annotation-canvas/-/annotation-canvas-0.38.1.tgz","fileCount":47,"integrity":"sha512-InIHMh10VkkrTsGC3PMi8QQwkXjeb6aNS5mo6noAYMOxVqdWeDnVTMA4DgUMlG8zEg1tC3nlyW/hGRWsdaxbnQ==","signatures":[{"sig":"MEYCIQCmqh3MtJenD99cYbWENdKtLO/Ob2+rIFefWaBrqvx70AIhAL62x78dxx22ELUMAc2209kaTQgbTC65vA66koRq9H/+","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1522497},"main":"dist/main.js","types":"dist/index.d.ts","module":"dist/module.js","source":"src/index.tsx","gitHead":"4e06516817b39f02d1ab55254e8b240449164e87","scripts":{"build":"parcel build src/annotation-canvas/index.tsx","start":"parcel src/index.html"},"_npmUser":{"name":"xreav3r","email":"martin.schneider@codetopic.eu"},"_npmVersion":"9.6.5","description":"# Usage ``` npm i ```","directories":{},"_nodeVersion":"16.15.1","dependencies":{"konva":"^8.4.2","react":"^18.2.0","lodash":"^4.17.21","react-dom":"^18.2.0","localforage":"^1.10.0","react-konva":"^18.2.5","@techstark/opencv-js":"^4.7.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"npm":"^9.6.3","util":"^0.12.5","uuid":"^9.0.0","axios":"^1.3.4","events":"^3.3.0","parcel":"^2.8.3","install":"^0.13.0","process":"^0.11.10","react-ace":"^10.1.0","typescript":"^4.9.5","@types/node":"^18.15.0","@types/uuid":"^9.0.1","react-color":"^2.19.3","@types/react":"^18.0.28","@mui/material":"^5.11.16","@types/lodash":"^4.14.191","@emotion/react":"^11.10.6","@emotion/styled":"^11.10.6","path-browserify":"^1.0.1","@types/react-dom":"^18.0.11","crypto-browserify":"^3.12.0","stream-browserify":"^3.0.0","@fontsource/roboto":"^4.5.8","@types/react-color":"^3.0.6","@mui/icons-material":"^5.11.16","@parcel/packager-ts":"^2.8.3","react-beautiful-dnd":"^13.1.1","@types/react-beautiful-dnd":"^13.1.3","@parcel/transformer-typescript-types":"^2.8.3"},"_npmOperationalInternal":{"tmp":"tmp/annotation-canvas_0.38.1_1686890996810_0.7006352124117097","host":"s3://npm-registry-packages"}},"0.38.2":{"name":"annotation-canvas","version":"0.38.2","author":{"name":"Martin Schneider","email":"martin.schneider@codetopic.eu"},"_id":"annotation-canvas@0.38.2","maintainers":[{"name":"xreav3r","email":"martin.schneider@codetopic.eu"}],"dist":{"shasum":"00456236a04a3031cc008fe54699956926c2b4e3","tarball":"https://registry.npmjs.org/annotation-canvas/-/annotation-canvas-0.38.2.tgz","fileCount":37,"integrity":"sha512-C9mkST7HY2oY5Eda6X4MvOqqyhqm24j+LzrRKHKU3R6yj9kchi9FNJXjsoRw7vyLJmeUfd4N8qQeNtmbZlfu+g==","signatures":[{"sig":"MEQCIGBrAZKhotZ2ebc/P0YNuWoPbl8+izGKySzJCQpq512AAiAO6duqkaZT+ZYsJdMHbGr5l9d3kYZGqu5Mag+aO3pOsQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":983016},"main":"dist/main.js","types":"dist/index.d.ts","module":"dist/module.js","source":"src/index.tsx","gitHead":"75ba4660d7eedc66e823467a19dfb96ec509ed35","scripts":{"build":"parcel build src/annotation-canvas/index.tsx","start":"parcel src/index.html"},"_npmUser":{"name":"xreav3r","email":"martin.schneider@codetopic.eu"},"_npmVersion":"9.5.1","description":"# Usage ``` npm i ```","directories":{},"_nodeVersion":"18.16.1","dependencies":{"konva":"^8.4.2","react":"^18.2.0","lodash":"^4.17.21","react-dom":"^18.2.0","localforage":"^1.10.0","react-konva":"^18.2.5","@techstark/opencv-js":"^4.7.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"npm":"^9.6.3","util":"^0.12.5","uuid":"^9.0.0","axios":"^1.3.4","events":"^3.3.0","parcel":"^2.8.3","install":"^0.13.0","process":"^0.11.10","react-ace":"^10.1.0","typescript":"^4.9.5","@types/node":"^18.15.0","@types/uuid":"^9.0.1","react-color":"^2.19.3","@types/react":"^18.0.28","@mui/material":"^5.11.16","@types/lodash":"^4.14.191","@emotion/react":"^11.10.6","@emotion/styled":"^11.10.6","path-browserify":"^1.0.1","@types/react-dom":"^18.0.11","crypto-browserify":"^3.12.0","stream-browserify":"^3.0.0","@fontsource/roboto":"^4.5.8","@types/react-color":"^3.0.6","@mui/icons-material":"^5.11.16","@parcel/packager-ts":"^2.8.3","react-beautiful-dnd":"^13.1.1","@types/react-beautiful-dnd":"^13.1.3","@parcel/transformer-typescript-types":"^2.8.3"},"_npmOperationalInternal":{"tmp":"tmp/annotation-canvas_0.38.2_1688802728416_0.20519697263118175","host":"s3://npm-registry-packages"}},"0.38.3":{"name":"annotation-canvas","version":"0.38.3","author":{"name":"Martin Schneider","email":"martin.schneider@codetopic.eu"},"_id":"annotation-canvas@0.38.3","maintainers":[{"name":"xreav3r","email":"martin.schneider@codetopic.eu"}],"dist":{"shasum":"e2ea06185bb91f8ec8ccf03c84fd9098e850fbd2","tarball":"https://registry.npmjs.org/annotation-canvas/-/annotation-canvas-0.38.3.tgz","fileCount":37,"integrity":"sha512-f5YaFpoi9UPaIn5AniK1twSC/RMQEqWahl4/7DiGp6Eb5l9d5v8y1yAj+B5mZCo1jT8+T5+srd1M63m8fqAZYQ==","signatures":[{"sig":"MEQCIHpPuZNcN1w5dTlNldDjO2KD2y0818T83/oe7JOEFNzeAiBFj8zxi7OSIJ2W4QkWJxKvtfXhJ2D5jyqtCW8vXjp3JA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":983352},"main":"dist/main.js","types":"dist/index.d.ts","module":"dist/module.js","source":"src/index.tsx","gitHead":"b3abd6ae89157bc71f1fe628d4731239d7a423b8","scripts":{"build":"parcel build src/annotation-canvas/index.tsx","start":"parcel src/index.html"},"_npmUser":{"name":"xreav3r","email":"martin.schneider@codetopic.eu"},"_npmVersion":"9.6.7","description":"# Usage ``` npm i ```","directories":{},"_nodeVersion":"18.17.0","dependencies":{"konva":"^8.4.2","react":"^18.2.0","lodash":"^4.17.21","react-dom":"^18.2.0","localforage":"^1.10.0","react-konva":"^18.2.5","@techstark/opencv-js":"^4.7.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"npm":"^9.6.3","util":"^0.12.5","uuid":"^9.0.0","axios":"^1.3.4","events":"^3.3.0","parcel":"^2.8.3","install":"^0.13.0","process":"^0.11.10","react-ace":"^10.1.0","typescript":"^4.9.5","@types/node":"^18.15.0","@types/uuid":"^9.0.1","react-color":"^2.19.3","@types/react":"^18.0.28","@mui/material":"^5.11.16","@types/lodash":"^4.14.191","@emotion/react":"^11.10.6","@emotion/styled":"^11.10.6","path-browserify":"^1.0.1","@types/react-dom":"^18.0.11","crypto-browserify":"^3.12.0","stream-browserify":"^3.0.0","@fontsource/roboto":"^4.5.8","@types/react-color":"^3.0.6","@mui/icons-material":"^5.11.16","@parcel/packager-ts":"^2.8.3","react-beautiful-dnd":"^13.1.1","@types/react-beautiful-dnd":"^13.1.3","@parcel/transformer-typescript-types":"^2.8.3"},"_npmOperationalInternal":{"tmp":"tmp/annotation-canvas_0.38.3_1690121625822_0.9881189641821189","host":"s3://npm-registry-packages"}},"0.38.4":{"name":"annotation-canvas","version":"0.38.4","author":{"name":"Martin Schneider","email":"martin.schneider@codetopic.eu"},"_id":"annotation-canvas@0.38.4","maintainers":[{"name":"xreav3r","email":"martin.schneider@codetopic.eu"}],"dist":{"shasum":"190d71773a440f76043e7ccf411519a9cbe8dc4e","tarball":"https://registry.npmjs.org/annotation-canvas/-/annotation-canvas-0.38.4.tgz","fileCount":37,"integrity":"sha512-LU8X0BzSbfRSCMexqqG/fqrzxjNy29SBylhJZZIdsM88Jae/Vp5zPGDGVx/nvRkswCtjnBui6JXZ0hM/KDXWcQ==","signatures":[{"sig":"MEUCIQCTZtF1rZ5f/ezPimg8GGUoI0VZFQcAAszSqIsXnJHFrAIgS+R1UtsP9hm+hLJGPYJmBItG1hZYw1ZHKIyGpJN0b3M=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":983352},"main":"dist/main.js","types":"dist/index.d.ts","module":"dist/module.js","source":"src/index.tsx","gitHead":"44780b9ef1412e8d179bbc2454a70c6f5a652d7f","scripts":{"build":"parcel build src/annotation-canvas/index.tsx","start":"parcel src/index.html"},"_npmUser":{"name":"xreav3r","email":"martin.schneider@codetopic.eu"},"_npmVersion":"9.6.7","description":"# Usage ``` npm i ```","directories":{},"_nodeVersion":"18.17.0","dependencies":{"konva":"^8.4.2","react":"^18.2.0","lodash":"^4.17.21","react-dom":"^18.2.0","localforage":"^1.10.0","react-konva":"^18.2.5","@techstark/opencv-js":"^4.7.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"npm":"^9.6.3","util":"^0.12.5","uuid":"^9.0.0","axios":"^1.3.4","events":"^3.3.0","parcel":"^2.8.3","install":"^0.13.0","process":"^0.11.10","react-ace":"^10.1.0","typescript":"^4.9.5","@types/node":"^18.15.0","@types/uuid":"^9.0.1","react-color":"^2.19.3","@types/react":"^18.0.28","@mui/material":"^5.11.16","@types/lodash":"^4.14.191","@emotion/react":"^11.10.6","@emotion/styled":"^11.10.6","path-browserify":"^1.0.1","@types/react-dom":"^18.0.11","crypto-browserify":"^3.12.0","stream-browserify":"^3.0.0","@fontsource/roboto":"^4.5.8","@types/react-color":"^3.0.6","@mui/icons-material":"^5.11.16","@parcel/packager-ts":"^2.8.3","react-beautiful-dnd":"^13.1.1","@types/react-beautiful-dnd":"^13.1.3","@parcel/transformer-typescript-types":"^2.8.3"},"_npmOperationalInternal":{"tmp":"tmp/annotation-canvas_0.38.4_1690123564141_0.3434652043508577","host":"s3://npm-registry-packages"}},"0.39.0":{"name":"annotation-canvas","version":"0.39.0","author":{"name":"Martin Schneider","email":"martin.schneider@codetopic.eu"},"_id":"annotation-canvas@0.39.0","maintainers":[{"name":"xreav3r","email":"martin.schneider@codetopic.eu"}],"dist":{"shasum":"83260ff06b8fd548c49da605110f87eaefb1492a","tarball":"https://registry.npmjs.org/annotation-canvas/-/annotation-canvas-0.39.0.tgz","fileCount":37,"integrity":"sha512-fh0tDCOGJuodCtUW/1vJuclfY6JK4fwrkUOsV4pdEwYTPLWBDRL+51142Gw0BI0JPK6csAcDQfipNB8+4RiDrw==","signatures":[{"sig":"MEYCIQD/LL6bQlpNbeGTI3d0J8liPpDh/QeofNLE0qikfvxTjwIhANfCffTHe0keMG2TB2wxdb012PaBTBS+wK8g5W32d+E0","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":986795},"main":"dist/main.js","types":"dist/index.d.ts","module":"dist/module.js","source":"src/index.tsx","gitHead":"12fa7c399c15b95b7e415ea19fcf7ed0eb4a642a","scripts":{"build":"parcel build src/annotation-canvas/index.tsx","start":"parcel src/index.html"},"_npmUser":{"name":"xreav3r","email":"martin.schneider@codetopic.eu"},"_npmVersion":"9.6.7","description":"# Usage ``` npm i ```","directories":{},"_nodeVersion":"18.17.0","dependencies":{"konva":"^8.4.2","react":"^18.2.0","lodash":"^4.17.21","react-dom":"^18.2.0","localforage":"^1.10.0","react-konva":"^18.2.5","@techstark/opencv-js":"^4.7.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"npm":"^9.6.3","util":"^0.12.5","uuid":"^9.0.0","axios":"^1.3.4","events":"^3.3.0","parcel":"^2.8.3","install":"^0.13.0","process":"^0.11.10","react-ace":"^10.1.0","typescript":"^4.9.5","@types/node":"^18.15.0","@types/uuid":"^9.0.1","react-color":"^2.19.3","@types/react":"^18.0.28","@mui/material":"^5.11.16","@types/lodash":"^4.14.191","@emotion/react":"^11.10.6","@emotion/styled":"^11.10.6","path-browserify":"^1.0.1","@types/react-dom":"^18.0.11","crypto-browserify":"^3.12.0","stream-browserify":"^3.0.0","@fontsource/roboto":"^4.5.8","@types/react-color":"^3.0.6","@mui/icons-material":"^5.11.16","@parcel/packager-ts":"^2.8.3","react-beautiful-dnd":"^13.1.1","@types/react-beautiful-dnd":"^13.1.3","@parcel/transformer-typescript-types":"^2.8.3"},"_npmOperationalInternal":{"tmp":"tmp/annotation-canvas_0.39.0_1690306585303_0.2590445338715792","host":"s3://npm-registry-packages"}},"0.39.1":{"name":"annotation-canvas","version":"0.39.1","author":{"name":"Martin Schneider","email":"martin.schneider@codetopic.eu"},"_id":"annotation-canvas@0.39.1","maintainers":[{"name":"xreav3r","email":"martin.schneider@codetopic.eu"}],"dist":{"shasum":"0816629c97c256febff268f95f3703ce6978f686","tarball":"https://registry.npmjs.org/annotation-canvas/-/annotation-canvas-0.39.1.tgz","fileCount":37,"integrity":"sha512-bHCcPRoVzPKJSCkhwBzWBmX/sAcY9augcePNTYksWcIryyA31uL5w1vkx3J2FvmVFgNWOeOZYGVCyNIfy7EDXA==","signatures":[{"sig":"MEUCIQCg+Z5pRFWzg5VL5PMeMtqAf/tG0PduY9eDPMaj9UpFSQIgf55S8wMI5rNJs5ez82xZ9XYB7Ir61QEhVmiTr4Sj/e0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":987137},"main":"dist/main.js","types":"dist/index.d.ts","module":"dist/module.js","source":"src/index.tsx","gitHead":"394c68288055ff2da2172e9fc90c73b01103fe51","scripts":{"build":"parcel build src/annotation-canvas/index.tsx","start":"parcel src/index.html"},"_npmUser":{"name":"xreav3r","email":"martin.schneider@codetopic.eu"},"_npmVersion":"9.6.7","description":"# Usage ``` npm i ```","directories":{},"_nodeVersion":"18.17.1","dependencies":{"konva":"^8.4.2","react":"^18.2.0","lodash":"^4.17.21","react-dom":"^18.2.0","localforage":"^1.10.0","react-konva":"^18.2.5","@techstark/opencv-js":"^4.7.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"npm":"^9.6.3","util":"^0.12.5","uuid":"^9.0.0","axios":"^1.3.4","events":"^3.3.0","parcel":"^2.8.3","install":"^0.13.0","process":"^0.11.10","react-ace":"^10.1.0","typescript":"^4.9.5","@types/node":"^18.15.0","@types/uuid":"^9.0.1","react-color":"^2.19.3","@types/react":"^18.0.28","@mui/material":"^5.11.16","@types/lodash":"^4.14.191","@emotion/react":"^11.10.6","@emotion/styled":"^11.10.6","path-browserify":"^1.0.1","@types/react-dom":"^18.0.11","crypto-browserify":"^3.12.0","stream-browserify":"^3.0.0","@fontsource/roboto":"^4.5.8","@types/react-color":"^3.0.6","@mui/icons-material":"^5.11.16","@parcel/packager-ts":"^2.8.3","react-beautiful-dnd":"^13.1.1","@types/react-beautiful-dnd":"^13.1.3","@parcel/transformer-typescript-types":"^2.8.3"},"_npmOperationalInternal":{"tmp":"tmp/annotation-canvas_0.39.1_1691856419378_0.46624471036104675","host":"s3://npm-registry-packages"}},"0.39.2":{"name":"annotation-canvas","version":"0.39.2","author":{"name":"Martin Schneider","email":"martin.schneider@codetopic.eu"},"_id":"annotation-canvas@0.39.2","maintainers":[{"name":"xreav3r","email":"martin.schneider@codetopic.eu"}],"dist":{"shasum":"a534d4bf45db2f178e56ea0cdd61d1144585d367","tarball":"https://registry.npmjs.org/annotation-canvas/-/annotation-canvas-0.39.2.tgz","fileCount":37,"integrity":"sha512-jR35gJ4BAQxEPV8zPp3Rhd4DLdvxrJAD/FAC15XFojbgo9tRWQa8whKL2QV7Jq2PFh99VhiBwQKQ91ZQY1LSLg==","signatures":[{"sig":"MEUCIQDSL1Z4T0d+H7Z62OU9Vox6BjuyKS+NYQmoEknga18W3gIgev5Pd/QCWf+5+kmn0hIfkH3j9viInt8YGVzkZw4OCt0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":986527},"main":"dist/main.js","types":"dist/index.d.ts","module":"dist/module.js","source":"src/index.tsx","gitHead":"4cce0f5a5d5d678d27d786c3efca1260d8b83fbe","scripts":{"build":"parcel build src/annotation-canvas/index.tsx","start":"parcel src/index.html"},"_npmUser":{"name":"xreav3r","email":"martin.schneider@codetopic.eu"},"_npmVersion":"9.6.7","description":"# Usage ``` npm i ```","directories":{},"_nodeVersion":"18.17.1","dependencies":{"konva":"^8.4.2","react":"^18.2.0","lodash":"^4.17.21","react-dom":"^18.2.0","localforage":"^1.10.0","react-konva":"^18.2.5","@techstark/opencv-js":"^4.7.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"npm":"^9.6.3","util":"^0.12.5","uuid":"^9.0.0","axios":"^1.3.4","events":"^3.3.0","parcel":"^2.8.3","install":"^0.13.0","process":"^0.11.10","react-ace":"^10.1.0","typescript":"^4.9.5","@types/node":"^18.15.0","@types/uuid":"^9.0.1","react-color":"^2.19.3","@types/react":"^18.0.28","@mui/material":"^5.11.16","@types/lodash":"^4.14.191","@emotion/react":"^11.10.6","@emotion/styled":"^11.10.6","path-browserify":"^1.0.1","@types/react-dom":"^18.0.11","crypto-browserify":"^3.12.0","stream-browserify":"^3.0.0","@fontsource/roboto":"^4.5.8","@types/react-color":"^3.0.6","@mui/icons-material":"^5.11.16","@parcel/packager-ts":"^2.8.3","react-beautiful-dnd":"^13.1.1","@types/react-beautiful-dnd":"^13.1.3","@parcel/transformer-typescript-types":"^2.8.3"},"_npmOperationalInternal":{"tmp":"tmp/annotation-canvas_0.39.2_1694530320550_0.7451940925099145","host":"s3://npm-registry-packages"}},"0.39.3":{"name":"annotation-canvas","version":"0.39.3","author":{"name":"Martin Schneider","email":"martin.schneider@codetopic.eu"},"_id":"annotation-canvas@0.39.3","maintainers":[{"name":"xreav3r","email":"martin.schneider@codetopic.eu"}],"dist":{"shasum":"1b097dc96cc69dd0376d1d3e5bdbfaa31521fea4","tarball":"https://registry.npmjs.org/annotation-canvas/-/annotation-canvas-0.39.3.tgz","fileCount":36,"integrity":"sha512-+8ZpwTU3rRw5glEftPp28prcl94Zt0nZeS0ZzB8MlIUF+9gO3SCMQt0fVTe61tfoY0w1ZIDGDszbuwND7kx0iw==","signatures":[{"sig":"MEUCIGRFXyxDX7uT0QtEvbgSxWpyjCfoF6ZnM2tBnaqi1SB7AiEAjcPntT89SOe/Er3673Xc3mxhhUFcH3uNhdKMUZnCOe0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":37792395},"main":"dist/main.js","types":"dist/index.d.ts","module":"dist/module.js","source":"src/index.tsx","gitHead":"4cce0f5a5d5d678d27d786c3efca1260d8b83fbe","scripts":{"build":"parcel build src/annotation-canvas/index.tsx","start":"parcel src/index.html"},"_npmUser":{"name":"xreav3r","email":"martin.schneider@codetopic.eu"},"_npmVersion":"9.7.1","description":"# Usage ``` npm i ```","directories":{},"_nodeVersion":"18.16.0","dependencies":{"konva":"^8.4.2","react":"^18.2.0","lodash":"^4.17.21","react-dom":"^18.2.0","localforage":"^1.10.0","react-konva":"^18.2.5","@techstark/opencv-js":"^4.7.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"npm":"^9.6.3","util":"^0.12.5","uuid":"^9.0.0","axios":"^1.3.4","events":"^3.3.0","parcel":"^2.8.3","install":"^0.13.0","process":"^0.11.10","react-ace":"^10.1.0","typescript":"^4.9.5","@types/node":"^18.15.0","@types/uuid":"^9.0.1","react-color":"^2.19.3","@types/react":"^18.0.28","@mui/material":"^5.11.16","@types/lodash":"^4.14.191","@emotion/react":"^11.10.6","@emotion/styled":"^11.10.6","path-browserify":"^1.0.1","@types/react-dom":"^18.0.11","crypto-browserify":"^3.12.0","stream-browserify":"^3.0.0","@fontsource/roboto":"^4.5.8","@types/react-color":"^3.0.6","@mui/icons-material":"^5.11.16","@parcel/packager-ts":"^2.8.3","react-beautiful-dnd":"^13.1.1","@types/react-beautiful-dnd":"^13.1.3","@parcel/transformer-typescript-types":"^2.8.3"},"_npmOperationalInternal":{"tmp":"tmp/annotation-canvas_0.39.3_1696582902596_0.7573437888218488","host":"s3://npm-registry-packages"}},"0.39.4":{"name":"annotation-canvas","version":"0.39.4","author":{"name":"Martin Schneider","email":"martin.schneider@codetopic.eu"},"_id":"annotation-canvas@0.39.4","maintainers":[{"name":"xreav3r","email":"martin.schneider@codetopic.eu"}],"dist":{"shasum":"fe264ca0afb98bd18998a1eafd1ca7f199497590","tarball":"https://registry.npmjs.org/annotation-canvas/-/annotation-canvas-0.39.4.tgz","fileCount":37,"integrity":"sha512-Lml6J9nC01Z/zJehmBspAUtHjUYhETUA+xMQxVns+RBSkGO9EW1qVQM+lZsGva787bJf6XcdIYoY2sC0w3Ausg==","signatures":[{"sig":"MEQCIDkWViCiT2iCMCsuU6dvhWQHPP/BLbkVpto4fcJmf+PHAiBb9WTD7qUsmysHfQjg6DW8t2xLbT/fcfz4QEMkzzGtQw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1000457},"main":"dist/main.js","types":"dist/index.d.ts","module":"dist/module.js","source":"src/index.tsx","gitHead":"ea87cfb48b60764ef0926ef4a3a6c0d75e51656e","scripts":{"build":"parcel build src/annotation-canvas/index.tsx","start":"parcel src/index.html"},"_npmUser":{"name":"xreav3r","email":"martin.schneider@codetopic.eu"},"_npmVersion":"9.8.1","description":"# Usage ``` npm i ```","directories":{},"_nodeVersion":"18.18.0","dependencies":{"konva":"^8.4.2","react":"^18.2.0","lodash":"^4.17.21","react-dom":"^18.2.0","localforage":"^1.10.0","react-konva":"^18.2.5","@techstark/opencv-js":"^4.7.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"npm":"^9.6.3","util":"^0.12.5","uuid":"^9.0.0","axios":"^1.3.4","events":"^3.3.0","parcel":"^2.8.3","install":"^0.13.0","process":"^0.11.10","react-ace":"^10.1.0","typescript":"^4.9.5","@types/node":"^18.15.0","@types/uuid":"^9.0.1","react-color":"^2.19.3","@types/react":"^18.0.28","@mui/material":"^5.11.16","@types/lodash":"^4.14.191","@emotion/react":"^11.10.6","@emotion/styled":"^11.10.6","path-browserify":"^1.0.1","@types/react-dom":"^18.0.11","crypto-browserify":"^3.12.0","stream-browserify":"^3.0.0","@fontsource/roboto":"^4.5.8","@types/react-color":"^3.0.6","@mui/icons-material":"^5.11.16","@parcel/packager-ts":"^2.8.3","react-beautiful-dnd":"^13.1.1","@types/react-beautiful-dnd":"^13.1.3","@parcel/transformer-typescript-types":"^2.8.3"},"_npmOperationalInternal":{"tmp":"tmp/annotation-canvas_0.39.4_1696589038777_0.6329880229573019","host":"s3://npm-registry-packages"}},"0.39.5":{"name":"annotation-canvas","version":"0.39.5","author":{"name":"Martin Schneider","email":"martin.schneider@codetopic.eu"},"_id":"annotation-canvas@0.39.5","maintainers":[{"name":"xreav3r","email":"martin.schneider@codetopic.eu"}],"dist":{"shasum":"2d35c9e6ea95645e48199dbb6a19cd689d0e0328","tarball":"https://registry.npmjs.org/annotation-canvas/-/annotation-canvas-0.39.5.tgz","fileCount":37,"integrity":"sha512-Tg1OQbDU7lJBI/qsl/AcQviv4ukAHaYXLlB37cYDQ1VNuzGGf1q9uJbIU7HHFIDfnulei70ezGNu6COmUTp6xg==","signatures":[{"sig":"MEYCIQCJRxdNdjd9ECtEwxTqHjjsTulSsneIHQIs3/EZCrMungIhAK+q49uIOqn2v1EUXp2x2H7tbbKIFEsL0/FttbEt6g2H","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1006538},"main":"dist/main.js","types":"dist/index.d.ts","module":"dist/module.js","source":"src/index.tsx","gitHead":"f350095e5fa674e92838e2587ffb44b1731a0404","scripts":{"build":"parcel build src/annotation-canvas/index.tsx","start":"parcel src/index.html"},"_npmUser":{"name":"xreav3r","email":"martin.schneider@codetopic.eu"},"_npmVersion":"9.8.1","description":"# Usage ``` npm i ```","directories":{},"_nodeVersion":"18.18.0","dependencies":{"konva":"^8.4.2","react":"^18.2.0","lodash":"^4.17.21","react-dom":"^18.2.0","localforage":"^1.10.0","react-konva":"^18.2.5","@techstark/opencv-js":"^4.7.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"npm":"^9.6.3","util":"^0.12.5","uuid":"^9.0.0","axios":"^1.3.4","events":"^3.3.0","parcel":"^2.8.3","install":"^0.13.0","process":"^0.11.10","react-ace":"^10.1.0","typescript":"^4.9.5","@types/node":"^18.15.0","@types/uuid":"^9.0.1","react-color":"^2.19.3","@types/react":"^18.0.28","@mui/material":"^5.11.16","@types/lodash":"^4.14.191","@emotion/react":"^11.10.6","@emotion/styled":"^11.10.6","path-browserify":"^1.0.1","@types/react-dom":"^18.0.11","crypto-browserify":"^3.12.0","stream-browserify":"^3.0.0","@fontsource/roboto":"^4.5.8","@types/react-color":"^3.0.6","@mui/icons-material":"^5.11.16","@parcel/packager-ts":"^2.8.3","react-beautiful-dnd":"^13.1.1","@types/react-beautiful-dnd":"^13.1.3","@parcel/transformer-typescript-types":"^2.8.3"},"_npmOperationalInternal":{"tmp":"tmp/annotation-canvas_0.39.5_1696966351637_0.08889448904816155","host":"s3://npm-registry-packages"}},"0.39.6":{"name":"annotation-canvas","version":"0.39.6","author":{"name":"Martin Schneider","email":"martin.schneider@codetopic.eu"},"_id":"annotation-canvas@0.39.6","maintainers":[{"name":"xreav3r","email":"martin.schneider@codetopic.eu"}],"dist":{"shasum":"e8cbfa4bf07596fb4044ea9b460cc33e0f912f31","tarball":"https://registry.npmjs.org/annotation-canvas/-/annotation-canvas-0.39.6.tgz","fileCount":37,"integrity":"sha512-FuDVhAKGk8qeiB164OpXQ9TVuTytuotkv7lr5LdIhm8qw8SrgTlWlpoBy5AwoZgIBL15LcJOzykAByrRramSdw==","signatures":[{"sig":"MEUCIQCceGinzNJVhS57f32NVChLkWDaju2ZsHhyXFaMKriVXwIgQOZb5jfOkiUNK+dls9tdFpkZW0X5gmLEMmcK9tFNkmc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1008649},"main":"dist/main.js","types":"dist/index.d.ts","module":"dist/module.js","source":"src/index.tsx","gitHead":"5a56dc764239facce27f8dff7a77805660cf3077","scripts":{"build":"parcel build src/annotation-canvas/index.tsx","start":"parcel src/index.html"},"_npmUser":{"name":"xreav3r","email":"martin.schneider@codetopic.eu"},"_npmVersion":"9.8.1","description":"# Usage ``` npm i ```","directories":{},"_nodeVersion":"18.18.1","dependencies":{"konva":"^8.4.2","react":"^18.2.0","lodash":"^4.17.21","react-dom":"^18.2.0","localforage":"^1.10.0","react-konva":"^18.2.5","@techstark/opencv-js":"^4.7.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"npm":"^9.6.3","util":"^0.12.5","uuid":"^9.0.0","axios":"^1.3.4","events":"^3.3.0","parcel":"^2.8.3","install":"^0.13.0","process":"^0.11.10","react-ace":"^10.1.0","typescript":"^4.9.5","@types/node":"^18.15.0","@types/uuid":"^9.0.1","react-color":"^2.19.3","@types/react":"^18.0.28","@mui/material":"^5.11.16","@types/lodash":"^4.14.191","@emotion/react":"^11.10.6","@emotion/styled":"^11.10.6","path-browserify":"^1.0.1","@types/react-dom":"^18.0.11","crypto-browserify":"^3.12.0","stream-browserify":"^3.0.0","@fontsource/roboto":"^4.5.8","@types/react-color":"^3.0.6","@mui/icons-material":"^5.11.16","@parcel/packager-ts":"^2.8.3","react-beautiful-dnd":"^13.1.1","@types/react-beautiful-dnd":"^13.1.3","@parcel/transformer-typescript-types":"^2.8.3"},"_npmOperationalInternal":{"tmp":"tmp/annotation-canvas_0.39.6_1697472915426_0.5030081392045129","host":"s3://npm-registry-packages"}},"0.40.0":{"name":"annotation-canvas","version":"0.40.0","author":{"name":"Martin Schneider","email":"martin.schneider@codetopic.eu"},"_id":"annotation-canvas@0.40.0","maintainers":[{"name":"xreav3r","email":"martin.schneider@codetopic.eu"}],"dist":{"shasum":"ce2cbb1309a532383f03d59b05e62bf565ef7701","tarball":"https://registry.npmjs.org/annotation-canvas/-/annotation-canvas-0.40.0.tgz","fileCount":37,"integrity":"sha512-8NwyPtJpYgYAP23fxPzMgMnV7rxEI0JEoGe9/WIB/6S2ctgzO4CL5kGXZXIVVHQQGSXdDTwJ2mVqsd8FGtgyFw==","signatures":[{"sig":"MEUCIHLeWM0mPn0N3dNHt0HOf4P6POMkWK8NmiZJ52Y71MvMAiEAmki0pIc6yBb3q3Vlbyr6dRE1mtFTQ+NUmUon+xGPtsE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1012557},"main":"dist/main.js","types":"dist/index.d.ts","module":"dist/module.js","source":"src/index.tsx","gitHead":"57014369e18a9196b2c6863d683465ffdd3c396b","scripts":{"build":"parcel build src/annotation-canvas/index.tsx","start":"parcel src/index.html"},"_npmUser":{"name":"xreav3r","email":"martin.schneider@codetopic.eu"},"_npmVersion":"9.8.1","description":"# Usage ``` npm i ```","directories":{},"_nodeVersion":"18.18.2","dependencies":{"konva":"^8.4.2","react":"^18.2.0","lodash":"^4.17.21","react-dom":"^18.2.0","localforage":"^1.10.0","react-konva":"^18.2.5","@techstark/opencv-js":"^4.7.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"npm":"^9.6.3","util":"^0.12.5","uuid":"^9.0.0","axios":"^1.3.4","events":"^3.3.0","parcel":"^2.8.3","install":"^0.13.0","process":"^0.11.10","react-ace":"^10.1.0","typescript":"^4.9.5","@types/node":"^18.15.0","@types/uuid":"^9.0.1","react-color":"^2.19.3","@types/react":"^18.0.28","@mui/material":"^5.11.16","@types/lodash":"^4.14.191","@emotion/react":"^11.10.6","@emotion/styled":"^11.10.6","path-browserify":"^1.0.1","@types/react-dom":"^18.0.11","crypto-browserify":"^3.12.0","stream-browserify":"^3.0.0","@fontsource/roboto":"^4.5.8","@types/react-color":"^3.0.6","@mui/icons-material":"^5.11.16","@parcel/packager-ts":"^2.8.3","react-beautiful-dnd":"^13.1.1","@types/react-beautiful-dnd":"^13.1.3","@parcel/transformer-typescript-types":"^2.8.3"},"_npmOperationalInternal":{"tmp":"tmp/annotation-canvas_0.40.0_1698852314105_0.9574017122417944","host":"s3://npm-registry-packages"}},"0.41.0":{"name":"annotation-canvas","version":"0.41.0","author":{"name":"Martin Schneider","email":"martin.schneider@codetopic.eu"},"_id":"annotation-canvas@0.41.0","maintainers":[{"name":"xreav3r","email":"martin.schneider@codetopic.eu"}],"dist":{"shasum":"e6f07e698aba2a95da7434a551376b713e53f56f","tarball":"https://registry.npmjs.org/annotation-canvas/-/annotation-canvas-0.41.0.tgz","fileCount":37,"integrity":"sha512-Ea8oNQsLgmPOdhVBOXkjqPkk3PLk34prMosuWHly6HR9ZWUxbkegqjwPvFS9QKog9HYVALdiiOe8kXmDL1+5Kw==","signatures":[{"sig":"MEUCIBmihim67MuUQVaZZMBDodNj6Uvu+EJXpKwevfCkElawAiEAoIBqiT5cX6fS8bWRsGLLdWW/bCiePeS0AIvEcSD+8H8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1016603},"main":"dist/main.js","types":"dist/index.d.ts","module":"dist/module.js","source":"src/index.tsx","gitHead":"5ae45198b617640ae813bf29fa1b874671560457","scripts":{"build":"parcel build src/annotation-canvas/index.tsx","start":"parcel src/index.html"},"_npmUser":{"name":"xreav3r","email":"martin.schneider@codetopic.eu"},"_npmVersion":"9.8.1","description":"# Usage ``` npm i ```","directories":{},"_nodeVersion":"18.18.2","dependencies":{"konva":"^8.4.2","react":"^18.2.0","lodash":"^4.17.21","react-dom":"^18.2.0","localforage":"^1.10.0","react-konva":"^18.2.5","@techstark/opencv-js":"^4.7.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"npm":"^9.6.3","util":"^0.12.5","uuid":"^9.0.0","axios":"^1.3.4","events":"^3.3.0","parcel":"^2.8.3","install":"^0.13.0","process":"^0.11.10","react-ace":"^10.1.0","typescript":"^4.9.5","@types/node":"^18.15.0","@types/uuid":"^9.0.1","react-color":"^2.19.3","@types/react":"^18.0.28","@mui/material":"^5.11.16","@types/lodash":"^4.14.191","@emotion/react":"^11.10.6","@emotion/styled":"^11.10.6","path-browserify":"^1.0.1","@types/react-dom":"^18.0.11","crypto-browserify":"^3.12.0","stream-browserify":"^3.0.0","@fontsource/roboto":"^4.5.8","@types/react-color":"^3.0.6","@mui/icons-material":"^5.11.16","@parcel/packager-ts":"^2.8.3","react-beautiful-dnd":"^13.1.1","@types/react-beautiful-dnd":"^13.1.3","@parcel/transformer-typescript-types":"^2.8.3"},"_npmOperationalInternal":{"tmp":"tmp/annotation-canvas_0.41.0_1700063253257_0.548930256976617","host":"s3://npm-registry-packages"}},"0.42.0":{"name":"annotation-canvas","version":"0.42.0","author":{"name":"Martin Schneider","email":"martin.schneider@codetopic.eu"},"_id":"annotation-canvas@0.42.0","maintainers":[{"name":"xreav3r","email":"martin.schneider@codetopic.eu"}],"dist":{"shasum":"937ed6b1b869c4b24f749ef48581f5c25d7d6b69","tarball":"https://registry.npmjs.org/annotation-canvas/-/annotation-canvas-0.42.0.tgz","fileCount":37,"integrity":"sha512-9DiIWdSRa0z+UuQTOILKHCrhmAkjDs4xf9Qiw+GfQsSrFBVmQyGe5aAYbcA++bejJTVDXUu8n9Tmv+fF8xSTgA==","signatures":[{"sig":"MEUCIQCK66jMkDko/70OhGAAqvEvkILX7BafzoiuOxY4HnmD8gIgIRDR1lNUqTMrDDUq2bHkGaeJY6qJbuLWKA50oGk6R00=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1022266},"main":"dist/main.js","types":"dist/index.d.ts","module":"dist/module.js","source":"src/index.tsx","gitHead":"26d70df7fba6a4990157cc8978c5adef1a66fc38","scripts":{"build":"parcel build src/annotation-canvas/index.tsx","start":"parcel src/index.html"},"_npmUser":{"name":"xreav3r","email":"martin.schneider@codetopic.eu"},"_npmVersion":"9.8.1","description":"# Usage ``` npm i ```","directories":{},"_nodeVersion":"18.18.2","dependencies":{"konva":"^8.4.2","react":"^18.2.0","lodash":"^4.17.21","react-dom":"^18.2.0","localforage":"^1.10.0","react-konva":"^18.2.5","@techstark/opencv-js":"^4.7.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"npm":"^9.6.3","util":"^0.12.5","uuid":"^9.0.0","axios":"^1.3.4","events":"^3.3.0","parcel":"^2.8.3","install":"^0.13.0","process":"^0.11.10","react-ace":"^10.1.0","typescript":"^4.9.5","@types/node":"^18.15.0","@types/uuid":"^9.0.1","react-color":"^2.19.3","@types/react":"^18.0.28","@mui/material":"^5.11.16","@types/lodash":"^4.14.191","@emotion/react":"^11.10.6","@emotion/styled":"^11.10.6","path-browserify":"^1.0.1","@types/react-dom":"^18.0.11","crypto-browserify":"^3.12.0","stream-browserify":"^3.0.0","@fontsource/roboto":"^4.5.8","@types/react-color":"^3.0.6","@mui/icons-material":"^5.11.16","@parcel/packager-ts":"^2.8.3","react-beautiful-dnd":"^13.1.1","@types/react-beautiful-dnd":"^13.1.3","@parcel/transformer-typescript-types":"^2.8.3"},"_npmOperationalInternal":{"tmp":"tmp/annotation-canvas_0.42.0_1700666440202_0.21862931139833508","host":"s3://npm-registry-packages"}},"0.42.1":{"name":"annotation-canvas","version":"0.42.1","author":{"name":"Martin Schneider","email":"martin.schneider@codetopic.eu"},"_id":"annotation-canvas@0.42.1","maintainers":[{"name":"xreav3r","email":"martin.schneider@codetopic.eu"}],"dist":{"shasum":"1647c3cee84e4633e82aef380d90f8667430849c","tarball":"https://registry.npmjs.org/annotation-canvas/-/annotation-canvas-0.42.1.tgz","fileCount":37,"integrity":"sha512-WVeNPogdtGtno8XtExZrjqq4jrZl/ufyjq5i+cprq0ZoXD0Klt/7vIRbXBe9+4cjiMRnqX4TMYNy6m1rxJPo5w==","signatures":[{"sig":"MEUCIEHhi7vz+lOuvOt8WAliPKS+vLeVy3P6e5drkdBfODIPAiEAts2fUxNj/UehWX1jTWT+7IMoleC1nT6GF7axOnhhQ7E=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1024798},"main":"dist/main.js","types":"dist/index.d.ts","module":"dist/module.js","source":"src/index.tsx","gitHead":"65aa3f9a50e95f3c391f1d05c3225c26312a0996","scripts":{"build":"parcel build src/annotation-canvas/index.tsx","start":"parcel src/index.html"},"_npmUser":{"name":"xreav3r","email":"martin.schneider@codetopic.eu"},"_npmVersion":"9.8.1","description":"# Usage ``` npm i ```","directories":{},"_nodeVersion":"18.18.2","dependencies":{"konva":"^8.4.2","react":"^18.2.0","lodash":"^4.17.21","react-dom":"^18.2.0","localforage":"^1.10.0","react-konva":"^18.2.5","@techstark/opencv-js":"^4.7.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"npm":"^9.6.3","util":"^0.12.5","uuid":"^9.0.0","axios":"^1.3.4","events":"^3.3.0","parcel":"^2.8.3","install":"^0.13.0","process":"^0.11.10","react-ace":"^10.1.0","typescript":"^4.9.5","@types/node":"^18.15.0","@types/uuid":"^9.0.1","react-color":"^2.19.3","@types/react":"^18.0.28","@mui/material":"^5.11.16","@types/lodash":"^4.14.191","@emotion/react":"^11.10.6","@emotion/styled":"^11.10.6","path-browserify":"^1.0.1","@types/react-dom":"^18.0.11","crypto-browserify":"^3.12.0","stream-browserify":"^3.0.0","@fontsource/roboto":"^4.5.8","@types/react-color":"^3.0.6","@mui/icons-material":"^5.11.16","@parcel/packager-ts":"^2.8.3","react-beautiful-dnd":"^13.1.1","@types/react-beautiful-dnd":"^13.1.3","@parcel/transformer-typescript-types":"^2.8.3"},"_npmOperationalInternal":{"tmp":"tmp/annotation-canvas_0.42.1_1701181151498_0.8093481424871125","host":"s3://npm-registry-packages"}},"0.42.2":{"name":"annotation-canvas","version":"0.42.2","author":{"name":"Martin Schneider","email":"martin.schneider@codetopic.eu"},"_id":"annotation-canvas@0.42.2","maintainers":[{"name":"xreav3r","email":"martin.schneider@codetopic.eu"}],"dist":{"shasum":"8bd2b12a0e0c0c360390bdbb46bc7376b4b95b6b","tarball":"https://registry.npmjs.org/annotation-canvas/-/annotation-canvas-0.42.2.tgz","fileCount":37,"integrity":"sha512-a9aFG00djTLt/6VgBpnDMW2l89M1LQygE0Hi71F6ehvjXdDWifEQVbZXkntb0mwt/G7rrVsKZbfT3JuRN8PDsA==","signatures":[{"sig":"MEQCIEH2xWuBj4HwKtAygeMFQ2lYH5aMJnsWB8/bd2sKYXwrAiA1AjTP/0dn7r+Et8AlkLf3lHol68YLuYb1xOX2XFTWVA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1024535},"main":"dist/main.js","types":"dist/index.d.ts","module":"dist/module.js","source":"src/index.tsx","gitHead":"2ed8910fc89678787adba5c4affa90be719cc0ef","scripts":{"build":"parcel build src/annotation-canvas/index.tsx","start":"parcel src/index.html"},"_npmUser":{"name":"xreav3r","email":"martin.schneider@codetopic.eu"},"_npmVersion":"9.8.1","description":"# Usage ``` npm i ```","directories":{},"_nodeVersion":"18.18.2","dependencies":{"konva":"^8.4.2","react":"^18.2.0","lodash":"^4.17.21","react-dom":"^18.2.0","localforage":"^1.10.0","react-konva":"^18.2.5","@techstark/opencv-js":"^4.7.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"npm":"^9.6.3","util":"^0.12.5","uuid":"^9.0.0","axios":"^1.3.4","events":"^3.3.0","parcel":"^2.8.3","install":"^0.13.0","process":"^0.11.10","react-ace":"^10.1.0","typescript":"^4.9.5","@types/node":"^18.15.0","@types/uuid":"^9.0.1","react-color":"^2.19.3","@types/react":"^18.0.28","@mui/material":"^5.11.16","@types/lodash":"^4.14.191","@emotion/react":"^11.10.6","@emotion/styled":"^11.10.6","path-browserify":"^1.0.1","@types/react-dom":"^18.0.11","crypto-browserify":"^3.12.0","stream-browserify":"^3.0.0","@fontsource/roboto":"^4.5.8","@types/react-color":"^3.0.6","@mui/icons-material":"^5.11.16","@parcel/packager-ts":"^2.8.3","react-beautiful-dnd":"^13.1.1","@types/react-beautiful-dnd":"^13.1.3","@parcel/transformer-typescript-types":"^2.8.3"},"_npmOperationalInternal":{"tmp":"tmp/annotation-canvas_0.42.2_1701183040030_0.7952849170453646","host":"s3://npm-registry-packages"}},"0.42.3":{"name":"annotation-canvas","version":"0.42.3","author":{"name":"Martin Schneider","email":"martin.schneider@codetopic.eu"},"_id":"annotation-canvas@0.42.3","maintainers":[{"name":"xreav3r","email":"martin.schneider@codetopic.eu"}],"dist":{"shasum":"6ab1b5d8e31941c41986f9d3bc5a42bfbbc76bdd","tarball":"https://registry.npmjs.org/annotation-canvas/-/annotation-canvas-0.42.3.tgz","fileCount":37,"integrity":"sha512-MZOYCFNZ4h2DnGTfmPq5hYSrPmFF1Xq8HyEHEQHLFF3rKDQtksrB6BlSauW9HZpkG3h52t+aZko0fBbRkQ18dQ==","signatures":[{"sig":"MEUCIQCWFE655Z7gTSCaO2yryelCbVuvR5C8hrV5v1xJD4HKPAIgD6HfjT2O5+X9fif5Wgr+6JnaSIqlei/d0yB2McmNa/U=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1025065},"main":"dist/main.js","types":"dist/index.d.ts","module":"dist/module.js","source":"src/index.tsx","gitHead":"6d912d4bbc9de684848026c73f5185ec658bfafd","scripts":{"build":"parcel build src/annotation-canvas/index.tsx","start":"parcel src/index.html"},"_npmUser":{"name":"xreav3r","email":"martin.schneider@codetopic.eu"},"_npmVersion":"10.2.3","description":"# Usage ``` npm i ```","directories":{},"_nodeVersion":"18.19.0","dependencies":{"konva":"^8.4.2","react":"^18.2.0","lodash":"^4.17.21","react-dom":"^18.2.0","localforage":"^1.10.0","react-konva":"^18.2.5","@techstark/opencv-js":"^4.7.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"npm":"^9.6.3","util":"^0.12.5","uuid":"^9.0.0","axios":"^1.3.4","events":"^3.3.0","parcel":"^2.8.3","install":"^0.13.0","process":"^0.11.10","react-ace":"^10.1.0","typescript":"^4.9.5","@types/node":"^18.15.0","@types/uuid":"^9.0.1","react-color":"^2.19.3","@types/react":"^18.0.28","@mui/material":"^5.11.16","@types/lodash":"^4.14.191","@emotion/react":"^11.10.6","@emotion/styled":"^11.10.6","path-browserify":"^1.0.1","@types/react-dom":"^18.0.11","crypto-browserify":"^3.12.0","stream-browserify":"^3.0.0","@fontsource/roboto":"^4.5.8","@types/react-color":"^3.0.6","@mui/icons-material":"^5.11.16","@parcel/packager-ts":"^2.8.3","react-beautiful-dnd":"^13.1.1","@types/react-beautiful-dnd":"^13.1.3","@parcel/transformer-typescript-types":"^2.8.3"},"_npmOperationalInternal":{"tmp":"tmp/annotation-canvas_0.42.3_1701689423299_0.12471984529477531","host":"s3://npm-registry-packages"}},"0.42.4":{"name":"annotation-canvas","version":"0.42.4","author":{"name":"Martin Schneider","email":"martin.schneider@codetopic.eu"},"_id":"annotation-canvas@0.42.4","maintainers":[{"name":"xreav3r","email":"martin.schneider@codetopic.eu"}],"dist":{"shasum":"19520c03d5570d31138126288b81ed10df774c16","tarball":"https://registry.npmjs.org/annotation-canvas/-/annotation-canvas-0.42.4.tgz","fileCount":37,"integrity":"sha512-qykO7Sy24au9/b+wYv70iSFhFF5hnVvpdGEBgmn10Cnp+tSji/Vf5pE+oCSbmrA/b1tgfE6iLp5P0HDIhJvdtQ==","signatures":[{"sig":"MEYCIQD0GZik6nXs2klKoOpwTH8PctN5rtqAeDpw6iTlo7GcHgIhAKeyQ5PhCyDYm0z1HJmRSBjZ4/tWFBJAgD9X16kpe4MC","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1025300},"main":"dist/main.js","types":"dist/index.d.ts","module":"dist/module.js","source":"src/index.tsx","gitHead":"b9bfddc6563fb7e17a4b26d8248b8f17058fe736","scripts":{"build":"parcel build src/annotation-canvas/index.tsx","start":"parcel src/index.html"},"_npmUser":{"name":"xreav3r","email":"martin.schneider@codetopic.eu"},"_npmVersion":"10.2.3","description":"# Usage ``` npm i ```","directories":{},"_nodeVersion":"18.19.0","dependencies":{"konva":"^8.4.2","react":"^18.2.0","lodash":"^4.17.21","react-dom":"^18.2.0","localforage":"^1.10.0","react-konva":"^18.2.5","@techstark/opencv-js":"^4.7.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"npm":"^9.6.3","util":"^0.12.5","uuid":"^9.0.0","axios":"^1.3.4","events":"^3.3.0","parcel":"^2.8.3","install":"^0.13.0","process":"^0.11.10","react-ace":"^10.1.0","typescript":"^4.9.5","@types/node":"^18.15.0","@types/uuid":"^9.0.1","react-color":"^2.19.3","@types/react":"^18.0.28","@mui/material":"^5.11.16","@types/lodash":"^4.14.191","@emotion/react":"^11.10.6","@emotion/styled":"^11.10.6","path-browserify":"^1.0.1","@types/react-dom":"^18.0.11","crypto-browserify":"^3.12.0","stream-browserify":"^3.0.0","@fontsource/roboto":"^4.5.8","@types/react-color":"^3.0.6","@mui/icons-material":"^5.11.16","@parcel/packager-ts":"^2.8.3","react-beautiful-dnd":"^13.1.1","@types/react-beautiful-dnd":"^13.1.3","@parcel/transformer-typescript-types":"^2.8.3"},"_npmOperationalInternal":{"tmp":"tmp/annotation-canvas_0.42.4_1701697269473_0.7203451352286057","host":"s3://npm-registry-packages"}},"0.42.5":{"name":"annotation-canvas","version":"0.42.5","author":{"name":"Martin Schneider","email":"martin.schneider@codetopic.eu"},"_id":"annotation-canvas@0.42.5","maintainers":[{"name":"xreav3r","email":"martin.schneider@codetopic.eu"}],"dist":{"shasum":"a28d2d645d9e474dd38608245cfdb1fa3af74eb5","tarball":"https://registry.npmjs.org/annotation-canvas/-/annotation-canvas-0.42.5.tgz","fileCount":37,"integrity":"sha512-B0Fh7SAZn8X3JJ2f/ds5F/15iF3g3zxPUb1jpMLsGN8ZfawPF4mT4/beFe/mN0ZZmfKF6G4gOh1AAwvRlBjt5g==","signatures":[{"sig":"MEYCIQDSIMmGf8skf98UbyKhwXOZVVeiK0JQsotLLlSvF8MEYQIhAO1pGXuDS5/hfcBwxt7j80FfaXsxNJO7qfjveF8xZELE","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1024837},"main":"dist/main.js","types":"dist/index.d.ts","module":"dist/module.js","source":"src/index.tsx","gitHead":"ce3a6d22ff9e80d0a05d6c05e6bdb290dd8e4c03","scripts":{"build":"parcel build src/annotation-canvas/index.tsx","start":"parcel src/index.html"},"_npmUser":{"name":"xreav3r","email":"martin.schneider@codetopic.eu"},"_npmVersion":"10.2.3","description":"# Usage ``` npm i ```","directories":{},"_nodeVersion":"18.19.0","dependencies":{"konva":"^8.4.2","react":"^18.2.0","lodash":"^4.17.21","react-dom":"^18.2.0","localforage":"^1.10.0","react-konva":"^18.2.5","@techstark/opencv-js":"^4.7.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"npm":"^9.6.3","util":"^0.12.5","uuid":"^9.0.0","axios":"^1.3.4","events":"^3.3.0","parcel":"^2.8.3","install":"^0.13.0","process":"^0.11.10","react-ace":"^10.1.0","typescript":"^4.9.5","@types/node":"^18.15.0","@types/uuid":"^9.0.1","react-color":"^2.19.3","@types/react":"^18.0.28","@mui/material":"^5.11.16","@types/lodash":"^4.14.191","@emotion/react":"^11.10.6","@emotion/styled":"^11.10.6","path-browserify":"^1.0.1","@types/react-dom":"^18.0.11","crypto-browserify":"^3.12.0","stream-browserify":"^3.0.0","@fontsource/roboto":"^4.5.8","@types/react-color":"^3.0.6","@mui/icons-material":"^5.11.16","@parcel/packager-ts":"^2.8.3","react-beautiful-dnd":"^13.1.1","@types/react-beautiful-dnd":"^13.1.3","@parcel/transformer-typescript-types":"^2.8.3"},"_npmOperationalInternal":{"tmp":"tmp/annotation-canvas_0.42.5_1701712992839_0.7268491795505645","host":"s3://npm-registry-packages"}},"0.42.6":{"name":"annotation-canvas","version":"0.42.6","author":{"name":"Martin Schneider","email":"martin.schneider@codetopic.eu"},"_id":"annotation-canvas@0.42.6","maintainers":[{"name":"xreav3r","email":"martin.schneider@codetopic.eu"}],"dist":{"shasum":"7a099c3db77c41a6b9a67d108bf0ef43b550d876","tarball":"https://registry.npmjs.org/annotation-canvas/-/annotation-canvas-0.42.6.tgz","fileCount":37,"integrity":"sha512-DtAyO8YUY83NMCd9xJmyJsjVA7lo56RjDmCgciX+zBungPubkcxHO48w9spuaBGFvm1S88QyULY0nAYB+f10mA==","signatures":[{"sig":"MEQCIBAruSNHN2RZZ7nHLhB2RRyJcCXo04kuCY6JCd3lXjVoAiBR8GjzhYSMrQJi/8CNeDsjKXeD9h5/URnQtukS+DRM5g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1024479},"main":"dist/main.js","types":"dist/index.d.ts","module":"dist/module.js","source":"src/index.tsx","gitHead":"c0c34aa4804cc20c9d8607fa1b2fd678dc7910b3","scripts":{"build":"parcel build src/annotation-canvas/index.tsx","start":"parcel src/index.html"},"_npmUser":{"name":"xreav3r","email":"martin.schneider@codetopic.eu"},"_npmVersion":"10.2.3","description":"# Usage ``` npm i ```","directories":{},"_nodeVersion":"18.19.0","dependencies":{"konva":"^8.4.2","react":"^18.2.0","lodash":"^4.17.21","react-dom":"^18.2.0","localforage":"^1.10.0","react-konva":"^18.2.5","@techstark/opencv-js":"^4.7.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"npm":"^9.6.3","util":"^0.12.5","uuid":"^9.0.0","axios":"^1.3.4","events":"^3.3.0","parcel":"^2.8.3","install":"^0.13.0","process":"^0.11.10","react-ace":"^10.1.0","typescript":"^4.9.5","@types/node":"^18.15.0","@types/uuid":"^9.0.1","react-color":"^2.19.3","@types/react":"^18.0.28","@mui/material":"^5.11.16","@types/lodash":"^4.14.191","@emotion/react":"^11.10.6","@emotion/styled":"^11.10.6","path-browserify":"^1.0.1","@types/react-dom":"^18.0.11","crypto-browserify":"^3.12.0","stream-browserify":"^3.0.0","@fontsource/roboto":"^4.5.8","@types/react-color":"^3.0.6","@mui/icons-material":"^5.11.16","@parcel/packager-ts":"^2.8.3","react-beautiful-dnd":"^13.1.1","@types/react-beautiful-dnd":"^13.1.3","@parcel/transformer-typescript-types":"^2.8.3"},"_npmOperationalInternal":{"tmp":"tmp/annotation-canvas_0.42.6_1701790459854_0.5009727156244543","host":"s3://npm-registry-packages"}},"0.42.7":{"name":"annotation-canvas","version":"0.42.7","author":{"name":"Martin Schneider","email":"martin.schneider@codetopic.eu"},"_id":"annotation-canvas@0.42.7","maintainers":[{"name":"xreav3r","email":"martin.schneider@codetopic.eu"}],"dist":{"shasum":"4be83a5f2e652ef7c927ff04e12ae42cac9c97c7","tarball":"https://registry.npmjs.org/annotation-canvas/-/annotation-canvas-0.42.7.tgz","fileCount":37,"integrity":"sha512-NC/Ph1VHdIJKeavzXokYKHUqjJ728t11YN3JW5V1ZMppYpw0jg2CZzghyMR0lnhaNcysyjK2kfBPXoODhQQpOg==","signatures":[{"sig":"MEUCIQCBC4E0KK8f3fph7N92I1URl55OhMwI46gmpmWYCogQWgIgRH7eGBbLcTE+zc5aZ5W2xtSeeM0xQPuRMaJpzDk8AqY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1024671},"main":"dist/main.js","types":"dist/index.d.ts","module":"dist/module.js","source":"src/index.tsx","gitHead":"3b03764043b8c912f7bf4014818b85fa4163c3c3","scripts":{"build":"parcel build src/annotation-canvas/index.tsx","start":"parcel src/index.html"},"_npmUser":{"name":"xreav3r","email":"martin.schneider@codetopic.eu"},"_npmVersion":"10.2.3","description":"# Usage ``` npm i ```","directories":{},"_nodeVersion":"18.19.0","dependencies":{"konva":"^8.4.2","react":"^18.2.0","lodash":"^4.17.21","react-dom":"^18.2.0","localforage":"^1.10.0","react-konva":"^18.2.5","@techstark/opencv-js":"^4.7.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"npm":"^9.6.3","util":"^0.12.5","uuid":"^9.0.0","axios":"^1.3.4","events":"^3.3.0","parcel":"^2.8.3","install":"^0.13.0","process":"^0.11.10","react-ace":"^10.1.0","typescript":"^4.9.5","@types/node":"^18.15.0","@types/uuid":"^9.0.1","react-color":"^2.19.3","@types/react":"^18.0.28","@mui/material":"^5.11.16","@types/lodash":"^4.14.191","@emotion/react":"^11.10.6","@emotion/styled":"^11.10.6","path-browserify":"^1.0.1","@types/react-dom":"^18.0.11","crypto-browserify":"^3.12.0","stream-browserify":"^3.0.0","@fontsource/roboto":"^4.5.8","@types/react-color":"^3.0.6","@mui/icons-material":"^5.11.16","@parcel/packager-ts":"^2.8.3","react-beautiful-dnd":"^13.1.1","@types/react-beautiful-dnd":"^13.1.3","@parcel/transformer-typescript-types":"^2.8.3"},"_npmOperationalInternal":{"tmp":"tmp/annotation-canvas_0.42.7_1701871375737_0.12643219214814017","host":"s3://npm-registry-packages"}},"0.42.8":{"name":"annotation-canvas","version":"0.42.8","author":{"name":"Martin Schneider","email":"martin.schneider@codetopic.eu"},"_id":"annotation-canvas@0.42.8","maintainers":[{"name":"xreav3r","email":"martin.schneider@codetopic.eu"}],"dist":{"shasum":"799355f24f40e4d49f5e13c16ec21b6da74e073d","tarball":"https://registry.npmjs.org/annotation-canvas/-/annotation-canvas-0.42.8.tgz","fileCount":37,"integrity":"sha512-YSteQcOYOEuXmpDVxmTx0+8a3Xs5IBzP4xDGCivJxUTrQrRtyLkLVJWX62eDqMx1rIDvGEekYJ8jhfdmXQI80g==","signatures":[{"sig":"MEQCIGlX2am6zQL21ZCEh7R+8hh7P2ZUUOAwgLoEIcgRjKwrAiAdL4jWqKeN6ElNwvE+0F1TDf8QcZkv7b/1eeiRcEQ/gQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1024575},"main":"dist/main.js","types":"dist/index.d.ts","module":"dist/module.js","source":"src/index.tsx","gitHead":"b6c10611e51ee3c01121795519e23bb15d9a28d5","scripts":{"build":"parcel build src/annotation-canvas/index.tsx","start":"parcel src/index.html"},"_npmUser":{"name":"xreav3r","email":"martin.schneider@codetopic.eu"},"_npmVersion":"10.2.3","description":"# Usage ``` npm i ```","directories":{},"_nodeVersion":"18.19.0","dependencies":{"konva":"^8.4.2","react":"^18.2.0","lodash":"^4.17.21","react-dom":"^18.2.0","localforage":"^1.10.0","react-konva":"^18.2.5","@techstark/opencv-js":"^4.7.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"npm":"^9.6.3","util":"^0.12.5","uuid":"^9.0.0","axios":"^1.3.4","events":"^3.3.0","parcel":"^2.8.3","install":"^0.13.0","process":"^0.11.10","react-ace":"^10.1.0","typescript":"^4.9.5","@types/node":"^18.15.0","@types/uuid":"^9.0.1","react-color":"^2.19.3","@types/react":"^18.0.28","@mui/material":"^5.11.16","@types/lodash":"^4.14.191","@emotion/react":"^11.10.6","@emotion/styled":"^11.10.6","path-browserify":"^1.0.1","@types/react-dom":"^18.0.11","crypto-browserify":"^3.12.0","stream-browserify":"^3.0.0","@fontsource/roboto":"^4.5.8","@types/react-color":"^3.0.6","@mui/icons-material":"^5.11.16","@parcel/packager-ts":"^2.8.3","react-beautiful-dnd":"^13.1.1","@types/react-beautiful-dnd":"^13.1.3","@parcel/transformer-typescript-types":"^2.8.3"},"_npmOperationalInternal":{"tmp":"tmp/annotation-canvas_0.42.8_1701877121993_0.35480366555516163","host":"s3://npm-registry-packages"}},"0.42.9":{"name":"annotation-canvas","version":"0.42.9","author":{"name":"Martin Schneider","email":"martin.schneider@codetopic.eu"},"_id":"annotation-canvas@0.42.9","maintainers":[{"name":"xreav3r","email":"martin.schneider@codetopic.eu"}],"dist":{"shasum":"206c9bd981142f76679a8f4c91d196b69b8ad0a8","tarball":"https://registry.npmjs.org/annotation-canvas/-/annotation-canvas-0.42.9.tgz","fileCount":37,"integrity":"sha512-Q37LlkjG45UbjsrNbNb5Z64p419hxdgwzlGtchDMlXYTeNQxZ+f48mtEHD0OAIyYhoYo+WIRITYVTuA6VT3x7g==","signatures":[{"sig":"MEUCIQCcnPpMvGNpzc7On9LUKTm+lHBStfrhDS37+JBs2NAqlAIgfTNSCubdjhSnobVMR4p8RwH+0mGhr1nHbTtPWmyQyM4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1024863},"main":"dist/main.js","types":"dist/index.d.ts","module":"dist/module.js","source":"src/index.tsx","gitHead":"50c991664c15e4356616e83a2a1379a69d8925a0","scripts":{"build":"parcel build src/annotation-canvas/index.tsx","start":"parcel src/index.html"},"_npmUser":{"name":"xreav3r","email":"martin.schneider@codetopic.eu"},"_npmVersion":"10.2.3","description":"# Usage ``` npm i ```","directories":{},"_nodeVersion":"18.19.0","dependencies":{"konva":"^8.4.2","react":"^18.2.0","lodash":"^4.17.21","react-dom":"^18.2.0","localforage":"^1.10.0","react-konva":"^18.2.5","@techstark/opencv-js":"^4.7.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"npm":"^9.6.3","util":"^0.12.5","uuid":"^9.0.0","axios":"^1.3.4","events":"^3.3.0","parcel":"^2.8.3","install":"^0.13.0","process":"^0.11.10","react-ace":"^10.1.0","typescript":"^4.9.5","@types/node":"^18.15.0","@types/uuid":"^9.0.1","react-color":"^2.19.3","@types/react":"^18.0.28","@mui/material":"^5.11.16","@types/lodash":"^4.14.191","@emotion/react":"^11.10.6","@emotion/styled":"^11.10.6","path-browserify":"^1.0.1","@types/react-dom":"^18.0.11","crypto-browserify":"^3.12.0","stream-browserify":"^3.0.0","@fontsource/roboto":"^4.5.8","@types/react-color":"^3.0.6","@mui/icons-material":"^5.11.16","@parcel/packager-ts":"^2.8.3","react-beautiful-dnd":"^13.1.1","@types/react-beautiful-dnd":"^13.1.3","@parcel/transformer-typescript-types":"^2.8.3"},"_npmOperationalInternal":{"tmp":"tmp/annotation-canvas_0.42.9_1701879953904_0.9839324010223458","host":"s3://npm-registry-packages"}},"0.43.0":{"name":"annotation-canvas","version":"0.43.0","author":{"name":"Martin Schneider","email":"martin.schneider@codetopic.eu"},"_id":"annotation-canvas@0.43.0","maintainers":[{"name":"xreav3r","email":"martin.schneider@codetopic.eu"}],"dist":{"shasum":"bfabed74ad9d0f7ed133a7ddff4dcc808bd18dcf","tarball":"https://registry.npmjs.org/annotation-canvas/-/annotation-canvas-0.43.0.tgz","fileCount":37,"integrity":"sha512-/3/0vSRa5+31Pi1CgUJc9SF23IsjjZs2ffg7YcpbVBGMWPsJawIGjOVrpKNwUg/4RvRO1tid5e/YyuvdIy9y2Q==","signatures":[{"sig":"MEYCIQCxClLTpH/9gNVHKDDf5a3NFSiI4uzqMTTC1k0y2fKBZwIhANsMQXwDmDNgv0tVScmToAfzec0dF21g+/mNf2iWk2ys","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1032275},"main":"dist/main.js","types":"dist/index.d.ts","module":"dist/module.js","source":"src/index.tsx","gitHead":"b464dc1d96a4ccfb56d96230315cebb5e0ab912b","scripts":{"build":"parcel build src/annotation-canvas/index.tsx","start":"parcel src/index.html"},"_npmUser":{"name":"xreav3r","email":"martin.schneider@codetopic.eu"},"_npmVersion":"10.2.3","description":"# Usage ``` npm i ```","directories":{},"_nodeVersion":"18.19.0","dependencies":{"konva":"^8.4.2","react":"^18.2.0","lodash":"^4.17.21","react-dom":"^18.2.0","localforage":"^1.10.0","react-konva":"^18.2.5","@techstark/opencv-js":"^4.7.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"npm":"^9.6.3","util":"^0.12.5","uuid":"^9.0.0","axios":"^1.3.4","events":"^3.3.0","parcel":"^2.8.3","install":"^0.13.0","process":"^0.11.10","react-ace":"^10.1.0","typescript":"^4.9.5","@types/node":"^18.15.0","@types/uuid":"^9.0.1","react-color":"^2.19.3","@types/react":"^18.0.28","@mui/material":"^5.11.16","@types/lodash":"^4.14.191","@emotion/react":"^11.10.6","@emotion/styled":"^11.10.6","path-browserify":"^1.0.1","@types/react-dom":"^18.0.11","crypto-browserify":"^3.12.0","stream-browserify":"^3.0.0","@fontsource/roboto":"^4.5.8","@types/react-color":"^3.0.6","@mui/icons-material":"^5.11.16","@parcel/packager-ts":"^2.8.3","react-beautiful-dnd":"^13.1.1","@types/react-beautiful-dnd":"^13.1.3","@parcel/transformer-typescript-types":"^2.8.3"},"_npmOperationalInternal":{"tmp":"tmp/annotation-canvas_0.43.0_1703334084560_0.16307006769758736","host":"s3://npm-registry-packages"}},"0.43.1":{"name":"annotation-canvas","version":"0.43.1","author":{"name":"Martin Schneider","email":"martin.schneider@codetopic.eu"},"_id":"annotation-canvas@0.43.1","maintainers":[{"name":"xreav3r","email":"martin.schneider@codetopic.eu"}],"dist":{"shasum":"29eb107b71086dc47a9c60b265929789e3f58dd8","tarball":"https://registry.npmjs.org/annotation-canvas/-/annotation-canvas-0.43.1.tgz","fileCount":37,"integrity":"sha512-A50snYqVyq5Php0z65VGRifiKkmAeo+QlluX8suBF0KWd93FmVLf3/B1qMx355RGwrMKyHJ0Qr6NnakVD3+xzA==","signatures":[{"sig":"MEQCIHZu1kPYMtCgW7ozv+snGgO7w72MCm6T2sY6bS4z3xhtAiBfRpt1T1ERUhD/F+Arvy8QNXCxTiFRqFWgNJLT6/ff7A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1032668},"main":"dist/main.js","types":"dist/index.d.ts","module":"dist/module.js","source":"src/index.tsx","gitHead":"d641b1d53119b1fffb634bbdb6f93fcd1f6de58b","scripts":{"build":"parcel build src/annotation-canvas/index.tsx","start":"parcel src/index.html"},"_npmUser":{"name":"xreav3r","email":"martin.schneider@codetopic.eu"},"_npmVersion":"10.2.3","description":"# Usage ``` npm i ```","directories":{},"_nodeVersion":"18.19.0","dependencies":{"konva":"^8.4.2","react":"^18.2.0","lodash":"^4.17.21","react-dom":"^18.2.0","localforage":"^1.10.0","react-konva":"^18.2.5","@techstark/opencv-js":"^4.7.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"npm":"^9.6.3","util":"^0.12.5","uuid":"^9.0.0","axios":"^1.3.4","events":"^3.3.0","parcel":"^2.8.3","install":"^0.13.0","process":"^0.11.10","react-ace":"^10.1.0","typescript":"^4.9.5","@types/node":"^18.15.0","@types/uuid":"^9.0.1","react-color":"^2.19.3","@types/react":"^18.0.28","@mui/material":"^5.11.16","@types/lodash":"^4.14.191","@emotion/react":"^11.10.6","@emotion/styled":"^11.10.6","path-browserify":"^1.0.1","@types/react-dom":"^18.0.11","crypto-browserify":"^3.12.0","stream-browserify":"^3.0.0","@fontsource/roboto":"^4.5.8","@types/react-color":"^3.0.6","@mui/icons-material":"^5.11.16","@parcel/packager-ts":"^2.8.3","react-beautiful-dnd":"^13.1.1","@types/react-beautiful-dnd":"^13.1.3","@parcel/transformer-typescript-types":"^2.8.3"},"_npmOperationalInternal":{"tmp":"tmp/annotation-canvas_0.43.1_1706016407462_0.13055181780664737","host":"s3://npm-registry-packages"}},"0.43.2":{"name":"annotation-canvas","version":"0.43.2","author":{"name":"Martin Schneider","email":"martin.schneider@codetopic.eu"},"_id":"annotation-canvas@0.43.2","dist":{"shasum":"e2b91a3b02719873e337523bb411732f38259fd4","tarball":"https://registry.npmjs.org/annotation-canvas/-/annotation-canvas-0.43.2.tgz","fileCount":37,"integrity":"sha512-+JWd9mzSEJzNWPcADV87XO6IMlCR7n27zWQqhOaq2BftV/MmsktnsLZZ3L0bWhfZV1rEcNjJ5XQogNSTGFWJkA==","signatures":[{"sig":"MEQCICf0W64VSGgYHFNJ92OS7i3NZVPYLaHJ2p3tMCtSrxVLAiAzCCP8Swz0aqLYjzxJQA2ZjuflyASO3vBd7/gcblLFrg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1041910},"main":"dist/main.js","types":"dist/index.d.ts","module":"dist/module.js","source":"src/index.tsx","gitHead":"b007b95226f0705a3a6f51c7d650dc4a84da947b","scripts":{"build":"parcel build src/annotation-canvas/index.tsx","start":"parcel src/index.html"},"_npmUser":{"name":"xreav3r","email":"martin.schneider@codetopic.eu"},"_npmVersion":"10.7.0","description":"# Usage ``` npm i ```","directories":{},"_nodeVersion":"18.20.3","dependencies":{"konva":"^8.4.2","react":"^18.2.0","lodash":"^4.17.21","react-dom":"^18.2.0","localforage":"^1.10.0","react-konva":"^18.2.5","@techstark/opencv-js":"^4.7.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"npm":"^9.6.3","util":"^0.12.5","uuid":"^9.0.0","axios":"^1.3.4","events":"^3.3.0","parcel":"^2.8.3","install":"^0.13.0","process":"^0.11.10","react-ace":"^10.1.0","typescript":"^4.9.5","@types/node":"^18.15.0","@types/uuid":"^9.0.1","react-color":"^2.19.3","@types/react":"^18.0.28","@mui/material":"^5.11.16","@types/lodash":"^4.14.191","vm-browserify":"^1.1.2","@emotion/react":"^11.10.6","string_decoder":"^1.3.0","@emotion/styled":"^11.10.6","path-browserify":"^1.0.1","@types/react-dom":"^18.0.11","crypto-browserify":"^3.12.0","stream-browserify":"^3.0.0","@fontsource/roboto":"^4.5.8","@types/react-color":"^3.0.6","@mui/icons-material":"^5.11.16","@parcel/packager-ts":"^2.8.3","react-beautiful-dnd":"^13.1.1","@types/react-beautiful-dnd":"^13.1.3","@parcel/transformer-typescript-types":"^2.8.3"},"_npmOperationalInternal":{"tmp":"tmp/annotation-canvas_0.43.2_1719243754402_0.41000778772748614","host":"s3://npm-registry-packages"}},"0.43.3":{"name":"annotation-canvas","version":"0.43.3","author":{"name":"Martin Schneider","email":"martin.schneider@codetopic.eu"},"_id":"annotation-canvas@0.43.3","maintainers":[{"name":"xreav3r","email":"martin.schneider@codetopic.eu"}],"dist":{"shasum":"09b65b1ca897def5c8c7669857fdcd2a2a622c88","tarball":"https://registry.npmjs.org/annotation-canvas/-/annotation-canvas-0.43.3.tgz","fileCount":37,"integrity":"sha512-pcwbqlpggItEY4S4vHbX02z9CAt+sxsEn9K22gWqHam0jfCk5H/kuqCpoD+gRBTubk6V4HW83RhdkRRsSpojag==","signatures":[{"sig":"MEUCIQDdgDhRFk/axDJrKokR1xvhHtRYetKVJWuLqubBYBSMQAIgXjyIGIRIFJcFvJO5wQjFmKhJJ2SAodLEhEeICm5xUyo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1035403},"main":"dist/main.js","types":"dist/index.d.ts","module":"dist/module.js","source":"src/index.tsx","gitHead":"4919719d0bdd9b560777a55328e389b9996f1bc6","scripts":{"build":"parcel build src/annotation-canvas/index.tsx","start":"parcel src/index.html"},"_npmUser":{"name":"xreav3r","email":"martin.schneider@codetopic.eu"},"_npmVersion":"10.7.0","description":"# Usage ``` npm i ```","directories":{},"_nodeVersion":"18.20.4","dependencies":{"konva":"^8.4.2","react":"^18.2.0","lodash":"^4.17.21","react-dom":"^18.2.0","localforage":"^1.10.0","react-konva":"^18.2.5","@techstark/opencv-js":"^4.7.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"npm":"^9.6.3","util":"^0.12.5","uuid":"^9.0.0","axios":"^1.3.4","events":"^3.3.0","parcel":"^2.8.3","install":"^0.13.0","process":"^0.11.10","react-ace":"^10.1.0","typescript":"^4.9.5","@types/node":"^18.15.0","@types/uuid":"^9.0.1","react-color":"^2.19.3","@types/react":"^18.0.28","@mui/material":"^5.11.16","@types/lodash":"^4.14.191","vm-browserify":"^1.1.2","@emotion/react":"^11.10.6","string_decoder":"^1.3.0","@emotion/styled":"^11.10.6","path-browserify":"^1.0.1","@types/react-dom":"^18.0.11","crypto-browserify":"^3.12.0","stream-browserify":"^3.0.0","@fontsource/roboto":"^4.5.8","@types/react-color":"^3.0.6","@mui/icons-material":"^5.11.16","@parcel/packager-ts":"^2.8.3","react-beautiful-dnd":"^13.1.1","@types/react-beautiful-dnd":"^13.1.3","@parcel/transformer-typescript-types":"^2.8.3"},"_npmOperationalInternal":{"tmp":"tmp/annotation-canvas_0.43.3_1726757514248_0.8586750405917787","host":"s3://npm-registry-packages"}},"0.44.0":{"name":"annotation-canvas","version":"0.44.0","author":{"name":"Martin Schneider","email":"martin.schneider@codetopic.eu"},"_id":"annotation-canvas@0.44.0","maintainers":[{"name":"xreav3r","email":"martin.schneider@codetopic.eu"}],"dist":{"shasum":"0f35ba327fd9d788e94e0a2420cf93b4ed0f6c1e","tarball":"https://registry.npmjs.org/annotation-canvas/-/annotation-canvas-0.44.0.tgz","fileCount":37,"integrity":"sha512-mUDXvtml4xvgGl4172xAT303lt5K8Yd3WabNXDHgvcrT+86mFgVR1EIYbVOeFh8hZR+QYoVcR15s2yBA2kCN2g==","signatures":[{"sig":"MEUCIHIcA+Lkt9PDPRISEOiksn2aE6RA+GglI+8zULcljV+DAiEA3t8U28fmLUfjf+b8bnNZtq81+vHT8gR8grrgm/xiuLc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1050533},"main":"dist/main.js","types":"dist/index.d.ts","module":"dist/module.js","source":"src/index.tsx","gitHead":"c0cfa62b47058c000cf4135eb8e45b89fc81261e","scripts":{"build":"parcel build src/annotation-canvas/index.tsx","start":"parcel src/index.html"},"_npmUser":{"name":"xreav3r","email":"martin.schneider@codetopic.eu"},"_npmVersion":"10.8.2","description":"# Usage ``` npm i ```","directories":{},"_nodeVersion":"18.20.6","dependencies":{"konva":"^8.4.2","react":"^18.2.0","lodash":"^4.17.21","react-dom":"^18.2.0","localforage":"^1.10.0","react-konva":"^18.2.5","@techstark/opencv-js":"^4.7.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"npm":"^9.6.3","util":"^0.12.5","uuid":"^9.0.0","axios":"^1.3.4","events":"^3.3.0","parcel":"^2.8.3","install":"^0.13.0","process":"^0.11.10","react-ace":"^10.1.0","typescript":"^4.9.5","@types/node":"^18.15.0","@types/uuid":"^9.0.1","react-color":"^2.19.3","@types/react":"^18.0.28","@mui/material":"^5.11.16","@types/lodash":"^4.14.191","vm-browserify":"^1.1.2","@emotion/react":"^11.10.6","string_decoder":"^1.3.0","@emotion/styled":"^11.10.6","path-browserify":"^1.0.1","@types/react-dom":"^18.0.11","crypto-browserify":"^3.12.0","stream-browserify":"^3.0.0","@fontsource/roboto":"^4.5.8","@types/react-color":"^3.0.6","@mui/icons-material":"^5.11.16","@parcel/packager-ts":"^2.8.3","react-beautiful-dnd":"^13.1.1","@types/react-beautiful-dnd":"^13.1.3","@parcel/transformer-typescript-types":"^2.8.3"},"_npmOperationalInternal":{"tmp":"tmp/annotation-canvas_0.44.0_1738073422798_0.14824905854721737","host":"s3://npm-registry-packages-npm-production"}},"0.45.0":{"name":"annotation-canvas","version":"0.45.0","keywords":["react","canvas","annotation","drawing","konva","image-editing","raster","vector","graphics"],"author":{"name":"Martin Schneider","email":"martin.schneider@codetopic.eu"},"license":"MIT","_id":"annotation-canvas@0.45.0","maintainers":[{"name":"xreav3r","email":"martin.schneider@codetopic.eu"}],"homepage":"https://github.com/xReav3r/annotation-canvas#readme","bugs":{"url":"https://github.com/xReav3r/annotation-canvas/issues"},"dist":{"shasum":"0f3a2f5a675f9a52dc76033405c2f6d254f17612","tarball":"https://registry.npmjs.org/annotation-canvas/-/annotation-canvas-0.45.0.tgz","fileCount":6,"integrity":"sha512-0Z8c0c+F3RuiJcbC7O3rjEMsJs5sOUYF3ZG8sr9bk/vbApVkjp6OSeQdXJO2R+TnDQlvyUtfUjpoPz9Op2ipFg==","signatures":[{"sig":"MEUCIQDIiODt0oktCDV8Z5VyVHSANUZuWaVGyJdoGjEC2neYJAIgWbBCoFYAc/iG1j/j80804iHQtXU+WyIIvbpUVvF4zWs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/annotation-canvas@0.45.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":193938},"main":"./dist/index.cjs","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"ead8b60d393b7a78a04c130a096a7f518b0dc214","scripts":{"dev":"vite","build":"tsdown","start":"vite","preview":"vite preview"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2ba80171-25d4-4e96-b6ff-32e7496170ec"}},"repository":{"url":"git+https://github.com/xReav3r/annotation-canvas.git","type":"git"},"_npmVersion":"11.6.2","description":"A powerful React canvas component for image annotation with raster and vector drawing tools. Features efficient tiling for large images, built with Konva.","directories":{},"_nodeVersion":"24.11.1","dependencies":{"konva":"^10.0.9","react":"^19.2.0","lodash":"^4.17.21","react-dom":"^19.2.0","localforage":"^1.10.0","react-konva":"^19.2.0","@techstark/opencv-js":"^4.12.0-release.1"},"_hasShrinkwrap":false,"devDependencies":{"uuid":"^9.0.0","vite":"^7.2.2","tsdown":"^0.16.5","react-ace":"^14.0.1","typescript":"^5.9.3","@types/node":"^24.10.1","@types/uuid":"^11.0.0","react-color":"^2.19.3","@types/react":"^19.2.6","@mui/material":"^5.18.0","@types/lodash":"^4.17.20","@emotion/react":"^11.14.0","@emotion/styled":"^11.14.1","@types/react-dom":"^19.2.3","@hello-pangea/dnd":"^18.0.1","@fontsource/roboto":"^5.2.8","@types/react-color":"^3.0.13","@mui/icons-material":"^5.18.0","@vitejs/plugin-react":"^5.1.1"},"_npmOperationalInternal":{"tmp":"tmp/annotation-canvas_0.45.0_1763585689148_0.05158549766726028","host":"s3://npm-registry-packages-npm-production"}},"0.45.1":{"name":"annotation-canvas","version":"0.45.1","description":"A powerful React canvas component for image annotation with raster and vector drawing tools. Features efficient tiling for large images, built with Konva.","author":{"name":"Martin Schneider","email":"martin.schneider@codetopic.eu"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/xReav3r/annotation-canvas.git"},"bugs":{"url":"https://github.com/xReav3r/annotation-canvas/issues"},"homepage":"https://github.com/xReav3r/annotation-canvas#readme","keywords":["react","canvas","annotation","drawing","konva","image-editing","raster","vector","graphics"],"main":"./dist/index.cjs","module":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"scripts":{"start":"vite","build":"tsdown","dev":"vite","preview":"vite preview"},"peerDependencies":{"konva":"^8.4.2 || ^9.0.0 || ^10.0.0","react":"^18.2.0 || ^19.0.0","react-dom":"^18.2.0 || ^19.0.0","react-konva":"^18.2.5 || ^19.0.0"},"dependencies":{"@techstark/opencv-js":"^4.12.0-release.1","localforage":"^1.10.0","lodash":"^4.17.21"},"devDependencies":{"@emotion/react":"^11.14.0","@emotion/styled":"^11.14.1","@fontsource/roboto":"^5.2.8","@hello-pangea/dnd":"^18.0.1","@mui/icons-material":"^5.18.0","@mui/material":"^5.18.0","@types/lodash":"^4.17.20","@types/node":"^24.10.1","@types/react":"^19.2.6","@types/react-color":"^3.0.13","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^5.1.1","react-ace":"^14.0.1","react-color":"^2.19.3","tsdown":"^0.16.5","typescript":"^5.9.3","vite":"^7.2.2"},"gitHead":"6543a80ec86ba9e201c1be5804f4cd97845495b2","_id":"annotation-canvas@0.45.1","_nodeVersion":"24.11.1","_npmVersion":"11.6.2","dist":{"integrity":"sha512-W++9rVhIsGhYWInCoqdjiEi/j7eMUqi5syViZWOPc4wH5zdClVpBjthqEP8nEI5GzIpdPc6J1m83cuMMiwwagQ==","shasum":"9584cb956cf46a694e46f510ed326c3c616db3cd","tarball":"https://registry.npmjs.org/annotation-canvas/-/annotation-canvas-0.45.1.tgz","fileCount":6,"unpackedSize":193967,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/annotation-canvas@0.45.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIFV6ksbya9XdBZe54/r6vfCwIiuQlUbzM6WyKQvtXck2AiEA8p8Hf9740Nl7gj08kaR7lOAhlbzEqO4nRx7LfCKtwv0="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:2ba80171-25d4-4e96-b6ff-32e7496170ec"}},"directories":{},"maintainers":[{"name":"xreav3r","email":"martin.schneider@codetopic.eu"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/annotation-canvas_0.45.1_1763589158236_0.09859983390961369"},"_hasShrinkwrap":false}},"time":{"created":"2023-06-16T04:49:56.810Z","modified":"2025-11-19T21:52:38.888Z","0.38.0":"2023-06-14T17:05:31.791Z","0.38.1":"2023-06-16T04:49:57.084Z","0.38.2":"2023-07-08T07:52:08.647Z","0.38.3":"2023-07-23T14:13:46.076Z","0.38.4":"2023-07-23T14:46:04.370Z","0.39.0":"2023-07-25T17:36:25.590Z","0.39.1":"2023-08-12T16:06:59.675Z","0.39.2":"2023-09-12T14:52:00.778Z","0.39.3":"2023-10-06T09:01:42.939Z","0.39.4":"2023-10-06T10:43:59.016Z","0.39.5":"2023-10-10T19:32:31.889Z","0.39.6":"2023-10-16T16:15:15.773Z","0.40.0":"2023-11-01T15:25:14.434Z","0.41.0":"2023-11-15T15:47:33.744Z","0.42.0":"2023-11-22T15:20:40.698Z","0.42.1":"2023-11-28T14:19:11.767Z","0.42.2":"2023-11-28T14:50:40.386Z","0.42.3":"2023-12-04T11:30:23.602Z","0.42.4":"2023-12-04T13:41:09.717Z","0.42.5":"2023-12-04T18:03:13.090Z","0.42.6":"2023-12-05T15:34:20.167Z","0.42.7":"2023-12-06T14:02:56.009Z","0.42.8":"2023-12-06T15:38:42.255Z","0.42.9":"2023-12-06T16:25:54.217Z","0.43.0":"2023-12-23T12:21:24.798Z","0.43.1":"2024-01-23T13:26:47.612Z","0.43.2":"2024-06-24T15:42:34.670Z","0.43.3":"2024-09-19T14:51:54.527Z","0.44.0":"2025-01-28T14:10:23.071Z","0.45.0":"2025-11-19T20:54:49.342Z","0.45.1":"2025-11-19T21:52:38.475Z"},"bugs":{"url":"https://github.com/xReav3r/annotation-canvas/issues"},"author":{"name":"Martin Schneider","email":"martin.schneider@codetopic.eu"},"license":"MIT","homepage":"https://github.com/xReav3r/annotation-canvas#readme","keywords":["react","canvas","annotation","drawing","konva","image-editing","raster","vector","graphics"],"repository":{"type":"git","url":"git+https://github.com/xReav3r/annotation-canvas.git"},"description":"A powerful React canvas component for image annotation with raster and vector drawing tools. Features efficient tiling for large images, built with Konva.","maintainers":[{"name":"xreav3r","email":"martin.schneider@codetopic.eu"}],"readme":"# Annotation Canvas\n\n> A powerful React canvas component for image annotation with raster and vector drawing tools. Features efficient tiling for large images, built with Konva.\n\n[![npm version](https://img.shields.io/npm/v/annotation-canvas.svg)](https://www.npmjs.com/package/annotation-canvas)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n**Originally developed as a Master's thesis project** at Brno University of Technology (2023), focusing on creating a reusable 2D editor for web applications with optimizations for segmentation neural networks and remote data transfer.\n\n## Features\n\n### 🎨 Drawing Tools\n- **Raster Tools**: Brush, Eraser, Flood Fill, Clear\n  - **Pixel-Perfect Drawing**: Custom Bresenham algorithm implementation for antialiasing-free raster drawing\n  - **Brush Shapes**: Circle and Square\n  - **Configurable**: Size, color, opacity, shape\n- **Vector Tools**: Rectangle, Circle, Line, Polygon\n  - **Editable**: Drag, resize, remove, edit points\n  - **Fill Support**: Transparent, solid, or custom fill colors\n\n### ⚡ Performance & Scalability\n- **Efficient Tiling System**: Handles large images (10,000×10,000+ px) with on-demand tile loading\n- **Viewport-based Rendering**: Only renders visible portions\n- **Configurable LOD (Level of Detail)**: Adaptive quality based on zoom level\n- **Image Caching**: Built-in cache management using localforage\n\n### 📚 Layer Management\n- **Multiple Layer Types**:\n  - **Downloaded Raster**: Tiled images from server (optimized for large images)\n  - **Downloaded Vector**: SVG shapes from server\n  - **Created Raster**: Drawing canvas for pixel-perfect annotations\n  - **Created Vector**: User-drawn shapes (rectangles, circles, lines, polygons)\n  - **Animated**: Dynamic canvas layers (usable for canvas streaming)\n- **Layer Operations**: Show/hide, reorder, opacity control\n- **History System**: Full undo/redo with IndexedDB persistence\n\n### 🎯 Canvas Controls\n- **Pan & Zoom**: Smooth navigation with mouse/touch\n- **Multi-touch Support**: Pinch-to-zoom on touch devices\n- **Grid Overlay**: Optional grid with customizable appearance\n- **Bounding Boxes**: Contour detection for blob analysis\n\n## Use Cases\n\n- **Machine Learning Annotation**: Create pixel-perfect annotations for training segmentation neural networks\n- **Computer Vision QA**: Monitor and visualize neural network outputs with heatmaps\n- **Industrial Inspection**: Annotate defects on large product images\n- **Medical Imaging**: Annotate regions of interest on diagnostic images\n- **Geospatial Analysis**: Annotate satellite or aerial imagery\n- **Document Processing**: Mark regions on scanned documents\n\n## Installation\n\n```bash\nnpm install annotation-canvas\n```\n\n\n## Quick Start\n\n```tsx\nimport {\n  AnnotationCanvas,\n  LayersProvider,\n  ToolProvider,\n  ImageCacheProvider,\n  LayerType\n} from 'annotation-canvas';\n\nfunction App() {\n  return (\n    <ImageCacheProvider>\n      <LayersProvider\n        rasterWidth={1000}\n        rasterHeight={1000}\n        defaultLayers={[\n          {\n            id: 'drawing-layer',\n            type: LayerType.createdRaster,\n            visible: true,\n            opacity: 1,\n            data: null\n          }\n        ]}\n      >\n        <ToolProvider>\n          <div style={{ width: '100vw', height: '100vh' }}>\n            <AnnotationCanvas />\n          </div>\n        </ToolProvider>\n      </LayersProvider>\n    </ImageCacheProvider>\n  );\n}\n```\n\n**For complete examples** including toolbar UI, layer management, and tiling setup, see the [demo application](./src/App.tsx) in this repository.\n\n## Tiling for Large Images\n\nThe annotation-canvas library includes an efficient tiling system specifically designed for handling large images:\n\n### Configuration\n\n```tsx\nimport type { TileConfig } from 'annotation-canvas';\n\nconst tilingConfig: TileConfig = {\n  levelSize: 0.25,        // Scale interval (0.25 = 4 levels between 0-1)\n  minTilesCount: 4,       // Minimum tiles on larger dimension\n  drawAtOnce: false       // Progressive loading (false) or batch (true)\n};\n\n<ImageCacheProvider>\n  <LayersProvider\n    rasterWidth={5000}\n    rasterHeight={5000}\n    tiling={tilingConfig}\n    defaultLayers={[{\n      id: 'large-image',\n      type: LayerType.downloadedRaster,\n      visible: true,\n      opacity: 1,\n      data: {\n        getImage: async (x, y, width, height, viewWidth, viewHeight, signal) => {\n          const response = await fetch(`/api/tiles`, {\n            method: 'POST',\n            body: JSON.stringify({ x, y, width, height, viewWidth, viewHeight }),\n            signal\n          });\n          return response.ok ? response.blob() : null;\n        }\n      }\n    }]}\n  >\n    <AnnotationCanvas />\n  </LayersProvider>\n</ImageCacheProvider>\n```\n\n**For a complete implementation**, see [src/App.tsx](./src/App.tsx) and the backend example in [backend/](./backend/).\n\n### How Tiling Works\n\nThe tiling system optimizes large image handling through several mechanisms:\n\n1. **Viewport Calculation**: Automatically calculates which tiles are currently visible based on pan/zoom state\n2. **Level of Detail (LOD)**: Selects appropriate resolution level based on current zoom\n   - Closer zoom = higher resolution tiles\n   - Zoomed out = lower resolution tiles (faster loading)\n3. **On-Demand Loading**: Only fetches visible tiles, reducing memory usage\n4. **Tile Caching**: Stores loaded tiles using localforage for instant reuse\n\n**Example:** A 10,000×10,000px image with `minTilesCount: 4` and `levelSize: 0.25`:\n- Tile size adapts to zoom level for optimal performance\n- Higher zoom = more tiles at higher resolution\n- Lower zoom = fewer tiles at lower resolution\n- Only visible tiles within the current viewport are loaded\n\n**Benefits:**\n- ✅ **Memory Efficient**: 10MB vs 400MB+ for full image\n- ✅ **Fast Initial Load**: <1s vs 10-30s for full image\n- ✅ **Smooth Interaction**: No lag when panning/zooming\n- ✅ **Server-Friendly**: Distribute load across multiple tile requests\n\n### Implementing a Tile Server\n\nThe `getImage` function receives tile coordinates and dimensions:\n\n```tsx\ntype GetImage = (\n  x: number,               // Top-left X coordinate in original image\n  y: number,               // Top-left Y coordinate in original image\n  width: number,           // Tile width in original image coordinates\n  height: number,          // Tile height in original image coordinates\n  viewWidth: number,       // Desired output width (for LOD)\n  viewHeight: number,      // Desired output height (for LOD)\n  signal?: AbortSignal     // Optional: Abort signal for cancellation\n) => Promise<Blob | null>;\n\n// Example implementation:\nasync function getImage(\n  x: number,\n  y: number,\n  width: number,\n  height: number,\n  viewWidth: number,\n  viewHeight: number,\n  signal?: AbortSignal\n): Promise<Blob | null> {\n  const response = await fetch(`/api/image/tile`, {\n    method: 'POST',\n    headers: { 'Content-Type': 'application/json' },\n    body: JSON.stringify({ x, y, width, height, viewWidth, viewHeight }),\n    signal  // Pass AbortSignal for request cancellation\n  });\n\n  if (!response.ok) return null;\n  return response.blob();\n}\n```\n\n**Backend implementation** (example with Node.js + Sharp):\n\n```javascript\nconst sharp = require('sharp');\n\napp.post('/api/image/tile', async (req, res) => {\n  const { x, y, width, height, viewWidth, viewHeight } = req.body;\n\n  const tile = await sharp('large-image.tif')\n    .extract({ left: x, top: y, width, height })\n    .resize(viewWidth, viewHeight)\n    .png()\n    .toBuffer();\n\n  res.type('image/png').send(tile);\n});\n```\n\n## API Reference\n\n### LayersProvider\n\nManages canvas layers and history.\n\n```tsx\n<LayersProvider\n  rasterWidth={number}                  // Required: Canvas width in pixels\n  rasterHeight={number}                 // Required: Canvas height in pixels\n  defaultLayers={Layer[]}               // Optional: Initial layers (uncontrolled)\n  layers={Layer[]}                      // Optional: Controlled layers state\n  setLayers={React.Dispatch}            // Optional: Controlled layers setter\n  tiling={TileConfig}                   // Optional: Tiling configuration\n  onHistoryChange={() => void}          // Optional: Called on history changes\n>\n```\n\n### AnnotationCanvas\n\nMain canvas component.\n\n```tsx\n<AnnotationCanvas\n  onPointerMove={(position) => void}                        // Optional: Pointer position callback\n  onZoomChange={(zoom, viewport, externalInvoke) => void}   // Optional: Zoom change callback\n  gridEnabled={boolean}                                     // Optional: Show grid (default: true)\n  gridScale={number}                                        // Optional: Grid zoom threshold (default: 6)\n  gridLine={{ stroke?: string; strokeWidth: number }}      // Optional: Grid style (default: white, 0.05)\n  disableZoom={boolean}                                     // Optional: Disable zoom (default: false)\n  blobColors={Array<{r, g, b}>}                            // Optional: Colors for blob detection\n  boundingBoxes={RectConfig[]}                             // Optional: Additional overlay boxes\n/>\n```\n\n### ImageCacheProvider\n\nManages tile caching for downloaded raster layers. **Required** when using downloaded raster layers with tiling.\n\n```tsx\n<ImageCacheProvider>\n  {/* Your LayersProvider and AnnotationCanvas */}\n</ImageCacheProvider>\n```\n\n---\n\n### ToolProvider\n\nProvides drawing tool context.\n\n```tsx\nimport { Tool, BrushShape, useTool } from 'annotation-canvas';\n\nfunction Toolbar() {\n  const {\n    selectedTool,        // Currently selected tool\n    setSelectedTool,     // Change tool\n    drawColor,           // Stroke/draw color (RGBA)\n    setDrawColor,        // Change stroke color\n    fillColor,           // Fill color for vector shapes (RGBA or undefined)\n    setFillColor,        // Change fill color\n    toolSize,            // Brush/tool size in pixels\n    setToolSize,         // Change tool size\n    brushShape,          // BrushShape.Circle or BrushShape.Square\n    setBrushShape        // Change brush shape\n  } = useTool();\n\n  return (\n    <div>\n      <button onClick={() => setSelectedTool(Tool.Brush)}>Brush</button>\n      <button onClick={() => setSelectedTool(Tool.Eraser)}>Eraser</button>\n      <button onClick={() => setSelectedTool(Tool.Rectangle)}>Rectangle</button>\n\n      {/* Set color */}\n      <button onClick={() => setDrawColor({ r: 255, g: 0, b: 0, a: 1 })}>\n        Red\n      </button>\n\n      {/* Set tool size */}\n      <input\n        type=\"range\"\n        min=\"1\"\n        max=\"50\"\n        value={toolSize}\n        onChange={(e) => setToolSize(parseInt(e.target.value))}\n      />\n    </div>\n  );\n}\n```\n\n**Available Tools:**\n\nGeneral:\n- `Tool.Move` - Pan canvas\n- `Tool.ZoomIn` / `Tool.ZoomOut` - Zoom controls\n\nRaster:\n- `Tool.Brush` - Paint with brush\n- `Tool.Eraser` - Erase drawn content\n- `Tool.Floodfill` - Flood fill areas\n- `Tool.Clear` - Clear rectangular regions\n\nVector:\n- `Tool.Rectangle` - Draw rectangles\n- `Tool.Circle` - Draw circles\n- `Tool.Line` - Draw lines\n- `Tool.Polygon` - Draw polygons\n- `Tool.Drag` - Drag/move vector elements\n- `Tool.Edit` - Edit vector element points (polygons)\n- `Tool.Remove` - Remove vector elements\n- `Tool.ChangeFill` - Toggle fill on/off for vector elements\n\n### Layer Types and Structures\n\n```typescript\nenum LayerType {\n  downloadedRaster,   // Tiled images from server\n  downloadedVector,   // SVG shapes from server\n  createdRaster,      // Drawing canvas\n  createdVector,      // User-drawn shapes\n  animated            // Dynamic canvas layers\n}\n\n// Layer structure (all types share these base properties)\ninterface Layer {\n  id: string | number;       // Unique identifier\n  type: LayerType;           // Layer type\n  visible: boolean;          // Show/hide layer\n  opacity: number;           // 0.0 to 1.0\n  data: LayerData;          // Type-specific data\n}\n\n// Downloaded Raster Layer data\ninterface DownloadedRasterLayerData {\n  getImage?: GetImage;       // Optional: Function to fetch tile data\n  coloring?: number[][];     // Optional: Color mapping (256x3 for heatmap, 1x3 for solid)\n  threshold?: {              // Optional: Threshold for grayscale\n    min: number;             // Min threshold (0-255)\n    max: number;             // Max threshold (0-255)\n  };\n  hatching?: {               // Optional: Hatching pattern overlay\n    blankWidth: number;      // Width of transparent stripes\n    maskWidth: number;       // Width of visible stripes\n  };\n}\n\n// Downloaded Vector Layer data (SVG string)\ntype DownloadedVectorLayerData = string;\n\n// Created Raster Layer data (initialized as null, canvas created internally)\ntype CreatedRasterLayerData = null;\n\n// Created Vector Layer data\ninterface CreatedVectorLayerData {\n  elements: (CreatedVectorLayerLine | CreatedVectorLayerRectangle | CreatedVectorLayerCircle)[];\n  layer?: Konva.Layer;       // Internal reference (auto-managed)\n}\n```\n\n### useLayers Hook\n\nProvides access to layer state and operations:\n\n```tsx\nimport { useLayers } from 'annotation-canvas';\n\nfunction LayerControls() {\n  const {\n    // Layer state\n    rasterWidth,              // Canvas width\n    rasterHeight,             // Canvas height\n    layers,                   // Array of all layers\n    setLayers,                // Update layers array\n    selectedLayer,            // Index of selected layer\n    setSelectedLayer,         // Change selected layer\n    selectedLayerType,        // Type of selected layer\n    tiling,                   // Tiling configuration (if set)\n\n    // Layer operations\n    createLayer,              // (layer: Layer) => void\n    setLayerByIndex,          // (index, updater) => void\n    setLayerById,             // (layer) => void\n    removeLayer,              // (index) => Promise<void>\n    removeLayerById,          // (id) => void\n    rasterizeLayer,           // (index) => void - Convert vector to raster\n\n    // History\n    historyPush,              // Internal use - adds history record\n    undo,                     // Undo last action\n    undoAvailable,            // Can undo?\n    redo,                     // Redo last undone action\n    redoAvailable,            // Can redo?\n  } = useLayers();\n\n  return (\n    <>\n      <button onClick={undo} disabled={!undoAvailable}>Undo</button>\n      <button onClick={redo} disabled={!redoAvailable}>Redo</button>\n      <button onClick={() => rasterizeLayer(selectedLayer)}>\n        Convert to Raster\n      </button>\n    </>\n  );\n}\n```\n\n### Memory Leak Testing\n\nThe library includes tools for long-term memory monitoring (validated over 40+ hours of continuous operation):\n\n```bash\n# 1. Start dev server and set memory test mode in browser console:\nlocalStorage.setItem('memoryLeakTest', 'true')\n\n# 2. Get browser process ID and run:\n./measureMemory.sh <PID>\n\n# 3. View results at http://localhost:8000\n```\n\nSee [memoryFrontend/](./memoryFrontend/) for the visualization tool.\n\n## Advanced Features\n\n### Pixel-Perfect Raster Drawing\n\nThe library implements custom **Bresenham line and circle algorithms** to achieve antialiasing-free pixel-perfect drawing. This is critical for machine learning annotations where exact pixel values matter - browser native canvas applies antialiasing that can corrupt training data.\n\n### Heatmap & Blob Detection\n\n- **Heatmap visualization**: Apply color mapping to grayscale images (e.g., neural network outputs)\n- **Blob detection**: Automatically detect and label colored regions using OpenCV.js\n- **Threshold & Hatching**: Additional visualization options for raster layers\n\n**See the [demo application](./src/App.tsx) for complete examples** of these features.\n\n## License\n\nMIT © Martin Schneider\n\n## Contributing\n\nContributions welcome! Please:\n\n1. Fork the repository\n2. Create a feature branch (`git checkout -b feature/amazing-feature`)\n3. Commit your changes (`git commit -m 'Add amazing feature'`)\n4. Push to the branch (`git push origin feature/amazing-feature`)\n5. Open a Pull Request\n\n## Links\n\n- [GitHub Repository](https://github.com/xReav3r/annotation-canvas)\n- [npm Package](https://www.npmjs.com/package/annotation-canvas)\n- [Issue Tracker](https://github.com/xReav3r/annotation-canvas/issues)\n","readmeFilename":"README.MD"}