{"_id":"svg-getpointatlength","_rev":"28-0781ec7389bf5b14e859193e6a2291ef","name":"svg-getpointatlength","dist-tags":{"latest":"2.0.0"},"versions":{"1.0.0":{"name":"svg-getpointatlength","version":"1.0.0","keywords":["svg","pathlength","point-at-length","path","pathdata"],"author":{"name":"herrstrietzel"},"license":"ISC","_id":"svg-getpointatlength@1.0.0","maintainers":[{"name":"herrstrietzel","email":"der@herrstrietzel.de"}],"homepage":"https://github.com/herrstrietzel/svg-getpointatlength#readme","bugs":{"url":"https://github.com/herrstrietzel/svg-getpointatlength/issues"},"dist":{"shasum":"2f954d651f3157d14990d925d21087240f51c31e","tarball":"https://registry.npmjs.org/svg-getpointatlength/-/svg-getpointatlength-1.0.0.tgz","fileCount":3,"integrity":"sha512-aDxD153xTQISg579FeiwtX6e1JllOLeuDkkSjxeI1H86KwknXfjvdG9MDiaW9c3oSFFzxBAm4/nT4lMhhB9ZxA==","signatures":[{"sig":"MEQCIBemgoGq9JuMdxch8r/YyL4BapYbu5MKcIFX6mbESLIvAiBLPkRInI4ZelhZD1Ribl5sHDYKrO+pn0UTNbK00AOeKw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":31340},"main":"getPointAtLengthLookup.js","gitHead":"928da196edfca2c240d65b8b2ff7ce44cab92b07","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"herrstrietzel","email":"der@herrstrietzel.de"},"repository":{"url":"git+https://github.com/herrstrietzel/svg-getpointatlength.git","type":"git"},"_npmVersion":"10.2.3","description":"alternative to native pointAtLength() method","directories":{},"_nodeVersion":"20.10.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/svg-getpointatlength_1.0.0_1704485555689_0.6882363354398329","host":"s3://npm-registry-packages"}},"1.0.1":{"name":"svg-getpointatlength","version":"1.0.1","keywords":["svg","pathlength","point-at-length","path","pathdata"],"author":{"name":"herrstrietzel"},"license":"MIT","_id":"svg-getpointatlength@1.0.1","maintainers":[{"name":"herrstrietzel","email":"der@herrstrietzel.de"}],"homepage":"https://github.com/herrstrietzel/svg-getpointatlength#readme","bugs":{"url":"https://github.com/herrstrietzel/svg-getpointatlength/issues"},"dist":{"shasum":"e13e5870fcbd0fcde4432fc10117a074da30d4fc","tarball":"https://registry.npmjs.org/svg-getpointatlength/-/svg-getpointatlength-1.0.1.tgz","fileCount":4,"integrity":"sha512-0h/IPFuEMQfnTlHFgBMcS5Dtxms8T8GXaToMTvsMY0r7i3FL5we983wxHUIPh8rVkTBj0ob5gscaJJ9/rNyW/g==","signatures":[{"sig":"MEQCIAKAL+5mfeGxhk++VvuSTgy/T1op/7JltH/k0eNTz0iOAiBNTrV0UX7iS79MI9z+eihIesZ764yS+B0BfHhtjk5euA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38501},"main":"getPointAtLengthLookup.js","gitHead":"73c16827ea474f4e84b322968d36bd24dbe5e177","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"herrstrietzel","email":"der@herrstrietzel.de"},"repository":{"url":"git+https://github.com/herrstrietzel/svg-getpointatlength.git","type":"git"},"_npmVersion":"10.2.3","description":"alternative to native pointAtLength() method","directories":{},"_nodeVersion":"20.10.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/svg-getpointatlength_1.0.1_1704487396377_0.2699504520136795","host":"s3://npm-registry-packages"}},"1.0.2":{"name":"svg-getpointatlength","version":"1.0.2","keywords":["svg","pathlength","point-at-length","path","pathdata"],"author":{"name":"herrstrietzel"},"license":"MIT","_id":"svg-getpointatlength@1.0.2","maintainers":[{"name":"herrstrietzel","email":"der@herrstrietzel.de"}],"homepage":"https://github.com/herrstrietzel/svg-getpointatlength#readme","bugs":{"url":"https://github.com/herrstrietzel/svg-getpointatlength/issues"},"dist":{"shasum":"3e5f3bac868c8857f0b350bed13ccfe6311b13df","tarball":"https://registry.npmjs.org/svg-getpointatlength/-/svg-getpointatlength-1.0.2.tgz","fileCount":4,"integrity":"sha512-6/x3enRvLlV2lug0x/IZmLht6xfD9o6NvC4VUiUG4uj5bObX5NxkQIuTPN9NByhBpymHc+tUUThUIek+gW2Tdg==","signatures":[{"sig":"MEQCIB9X6AHC1l61nmFNiGEfUFVMz7cBYzpImaUpOzX/gXynAiAcksIpCeUK91WkxgeRegdfEorwXmzFhH0S+coReWe+hQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38594},"main":"getPointAtLengthLookup.js","gitHead":"07bc6e4d2ae00b67a10a4861de9ee6e3915e355e","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"herrstrietzel","email":"der@herrstrietzel.de"},"repository":{"url":"git+https://github.com/herrstrietzel/svg-getpointatlength.git","type":"git"},"_npmVersion":"10.2.3","description":"alternative to native pointAtLength() method","directories":{},"_nodeVersion":"20.10.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/svg-getpointatlength_1.0.2_1704487885863_0.12369788268262538","host":"s3://npm-registry-packages"}},"1.0.3":{"name":"svg-getpointatlength","version":"1.0.3","keywords":["svg","pathlength","point-at-length","path","pathdata"],"author":{"name":"herrstrietzel"},"license":"MIT","_id":"svg-getpointatlength@1.0.3","maintainers":[{"name":"herrstrietzel","email":"der@herrstrietzel.de"}],"homepage":"https://github.com/herrstrietzel/svg-getpointatlength#readme","bugs":{"url":"https://github.com/herrstrietzel/svg-getpointatlength/issues"},"dist":{"shasum":"98ae0d10381d329855d8cffecfae9abf60c8072c","tarball":"https://registry.npmjs.org/svg-getpointatlength/-/svg-getpointatlength-1.0.3.tgz","fileCount":5,"integrity":"sha512-LBhDvgcsTWloGqpbe0iEGGr9UysKZ8zh6yEj1kK9BIjtIjnrTs7KT6q5u+2qWoPkoR9yr4YjGHT4z8boaKMdxA==","signatures":[{"sig":"MEUCIQDDoQsHR+HJTM4BTX0vpso/xM03LiOGCD+P2NxCeV6QtgIgV8VOJg/ixo+t1+qwaHXiF1wzGj9xO7KfFpAWK3POiME=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":52241},"main":"getPointAtLengthLookup.js","gitHead":"67ede3bb5adb992c23c9aba5ab36823e74bd4c55","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"herrstrietzel","email":"der@herrstrietzel.de"},"repository":{"url":"git+https://github.com/herrstrietzel/svg-getpointatlength.git","type":"git"},"_npmVersion":"10.2.3","description":"alternative to native pointAtLength() method","directories":{},"_nodeVersion":"20.10.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/svg-getpointatlength_1.0.3_1706025766906_0.8264151893959952","host":"s3://npm-registry-packages"}},"1.0.4":{"name":"svg-getpointatlength","version":"1.0.4","keywords":["svg","pathlength","point-at-length","path","pathdata"],"author":{"name":"herrstrietzel"},"license":"MIT","_id":"svg-getpointatlength@1.0.4","maintainers":[{"name":"herrstrietzel","email":"der@herrstrietzel.de"}],"homepage":"https://github.com/herrstrietzel/svg-getpointatlength#readme","bugs":{"url":"https://github.com/herrstrietzel/svg-getpointatlength/issues"},"dist":{"shasum":"cc8c3a3356cbcfb3a5e37572007ff528b7fa3357","tarball":"https://registry.npmjs.org/svg-getpointatlength/-/svg-getpointatlength-1.0.4.tgz","fileCount":5,"integrity":"sha512-oML4H75p3IDgVld0g0nCWvg2QuDKj9OdmynKYRnscRHVDp0zCLJfWKYPh6ELjxE1fdFELISVwz4UgJdUDHzN0Q==","signatures":[{"sig":"MEYCIQDpRiC1jy/t4UWZZLg1+sCpeH/OxIWdKFyhf54Bi04APwIhAPZJyM1wDMfeioIdWzjjug2Yq1HAHQJtbf4gpl2dSVir","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":47570},"main":"getPointAtLengthLookup.js","gitHead":"7fa5c6b4f6d675b7ff3f0603ea4cc7320ae92136","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"herrstrietzel","email":"der@herrstrietzel.de"},"repository":{"url":"git+https://github.com/herrstrietzel/svg-getpointatlength.git","type":"git"},"_npmVersion":"10.2.3","description":"alternative to native pointAtLength() and getTotalLength() method","directories":{},"_nodeVersion":"20.10.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/svg-getpointatlength_1.0.4_1706662032796_0.07200465090762376","host":"s3://npm-registry-packages"}},"1.0.5":{"name":"svg-getpointatlength","version":"1.0.5","keywords":["svg","pathlength","point-at-length","path","pathdata"],"author":{"name":"herrstrietzel"},"license":"MIT","_id":"svg-getpointatlength@1.0.5","maintainers":[{"name":"herrstrietzel","email":"der@herrstrietzel.de"}],"homepage":"https://github.com/herrstrietzel/svg-getpointatlength#readme","bugs":{"url":"https://github.com/herrstrietzel/svg-getpointatlength/issues"},"dist":{"shasum":"32d344673735dd53fe3af944b5f68085df19ff44","tarball":"https://registry.npmjs.org/svg-getpointatlength/-/svg-getpointatlength-1.0.5.tgz","fileCount":7,"integrity":"sha512-NdQfyiqUGsUkBVb7FpsrTJaSuifQq9oKPqdBjlnoiqlWa8UpqfolBU7fVjUCERWI+2fjO+I2h+DcQuL8rU7qTw==","signatures":[{"sig":"MEUCIHwgcSjCKAqkydjEld8SmWREMt587zcHyaXA7l4vj7AQAiEA7hRtFPgH8B2jHXHQCWFXvudCZNjOzEJ/rVgJG0kWdWo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":62848},"main":"getPointAtLengthLookup.js","gitHead":"f6e08e5865325db30101627d5f70eb8af7b0e62e","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"herrstrietzel","email":"der@herrstrietzel.de"},"repository":{"url":"git+https://github.com/herrstrietzel/svg-getpointatlength.git","type":"git"},"_npmVersion":"10.2.3","description":"alternative to native pointAtLength() and getTotalLength() method","directories":{},"_nodeVersion":"20.10.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/svg-getpointatlength_1.0.5_1707160635978_0.5829482978333862","host":"s3://npm-registry-packages"}},"1.0.6":{"name":"svg-getpointatlength","version":"1.0.6","keywords":["svg","pathlength","point-at-length","path","pathdata"],"author":{"name":"herrstrietzel"},"license":"MIT","_id":"svg-getpointatlength@1.0.6","maintainers":[{"name":"herrstrietzel","email":"der@herrstrietzel.de"}],"homepage":"https://github.com/herrstrietzel/svg-getpointatlength#readme","bugs":{"url":"https://github.com/herrstrietzel/svg-getpointatlength/issues"},"dist":{"shasum":"3b9239e8a07e901c7df8b54bc29616f1924c8ba4","tarball":"https://registry.npmjs.org/svg-getpointatlength/-/svg-getpointatlength-1.0.6.tgz","fileCount":9,"integrity":"sha512-79D4PT8q/C7D/T8KT837fXmrqe8XxsRtO0zSa2nJzvp2jgvPUs2nD1NpYRAfdtEpcGZkLce6xzzDxodaSeUsmA==","signatures":[{"sig":"MEUCIQDZvf8LeONmG3VdqDZlFjKgF7OvGE5dTfpsZvktvgz+uwIgGRGdgNkb6Bc7v6xXSPxNOe0Cq22SrV2Vnu3ogs6S+qM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":100180},"main":"getPointAtLengthLookup.js","gitHead":"7bdf2c11f43aa1a06c05a996a79a8731be33dea3","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"herrstrietzel","email":"der@herrstrietzel.de"},"repository":{"url":"git+https://github.com/herrstrietzel/svg-getpointatlength.git","type":"git"},"_npmVersion":"10.2.3","description":"alternative to native pointAtLength() and getTotalLength() method","directories":{},"_nodeVersion":"20.10.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/svg-getpointatlength_1.0.6_1707543128873_0.01398009028607583","host":"s3://npm-registry-packages"}},"1.0.7":{"name":"svg-getpointatlength","version":"1.0.7","keywords":["svg","pathlength","point-at-length","path","pathdata"],"author":{"name":"herrstrietzel"},"license":"MIT","_id":"svg-getpointatlength@1.0.7","maintainers":[{"name":"herrstrietzel","email":"der@herrstrietzel.de"}],"homepage":"https://github.com/herrstrietzel/svg-getpointatlength#readme","bugs":{"url":"https://github.com/herrstrietzel/svg-getpointatlength/issues"},"dist":{"shasum":"e365fc72e56159bb3c494a82ba3ca857f184006c","tarball":"https://registry.npmjs.org/svg-getpointatlength/-/svg-getpointatlength-1.0.7.tgz","fileCount":13,"integrity":"sha512-C5eQ+8S5zMQaGY2CABsGSJMgeHfGAPtMvfmorywzmDGwJJ+oCdtSHetAIuMdNT3jEZRAaakMgJtbGdsgt5DxdQ==","signatures":[{"sig":"MEUCIH2mKrY5ZqBilJy5v1QNGnYV5g2wYtbmPnXS77BidEHTAiEA9NhKihXGRKedqknxnfPLlnC61S3LTD68fBReDnWpM2w=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":235071},"main":"getPointAtLengthLookup.js","gitHead":"74309550f1e1488cbbb8fb7fbb32747e0a136ed1","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"herrstrietzel","email":"der@herrstrietzel.de"},"repository":{"url":"git+https://github.com/herrstrietzel/svg-getpointatlength.git","type":"git"},"_npmVersion":"10.2.3","description":"alternative to native pointAtLength() and getTotalLength() method","directories":{},"_nodeVersion":"20.10.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/svg-getpointatlength_1.0.7_1710700380053_0.7058602961300959","host":"s3://npm-registry-packages"}},"1.0.8":{"name":"svg-getpointatlength","version":"1.0.8","keywords":["svg","pathlength","point-at-length","path","pathdata"],"author":{"name":"herrstrietzel"},"license":"MIT","_id":"svg-getpointatlength@1.0.8","maintainers":[{"name":"herrstrietzel","email":"der@herrstrietzel.de"}],"homepage":"https://github.com/herrstrietzel/svg-getpointatlength#readme","bugs":{"url":"https://github.com/herrstrietzel/svg-getpointatlength/issues"},"dist":{"shasum":"20e0b028f089b334674c9e67bfa25420ff5ca936","tarball":"https://registry.npmjs.org/svg-getpointatlength/-/svg-getpointatlength-1.0.8.tgz","fileCount":12,"integrity":"sha512-w2G8M11O0whl3OVlV9c+ld8xUiNbjcqRvDLLkXHCraVjJdOMJJPuJDYgx89bsr1Dv+4GX7q3tncPolvHc7vLwQ==","signatures":[{"sig":"MEUCIQDWGEUv/rBRY/kTe2hmou5QPRz3ucYD39nm9/1Jpg9jnwIgQwpfXLsTfSwbR47hG+4fD9nXU5QHqfJxb1P9zNQlWzg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":126234},"main":"getPointAtLengthLookup.js","gitHead":"0fee17fa8dfe16b9748694b7487533cbdcb9a50a","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"herrstrietzel","email":"der@herrstrietzel.de"},"repository":{"url":"git+https://github.com/herrstrietzel/svg-getpointatlength.git","type":"git"},"_npmVersion":"10.2.3","description":"alternative to native pointAtLength() and getTotalLength() method","directories":{},"_nodeVersion":"20.10.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/svg-getpointatlength_1.0.8_1710955681289_0.07935880092437309","host":"s3://npm-registry-packages"}},"1.0.9":{"name":"svg-getpointatlength","version":"1.0.9","keywords":["svg","pathlength","point-at-length","path","pathdata"],"author":{"name":"herrstrietzel"},"license":"MIT","_id":"svg-getpointatlength@1.0.9","maintainers":[{"name":"herrstrietzel","email":"der@herrstrietzel.de"}],"homepage":"https://github.com/herrstrietzel/svg-getpointatlength#readme","bugs":{"url":"https://github.com/herrstrietzel/svg-getpointatlength/issues"},"dist":{"shasum":"86854bcea0e980ee8e3883f787e3702fe1deb503","tarball":"https://registry.npmjs.org/svg-getpointatlength/-/svg-getpointatlength-1.0.9.tgz","fileCount":12,"integrity":"sha512-I4/awI92r+TONhOld3czhFrD1Al7YgpfXZ5OQZ+7YetXJ4iD1IikaP9SZO0HtbOPvebHhBEcjOm2YyGfwCC83w==","signatures":[{"sig":"MEUCIQDmhS8bM0gj1quVaB8qYOaV6Vk4Ug5SHDpfNbi8HuGo/gIgTQ0p5dVnbE46zftshMd1Lr+2tL+HLxzpjqCOwy2t0kM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":126476},"main":"getPointAtLengthLookup.js","gitHead":"5458bd5ac82a4af1dfa6ae65ca740552c89a8db6","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"herrstrietzel","email":"der@herrstrietzel.de"},"repository":{"url":"git+https://github.com/herrstrietzel/svg-getpointatlength.git","type":"git"},"_npmVersion":"10.2.3","description":"alternative to native pointAtLength() and getTotalLength() method","directories":{},"_nodeVersion":"20.10.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/svg-getpointatlength_1.0.9_1710956138122_0.8550954988431472","host":"s3://npm-registry-packages"}},"1.0.10":{"name":"svg-getpointatlength","version":"1.0.10","keywords":["svg","pathlength","point-at-length","path","pathdata"],"author":{"name":"herrstrietzel"},"license":"MIT","_id":"svg-getpointatlength@1.0.10","maintainers":[{"name":"herrstrietzel","email":"der@herrstrietzel.de"}],"homepage":"https://github.com/herrstrietzel/svg-getpointatlength#readme","bugs":{"url":"https://github.com/herrstrietzel/svg-getpointatlength/issues"},"dist":{"shasum":"fb9bf46630a58141c9e31dcd74d8cbe52433616c","tarball":"https://registry.npmjs.org/svg-getpointatlength/-/svg-getpointatlength-1.0.10.tgz","fileCount":12,"integrity":"sha512-lYC4lVgVfWUOROn6eNk8JwQNzsLEDR9KYHy2KZw0Jbfm5IQedbOYtBwks1H0da6+spG2oOHqlDlVCzeisKPb4A==","signatures":[{"sig":"MEQCIDjFZ3xqQilWKzSQNDYgnZp0L6hyoZxl/aWMBfnU8Lu8AiA+vLs3BeEc1g/vN4Xf0ID9Z8Fo61FewB9ohmJxTiGisA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":126515},"main":"getPointAtLengthLookup.js","gitHead":"cb439436e19b602d3928e42f972709a2b4565615","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"herrstrietzel","email":"der@herrstrietzel.de"},"repository":{"url":"git+https://github.com/herrstrietzel/svg-getpointatlength.git","type":"git"},"_npmVersion":"10.2.3","description":"alternative to native pointAtLength() and getTotalLength() method","directories":{},"_nodeVersion":"20.10.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/svg-getpointatlength_1.0.10_1710960385293_0.7281326199371101","host":"s3://npm-registry-packages"}},"1.0.11":{"name":"svg-getpointatlength","version":"1.0.11","keywords":["svg","pathlength","point-at-length","path","pathdata"],"author":{"name":"herrstrietzel"},"license":"MIT","_id":"svg-getpointatlength@1.0.11","maintainers":[{"name":"herrstrietzel","email":"der@herrstrietzel.de"}],"homepage":"https://github.com/herrstrietzel/svg-getpointatlength#readme","bugs":{"url":"https://github.com/herrstrietzel/svg-getpointatlength/issues"},"dist":{"shasum":"26803d08070add8423f8dd1dbfbcf39c6f482630","tarball":"https://registry.npmjs.org/svg-getpointatlength/-/svg-getpointatlength-1.0.11.tgz","fileCount":12,"integrity":"sha512-kwgdeaLX2TWAMj087OYxW0TMdCm9rmoJ/d4QIRKQb90j+LrrFYJl5G7VgALMa6dRmLhVCf5HI1TwDC1277PqqQ==","signatures":[{"sig":"MEYCIQCo33OWL4efFKD75t/WmYPqhbSDj/mpZFy+jnJDKQK5dAIhAN1XsBvEyF7eUNzsNAS2chmCQOXeVLpHyfHvnghCooCu","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":129944},"main":"getPointAtLengthLookup.js","gitHead":"22d9285c71fae5e0c9c5bc2c27758f7cffb3c6ac","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"herrstrietzel","email":"der@herrstrietzel.de"},"repository":{"url":"git+https://github.com/herrstrietzel/svg-getpointatlength.git","type":"git"},"_npmVersion":"10.2.3","description":"alternative to native pointAtLength() and getTotalLength() method","directories":{},"_nodeVersion":"20.10.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/svg-getpointatlength_1.0.11_1713311324701_0.9045185728920571","host":"s3://npm-registry-packages"}},"1.0.13":{"name":"svg-getpointatlength","version":"1.0.13","keywords":["svg","pathlength","point-at-length","path","pathdata"],"author":{"name":"herrstrietzel"},"license":"MIT","_id":"svg-getpointatlength@1.0.13","maintainers":[{"name":"herrstrietzel","email":"der@herrstrietzel.de"}],"homepage":"https://github.com/herrstrietzel/svg-getpointatlength#readme","bugs":{"url":"https://github.com/herrstrietzel/svg-getpointatlength/issues"},"dist":{"shasum":"5460e1e298a71a337324c047bcc9538e86ce8e6e","tarball":"https://registry.npmjs.org/svg-getpointatlength/-/svg-getpointatlength-1.0.13.tgz","fileCount":12,"integrity":"sha512-1iieNCVfhZq8XFP+VHNy3AzpZx+0oa39RgVo3jbhYf8WrzQOOSjtAn1QobZILBXh/ZdnSn8ckV28FuI2bx6Gtw==","signatures":[{"sig":"MEYCIQCbGm4t0hsiT+tQ+P49DUiFrotr1ipGOpzBRDaTACtjJQIhAN5h0e9UZ2yafgKWy93P61U1W6LuTjNsjpuvyIvNUd3T","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":132223},"main":"getPointAtLengthLookup.js","gitHead":"c7c88d3dd7c14c9ff9ffe91a39326ba6df32bd4a","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"herrstrietzel","email":"der@herrstrietzel.de"},"repository":{"url":"git+https://github.com/herrstrietzel/svg-getpointatlength.git","type":"git"},"_npmVersion":"10.2.3","description":"alternative to native pointAtLength() and getTotalLength() method","directories":{},"_nodeVersion":"20.10.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/svg-getpointatlength_1.0.13_1736451684524_0.12535945618745648","host":"s3://npm-registry-packages-npm-production"}},"1.0.14":{"name":"svg-getpointatlength","version":"1.0.14","keywords":["svg","pathlength","point-at-length","path","pathdata"],"author":{"name":"herrstrietzel"},"license":"MIT","_id":"svg-getpointatlength@1.0.14","maintainers":[{"name":"herrstrietzel","email":"der@herrstrietzel.de"}],"homepage":"https://github.com/herrstrietzel/svg-getpointatlength#readme","bugs":{"url":"https://github.com/herrstrietzel/svg-getpointatlength/issues"},"dist":{"shasum":"6a637d1024332fc110c28054ed3c8ac64c27b1e3","tarball":"https://registry.npmjs.org/svg-getpointatlength/-/svg-getpointatlength-1.0.14.tgz","fileCount":12,"integrity":"sha512-6OBnY4aFgFYdv1WWIdg+9EhF8gCqcVEbcOk5SI91o5dFSb3TrzyAcyJItDjPdZwzV/O3J72a88mrBG+1IKYrlQ==","signatures":[{"sig":"MEYCIQCZiR1VElYUUO/lwp1mgfHijM5dEuYkPY4NoXWJN1olAwIhAL9rS1VR+ZYcw0I/8R0uRAeOhUxtTnYEye7duuVbqs6O","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":141433},"main":"getPointAtLengthLookup.js","gitHead":"357b256b3e346685b72adf6697af478d6f691d23","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"herrstrietzel","email":"der@herrstrietzel.de"},"repository":{"url":"git+https://github.com/herrstrietzel/svg-getpointatlength.git","type":"git"},"_npmVersion":"10.2.3","description":"alternative to native pointAtLength() and getTotalLength() method","directories":{},"_nodeVersion":"20.10.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/svg-getpointatlength_1.0.14_1736574587882_0.4866494733410054","host":"s3://npm-registry-packages-npm-production"}},"1.0.15":{"name":"svg-getpointatlength","version":"1.0.15","keywords":["svg","pathlength","point-at-length","path","pathdata"],"author":{"name":"herrstrietzel"},"license":"MIT","_id":"svg-getpointatlength@1.0.15","maintainers":[{"name":"herrstrietzel","email":"der@herrstrietzel.de"}],"homepage":"https://github.com/herrstrietzel/svg-getpointatlength#readme","bugs":{"url":"https://github.com/herrstrietzel/svg-getpointatlength/issues"},"dist":{"shasum":"5cc82ac3247a0609188b6444058f59d505e7aa6d","tarball":"https://registry.npmjs.org/svg-getpointatlength/-/svg-getpointatlength-1.0.15.tgz","fileCount":13,"integrity":"sha512-bxaIyQ6s+hdH5571IlzKCPmdr/uwDqSWpl9Gjvx/aHCOm0cAzPpcXRKui0l+NVlaa3uFT07mLloH54TuYakBxw==","signatures":[{"sig":"MEQCIEgPXMUcx/Fe3SyKMOtU9otqR9EX0tck8kJnFhfssss1AiBIINwbKvp2hIgKF1Pt8EmCtQjdh4QP3+lwft12RyeAvw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":155256},"main":"getPointAtLengthLookup.js","gitHead":"5a7a8c098268c1a05eed741c36bfabf3cd08c25f","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"herrstrietzel","email":"der@herrstrietzel.de"},"repository":{"url":"git+https://github.com/herrstrietzel/svg-getpointatlength.git","type":"git"},"_npmVersion":"10.2.3","description":"alternative to native pointAtLength() and getTotalLength() method","directories":{},"_nodeVersion":"20.10.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/svg-getpointatlength_1.0.15_1737433633122_0.7179118690738318","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"svg-getpointatlength","version":"1.1.0","keywords":["svg","pathlength","point-at-length","path","pathdata"],"author":{"name":"herrstrietzel"},"license":"MIT","_id":"svg-getpointatlength@1.1.0","maintainers":[{"name":"herrstrietzel","email":"der@herrstrietzel.de"}],"homepage":"https://github.com/herrstrietzel/svg-getpointatlength#readme","bugs":{"url":"https://github.com/herrstrietzel/svg-getpointatlength/issues"},"dist":{"shasum":"36f00bba19528f2e0fc348171dff887f7b480945","tarball":"https://registry.npmjs.org/svg-getpointatlength/-/svg-getpointatlength-1.1.0.tgz","fileCount":14,"integrity":"sha512-7KNUXcmHjari6nBkAD05pPGmJk//xMaywbto1DjZzCfqi7AOWrGrS6ELlvQRnrkNGVi/pala0C1OfugEGGNmOA==","signatures":[{"sig":"MEYCIQDbDSAUfDYt6Tc1sHHqHyf6nKLhNFS7/msi32XHCLpSqwIhAJi3d6IZXbP/Cn4MKvMgE4C/uWp1D/PGYbMF3Tu+1igO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":157608},"main":"getPointAtLengthLookup.js","gitHead":"1384c1fbf8ef18afd928e4aa070e4f5609671397","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"herrstrietzel","email":"der@herrstrietzel.de"},"repository":{"url":"git+https://github.com/herrstrietzel/svg-getpointatlength.git","type":"git"},"_npmVersion":"10.2.3","description":"alternative to native pointAtLength() and getTotalLength() method","directories":{},"_nodeVersion":"20.10.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/svg-getpointatlength_1.1.0_1737598020725_0.39944194244882514","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"svg-getpointatlength","version":"1.2.0","keywords":["svg","pathlength","point-at-length","path","pathdata"],"author":{"name":"herrstrietzel"},"license":"MIT","_id":"svg-getpointatlength@1.2.0","maintainers":[{"name":"herrstrietzel","email":"der@herrstrietzel.de"}],"homepage":"https://github.com/herrstrietzel/svg-getpointatlength#readme","bugs":{"url":"https://github.com/herrstrietzel/svg-getpointatlength/issues"},"dist":{"shasum":"536d340b516ce9b10f2ef3767bd64d9f7f650326","tarball":"https://registry.npmjs.org/svg-getpointatlength/-/svg-getpointatlength-1.2.0.tgz","fileCount":31,"integrity":"sha512-cZ/EcnVMrPy90LYJZ0uxx9bNe9mxjTowL42uAddTIghhQQ9XHczP8XlraXS1zgESoeFm1iN5eEokbx+8Mdo+HQ==","signatures":[{"sig":"MEUCIQDXfY5uu0knzD4iKN4/4sn+9Ut16oGmCwWsBxkhXFalPQIgK7anZdOZHzHV6Aa/NZfCev3xf2SSY0q+8R4gYhsLZN8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":559786},"main":"getPointAtLengthLookup.js","gitHead":"9fefe23a31ab48b9f7ca7c75fb83e2aa470c9de5","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"herrstrietzel","email":"der@herrstrietzel.de"},"repository":{"url":"git+https://github.com/herrstrietzel/svg-getpointatlength.git","type":"git"},"_npmVersion":"10.2.3","description":"alternative to native pointAtLength() and getTotalLength() method","directories":{},"_nodeVersion":"20.10.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/svg-getpointatlength_1.2.0_1737948314352_0.43020885401942","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"svg-getpointatlength","version":"1.2.1","keywords":["svg","pathlength","point-at-length","path","pathdata"],"author":{"name":"herrstrietzel"},"license":"MIT","_id":"svg-getpointatlength@1.2.1","maintainers":[{"name":"herrstrietzel","email":"der@herrstrietzel.de"}],"homepage":"https://github.com/herrstrietzel/svg-getpointatlength#readme","bugs":{"url":"https://github.com/herrstrietzel/svg-getpointatlength/issues"},"dist":{"shasum":"f593e935ddca0f03b35fb3e1cadf49ce424d29bd","tarball":"https://registry.npmjs.org/svg-getpointatlength/-/svg-getpointatlength-1.2.1.tgz","fileCount":31,"integrity":"sha512-8GpRmGjO2ujdKrz0gQonboFxYVVdIV5UfjXadGvDLTt0hRIsi5H/Rwe41fcewzLUBzonNQgXNVg+iqLCBifvsg==","signatures":[{"sig":"MEUCIQCcoO7wvzaewHupQPI0OmMtv6GsSYR0Gj2sd4F3avlWngIgPQRjVLqfFEjq2YymMfTZ+G+lWSTGRoVIGo+G3Czv8oM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":559269},"main":"getPointAtLengthLookup.js","gitHead":"4e134837edf620d7e3dbe3416eb659c46c8a3120","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"herrstrietzel","email":"der@herrstrietzel.de"},"repository":{"url":"git+https://github.com/herrstrietzel/svg-getpointatlength.git","type":"git"},"_npmVersion":"10.2.3","description":"alternative to native pointAtLength() and getTotalLength() method","directories":{},"_nodeVersion":"20.10.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/svg-getpointatlength_1.2.1_1737948773042_0.9534832971872784","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"svg-getpointatlength","version":"1.2.2","keywords":["svg","pathlength","point-at-length","path","pathdata"],"author":{"name":"herrstrietzel"},"license":"MIT","_id":"svg-getpointatlength@1.2.2","maintainers":[{"name":"herrstrietzel","email":"der@herrstrietzel.de"}],"homepage":"https://github.com/herrstrietzel/svg-getpointatlength#readme","bugs":{"url":"https://github.com/herrstrietzel/svg-getpointatlength/issues"},"dist":{"shasum":"fd417fd541f05be2aafbe2e18abaf06bfc35f4d9","tarball":"https://registry.npmjs.org/svg-getpointatlength/-/svg-getpointatlength-1.2.2.tgz","fileCount":17,"integrity":"sha512-L8414G7d9KDpu7mrZU3hhasXga9YskTZgT9d1KC/0wfublPeY1O0vFWEasSQh4Xh8P1MN3QVqc9L+32n5LuaQQ==","signatures":[{"sig":"MEQCIERBzT6GtfM9ckCRBBK1ZYp47+/B3Ttko6MClaY85IuXAiAkFUkm1nKCdqY0Q8jNnk9XQB2ds7fSbWh8KQVk9U3oCg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":170908},"main":"getPointAtLengthLookup.js","gitHead":"961fcc440342da944853d1ac8f082bd90d7860ac","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"herrstrietzel","email":"der@herrstrietzel.de"},"repository":{"url":"git+https://github.com/herrstrietzel/svg-getpointatlength.git","type":"git"},"_npmVersion":"10.2.3","description":"alternative to native pointAtLength() and getTotalLength() method","directories":{},"_nodeVersion":"20.10.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/svg-getpointatlength_1.2.2_1737954497742_0.4839124027714785","host":"s3://npm-registry-packages-npm-production"}},"1.2.3":{"name":"svg-getpointatlength","version":"1.2.3","keywords":["svg","pathlength","point-at-length","path","pathdata"],"author":{"name":"herrstrietzel"},"license":"MIT","_id":"svg-getpointatlength@1.2.3","maintainers":[{"name":"herrstrietzel","email":"der@herrstrietzel.de"}],"homepage":"https://github.com/herrstrietzel/svg-getpointatlength#readme","bugs":{"url":"https://github.com/herrstrietzel/svg-getpointatlength/issues"},"dist":{"shasum":"8f7585ed294d6a1d42401b5ade32bc988b00ff31","tarball":"https://registry.npmjs.org/svg-getpointatlength/-/svg-getpointatlength-1.2.3.tgz","fileCount":17,"integrity":"sha512-1dvDkoLFwH33TWE6tgsoZsHYwtx98rrxBt52Ica4iUweALdJnkSU/jC50pQnxnHttltY0P9j4eCdpJc4IQUnPA==","signatures":[{"sig":"MEUCIQCogoCAkfuf4EeSAFU02XHBwrx9U9u+w4IxMnY7pnwcfwIgN4+gocZgN/Aiv32RjByvDdh3Vnb3MDGD4tRsUmF2YD0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":170834},"main":"getPointAtLengthLookup.js","gitHead":"aaaf3c4d9e03340e6215c5b87421d4e1f411cd26","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"herrstrietzel","email":"der@herrstrietzel.de"},"repository":{"url":"git+https://github.com/herrstrietzel/svg-getpointatlength.git","type":"git"},"_npmVersion":"10.2.3","description":"alternative to native pointAtLength() and getTotalLength() method","directories":{},"_nodeVersion":"20.10.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/svg-getpointatlength_1.2.3_1737954766625_0.8348311885811883","host":"s3://npm-registry-packages-npm-production"}},"1.2.4":{"name":"svg-getpointatlength","version":"1.2.4","keywords":["svg","pathlength","point-at-length","path","pathdata"],"author":{"name":"herrstrietzel"},"license":"MIT","_id":"svg-getpointatlength@1.2.4","maintainers":[{"name":"herrstrietzel","email":"der@herrstrietzel.de"}],"homepage":"https://github.com/herrstrietzel/svg-getpointatlength#readme","bugs":{"url":"https://github.com/herrstrietzel/svg-getpointatlength/issues"},"dist":{"shasum":"33395572a36eb14d908d0ec96fd15e1e874183e4","tarball":"https://registry.npmjs.org/svg-getpointatlength/-/svg-getpointatlength-1.2.4.tgz","fileCount":22,"integrity":"sha512-WohzClSG8Zyt3Z7lR2n/MJGy6sDDqzIYaUxNcSNAmxeHAJfYZbB5YTU3wV/EwDk5lVaVr1cxdo6Pa7gQlcqyWg==","signatures":[{"sig":"MEQCIEaUGIsXQsTjXXS7CI16bHbZBnIFo3SSK6BqnSSi0X+8AiBCnWZGyW2ctYnjinwbVN5lcKIuctgUz6EpxXhsS48yhA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":443168},"main":"getPointAtLengthLookup.js","gitHead":"af4f04825b7a0f694a37d2e61feb14195429f11d","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"herrstrietzel","email":"der@herrstrietzel.de"},"repository":{"url":"git+https://github.com/herrstrietzel/svg-getpointatlength.git","type":"git"},"_npmVersion":"10.2.3","description":"alternative to native pointAtLength() and getTotalLength() method","directories":{},"_nodeVersion":"20.10.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/svg-getpointatlength_1.2.4_1738201843387_0.9250633113985878","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"svg-getpointatlength","version":"1.3.0","keywords":["svg","pathlength","point-at-length","path","pathdata"],"author":{"name":"herrstrietzel"},"license":"MIT","_id":"svg-getpointatlength@1.3.0","maintainers":[{"name":"herrstrietzel","email":"der@herrstrietzel.de"}],"homepage":"https://github.com/herrstrietzel/svg-getpointatlength#readme","bugs":{"url":"https://github.com/herrstrietzel/svg-getpointatlength/issues"},"dist":{"shasum":"ffb168ec92b0c84a49e71b278cde9de31c6370fb","tarball":"https://registry.npmjs.org/svg-getpointatlength/-/svg-getpointatlength-1.3.0.tgz","fileCount":26,"integrity":"sha512-YN798ykP0W6wUKWB/4/1SCXa0vUdVq1EEEXBeUDXqgugiUVu4PKwLnb0NQwaAahZfHimH9OU8v1n6sozalLb7g==","signatures":[{"sig":"MEYCIQDtvSA2pY7Aa3U87tAZbv4l+wD21wi8Spf++aOqt4nZuQIhAIyz11B5D+/zG1sIw6FH3QhwTu0SWW7WIFdixTKU+6yN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":482368},"main":"getPointAtLengthLookup.js","gitHead":"44527f1602d7e54b6158da2df23c3911bf54e02c","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"herrstrietzel","email":"der@herrstrietzel.de"},"repository":{"url":"git+https://github.com/herrstrietzel/svg-getpointatlength.git","type":"git"},"_npmVersion":"10.2.3","description":"alternative to native pointAtLength() and getTotalLength() method","directories":{},"_nodeVersion":"20.10.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/svg-getpointatlength_1.3.0_1738214835014_0.6581742521001317","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"svg-getpointatlength","version":"1.3.1","keywords":["svg","pathlength","point-at-length","segment-at-length","path","pathdata"],"author":{"name":"herrstrietzel"},"license":"MIT","_id":"svg-getpointatlength@1.3.1","maintainers":[{"name":"herrstrietzel","email":"der@herrstrietzel.de"}],"homepage":"https://github.com/herrstrietzel/svg-getpointatlength#readme","bugs":{"url":"https://github.com/herrstrietzel/svg-getpointatlength/issues"},"dist":{"shasum":"cf68cebf0eba50d34e0d7cad4c6567ab1f3a7ce7","tarball":"https://registry.npmjs.org/svg-getpointatlength/-/svg-getpointatlength-1.3.1.tgz","fileCount":15,"integrity":"sha512-Wm0q4430nCEc7HtvMR22gUA1i6rnJYfmZuavZ+ucPAK1rbcVlBhqsnewqFJ5TlfT5ux23JmGcb6k0XobG1Rr/w==","signatures":[{"sig":"MEYCIQCogKwAAuMdcYozrE/yfmaK1xF6htqIX9oUwL4/1w7dFAIhAPphReCKOQvrKG9BVOckDZKEReVmtQeLurKbExjSvyM9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":405074},"main":"getPointAtLengthLookup.js","gitHead":"d35befa826f88f9a5e215c2ee48e0a2eaea752ee","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"herrstrietzel","email":"der@herrstrietzel.de"},"repository":{"url":"git+https://github.com/herrstrietzel/svg-getpointatlength.git","type":"git"},"_npmVersion":"10.2.3","description":"alternative to native pointAtLength() and getTotalLength() method","directories":{},"_nodeVersion":"20.10.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/svg-getpointatlength_1.3.1_1742172313323_0.731595055410653","host":"s3://npm-registry-packages-npm-production"}},"1.3.2":{"name":"svg-getpointatlength","version":"1.3.2","keywords":["svg","pathlength","point-at-length","segment-at-length","path","pathdata"],"author":{"name":"herrstrietzel"},"license":"MIT","_id":"svg-getpointatlength@1.3.2","maintainers":[{"name":"herrstrietzel","email":"der@herrstrietzel.de"}],"homepage":"https://github.com/herrstrietzel/svg-getpointatlength#readme","bugs":{"url":"https://github.com/herrstrietzel/svg-getpointatlength/issues"},"dist":{"shasum":"82e055197ea2ee716efa908ad66d4758306fab03","tarball":"https://registry.npmjs.org/svg-getpointatlength/-/svg-getpointatlength-1.3.2.tgz","fileCount":7,"integrity":"sha512-u2VZ2QaUGGQJCYGvcgM8pNuAavPy/A8dBhW+2e6/C4SzTYRIjNRgeFmse96Mj1HJ3A3fGEOxN8zXJvN8ZemvbA==","signatures":[{"sig":"MEUCIQDA767AluL97G6pIfbDDnD2+f4aUJkUqhkCjm3xTAdt5QIgJN+sYVnnHj0WpmSBwSXZElBCXszfpHUevNybXNCMScs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":110933},"main":"getPointAtLengthLookup.js","gitHead":"2cf34c4a994d976a355198a6940bd6e254947dc5","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"herrstrietzel","email":"der@herrstrietzel.de"},"repository":{"url":"git+https://github.com/herrstrietzel/svg-getpointatlength.git","type":"git"},"_npmVersion":"10.2.3","description":"alternative to native pointAtLength() and getTotalLength() method","directories":{},"_nodeVersion":"20.10.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/svg-getpointatlength_1.3.2_1749007176079_0.2021714311766447","host":"s3://npm-registry-packages-npm-production"}},"1.9.10":{"name":"svg-getpointatlength","version":"1.9.10","keywords":["svg","pathlength","point-at-length","segment-at-length","angle-at-length","path","pathdata"],"author":{"name":"herrstrietzel"},"license":"MIT","_id":"svg-getpointatlength@1.9.10","maintainers":[{"name":"herrstrietzel","email":"der@herrstrietzel.de"}],"homepage":"https://github.com/herrstrietzel/svg-getpointatlength#readme","bugs":{"url":"https://github.com/herrstrietzel/svg-getpointatlength/issues"},"dist":{"shasum":"af70146de624c3f5eff83dad4d7dafec6a7091f0","tarball":"https://registry.npmjs.org/svg-getpointatlength/-/svg-getpointatlength-1.9.10.tgz","fileCount":48,"integrity":"sha512-mG0KeVksuaN+GunZa3vE0jFpHzkkUu1Zv6lq4ayjlKtKXIWBZWMAP/EeBi0bm79evz23/rQWxekGs7vkboT28A==","signatures":[{"sig":"MEYCIQCwD4KECLnxa2hlwn6Ot44/FHlLuLUpUaucAAynEB4t2QIhALXmGs9/F4oj6AHm9I75l00HTOaGVc1XcmLOcO/VLU10","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":916828},"main":"./dist/svg-getpointatlength.node.js","type":"module","module":"./dist/svg-getpointatlength.esm.js","browser":"./dist/svg-getpointatlength.js","exports":{".":{"import":"./dist/svg-getpointatlength.esm.js","require":"./dist/svg-getpointatlength.node.js"},"./dist/svg-getpointatlength.js":"./dist/svg-getpointatlength.js","./dist/svg-getpointatlength.esm.js":"./dist/svg-getpointatlength.esm.js","./dist/svg-getpointatlength.min.js":"./dist/svg-getpointatlength.min.js"},"gitHead":"09ee589aab7cd474f33fd05bb3d5844914ff1854","scripts":{"test":"node test.js","build":"rollup -c","watch":"rollup -c --watch"},"_npmUser":{"name":"herrstrietzel","email":"der@herrstrietzel.de"},"repository":{"url":"git+https://github.com/herrstrietzel/svg-getpointatlength.git","type":"git"},"_npmVersion":"10.2.3","description":"alternative to native pointAtLength() and getTotalLength() method","directories":{},"_nodeVersion":"20.10.0","dependencies":{"terser":"^5.39.0"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.29.5","@rollup/plugin-terser":"^0.4.4"},"_npmOperationalInternal":{"tmp":"tmp/svg-getpointatlength_1.9.10_1755753880302_0.7816020900278826","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"svg-getpointatlength","version":"2.0.0","description":"alternative to native pointAtLength() and getTotalLength() method","repository":{"type":"git","url":"git+https://github.com/herrstrietzel/svg-getpointatlength.git"},"keywords":["svg","pathlength","point-at-length","segment-at-length","angle-at-length","path-to-polygon","bounding-box","path","pathdata"],"author":{"name":"herrstrietzel"},"license":"MIT","bugs":{"url":"https://github.com/herrstrietzel/svg-getpointatlength/issues"},"homepage":"https://github.com/herrstrietzel/svg-getpointatlength#readme","main":"./dist/svg-getpointatlength.node.js","module":"./dist/svg-getpointatlength.esm.js","browser":"./dist/svg-getpointatlength.js","exports":{".":{"import":"./dist/svg-getpointatlength.esm.js","require":"./dist/svg-getpointatlength.node.js"},"./dist/svg-getpointatlength.esm.js":"./dist/svg-getpointatlength.esm.js","./dist/svg-getpointatlength.js":"./dist/svg-getpointatlength.js","./dist/svg-getpointatlength.min.js":"./dist/svg-getpointatlength.min.js"},"type":"module","scripts":{"build":"rollup -c","watch":"rollup -c --watch","test":"node test.js"},"devDependencies":{"@rollup/plugin-terser":"^0.4.4","rollup":"^3.29.5"},"dependencies":{"terser":"^5.39.0"},"_id":"svg-getpointatlength@2.0.0","gitHead":"072860a03055f634e6b38a24e7e9b098618078ab","_nodeVersion":"20.10.0","_npmVersion":"10.2.3","dist":{"integrity":"sha512-IKc//IvRPa4Up0oQzmolkljLi8bjWPBtFOsib0LKqP5Xsl0o6OcfSUxn/EfAUwVQvWe1d+BTNmoIbviDnnJ+sg==","shasum":"afcdd5123f4b886eb0c253486a33e11a5ee3ba9f","tarball":"https://registry.npmjs.org/svg-getpointatlength/-/svg-getpointatlength-2.0.0.tgz","fileCount":48,"unpackedSize":916837,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCKCd0LQkiHTuycuzoLowO76GRcxnDOTg5kzIajII+PaQIgHChiA71X8n5XjzYtMDZanV8ABmSXGOZaxbcNWYo6Jzo="}]},"_npmUser":{"name":"herrstrietzel","email":"der@herrstrietzel.de"},"directories":{},"maintainers":[{"name":"herrstrietzel","email":"der@herrstrietzel.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/svg-getpointatlength_2.0.0_1755757378539_0.957537391675318"},"_hasShrinkwrap":false}},"time":{"created":"2024-01-05T20:12:35.688Z","modified":"2025-08-21T06:22:59.026Z","1.0.0":"2024-01-05T20:12:35.885Z","1.0.1":"2024-01-05T20:43:16.635Z","1.0.2":"2024-01-05T20:51:26.031Z","1.0.3":"2024-01-23T16:02:47.051Z","1.0.4":"2024-01-31T00:47:12.992Z","1.0.5":"2024-02-05T19:17:16.126Z","1.0.6":"2024-02-10T05:32:09.090Z","1.0.7":"2024-03-17T18:33:00.277Z","1.0.8":"2024-03-20T17:28:01.425Z","1.0.9":"2024-03-20T17:35:38.404Z","1.0.10":"2024-03-20T18:46:25.466Z","1.0.11":"2024-04-16T23:48:44.872Z","1.0.13":"2025-01-09T19:41:24.738Z","1.0.14":"2025-01-11T05:49:48.086Z","1.0.15":"2025-01-21T04:27:13.323Z","1.1.0":"2025-01-23T02:07:01.040Z","1.2.0":"2025-01-27T03:25:14.634Z","1.2.1":"2025-01-27T03:32:53.275Z","1.2.2":"2025-01-27T05:08:17.950Z","1.2.3":"2025-01-27T05:12:46.805Z","1.2.4":"2025-01-30T01:50:43.605Z","1.3.0":"2025-01-30T05:27:15.300Z","1.3.1":"2025-03-17T00:45:13.522Z","1.3.2":"2025-06-04T03:19:36.281Z","1.9.9":"2025-08-21T05:19:42.887Z","1.9.10":"2025-08-21T05:24:40.550Z","2.0.0":"2025-08-21T06:22:58.846Z"},"bugs":{"url":"https://github.com/herrstrietzel/svg-getpointatlength/issues"},"author":{"name":"herrstrietzel"},"license":"MIT","homepage":"https://github.com/herrstrietzel/svg-getpointatlength#readme","keywords":["svg","pathlength","point-at-length","segment-at-length","angle-at-length","path-to-polygon","bounding-box","path","pathdata"],"repository":{"type":"git","url":"git+https://github.com/herrstrietzel/svg-getpointatlength.git"},"description":"alternative to native pointAtLength() and getTotalLength() method","maintainers":[{"name":"herrstrietzel","email":"der@herrstrietzel.de"}],"readme":"[![npm version](https://img.shields.io/npm/v/svg-getpointatlength)](https://www.npmjs.com/package/svg-getpointatlength)\r\n[![license](https://img.shields.io/npm/l/svg-getpointatlength)](https://www.npmjs.com/package/svg-getpointatlength)\r\n[![CDN](https://img.shields.io/badge/CDN-jsDelivr-E84D3D?style=flat)](https://cdn.jsdelivr.net/npm/svg-getpointatlength@latest/dist/svg-getpointatlength.min.js)\r\n[![CDN](https://img.shields.io/badge/CDN-unpkg-blue?style=flat)](https://www.unpkg.com/svg-getpointatlength@latest/dist/svg-getpointatlength.js)\r\n\r\n\r\n<p align=\"center\" style=\"text-align:center\">\r\n<img width=\"100\" height=\"100\" style=\"display:inline-block\" src=\"./favicon.svg\">\r\n<h1 align=\"center\">svg-getpointatlength</h1>\r\n</p> \r\n\r\nCalculates a path's **length** or **points** as well as **tangent angles** at length based on raw pathdata strings.  \r\nThis library aims to work as a performant workaround to emulate natively supported browser methods `getTotalLength()` and `getPointAtLength()` in a non-rendered environment such as node or virtual DOM applications or canvas.  \r\n\r\n**Features:**\r\nThis library provides methods to get:\r\n* **path length** from raw SVG path data strings\r\n* **point** coordinates at specified length\r\n* **tangent angles** (handy for SVG motion path emulations)\r\n* **segments** at length \r\n* **split segments at length** into separate path data chunks  \r\n* **shape support**: length/point-at-length from elements  \r\n* **get bounding box** \r\n* **area calculations**\r\n\r\nThe provided methods calculate points at lengths by measuring all segments lengths and saving them in a **reusable lookup object**.    \r\n\r\nThis way you can efficiently calculate hundreds of points on a path without sacrificing too much performance – unlike the quite expensive native `getPointAtlength()` method.\r\n\r\n* [Usage](#usage)\r\n  + [Browser](#browser)\r\n    - [Length only](#length-only)\r\n  + [ES module](#es-module)\r\n  + [Node](#node)\r\n* [Path data input](#path-data-input)\r\n* [Canvas helper: Path2D_svg()](#canvas-helper-path2dsvg)\r\n* [Methods and options](#methods-and-options)\r\n  + [Options: get tangent angles or segments at point](#options-get-tangent-angles-or-segments-at-point)\r\n  + [Get segments or split paths at length](#get-segments-or-split-paths-at-length)\r\n    - [Get segment at length](#get-segment-at-length)\r\n* [Get bounding box](#get-bounding-box)\r\n* [Get Area](#get-area)\r\n* [Split paths at length](#split-paths-at-length)\r\n* [Minimal »lite« version](#minimal-lite-version)\r\n  + [paths and shapes as input argument (New in version 1.3.0)](#paths-and-shapes-as-input-argument-new-in-version-130)\r\n    - [Get path data from elements/shapes](#get-path-data-from-elements-shapes)\r\n* [Updates and Versions](#updates-and-versions)\r\n  + [Changelog](#changelog)\r\n  + [Downgrading](#downgrading)\r\n* [Accuracy](#accuracy)\r\n* [Performance](#performance)\r\n* [Addons](#addons)\r\n  + [polygonFromPathData()](#polygonfrompathdata)\r\n* [Report bugs](#report-bugs)\r\n* [Demos](#demos)\r\n* [Alternative libraries](#alternative-libraries)\r\n* [Credits](#credits)\r\n* [Related Repositories/projects](#related-repositories-projects)\r\n\r\n\r\n\r\n\r\n## Usage\r\n### Browser\r\n\r\nLoad JS locally or via cdn\r\n\r\n\r\n\r\n```\r\n// ESM\r\n<script src=\"https://cdn.jsdelivr.net/npm/svg-getpointatlength@latest/+esm\"></script>\r\n\r\n\r\n// IIFE\r\n<script src=\"https://cdn.jsdelivr.net/npm/svg-getpointatlength@latest/dist/svg-getpointatlength.min.js\"></script>\r\n```\r\n\r\nor (unpkg.com version)\r\n\r\n``` lang-html\r\n<script src=\"https://www.unpkg.com/svg-getpointatlength@latest/dist/svg-getpointatlength.js\"></script>\r\n```\r\n\r\n\r\n**Example: calculate path length from pathData**  \r\n\r\n```\r\n\r\nlet d = `M3,7 \r\n        L13,7 \r\n        m-20,10 \r\n        l10,0 \r\n        V27 \r\n        H23 \r\n        v10 \r\n        h10\r\n        C 33,43 38,47 43,47 \r\n        c 0,5 5,10 10,10\r\n        S 63,67 63,67       \r\n        s -10,10 10,10\r\n        Q 50,50 73,57\r\n        q 20,-5 0,-10\r\n        T 70,40\r\n        t 0,-15\r\n        A 5, 10 45 1040,20  \r\n        a5,5 20 01 -10,-10\r\n        Z `\r\n\r\n\r\n\r\n// measure path and save metrics in lookup object\r\nlet pathLengthLookup = getPathLengthLookup(d)\r\nlet totalLength = pathLengthLookup.totalLength\r\n\r\nconsole.log(totalLength)\r\n\r\n// point at length\r\nlet pt = pathLengthLookup.getPointAtLength(totalLength/2)\r\nconsole.log(pt)\r\n```\r\n\r\n#### Length only\r\nIf you only need to retrieve the total length of a path you can use the simplified helper  `getPathLengthFromD()`\r\n\r\n```\r\n// only length – slightly faster as we don't calculate intermediate lengths\r\nlet length = getPathLengthFromD(d)\r\nconsole.log(length)\r\n```\r\n\r\n### ES module\r\n\r\n``` \r\n<script type=\"module\">\r\n\r\n  // init\r\n  import { getPathLookup } from 'svg-getpointatlength.esm.min.js';\r\n  let lookup = getPathLookup(d)\r\n  let pt = lookup.getPointAtLength(10)\r\n\r\n</script>\r\n```\r\n\r\n### Node  \r\n\r\n```\r\nnpm install svg-getpointatlength\r\n```\r\n\r\n```\r\nvar pathDataLength = require(\"svg-getpointatlength\");\r\nvar { getPathLengthLookup, getPathLengthFromD, getPathDataLength, getLength, parsePathDataNormalized } = pathDataLength;\r\n\r\nlet d = `M3,7 \r\n        L13,7 \r\n        m-20,10 \r\n        l10,0 \r\n        V27 \r\n        H23 \r\n        v10 \r\n        h10\r\n        C 33,43 38,47 43,47 \r\n        c 0,5 5,10 10,10\r\n        S 63,67 63,67       \r\n        s -10,10 10,10\r\n        Q 50,50 73,57\r\n        q 20,-5 0,-10\r\n        T 70,40\r\n        t 0,-15\r\n        A 5, 10 45 1040,20  \r\n        a5,5 20 01 -10,-10\r\n        Z `\r\n\r\n// measure path and save metrics in lookup object\r\nlet pathLengthLookup = getPathLengthLookup(d)\r\nlet totalLength = pathLengthLookup.totalLength\r\n\r\nconsole.log(totalLength)\r\n\r\n// point at length\r\nlet pt = pathLengthLookup.getPointAtLength(totalLength/2)\r\nconsole.log(pt)\r\n```\r\n\r\n\r\n\r\n## Path data input\r\n`getPathLengthLookup(d)` accepts: \r\n* stringified path data (as used in `d` attributes)  \r\n* an already parsed path data array – also native pathData object retrieved by `path.getPathData()` (natively supported in Firefox or via polyfill)\r\n* SVGGeometry element (including shapes like `<rect>`, `<ellipse>`)\r\n* SVG markup: all geometry elements are converted to path data\r\n* polygon data:    \r\n  + stringified as in `<polygon>` `points` attribute\r\n  + vertex array like `[{x:1, y:2}, {x:3, y:4}]`\r\n* cached lookup JSON: you can store the complete stringified lookup object as a JSON and pass it to the lookup function (handy to skip the complex measure process)\r\n\r\n\r\n## Canvas helper: `Path2D_svg()`\r\nVersion 2 adds a custom class `Path2D_svg()` to retrieve lookup data from a `Path2D` object.  \r\n\r\n```\r\nconst path = new Path2D_svg();\r\npath.moveTo(350, 50);\r\npath.bezierCurveTo(370, 0, 430, 100, 450, 50);\r\n\r\n// get lookup\r\nlet lookup = path.getPathLookup();\r\nlet pt = lookup.getPointAtLength(10)\r\n\r\n// get path data\r\nlet pathData = path.getPathData();\r\n\r\n// stringified path data\r\nlet d = path.getPathDataString();\r\n```\r\n\r\n\r\n## Methods and options\r\n`getPathLengthLookup(d)` returns a lookup objects including reusable data about ech path segment as well as the total length.  \r\n\r\n```\r\n{\r\n  \"totalLength\": path total length,\r\n  \"segments\": [\r\n   {\r\n    //lengths calculated between t=0  to t=1 in 36 steps\r\n    \"lengths\": [ length array ],\r\n    \"points\": [ control point array ],\r\n    \"index\": segment index,\r\n    \"total\": segment length,\r\n    \"type\": segment command type (c, q, l, a etc.),\r\n   },\r\n   //... subsequent segment info\r\n  ]\r\n}\r\n```\r\n\r\n`lookup.pathLengthLookup.getPointAtLength(length, getTangent = false, getSegment = false)` returns an object like this \r\n\r\n```\r\n{x: 10, y:20, index:segmentIndex, t:tValue}\r\n```\r\n\r\n### Options: get tangent angles or segments at point\r\nOptionally, you can also include tangent angles and segment indices (as well as self contained path data) from the current point-at-length:  \r\n\r\n| method | options/agruments | description | default/values |\r\n|--|--|--|--|\r\n|`getPathLengthLookup(d, precision, onlyLength, getTangent )` |  `d` | A path data string or a already parsed path data array  | *none* |\r\n| | `precision` | Specify accuracy for Bézier length calculations. This parameter sets the amount of length intermediate calculations. Default should work even for highly accurate calcuations. Legendre-Gauss approximation is already adaptive  | **`medium`**, `high`, `low` |\r\n|  | `onlyLength`| skips the lookup creation and returns only the length of a path | `false` |\r\n|  | `getTangent` | include tangent angles in lookup object (can improve performance)  | true   |\r\n| `getPointAtLength()` | `length` | gets point at specified length   | *none* |\r\n|  | `getTangent` | include tangent angles in point object (can improve performance)  | false   |\r\n|  | `getSegment` | include segment info in object | false  |  \r\n\r\n```\r\n// select path\r\nlet path = document.querySelector('path')\r\n\r\n// get path data attribute\r\nlet d = path.getAttribute('d')\r\n\r\n// measure path, create lookup\r\nlet pathLengthLookup = getPathLengthLookup(d)\r\n\r\n// get point, tangent and segment\r\nlet length = 100;\r\nlet getTangent = true;\r\nlet getSegment = true;\r\nlet pt = pathLengthLookup.getPointAtLength(length, getTangent, getSegment);\r\n\r\nlet tangentAngle = pt.angle;\r\nlet segmentIndex = pt.index;\r\nlet segmentCommand = pt.com;\r\n\r\n```\r\n\r\nThe returned data object will look like this:  \r\n\r\n```\r\n{\r\n    // tangent angle in radians\r\n    angle: 1.123,\r\n\r\n    // original command\r\n    com: {type: 'A', values: Array(7), p0: {…}},\r\n\r\n    // original command/segment index\r\n    index: 1,\r\n\r\n    // t value for target length\r\n    t: 0.25,\r\n\r\n    // point coordinates\r\n    x: 10,\r\n    y: 15,\r\n}\r\n\r\n```\r\nSee pointAtLength.html example in demos folder.\r\n\r\nSo you also have info about the current segment the length is in as well as the `t` value used to interpolate the point.  \r\n\r\n\r\n### Get segments or split paths at length\r\n\r\n#### Get segment at length\r\n`lookup.getSegmentAtLength(len)` returns the current segment's index as well as the path data:  \r\n\r\n``` \r\nlet seg = {\r\n  x: 264.85,\r\n  y: 53.947,\r\n  angle: 1.36,\r\n  d: \"M 200 50 A 50 25 20 1 1 275 100\",\r\n  pathData: [{…}, {…}],\r\n  t: 0.45,\r\n  index: 3,\r\n};\r\n\r\n```\r\n\r\n**Usage:**  \r\n``` \r\nlet segment = lookup.getSegmentAtLength(len);\r\nlet {pathData, d} = segment\r\n\r\n// render current path segment\r\npathSeg.setAttribute('d', d)\r\n\r\n```\r\n\r\n## Get bounding box\r\nVersion 2 introduces a bounding box method which returns a bbox object similar to native SVG `getBBox()`.  \r\nOnce you call it the lookup is complemented with bounding box data for the entire path as well as dimensions for each segment.\r\n\r\n```\r\nlet {x, y, width, height} = lookup.getBBox()\r\n```\r\n\r\n\r\n## Get Area\r\nVersion 2 adds an area calculation.  \r\nThis is also handy to get the drawing direction of a path or segment:  \r\n* area < 0 = counter clockwise\r\n* area > 0 = clockwise\r\n\r\n```\r\nlet lookup = path.getPathLookup();\r\n\r\n/** \r\n* adds area data to lookup\r\n* for each segment\r\n* total path area\r\n*/\r\nlet area = lookup.getArea()\r\n```\r\n\r\nAlternatively you can get all area data calling `getSegmentAtLength()` \r\n\r\n```\r\nlet segmentData = lookup.getSegmentAtLength(10)\r\n```\r\n\r\nBy default `getArea` parameter is enabled: \r\n`getSegmentAtLength(length = 0, getBBox = true, getArea=true, decimals=-1)`\r\n\r\n\r\n\r\n\r\n## Split paths at length\r\n`lookup.splitPathAtLength(len)` splits a path at the specified length and returns an object containing:  \r\n\r\n* an array of path data chunks (before and after split position)\r\n* an array of stringified pathdata - to be applied to  a `<path>` `d` attribute directly. See example \"split.html\".\r\n* index of original segment   \r\n\r\n``` \r\n{\r\n \"pathDataArr\": [\r\n    [\r\n      {\"type\": \"M\",\"values\": [0, 100 ]},\r\n      {\"type\": \"Q\",\"values\": [50, 0, 100, 50]}\r\n    ],\r\n    [\r\n      {\"type\": \"M\",\"values\": [0, 100 ]},\r\n      {\"type\": \"Q\",\"values\": [50, 0, 100, 50]}\r\n    ]\r\n ],\r\n \"dArr\": [\"M 0 100 ...\", \"M 0 100 ...\"],\r\n \"index\": 3\r\n}\r\n\r\n```\r\n\r\n**Usage:**  \r\n``` \r\nlet splitPathData = lookup.splitPathAtLength(len)\r\nlet [d1, d2] = splitPathData.dArr;\r\n```\r\n\r\n\r\n\r\n## Minimal »lite« version\r\nIn case you can live without the fancy features introduced in version 2, you may also load the smaller version from the dist directory.  \r\n\r\n\r\n```\r\n<script src=\"../dist/svg-getpointatlength_lite.js\"></script>\r\n```\r\n\r\nThis version doesn't include helpers for:  \r\n* area \r\n* bounding box \r\n* canvas \r\n* segment splitting\r\n\r\nOtherwise it supports all features from version 1.3.x and is ~35–40% smaller.\r\n\r\n\r\n\r\n\r\n\r\n### paths and shapes as input argument (New in version 1.3.0)\r\n\r\n`getPathLengthLookup()` now also supports elements these SVGGeometryElements: \r\n* `<path>`\r\n* `<rect>`\r\n* `<circle>`\r\n* `<ellipse>`\r\n* `<polygon>`\r\n* `<polyline>`\r\n* `<line>`\r\n\r\nrelative units like `%` are also supported as long as a `viewBox` is provided. Physical units like `in`, `mm`, `pt`, `em` are converted to user units pixel based on a 96 dpi resolution.\r\n\r\n```\r\nlet path = document.querySelector('path')\r\n\r\n// measure path, create lookup\r\nlet pathLengthLookup = getPathLengthLookup(path);\r\n\r\n// total length\r\nlet {totalLength} = pathLengthLookup;\r\n\r\n// get point\r\nlet pt = pathLengthLookup.getPointAtLength(totalLength/2);\r\n```\r\n\r\n#### Get path data from elements/shapes\r\nFor usage in node.js you need a DOM parser like JSDOM.  \r\nTo retrieve the path data from an element use `getPathDataFromEl(el, stringify)` \r\n\r\n``` \r\nlet ellipse = document.querySelector('ellipse');\r\nlet pathData = getPathDataFromEl(ellipse);\r\n\r\n// measure path, create lookup\r\nlet pathLengthLookup = getPathLengthLookup(pathData);\r\n\r\n// total length\r\nlet {totalLength} = pathLengthLookup;\r\n\r\n// get point\r\nlet pt = pathLengthLookup.getPointAtLength(totalLength/2);\r\n```\r\n\r\nAs of version 2 you can stringify the path data (for usage as a `d` path attribute) via new parameter:   \r\n``` \r\nlet stringify = true;\r\nlet pathDataString = getPathDataFromEl(el, stringify)\r\n```\r\n\r\n\r\n\r\n\r\n\r\n## Updates and Versions\r\n\r\n### Changelog\r\n* Version 2: \r\n  + improved input normalization: accepts SVG DOM elements, native pathData objects (retrieved from `getPathData()`) and point arrays\r\n  + split paths at length: creates 2 separate selfcontained path data according to split position\r\n* Version 1.3.1 fixes a rare parsing issue where 'M' commands were omitted (e.g `z` followed by another drawing command than `M` – unfortunately valid). See updated demo with \"path-from-hell3\" (... a pretty good stress test for any path data parser=). Thanks to [vboye-foreflight's PR](https://github.com/herrstrietzel/svg-getpointatlength/commit/ee035987b9ac7d5a8925190b59128206199779ae) we now get the point at last length whenever the input length exceeds the total length - compliant with native methods' behavior.\r\n* Version 1.3.0 **support for shapes** (ellipse, circle, rect etc.)\r\n* Version 1.2.4 fixed arc angle errors\r\n* Version 1.2.0 calculates elliptic arcs directly – removing arc to cubic conversion\r\n* Version 1.1.0 improved performance for recurring point-at-length calculations, fixed tangent calculation bugs and added flat bezier edge cases\r\n* Version 1.0.15 improved performance for recurring point-at-length calculations\r\n* Version 1.0.13 added support for **tangent angles** at a specified length/point\r\n\r\n### Downgrading\r\nIn case you encounter any problems with the latest versions you can just load a previous one like so:\r\n\r\n``` lang-html\r\n<script src=\"https://www.unpkg.com/svg-getpointatlength@1.0.12/getPointAtLengthLookup.js\"></script>\r\n```  \r\nSee npm repo for all [existing versions](https://www.npmjs.com/package/svg-getpointatlength?activeTab=versions)\r\n\r\n\r\n## How it works\r\n**Save path/segment metrics as a reusable lookup for further calculations**  \r\n\r\n1. path data is parsed from a `d` string to get computable absolute values\r\n2. the lookup stores   \r\n        2.1 segement total lenghts   \r\n        2.2 partial lengths at certain `t` intervals   \r\n3. point at lengths are calculated by finding the closest length in the segment array  \r\nThen we find the closest length in the length interval array. We interpolate a new `t` value based on the length difference to get a close length approximation\r\n\r\n\r\n\r\n\r\n### Path parser   \r\n\r\nThis library also includes a quite versatile parsing function that could be used separately.  \r\n\r\n`parsePathDataNormalized(d, options)`\r\nAs length calculations are based on normalized path data values.  \r\nAll values are converted to absolute and longhand commands.  \r\n\r\n\r\n```\r\nlet options= {\r\n    toAbsolute: true,         //necessary for most calculations\r\n    toLonghands: true,        //dito\r\n    arcToCubic: false,        //sometimes necessary\r\n    arcAccuracy: 4,           //arc to cubic precision\r\n}\r\n```\r\n\r\n| parameter | default | effect |\r\n| -- | -- | -- |\r\n| toAbsolute | true | convert all to absolute |\r\n| toLonghands | true | convert all shorthands to longhands |\r\n| arcToCubic | *false* | convert arcs `A` commands to cubic béziers |\r\n| arcToCubic | 4 | arc to cubic precision – adds more cubic segments to improve length accuracy |\r\n\r\n\r\n``` \r\n// get original path data: including relative and shorthand commands\r\nlet pathData_notNormalized = parsePathDataNormalized(d, {toAbsolute:false, toLonghands:false})\r\n\r\n```\r\n\r\n\r\n## Accuracy\r\nIn fact the native browser methods `getTotalLength()` and `getPointAtlength()` return different results in Firefox, chromium/blink and webkit.   \r\n\r\nCompared against reproducible/calculable objects/shapes like **circles** the methods provided by this library actually provide a more [accurate result](https://stackoverflow.com/questions/30277646/svg-convert-arcs-to-cubic-bezier/77538979#77538979). \r\n\r\nCubic bezier length are approximated using [Legendre-Gauss quadrature](https://pomax.github.io/bezierinfo/legendre-gauss.html) integral approximation\r\nWeights and Abscissae values are adjusted for long path segments.  \r\n\r\nElliptical Arc `A` commands are approximated also via Legendre-Gauss quadrature (new in version 1.2). Circular arcs are retained which improves speed and accuracy.\r\n\r\n## Performance\r\nNative `getPointAtLength()` browser implementations aren't well optimized for **recurring** point calculations as they start from scratch on each call (parsing, measuring, calculating point at length). To be fair: there is no trivial length calculation algorithm.  \r\n\r\nSince this library stores all important length data segment by segment – subsequent point (or tangent angle) calculations are way faster than the native methods.  \r\n\r\n| points | native | lookup |\r\n|--|--|--|\r\n|10| 2.1 ms | 2.1 ms |\r\n|100| 21.1 ms | 2.2 ms |\r\n|1000| 210 ms | 3.9 ms |\r\n|10000| 2093.6 ms | 6.7 ms |\r\n\r\nThe lookup creation will usuall take up ~ 1-2ms (depending on the path).  \r\nAs you can see the lookup's setup overhead is already compensated at 10 iteration.\r\nWhen we're entering a range of 100 or 1000 points the lookup method clearly wins whereas native `getPointAtLength()` severely impacts rendering performance.\r\n\r\n\r\n## Addons\r\n### `polygonFromPathData()`\r\n`getPointAtLengthLookup_getPolygon.js` includes a helper to generate polygons from path data retaining segemnt final on-path points  \r\n\r\n```\r\n<script src=\"https://cdn.jsdelivr.net/gh/herrstrietzel/svg-getpointatlength@main/getPointAtLengthLookup_getPolygon.js\"></script>\r\n\r\n```\r\n\r\n```\r\nlet options = {\r\n        // target vertice number\r\n        vertices: 16,           \r\n        // round coordinates\r\n        decimals: 3,            \r\n        // retain segment final points: retains shape\r\n        adaptive: true,         \r\n        // return polygon if path has only linetos\r\n        retainPoly: true,       \r\n        // find an adaptive close approximation based on a length difference threshold\r\n        tolerance: 0            \r\n}\r\n\r\nlet vertices = polygonFromPathData(pathData, options)\r\n\r\n```\r\n\r\n## Report bugs\r\nIf you found a bug - feel free to file an issue. \r\nFor debugging you may also test your path with this [**codepen testbed**](https://codepen.io/herrstrietzel/pen/VYZXbwE)\r\n\r\n\r\n## Demos\r\n\r\nYou can easily test paths using the [web application](https://herrstrietzel.github.io/svg-getpointatlength): \r\n\r\n\r\n* [get point, tangent and segment](https://codepen.io/herrstrietzel/pen/VYZXbwE)\r\n* [getPointAtlength: native vs. lookup](https://codepen.io/herrstrietzel/pen/KKEzdPd)\r\n* [get point at length – performance/accuracy](https://codepen.io/herrstrietzel/pen/WNWRroO)\r\n* [get point and area](https://codepen.io/herrstrietzel/pen/wBwmdKv)  \r\n* [path to polygon](https://codepen.io/herrstrietzel/pen/XWGddRm)\r\n* [get length at point](https://codepen.io/herrstrietzel/pen/yyBKbNV)\r\n* [point ant tangent angle on motion-path](https://codepen.io/herrstrietzel/pen/zxOmRYX?editors=1010)\r\n* [scroll path](https://codepen.io/herrstrietzel/pen/qEWLaZx)\r\n\r\n(See also demos folder)  \r\n\r\n\r\n\r\n## Alternative libraries\r\n* [Kaiido's \"path2D-inspection\"](https://github.com/Kaiido/path2D-inspection) – interesting if yo're foremost working with canvas   \r\n* [rveciana's \"svg-path-properties\"](https://github.com/rveciana/svg-path-properties) \r\n\r\n## Credits\r\n* [Mike 'Pomax' Kamermans](https://github.com/pomax) for explaining the theory. See Stackoverflow post [\"Finding points on curves in HTML 5 2d Canvas context\"](https://stackoverflow.com/questions/3570309/finding-points-on-curves-in-html-5-2d-canvas-context/#76773275)  \r\n* [Vitaly Puzrin](https://github.com/puzrin) for [svgpath library](https://github.com/fontello/svgpath) providing for instance a great and customizable [arc-to-cubic approximation](https://github.com/fontello/svgpath/blob/master/lib/a2c.js) – the base for the more accurate arc-to-cubic approximations\r\n* [Jarek Foksa](https://github.com/jarek-foksa) for developping the great [getPathData() polyfill](https://github.com/jarek-foksa/path-data-polyfill) – probably the most productive contributor to the [\"new\" W3C SVGPathData interface draft](https://svgwg.org/specs/paths/#InterfaceSVGPathData)\r\n* obviously, [Dmitry Baranovskiy](https://github.com/dmitrybaranovskiy) – a lot of these helper functions originate either from Raphaël or snap.svg – or are at least heavily inspired by some helpers from these libraries\r\n\r\n\r\n## Related Repositories/projects\r\n* [svg-parse-path-normalized](https://github.com/herrstrietzel/svg-parse-path-normalized) – Parse path data from string including fine-grained normalizing options\r\n* [fix-path-directions](https://github.com/herrstrietzel/fix-path-directions) – Correct sub path directions in compound path for apps that don't support fill-rules or just reverse path directions (e.g for path animations)\r\n* [svg-pathdata-getbbox](https://github.com/herrstrietzel/svg-pathdata-getbbox) – Calculates a path bounding box based on its raw pathdata\r\n* [svg-transform](https://github.com/herrstrietzel/svg-transform) – A library to transform or de-transform/flatten svg paths\r\n","readmeFilename":"README.md"}