{"_id":"perfect-arrows","_rev":"13-499eca37aef2d61a78bf190845a7d311","name":"perfect-arrows","dist-tags":{"latest":"0.3.7","beta":"0.4.0-beta"},"versions":{"0.1.0":{"version":"0.1.0","license":"MIT","main":"dist/index.js","typings":"dist/index.d.ts","engines":{"node":">=10"},"scripts":{"start":"tsdx watch","build":"tsdx build","test":"tsdx test","lint":"tsdx lint","prepare":"tsdx build"},"peerDependencies":{},"husky":{"hooks":{"pre-commit":"tsdx lint"}},"prettier":{"printWidth":80,"semi":false,"singleQuote":false,"trailingComma":"es5"},"name":"perfect-arrows","author":{"name":"Steve Ruiz","email":"steveruizok@gmail.com"},"description":"Draw perfect arrows between points or shapes","homepage":"https://github.com/steveruizok/perfect-arrows","keywords":["arrow","2d","point","rectangle","shape","between"],"module":"dist/perfect-arrows.esm.js","devDependencies":{"husky":"^4.2.5","tsdx":"^0.13.2","tslib":"^2.0.0","typescript":"^3.9.7"},"gitHead":"976752f96887c8f7cf90f601f0821e278769345d","_id":"perfect-arrows@0.1.0","_nodeVersion":"10.13.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-QzmxBBZcbZoHtnQYfWLdu75sfID2UziCHVXlVm/qKh1a/O5w3MizBkhxBzppeUKbPAAa11lbGO8zNwBM8b9Qew==","shasum":"e24e199ada3597ac36ac6ad56179d74f35e5fe4f","tarball":"https://registry.npmjs.org/perfect-arrows/-/perfect-arrows-0.1.0.tgz","fileCount":21,"unpackedSize":94340,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfEhL5CRA9TVsSAnZWagAA+U4P/0S/GB0YuMaxyQcVAfpg\n9UAYZ6xFWF1JaLkPIbIxl/PEHC01NwYUS6o7D1CME1QtAAvKMt0eEOkXpx8s\n5K+sD/XU1y/B0BBVrqfTn4pSsRMWX6OdJLbNYk3Vh7wwxK7ETI606eIyUMJd\neBBUB6W3bEFojTFhNyNtd1MTcm4FGJ+YpcvjAX3K96slUpInd72ZyW5jt4SY\n+mYOYZsje7Eefan8qwbjvOhG+jTsjkUdB519g0lZtvFYVk2VSSbgcJpNykqQ\nc9lytkIa2rEMyjvquaCxcpXj1J6jfvxQoc/NHN9DLVx2C2XjFGMZuMNBXHpr\n6d0vH0RxLBCRUg4xg5qiFZ2BGKYPqkz/eTdKs3vDZuVf8Q6cuE6Vzs1kwapb\nE1VDA6zw2BH5g5DrkJxCCsWZk6/O5/fNEHc9fpgvumtRb6zakQs4Osnubag3\n33Bpd7ZVAaQdLI37zi+iFAxpAXRnGTSk2Jl7+EZoZPopxW5FJRpnGbp782bP\nyqzoM2RgqGIWC6IRTPg4sX6/zxc3yNHiNgfIJOkPJhre9JECccAHShhgLGG2\n1xoQCJE6a5koBQhBEYnitXLmTn0VKKvRqme125XvKz/2qM6uvk9x4r31UXld\nCfcUmz0e1RV4mDhFubpW9KPBWxjUqTb3RsEihStVbJotzQyk11hC7FyliRcg\nLq77\r\n=f2Jf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC3HhHZrGuce4bKzMsGV1jwM3B/36P2i6yA2vfFM+7/eAIgTCbDxmXIjGLc7X0f7mDVKCILvaKguYJ0p1EOtqNwR4g="}]},"maintainers":[{"name":"steveruizok","email":"steveruizok@gmail.com"}],"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-arrows_0.1.0_1595020025148_0.16541051750153235"},"_hasShrinkwrap":false},"0.2.0":{"version":"0.2.0","license":"MIT","main":"dist/index.js","typings":"dist/index.d.ts","engines":{"node":">=10"},"scripts":{"start":"tsdx watch","build":"tsdx build","test":"tsdx test","lint":"tsdx lint","prepare":"tsdx build"},"peerDependencies":{},"husky":{"hooks":{"pre-commit":"tsdx lint"}},"prettier":{"printWidth":80,"semi":false,"singleQuote":false,"trailingComma":"es5"},"name":"perfect-arrows","author":{"name":"Steve Ruiz","email":"steveruizok@gmail.com"},"description":"Draw perfect arrows between points or shapes","homepage":"https://github.com/steveruizok/perfect-arrows","keywords":["arrow","2d","point","rectangle","shape","between"],"module":"dist/perfect-arrows.esm.js","devDependencies":{"husky":"^4.2.5","tsdx":"^0.13.2","tslib":"^2.0.0","typescript":"^3.9.7"},"gitHead":"99a008790ea1b3a0bf4b30e8e9670f899700fb52","_id":"perfect-arrows@0.2.0","_nodeVersion":"10.13.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-cpwy/q0C0r6juke03opozpuEgbYX09CNoI7DKNW1J6uJB8flGvr2w9HKt7kLlwmTyrvKiF8YAB75daIlCdK9Zg==","shasum":"c4e6d3f354cde44d8d523527d96ae2a62f17a3ba","tarball":"https://registry.npmjs.org/perfect-arrows/-/perfect-arrows-0.2.0.tgz","fileCount":19,"unpackedSize":68397,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfE1rxCRA9TVsSAnZWagAA0fwP+gL8L+r+4eNv1gofmrTg\nFscxOuNBnKChtVxRYk6XAdIj0uNjBDcf8EaDMLdtrYwvXhvM6jfcEEiSIg5I\nxEDQqEKvdKrcu0dEtF/jCwczBfQoG9wTFGaudpoHDHFXM0rPFzq5mr2vCv+B\naIs2KbEi39YXpg+St9S7wqiaukRdU+g0KgaUhchbXMkdL7P0HNsfLkn/ONy0\nXIcqJ08aAmhEu7QAYVQzN/4MOMuI3Xl9Y6rbe4u0hEttICI/u51Rq2eZfeD+\n2gZLBpT17NgR9JxXDVQxU8U9DvUb5dSaMG6+gz3C4+Fc9ABJ8aKL0zdcP+Xt\noTdae/n9eQVahVk3tJIYOsEE3K7ejOTQdJPSwYaC6n3IVJVTX2CBVidGW3zy\nshJLTT6+sLRQcAp5AFxPcbphQWSLcyuvIcjB1KHNMt+lMQtzha8XqPOXesri\nv3cJFEWIkAYWGlFDrjUqzCJgkywynjGKAYl2vV7i0DM77Cb68Qq1LsCiM2T+\n9VEHLqWY39vftBERL3MUmpPhqsptO+xEGla1UKL/jPP0IWqsQaLM+QvF+x54\noutLl9NLCd+5bTT45mOFTljLRYsacHA4qnMOSVOUs04feyMcd6G3EvNUIIDw\nKYajxtb6UH0i2r7XxMMxYwx10g37gETQFXP+CNhr321LqlU2dRo7YSs5ZQ3N\n+C+L\r\n=B+Sq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDwuSd1NvLGbP7Q41ZM2AnLJt+fQLRO99Vkk0UUCdkzVAiEAmIzKMjHIJ+I8eXcShEeIu/yNHs01mJ8KmEq0MQyh7Jw="}]},"maintainers":[{"name":"steveruizok","email":"steveruizok@gmail.com"}],"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-arrows_0.2.0_1595103984813_0.40464169770551317"},"_hasShrinkwrap":false},"0.2.1":{"version":"0.2.1","license":"MIT","main":"dist/index.js","typings":"dist/index.d.ts","engines":{"node":">=10"},"scripts":{"start":"tsdx watch","build":"tsdx build","test":"tsdx test","lint":"tsdx lint","prepare":"tsdx build"},"peerDependencies":{},"husky":{"hooks":{"pre-commit":"tsdx lint"}},"prettier":{"printWidth":80,"semi":false,"singleQuote":false,"trailingComma":"es5"},"name":"perfect-arrows","author":{"name":"Steve Ruiz","email":"steveruizok@gmail.com"},"description":"Draw perfect arrows between points or shapes","homepage":"https://github.com/steveruizok/perfect-arrows","keywords":["arrow","2d","point","rectangle","shape","between"],"module":"dist/perfect-arrows.esm.js","devDependencies":{"husky":"^4.2.5","tsdx":"^0.13.2","tslib":"^2.0.0","typescript":"^3.9.7"},"gitHead":"dee96eb585602e11b20b0dfcf962caede9406131","_id":"perfect-arrows@0.2.1","_nodeVersion":"10.13.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-E+SFbltOXmxE8u5U/ZMDWWabPA/6HYR8YQPnGimJkqIJMPXoDlKxxYl2fTb5+XYgHmOlGKpEhlp18fNT+SDvMw==","shasum":"f18b8f5cab65a5744ef950b8a5136268f94ab959","tarball":"https://registry.npmjs.org/perfect-arrows/-/perfect-arrows-0.2.1.tgz","fileCount":22,"unpackedSize":224249,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfJvPNCRA9TVsSAnZWagAAD7wP/2f6pPZYWBIj22aRYcxt\nrTITKAJn6psAW81nGd8AUTPi03wrsixgqReEzDI0IJNHKTfF9oGsQKEm+3va\nG0sJKLZ13YZ5W3Hta/7QdXgQU+AA29hcntJQ65bU0otWNCdqrVyPDZyuCF6g\n8xhydmcK4dD9u0BHu+YpeyEDQjjS4dDcfRtwlH00zd+/KpUmlp58IxBeGHT9\npNSoSd87YaqkF5ksJzZDPCYtdw+67kL7hvlQOwvrt3meRtlWJaEBy2sRe58h\n6emc/xQ/cFJ46MoqAtd6NOHh2UvXNhSxmkEjShSaPwGWOxVX6Q8uHXH0sOyh\nk6oFSFyrIXL4EZY5u681Dh5OXdWiHovqC4OvuplV7pq6s0pZVBJZzt6exX3J\nwEsCENeU1IGlU8C7r9Q1RjahEK9cFcOD6+CevKBFYlFa38wlS1oQ2tWNA22F\nStCta+CW/vT0M0A36kbybuGbtZhYXeoA4L3DED+zJvoIlX00gXqxhlHCORbN\nXumjX6TjY9y/lMd4INOb8v4mpB9msSDXoDxYF5SvtnS9kql4OG4lbU7zXmmT\nPQgJal8zkR9s/M9/m/7/BqSXIPK9lEiYT+FPLMsBsixy7IS37d3UPuDEsS0/\nR4rUsK4Zb8pAFJZa1eeTDBmXnmrn2K0v5xVxSSR8rsSEgj4/nOv81/mOfG1j\nUTwq\r\n=aCaL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA1EZf/ZJDPrGFcpXL/lEJNrWpdL6s/Iq/9sQZc1dPUGAiEAzsbN8AK4DdrJXYaGTJe33ASsHS24ZQaGzLNM0sGbR7Y="}]},"maintainers":[{"name":"steveruizok","email":"steveruizok@gmail.com"}],"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-arrows_0.2.1_1596388301417_0.5454587694657893"},"_hasShrinkwrap":false},"0.2.2":{"version":"0.2.2","license":"MIT","main":"dist/index.js","typings":"dist/index.d.ts","engines":{"node":">=10"},"scripts":{"start":"tsdx watch","build":"tsdx build","test":"tsdx test","lint":"tsdx lint","prepare":"tsdx build"},"peerDependencies":{},"husky":{"hooks":{"pre-commit":"tsdx lint"}},"prettier":{"printWidth":80,"semi":false,"singleQuote":false,"trailingComma":"es5"},"name":"perfect-arrows","author":{"name":"Steve Ruiz","email":"steveruizok@gmail.com"},"description":"Draw perfect arrows between points or shapes","homepage":"https://github.com/steveruizok/perfect-arrows","repository":{"type":"git","url":"git+https://github.com/steveruizok/perfect-arrows.git"},"keywords":["arrow","2d","point","rectangle","shape","between"],"module":"dist/perfect-arrows.esm.js","devDependencies":{"husky":"^4.2.5","tsdx":"^0.13.2","tslib":"^2.0.0","typescript":"^3.9.7"},"gitHead":"82ce180dd30cfe8d3e739dd0c4242ad217a81bc6","bugs":{"url":"https://github.com/steveruizok/perfect-arrows/issues"},"_id":"perfect-arrows@0.2.2","_nodeVersion":"10.13.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-5cp48Epe1vZg9rtzLad6NTwZVuxhcbuxLzaTXbFud/O3FvmmTfdqGGGJzL3coctG5nT9h8y9I+ecd7CJxCYljw==","shasum":"4dedd8e70152c640cdb1f22cb0d2bafc081f76fe","tarball":"https://registry.npmjs.org/perfect-arrows/-/perfect-arrows-0.2.2.tgz","fileCount":22,"unpackedSize":227570,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfJ8nHCRA9TVsSAnZWagAASGMP/0Qe5nLdB85R8fZEkl34\nhDn5zhRLRRl0ybVf05whbjd4WpRVSn9mrVc7rYVaWJdiYbl9OAB4Psnr3BxH\ns7oxuF5hI8nq6VISFPDgnTHduz+eKpA06/PZruuxgceWQofTdvPVZ5IvqANy\nur+ni24HvHOTNOElBFg+89VKMQ7VXqaBpL0OclVfCP/DBHIRbMun3gl9ZMTw\nbt+Y/dpICm9y8CxwAMGxCmN+Y/qzARD/FwH27+8OVyHLX+Xpmz1HHFNX1xOZ\n6mvoGLZS8g8zW7N/V7yos6b+2n8PLIh/nCeXC0hqmncBI/DY4+OsUIYh0h+q\nWNhhZmiOk58Imi0HpWjVZ+FKe9DwGsUFM2M3xVcjJjumynQhSW/ajC9VgCD/\n36nfZD6/gPWREpsxfZXoTpqhfs9+h6FqccRa8/ZaJcdZjpiF59Eh/ATbMXE/\npgbnB2tFD1Rorz2xRA9mmr+jLQReA3VJBO81cbt70srujFS/1u9xfc43Q4+6\nom5uct5sd15nYNdSLugJUWCRL0cwtWuCuNj1Nnck03fuV4TdS5HxKmsmweB0\n5a9RY7xvLKE1+ol6GZlVLIZr8eiDpPTCZfPdtUzYltDTPE5uruGwQQlclLUB\nyGLBrDwrym/QWd1CnWwK6Y0FLCodMt2D920pr+FNgBSI/X4zJTR70zbjFuqz\ncoZj\r\n=A9PN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDcFMusch7OyyPgPQLmq5q6sJ+DVMRi6NaAvGcD0Pl3dAIhAOq8pFFSOBmDFcbMxNcLBV6d7+zhJY6xEb4WZgrFa98W"}]},"maintainers":[{"name":"steveruizok","email":"steveruizok@gmail.com"}],"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-arrows_0.2.2_1596443078510_0.2848487241975941"},"_hasShrinkwrap":false},"0.3.0":{"version":"0.3.0","license":"MIT","main":"dist/index.js","typings":"dist/index.d.ts","engines":{"node":">=10"},"scripts":{"start":"tsdx watch","build":"tsdx build","test":"tsdx test","lint":"tsdx lint","prepare":"tsdx build"},"peerDependencies":{},"husky":{"hooks":{"pre-commit":"tsdx lint"}},"prettier":{"printWidth":80,"semi":false,"singleQuote":false,"trailingComma":"es5"},"name":"perfect-arrows","author":{"name":"Steve Ruiz","email":"steveruizok@gmail.com"},"description":"Draw perfect arrows between points or shapes","homepage":"https://github.com/steveruizok/perfect-arrows","repository":{"type":"git","url":"git+https://github.com/steveruizok/perfect-arrows.git"},"keywords":["arrow","2d","point","rectangle","shape","between"],"module":"dist/perfect-arrows.esm.js","devDependencies":{"husky":"^4.2.5","tsdx":"^0.13.2","tslib":"^2.0.0","typescript":"^3.9.7"},"gitHead":"4b1d48e895a525afefd2b76477117160b3d8c622","bugs":{"url":"https://github.com/steveruizok/perfect-arrows/issues"},"_id":"perfect-arrows@0.3.0","_nodeVersion":"10.13.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-eke3SlqakgoObuXzMuRKGOEmiEENVzeit0yxrYsPSQPRRtdtTi/WLWEUVhSFn1u2//QUxdIJWBYvjaoWE427HQ==","shasum":"d880950e7d58979ad87c0982fc6f6e45756188f1","tarball":"https://registry.npmjs.org/perfect-arrows/-/perfect-arrows-0.3.0.tgz","fileCount":22,"unpackedSize":267386,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfcDx1CRA9TVsSAnZWagAA8vwP/Avynnr1GJuU3V/QhOUo\niyM5WS9KmUE3rDnYIdVodzaHm+mhWlNdxuSH6YgXV8qYiCZmxBpvzho0dEyI\nb+nFQjWap3C0/SUVQ6+nnCNWphedH9/0Hu3kaTLacetPmYvhx9PBBiZHQv+I\n70vs7aRcjRKF6bmHTcOmC+LnWiFOxniULilzqYDjVlt7TN8K9ZzcUaLDc7pA\n5Kq5ehn290p+30v98syJN4xJb8q9tQGuBwwoQAQpcL/ga7Mnq7n0d0Fsk8DI\n9wGP392BjxavNfPYLPnkGXNtwSBiJEfWTDSIjg6QJFjBV/lJ7queiW5/u8E/\n8zbKcOanrTqn4j4QrV1FbxlGnV9x8A2ARWJVCcul8xqao8kRaEJsS549yqHX\nuh0YeVUfDsFOfcvqWVmC026FqsxfyN285MJSiNn+PNFYlqegy3KIR/X5KR8S\nOfonXI2AsV0XvPwCJETSiaHf0aS5WyTzbaJVtI7DQ6Gb9oXNS8QFbzg8XZIt\n2xHV3GnL5fX4kXloz9Gpv+KEnedW0BVEHmQdJKslT7MsgN/tR7B+g1pPUoy9\nrKbDmX8xNntf3mB8mOntZzs+6z3o4VHayhkTt03JVEW0LEgCNDRAWi7H/I9A\nmiOrWdHOQNZCyaxtOlEDucQyBohY+MuQvBrb5LGbDwuMQ8SnYV+GMRU+i15W\njpfJ\r\n=ctDd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCU+T8Wi51NYhhToi+sVESF0XEgD2Bf7+HZ17pcmCkHWAIhAL/pHvFoee/hZScEyIALYhHnYnzMXA3vogwo1AnP4bw0"}]},"maintainers":[{"name":"steveruizok","email":"steveruizok@gmail.com"}],"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-arrows_0.3.0_1601191028685_0.16168167813778234"},"_hasShrinkwrap":false},"0.3.1":{"version":"0.3.1","license":"MIT","main":"dist/index.js","typings":"dist/index.d.ts","engines":{"node":">=10"},"scripts":{"start":"tsdx watch","build":"tsdx build","test":"tsdx test","lint":"tsdx lint","prepare":"tsdx build"},"peerDependencies":{},"husky":{"hooks":{"pre-commit":"tsdx lint"}},"prettier":{"printWidth":80,"semi":false,"singleQuote":false,"trailingComma":"es5"},"name":"perfect-arrows","author":{"name":"Steve Ruiz","email":"steveruizok@gmail.com"},"description":"Draw perfect arrows between points or shapes","homepage":"https://github.com/steveruizok/perfect-arrows","repository":{"type":"git","url":"git+https://github.com/steveruizok/perfect-arrows.git"},"keywords":["arrow","2d","point","rectangle","shape","between"],"module":"dist/perfect-arrows.esm.js","devDependencies":{"husky":"^4.2.5","tsdx":"^0.13.2","tslib":"^2.0.0","typescript":"^3.9.7"},"gitHead":"ed3bcaecc218eb1043a6eb747ae3ad900fba0e6e","bugs":{"url":"https://github.com/steveruizok/perfect-arrows/issues"},"_id":"perfect-arrows@0.3.1","_nodeVersion":"10.13.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-NvtzJtxFZmPdSaj9HCmujKlhP5AAmp89jXtY2K3Vtv8YAguqN8G0XfG1yTsNMbcp52j2L5wofYdHe/E3MnGN5g==","shasum":"5aad2dfe52e1593568aa57f36aedb5683e3b2040","tarball":"https://registry.npmjs.org/perfect-arrows/-/perfect-arrows-0.3.1.tgz","fileCount":22,"unpackedSize":267386,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfcD5FCRA9TVsSAnZWagAA7acP/RXySOCxbm1F6tyQ4AA6\nnlH/G44w2O9iTXdZ0PEzdnWMZsjvueVbUDf8sWIbV5Jmwq6+GnsvppxJzSxx\nAojMEwbV+14HsbZMrtQXOC/1kb7LFhOboYjVZ37Tr5WAUNQhYgAMmlTqY93w\nQRhMO0NO+rdQwp/JcO0O/YeBe+wJdLgvoCKeXmRLCwiPgeVmm1OR/4bFN605\n+hyxt8wh8Tdqi0hgHyESxBISIiUWVTHdKqHNQiBhbXttSf2yc13YueIOqMOk\nEaswuO/djI9Jgjldwfru+tgB9DDG54rL8PJdL0JvV71+dIZuJ/ofcTxOJSQg\n64DpxL4gw/ABXJHLvfyHsIH+mRZmpyk0nQfw1UD4SFtwkNFQkbHJGvmhm94D\nUSQwYDq/A71PblF/XM+AzfhIRk+5blGqZhogTc9jfMGnUQCLo7JBp7M1l5i0\npaxdlpogCAGJiWp7m5/76vJ8RtgJFx8sB8/oy28H1rAYvwbkzWBzMIPwviWg\nb/sScKDX7+zSmiXZVUwuUu1yAatIpeW61+bzb2fWghOb1mM0vBgKYBlCEFVb\nsVqhevQSrd3bvD8zb0uJk9AnXEsX9KAR1tL83LIl5UyOq5UvhcI1YTvB21b/\n0GiswinNSPXwD5sCh5AKDNFQmII4vjKxE5RCr6Ku05S419ATO6ta2JHFfR9T\nlSYA\r\n=lQhM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDysGfKyIKQfbrVN/dnJoHrqmLHBMggr9CNp+T10ZWYPQIhAMtrBsA2zixOl4f+bjflrBC7sxd7yoLKi7OrPjlhjydm"}]},"maintainers":[{"name":"steveruizok","email":"steveruizok@gmail.com"}],"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-arrows_0.3.1_1601191493257_0.4713448683264343"},"_hasShrinkwrap":false},"0.3.2":{"version":"0.3.2","license":"MIT","main":"dist/index.js","typings":"dist/index.d.ts","engines":{"node":">=10"},"scripts":{"start":"tsdx watch","build":"tsdx build","test":"tsdx test","lint":"tsdx lint","prepare":"tsdx build"},"peerDependencies":{},"husky":{"hooks":{"pre-commit":"tsdx lint"}},"prettier":{"printWidth":80,"semi":false,"singleQuote":false,"trailingComma":"es5"},"name":"perfect-arrows","author":{"name":"Steve Ruiz","email":"steveruizok@gmail.com"},"description":"Draw perfect arrows between points or shapes","homepage":"https://github.com/steveruizok/perfect-arrows","repository":{"type":"git","url":"git+https://github.com/steveruizok/perfect-arrows.git"},"keywords":["arrow","2d","point","rectangle","shape","between"],"module":"dist/perfect-arrows.esm.js","devDependencies":{"husky":"^4.2.5","tsdx":"^0.13.2","tslib":"^2.0.0","typescript":"^3.9.7"},"gitHead":"8b8f2b7db08e1e8833e4441c242a2a1d451e23b2","bugs":{"url":"https://github.com/steveruizok/perfect-arrows/issues"},"_id":"perfect-arrows@0.3.2","_nodeVersion":"10.13.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-MRU9ClKl7Z3zmAtacpIywAPU/iI9yrHQGEM15HGM/e1mxWd+XTAmeXFKxAQ/eY+D/TZTLqLtaTNTZPZru4IEBQ==","shasum":"691e16df4a0bc539398a4b011a8b6bca8a77a914","tarball":"https://registry.npmjs.org/perfect-arrows/-/perfect-arrows-0.3.2.tgz","fileCount":22,"unpackedSize":267356,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfcEWgCRA9TVsSAnZWagAAtUQP/0EsA9jXIpxzs7CqEoFN\n6xXI/YGAI+8E9JOSljFulbGH1aQTESlN+4Gy4mHwEGpBC8jh2zS1sS8TNUhP\n7y89XzlTUfIXrBKLWms9pfWkxD2cyGhFkaAQImLhdTtSAwZuIdPyMiFoL7Kz\nKFyvO8+VVtNrl0HMpI2prXFUrdy6R1YIfYps1Yq3x6C1a7yWdbY0Ql0rWIlM\nUJJmT25OyMt+wSxd+nOFXBMrHtL2jPEVYkYNy72DjGtwq+ogU7eRqzNTUzkJ\nHeAj6qCllf95ESCHypQYEmlXUDmYonj/N5jsw9bz2RZ6vNV+Z94+ksqK9jBO\nRbmqruUMqpDFQEqa0SMb5IKmQ/IFLVr9R0Qc6x9WGJB+oOWWES7wjnOmaXAN\nrOYfpj1S6OBhknteadbdydmBb8qNlrTZ6FvKh+LEh6Vz8ld9Jc3idfB2DAZN\nu247kXv1SbzEDJ12vjUQ4ooUGkS29FcwPS9+BwP4G073XmtcVegb+hWDG7jA\nZCPW+V1kctEAMkHxo50656Vtz8LhQBPuKeUjIkMPgMTvAftXWT4TfHr95aNy\nFKKnTFWp+LfCTdDOR72nLvImlkXHyL0E+UQeIQ3bUPl0fmEJfQYKKs5OrXFG\nRM4LuMw5TPVkH5Dyt/yFxxfn7nDRCvGlGhfkzg/aR11wq5omRhoXMQxZf9JY\nwSIj\r\n=eJ+B\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGgXlXpkU9vCXXYmDID/AIVW0Ygtcu2LNpQL6xpEbjnCAiB0CcRmv8EGpmPcxmKFMd0d+ePq/R7jZpk7jra0FkZ6DQ=="}]},"maintainers":[{"name":"steveruizok","email":"steveruizok@gmail.com"}],"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-arrows_0.3.2_1601193376033_0.3383773077207186"},"_hasShrinkwrap":false},"0.3.3":{"version":"0.3.3","license":"MIT","main":"dist/index.js","typings":"dist/index.d.ts","engines":{"node":">=10"},"scripts":{"start":"tsdx watch","build":"tsdx build","test":"tsdx test","lint":"tsdx lint","prepare":"tsdx build"},"peerDependencies":{},"husky":{"hooks":{"pre-commit":"tsdx lint"}},"prettier":{"printWidth":80,"semi":false,"singleQuote":false,"trailingComma":"es5"},"name":"perfect-arrows","author":{"name":"Steve Ruiz","email":"steveruizok@gmail.com"},"description":"Draw perfect arrows between points or shapes","homepage":"https://github.com/steveruizok/perfect-arrows","repository":{"type":"git","url":"git+https://github.com/steveruizok/perfect-arrows.git"},"keywords":["arrow","2d","point","rectangle","shape","between"],"module":"dist/perfect-arrows.esm.js","devDependencies":{"husky":"^4.2.5","tsdx":"^0.13.2","tslib":"^2.0.0","typescript":"^3.9.7"},"gitHead":"6fbab2aeca6f7e8102d71d72fb7dd75bd40eef31","bugs":{"url":"https://github.com/steveruizok/perfect-arrows/issues"},"_id":"perfect-arrows@0.3.3","_nodeVersion":"10.13.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-4VqnAYK9O6dFS4S+WAZNB0iDlFSpfwSxf0EAxqHwuCFga1Q73yXt9Z3x43DHU5tSVDPscPVU3RuvQNgxPz5Jag==","shasum":"62ec57f3a6dedffadd60a0e61119ebfc1ef41bd0","tarball":"https://registry.npmjs.org/perfect-arrows/-/perfect-arrows-0.3.3.tgz","fileCount":22,"unpackedSize":271851,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfccP0CRA9TVsSAnZWagAAwoMP/RNq1y4Dd3WkpATx56Nf\nIf4uv2hvw6bXaj0S39uc6AeEqcZcLTFf/vKjY0IVMto+Ad39zXErn8cyRAoK\nL4/JsisnZv4DlGTxuTDxL395sLt22mIeSAognXvib+4OXHdCFmFbgKtyCCux\nNLHmfRxGMbOxIjMES4hmxnlsm8P9NFFSasOOFOiwwja4SainX5D1yjyIX/g4\nCLnitYy9fMrxZwNKF6HMW/oDe8zy8U/4m4OuSgLCYnhJJtTNeUivrERKz5gU\nvAArK0+6dpEIIwZ3aB/spcg0ojaFpWbPl5tl42IV1Sk3wPfgRvTHCns2H1ey\nhtbvllPQV9szBtRAEqW31HiTbbQWGBIbBEOldapOvgtSVoRFZlflOrzbSDnI\nq9UrpGWaXrbU10nutES8ahZVI/qghpB5wKlJLViZi+keJPEyQyuBCvSJ9chK\n+dCa3hToIAvUcWfIp65bnxjvqMz6hRWxav1zd7KvjJAAdmhVTuIyvQJxc7bl\nX2aWCg+Xj6xd194RKOfnyaLJkGjMyTMvBT1kwNKHdnSD72v9PPpY/BbJZpHO\n78ZapO7oVxrQtVUJ7xUDNqgLnP8O4DIU9j+GkHybI6qH6kt/wHKJxs4W7DE5\nDv+KeNITN8/dx0w0a7NAng0ZZaYtKDLj7BC23JmEv3q6jnGvGYECm2fbSbSc\n6ZW1\r\n=FNSj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCpkybTP6Oporv4iKRMviTAW4K2qRGWD4lUz8u85978AQIgQ7iI62UqfvFvFB12yGAiDBlkleRc0iy+zAcP9yhl4dw="}]},"maintainers":[{"name":"steveruizok","email":"steveruizok@gmail.com"}],"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-arrows_0.3.3_1601291251794_0.4944992789499949"},"_hasShrinkwrap":false},"0.4.0-beta":{"version":"0.4.0-beta","license":"MIT","main":"dist/index.js","typings":"dist/index.d.ts","engines":{"node":">=10"},"scripts":{"start":"tsdx watch","build":"tsdx build","test":"tsdx test","lint":"tsdx lint","prepare":"tsdx build"},"peerDependencies":{},"husky":{"hooks":{"pre-commit":"tsdx lint"}},"prettier":{"printWidth":80,"semi":false,"singleQuote":false,"trailingComma":"es5"},"name":"perfect-arrows","author":{"name":"Steve Ruiz","email":"steveruizok@gmail.com"},"description":"Draw perfect arrows between points or shapes","homepage":"https://github.com/steveruizok/perfect-arrows","repository":{"type":"git","url":"git+https://github.com/steveruizok/perfect-arrows.git"},"keywords":["arrow","2d","point","rectangle","shape","between"],"module":"dist/perfect-arrows.esm.js","devDependencies":{"@types/polylabel":"^1.0.5","husky":"^4.2.5","tsdx":"^0.13.2","tslib":"^2.0.0","typescript":"^3.9.7"},"dependencies":{"polygon-offset":"^0.3.1","polylabel":"^1.1.0"},"readme":"# Perfect Arrows\n\nA set of functions for drawing perfect arrows between points and shapes.\n\n- [`getArrow`](#getarrowx0-y0-x1-y1-options) - For point-to-point arrows.\n- [`getBoxToBoxArrow`](#getboxtoboxarrowx0-y0-w0-h0-x1-y1-w1-h1-options) - For rectangle-to-rectangle arrows.\n\n![Example](/example.gif)\n\n👉 [Demo](https://perfect-arrows.now.sh/)\n\n[![Edit example](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/github/steveruizok/perfect-arrows/tree/master/example?fontsize=14&hidenavigation=1&theme=dark)\n\n<div align=\"center\">\n<p>Other languages</p>\n<p><a href=\".github/README_pt_BR.md\">Português (pt-BR)</a></p></div>\n\n## Installation\n\n```\nnpm i perfect-arrows\n```\n\n_or_\n\n```\nyarn add perfect-arrows\n```\n\n## Usage\n\nThe functions in this library provide only the information needed to draw an arrow. You'll need to draw the arrow yourself using your technology of choice. See below for an example React component with SVG.\n\n### `getArrow(x0, y0, x1, y1, options)`\n\nThe `getArrow` function accepts the position of two points and returns an array containing information for:\n\n- three points: a start, end, and control point\n- three angles: an end, start, and center\n\nYou can use this information to draw an arc and arrow-heads. You can use the options object to tweak the return values.\n\n```js\nconst arrow = getArrow(0, 0, 100, 200, {\n  bow: 0,\n  stretch: 0.5,\n  stretchMin: 0,\n  stretchMax: 420,\n  padStart: 0,\n  padEnd: 0,\n  flip: false,\n  straights: true,\n})\n\nconst [sx, sy, cx, cy, ex, ey, ae, as, sc] = arrow\n```\n\n#### Arguments\n\n| Argument | Type   | Description                                                                 |\n| -------- | ------ | --------------------------------------------------------------------------- |\n| `x0`     | number | The x position of the starting point.                                       |\n| `y0`     | number | The y position of the starting point.                                       |\n| `x1`     | number | The x position of the ending point.                                         |\n| `y1`     | number | The y position of the ending point.                                         |\n| options  | object | An (optional) object containing one or more of the options described below. |\n\n#### Options\n\n| Option       | Type    | Default | Description                                                                                                                                                    |\n| ------------ | ------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `bow`        | number  | 0       | A value representing the natural bow of the arrow. At `0`, all lines will be straight.                                                                         |\n| `stretch`    | number  | .5      | The effect that the arrow's length will have, relative to its `minStretch` and `maxStretch`, on the bow of the arrow. At `0`, the stretch will have no effect. |\n| `minStretch` | number  | 0       | The length of the arrow where the line should be most stretched. Shorter distances than this will have no additional effect on the bow of the arrow.           |\n| `maxStretch` | number  | 420     | The length of the arrow at which the stretch should have no effect.                                                                                            |\n| `padStart`   | number  | 0       | How far the arrow's starting point should be from the provided start point.                                                                                    |\n| `padEnd`     | number  | 0       | How far the arrow's ending point should be from the provided end point.                                                                                        |\n| `flip`       | boolean | false   | Whether to reflect the arrow's bow angle.                                                                                                                      |\n| `straights`  | boolean | true    | Whether to use straight lines at 45 degree angles.                                                                                                             |\n\n#### Returns\n\n| Argument | Type   | Description                                      |\n| -------- | ------ | ------------------------------------------------ |\n| `x0`     | number | The x position of the (padded) starting point.   |\n| `y0`     | number | The y position of the (padded) starting point.   |\n| `x1`     | number | The x position of the (padded) ending point.     |\n| `y1`     | number | The y position of the (padded) ending point.     |\n| `ae`     | number | The angle (in radians) for an ending arrowhead.  |\n| `as`     | number | The angle (in radians) for a starting arrowhead. |\n| `ac`     | number | The angle (in radians) for a center arrowhead.   |\n\n## Example: A React Arrow Component\n\n```jsx\nimport * as React from \"react\"\nimport { getArrow } from \"perfect-arrows\"\n\nexport function PerfectArrow() {\n  const p1 = { x: 64, y: 64 }\n  const p2 = { x: 128, y: 96 }\n\n  const arrow = getArrow(p1.x, p1.y, p2.x, p2.y, {\n    padEnd: 20,\n  })\n\n  const [sx, sy, cx, cy, ex, ey, ae, as, ec] = arrow\n\n  const endAngleAsDegrees = ae * (180 / Math.PI)\n\n  return (\n    <svg\n      viewBox=\"0 0 720 480\"\n      style={{ width: 720, height: 480 }}\n      stroke=\"#000\"\n      fill=\"#000\"\n      strokeWidth={3}\n    >\n      <circle cx={sx} cy={sy} r={4} />\n      <path d={`M${sx},${sy} Q${cx},${cy} ${ex},${ey}`} fill=\"none\" />\n      <polygon\n        points=\"0,-6 12,0, 0,6\"\n        transform={`translate(${ex},${ey}) rotate(${endAngleAsDegrees})`}\n      />\n    </svg>\n  )\n}\n```\n\n---\n\n### `getBoxToBoxArrow(x0, y0, w0, h0, x1, y1, w1, h1, options)`\n\nThe `getBoxToBoxArrow` function accepts the position and dimensions of two boxes (or rectangles) and returns an array containing information for:\n\n- three points: a start, end, and control point\n- three angles: an end, start, and center\n\nYou can use this information to draw an arc and arrow-heads. You can use the options object to tweak the return values.\n\n**Note:** The options and values returned by `getBoxToBoxArrow` are in the same format as the options and values for `getArrow`.\n\n```js\nconst arrow = getBoxToBoxArrow(0, 0, 96, 128, 400, 200, 128, 96, {\n  bow: 0,\n  stretch: 0.5,\n  stretchMin: 0,\n  stretchMax: 420,\n  padStart: 0,\n  padEnd: 0,\n  flip: false,\n  straights: true,\n})\n\nconst [sx, sy, cx, cy, ex, ey, ae, as, sc] = arrow\n```\n\n#### Arguments\n\n| Argument | Type   | Description                                                                 |\n| -------- | ------ | --------------------------------------------------------------------------- |\n| `x0`     | number | The x position of the first rectangle.                                      |\n| `y0`     | number | The y position of the first rectangle.                                      |\n| `w0`     | number | The width of the first rectangle.                                           |\n| `h0`     | number | The height of the first rectangle.                                          |\n| `x1`     | number | The x position of the second rectangle.                                     |\n| `y1`     | number | The y position of the second rectangle.                                     |\n| `w1`     | number | The width of the second rectangle.                                          |\n| `h1`     | number | The height of the second rectangle.                                         |\n| options  | object | An (optional) object containing one or more of the options described below. |\n\n#### Options\n\nSee options in `getArrow` above. (Both functions use the same options object.)\n\n#### Returns\n\nSee returns in `getArrow` above. (Both functions return the same set of values.)\n\n## Example: A React Box-to-box Arrow Component\n\n```jsx\nimport * as React from \"react\"\nimport { getBoxToBoxArrow } from \"perfect-arrows\"\n\nexport function PerfectArrow() {\n  const p1 = { x: 64, y: 64, w: 64, h: 64 }\n  const p2 = { x: 128, y: 96, w: 64, h: 64 }\n\n  const arrow = getBoxToBoxArrow(\n    p1.x,\n    p1.y,\n    p1.w,\n    p1.h,\n    p2.x,\n    p2.y,\n    p2.w,\n    p2.h,\n    {\n      bow: 0.2,\n      stretch: 0.5,\n      stretchMin: 40,\n      stretchMax: 420,\n      padStart: 0,\n      padEnd: 20,\n      flip: false,\n      straights: true,\n    }\n  )\n\n  const [sx, sy, cx, cy, ex, ey, ae, as, ec] = arrow\n\n  const endAngleAsDegrees = ae * (180 / Math.PI)\n\n  return (\n    <svg\n      viewBox=\"0 0 1280 720\"\n      style={{ width: 1280, height: 720 }}\n      stroke=\"#000\"\n      fill=\"#000\"\n      strokeWidth={3}\n    >\n      <circle cx={sx} cy={sy} r={4} />\n      <path d={`M${sx},${sy} Q${cx},${cy} ${ex},${ey}`} fill=\"none\" />\n      <polygon\n        points=\"0,-6 12,0, 0,6\"\n        transform={`translate(${ex},${ey}) rotate(${endAngleAsDegrees})`}\n      />\n    </svg>\n  )\n}\n```\n\n## Author\n\n[@steveruizok](https://twitter.com/steveruizok)\n","readmeFilename":"README.md","gitHead":"97f6d91853f50001277b52779f103823834af748","bugs":{"url":"https://github.com/steveruizok/perfect-arrows/issues"},"_id":"perfect-arrows@0.4.0-beta","_nodeVersion":"10.13.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-aMpnn6dQ+EP4KJUxGlwTyTlDSmory83JLbaVWFFg7iZsMWkTTrB5cE6DEIwWfKnAcPO3wDpQPKoB9O1yENDiGg==","shasum":"548501432fa87f6b7d36449cf5a882bc023197c3","tarball":"https://registry.npmjs.org/perfect-arrows/-/perfect-arrows-0.4.0-beta.tgz","fileCount":25,"unpackedSize":361418,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfedL8CRA9TVsSAnZWagAAs1gP/0pGFU/4v+xurIYQJ2LW\n3X3s2cSSKTcrMV0gcQxnu9Bdmy08ixs3h12KVbqRdpfJL+XipjaqFxCSzbBo\n64M9V79wV1SLqWnI3EaMznCweYPCGTOneGwn0L1tzxtWBd1+2DkrycysmSny\nrg80yiUp6mVG4tvWqlNlys1y+cJBF4l3hXjYdJbBuXxN6sN/WfCSBRiYNe+B\nfxbUpwMeAoJgmh/yzS1BzeWIDBmZtMxczEqaEZAFGHJD+bMg2VKmJS7F+Iqe\nUDfIISw9dWdPPK5WURQUKnR5vMg3/rJeGwxXotIEihFWusVZ4/Q3CG9iS1k3\nUEenriyo6zXejVSfvfbK+M/sC/q/ogZOtYeScdUBvUyGly3AOAWQD9dd/yED\nIORq4kjC2xxdA1+1aDUFMzWhSTqZlpIOSKj8LjRYU0FNoVE2wFq/YJM/+iOR\n1NXOZElpyj2iIDHVbsB4yaHnceXjZjyiaV1QgE3WnmGs63R4SURmR/zItq8l\nv3szmHmX2QdPN978z6PgL7rMPKpzqnX7bcFZZGFScQszyF1THqdEOOFtVkJS\nNMsE19VnmDp+Y/73lh+eCM0bGKGa7U7SW71riZX/mbxRPLFWYmhUFFw0iX6P\noY7ENb8mInlI23RdpL3Cw/btHaYCG4SauNVqFxHgMOEJsg/0iS50EaoCWWMW\n5vEV\r\n=vhyF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAqmrEEPd/7CP0UwCH/KaLhvq6cBjELG28yz2Wl9FUfcAiB4+udZe6P/ul1/RazbBt/MLSeG2/lHYnx9L+3E8srmzg=="}]},"maintainers":[{"name":"steveruizok","email":"steveruizok@gmail.com"}],"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-arrows_0.4.0-beta_1601819388080_0.6765246889401"},"_hasShrinkwrap":false},"0.3.4":{"version":"0.3.4","license":"MIT","main":"dist/index.js","typings":"dist/index.d.ts","engines":{"node":">=10"},"scripts":{"start":"tsdx watch","build":"tsdx build","test":"tsdx test","lint":"tsdx lint","prepare":"tsdx build"},"husky":{"hooks":{"pre-commit":"tsdx lint"}},"prettier":{"printWidth":80,"semi":false,"singleQuote":false,"trailingComma":"es5"},"name":"perfect-arrows","author":{"name":"Steve Ruiz","email":"steveruizok@gmail.com"},"description":"Draw perfect arrows between points or shapes","homepage":"https://github.com/steveruizok/perfect-arrows","repository":{"type":"git","url":"git+https://github.com/steveruizok/perfect-arrows.git"},"keywords":["arrow","2d","point","rectangle","shape","between"],"module":"dist/perfect-arrows.esm.js","devDependencies":{"husky":"^4.2.5","tsdx":"^0.13.2","tslib":"^2.0.0","typescript":"^3.9.7"},"gitHead":"4c28960838dac0e1dc31424c96da13230d997df3","bugs":{"url":"https://github.com/steveruizok/perfect-arrows/issues"},"_id":"perfect-arrows@0.3.4","_nodeVersion":"15.8.0","_npmVersion":"7.5.0","dist":{"integrity":"sha512-osPqz7B755Y7ugRJ7oVsRw/j8iCAr3JPSWlAzuY7lloy71yNey4Yjr3PtD/Qbmclnjp4+DiUODSg9uiQmFWMXQ==","shasum":"fc0b0676339279a5150367248d7e710094f93926","tarball":"https://registry.npmjs.org/perfect-arrows/-/perfect-arrows-0.3.4.tgz","fileCount":21,"unpackedSize":269421,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgw1PxCRA9TVsSAnZWagAAKEsQAImsUcasiNSaySy8Flvw\nEv2IMtE6VG7+ExYd5BIyNMPj7C+RSoXW2uPvkeR3wqGGiR1aE/dl0GI1nsqe\nKZqaF5lDJdGFd/m3EacSDrhZIeZg3PYuMYlaxZ3GhB6ZnomFn+XBGxl4iTod\nK74vguj0pdE5kULGsXf31IJUazIYJ/WZdoqVy020dUxmVh8966ZeMVRezyW2\n/g9A7fdcpn515tH7el9e9/zLkPrcwAzEk1MHf1Jas1FPADj5b+Py+1nY4zvM\nRpEdWZ8rFFifVxDsxEHRpLBlE8WCbkmeFOarTeuW6+eMiCk2Kd84+Fx3fNuR\nXlkQqNMlb4rUqQPitNjCCGrh5qrEqqL6nIPhSQoPwf7FBMxpfgRQSqgigMEb\ngHgvmYxn8k1/iJW0ATALAeN3yky49F6LcdWLqcQMMEMJVD8Mo5M1cJIS0e3R\nJvLoolTSt8u/Lv+H6knn3cUCHeBCrq8bmtheyU0oIl91xhzv2f0+VqJ2visj\n51vdm/OR/NMGqeJkSvrpaMUc13R1T3QueGFMJxtZkCmxRGUMSuqLjmRcKf6K\npJ+ZEOx7mX72VsW2dgtRmAW1Dbe3wmRnTnOJ0uJHSELhVIveFpq2U2w2M9Hn\n28x+9acZRSipbB4kRTd0mPGpgbLHC2NWVUc8srnURaT/Q4G6UG+Pvxlcxytm\ngrQB\r\n=OGoB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCd5n3poeOzplY5A3fmMeBYzxWlKHUysAFLRHkf87vveQIgENDQTdriVdna3nSIS8mYJoxpZ3P3NEKaJSzg3R///98="}]},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":"steveruizok@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-arrows_0.3.4_1623413745829_0.5356717271136957"},"_hasShrinkwrap":false},"0.3.5":{"version":"0.3.5","license":"MIT","main":"dist/index.js","typings":"dist/index.d.ts","engines":{"node":">=10"},"scripts":{"start":"tsdx watch","build":"tsdx build","test":"tsdx test","lint":"tsdx lint","prepare":"tsdx build"},"husky":{"hooks":{"pre-commit":"tsdx lint"}},"prettier":{"printWidth":80,"semi":false,"singleQuote":false,"trailingComma":"es5"},"name":"perfect-arrows","author":{"name":"Steve Ruiz","email":"steveruizok@gmail.com"},"description":"Draw perfect arrows between points or shapes","homepage":"https://github.com/steveruizok/perfect-arrows","repository":{"type":"git","url":"git+https://github.com/steveruizok/perfect-arrows.git"},"keywords":["arrow","2d","point","rectangle","shape","between"],"module":"dist/perfect-arrows.esm.js","devDependencies":{"husky":"^4.2.5","tsdx":"^0.13.2","tslib":"^2.0.0","typescript":"^3.9.7"},"gitHead":"6ac136b992dcd27e6dc5043d05911d0d7c51249d","bugs":{"url":"https://github.com/steveruizok/perfect-arrows/issues"},"_id":"perfect-arrows@0.3.5","_nodeVersion":"14.16.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-F7mPydcmQ40TG8HLi/WcVVo0Qf4r6/r1vhvVsF7y3OhoRv5CSX/6YahY2gm4+Nn54MaiIjCVBt/g26uzYvMdBQ==","shasum":"c115066014486fb1649d3a01f80db630fb4f5491","tarball":"https://registry.npmjs.org/perfect-arrows/-/perfect-arrows-0.3.5.tgz","fileCount":21,"unpackedSize":269217,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgw34JCRA9TVsSAnZWagAAy4cP/3YcMnAtMxFgVuW09Gcj\nxltl/mx6GXJkIFWqQ8GsmTaCzHh1PTNiugCxvSWCSZj5JYaJ3ZAU4vG5fdwG\nLCa741U4nUCWb5gPtilFbl0MdiicO7gjGzdJyEM3m4AEAgTw0DlPsV2PyeRs\nTwoFrJHDACpLeRjEhc1JYa3ZVeSOwVHvUXQkHbLtryv1rRqWMOEdsbll/d+r\nCe2DBMJQhfVqulNGxZN7ZPKy1zgsij53EYp6f3LIyiFRxIsyTSXCkQ2ps6oH\n8CCtu/DM3Zb9fnyB4cvwwsVVM9Mm4FdKbWTRB3XRoubJpibz679Ldm0WOXed\nTzhArACZWhvT8uOVIiaJphs1vy5JHOPsNTQ9pWtb53ET2IolihKHgI91fvZb\npgj1txdUfWLtXWlbhUvoUxDPY3F4VZIgG9IhRd+p5d5TsWgvveykBEjLGBn1\n+f7YABj7qZTq3/ExzcmVy1e6ZcViaMnMT8kjM5FYVC+nYRyg+KPxB9sCxnRN\nyFcsOu9jXr6kOvgeFNzOkTFVgXnQCXiU1K3u4uP0LJViezCBdNZ+h2Wtqu9f\nv4IFmFTirZrUt/bnVK0MGcpT/4kVWX/r8iLw6u4YkCkmDEGwtXw5UshhUC7z\n1xWAhaoExv7Rpe7axX0ZQOiAhPkA0Sn2MEfKjpXdu9NXyetiARF/ht00DR2g\nVlt8\r\n=GQ8t\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCbTr7NWe4BkAGbXg8vKDZPAHlu0C2ct5MkmdGNYGTdwAIgadEVcXXYOd3KRnctTMewAVA58Hxst8RDERvHQrul/SI="}]},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":"steveruizok@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-arrows_0.3.5_1623424521782_0.6900897844083651"},"_hasShrinkwrap":false},"0.3.7":{"version":"0.3.7","license":"MIT","main":"dist/index.js","typings":"dist/index.d.ts","engines":{"node":">=10"},"scripts":{"start":"tsdx watch","build":"tsdx build","test":"tsdx test","lint":"tsdx lint","prepare":"tsdx build"},"husky":{"hooks":{"pre-commit":"tsdx lint"}},"prettier":{"printWidth":80,"semi":false,"singleQuote":false,"trailingComma":"es5"},"name":"perfect-arrows","author":{"name":"Steve Ruiz","email":"steveruizok@gmail.com"},"description":"Draw perfect arrows between points or shapes","homepage":"https://github.com/steveruizok/perfect-arrows","repository":{"type":"git","url":"https://github.com/steveruizok/perfect-arrows"},"keywords":["arrow","2d","point","rectangle","shape","between"],"module":"dist/perfect-arrows.esm.js","devDependencies":{"husky":"^7.0.2","tsdx":"^0.14.1","tslib":"^2.3.1","typescript":"^4.4.3"},"licenseText":"MIT License\n\nCopyright (c) 2020 Steve\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.","_id":"perfect-arrows@0.3.7","dist":{"shasum":"6932e1c82d26cfe86e7933aed28d45502e5ea131","integrity":"sha512-wEN2gerTPVWl3yqoFEF8OeGbg3aRe2sxNUi9rnyYrCsL4JcI6K2tBDezRtqVrYG0BNtsWLdYiiTrYm+X//8yLQ==","tarball":"https://registry.npmjs.org/perfect-arrows/-/perfect-arrows-0.3.7.tgz","fileCount":26,"unpackedSize":269055,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh22fgCRA9TVsSAnZWagAA9roP/jC9kskcTEBgi45x6PrJ\nn/ccO3nz/oDfFHwvFjDOH63+KPNfVo8JylAw2cLbE8b4YJUPPws0fvm8qQ3e\nJpVaMtW/CDtK5ET97Ogr9OR8kBOJ31TI5i27SJOnmE+QFSvE/B1ZvQrqPiJ6\nQl1IAntO83IIGJSg4uT4dZPx4MIJG9rsKLE1EO6qeo7FkSqp1dzeD6ke3GyH\nUBoKYzDE5JqsRZh6U/sqh7dSE4LNiFaF7MW+vHuPS91LptF4FjZtS+8AARDy\nqoEceiK9Uk5ogXdmGFDhR8GnYEEbLyeekv2dPWJUsCl79Ve/0W+FGfPqCPpy\nEQYBfhckouBcZLwdR2jtNB79hrqi0dOXzkBiu/tDFywXbaVXjUmlY7Kxfc78\nU+yk0kVzFM396dK3pHYsSIhz9b63p7ryZUC8xTZb7lROmH6xJ8o9PngudNlV\n9FP0nklzEvKkKS9J1tuiABuYuaGFq4d38Eko6UnTIXLEFqEzrWycyOG+Boy/\nrKS+lsHsLqzTtZuK1sv/DLRjoesRkTRxcCGg64Cs4Vb1ZthDKWXDWB0+S4Lk\nbQYBqVylZvbK2Y7zBy104TllYysyeUYMqBiXyEIiicIWOyXqQqcwmTI0wKZG\nZntydLeOFrRn9Dcu7d4Mk8X7cDNiIqAWTfCl8ju8jQNJwxwU/o6d3EEcFVc+\nyeDl\r\n=zFBz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGDkez5ogxpjFx7nZcVt/tNU1rGvoQc7grdCfRACX5SSAiBxBqTYE1LQ6q5halv58S2B1tnJDK9K0wR/o0k6/j4esA=="}]},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":"steveruizok@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-arrows_0.3.7_1632861951348_0.12961178418814878"},"_hasShrinkwrap":false}},"time":{"created":"2020-07-17T21:07:05.147Z","0.1.0":"2020-07-17T21:07:05.262Z","modified":"2022-05-12T19:23:38.919Z","0.2.0":"2020-07-18T20:26:24.978Z","0.2.1":"2020-08-02T17:11:41.550Z","0.2.2":"2020-08-03T08:24:38.707Z","0.3.0":"2020-09-27T07:17:08.893Z","0.3.1":"2020-09-27T07:24:53.394Z","0.3.2":"2020-09-27T07:56:16.171Z","0.3.3":"2020-09-28T11:07:31.982Z","0.4.0-beta":"2020-10-04T13:49:48.206Z","0.3.4":"2021-06-11T12:15:45.959Z","0.3.5":"2021-06-11T15:15:21.943Z","0.3.7":"2021-09-28T20:45:51.499Z"},"maintainers":[{"name":"steveruizok","email":"steveruizok@gmail.com"}],"description":"Draw perfect arrows between points or shapes","homepage":"https://github.com/steveruizok/perfect-arrows","keywords":["arrow","2d","point","rectangle","shape","between"],"author":{"name":"Steve Ruiz","email":"steveruizok@gmail.com"},"license":"MIT","readme":"# Perfect Arrows\n\nA set of functions for drawing perfect arrows between points and shapes.\n\n- [`getArrow`](#getarrowx0-y0-x1-y1-options) - For point-to-point arrows.\n- [`getBoxToBoxArrow`](#getboxtoboxarrowx0-y0-w0-h0-x1-y1-w1-h1-options) - For rectangle-to-rectangle arrows.\n\n![Example](/example.gif)\n\n👉 [Demo](https://perfect-arrows.now.sh/)\n\n[![Edit example](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/github/steveruizok/perfect-arrows/tree/master/example?fontsize=14&hidenavigation=1&theme=dark)\n\n<div align=\"center\">\n<p>Other languages</p>\n<p><a href=\".github/README_pt_BR.md\">Português (pt-BR)</a></p></div>\n\n## Installation\n\n```\nnpm i perfect-arrows\n```\n\n_or_\n\n```\nyarn add perfect-arrows\n```\n\n## Usage\n\nThe functions in this library provide only the information needed to draw an arrow. You'll need to draw the arrow yourself using your technology of choice. See below for an example React component with SVG.\n\n### `getArrow(x0, y0, x1, y1, options)`\n\nThe `getArrow` function accepts the position of two points and returns an array containing information for:\n\n- three points: a start, end, and control point\n- three angles: an end, start, and center\n\nYou can use this information to draw an arc and arrow-heads. You can use the options object to tweak the return values.\n\n```js\nconst arrow = getArrow(0, 0, 100, 200, {\n  bow: 0,\n  stretch: 0.5,\n  stretchMin: 0,\n  stretchMax: 420,\n  padStart: 0,\n  padEnd: 0,\n  flip: false,\n  straights: true,\n})\n\nconst [sx, sy, cx, cy, ex, ey, ae, as, sc] = arrow\n```\n\n#### Arguments\n\n| Argument | Type   | Description                                                                 |\n| -------- | ------ | --------------------------------------------------------------------------- |\n| `x0`     | number | The x position of the starting point.                                       |\n| `y0`     | number | The y position of the starting point.                                       |\n| `x1`     | number | The x position of the ending point.                                         |\n| `y1`     | number | The y position of the ending point.                                         |\n| options  | object | An (optional) object containing one or more of the options described below. |\n\n#### Options\n\n| Option       | Type    | Default | Description                                                                                                                                                    |\n| ------------ | ------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `bow`        | number  | 0       | A value representing the natural bow of the arrow. At `0`, all lines will be straight.                                                                         |\n| `stretch`    | number  | .5      | The effect that the arrow's length will have, relative to its `minStretch` and `maxStretch`, on the bow of the arrow. At `0`, the stretch will have no effect. |\n| `minStretch` | number  | 0       | The length of the arrow where the line should be most stretched. Shorter distances than this will have no additional effect on the bow of the arrow.           |\n| `maxStretch` | number  | 420     | The length of the arrow at which the stretch should have no effect.                                                                                            |\n| `padStart`   | number  | 0       | How far the arrow's starting point should be from the provided start point.                                                                                    |\n| `padEnd`     | number  | 0       | How far the arrow's ending point should be from the provided end point.                                                                                        |\n| `flip`       | boolean | false   | Whether to reflect the arrow's bow angle.                                                                                                                      |\n| `straights`  | boolean | true    | Whether to use straight lines at 45 degree angles.                                                                                                             |\n\n#### Returns\n\n| Argument | Type   | Description                                      |\n| -------- | ------ | ------------------------------------------------ |\n| `x0`     | number | The x position of the (padded) starting point.   |\n| `y0`     | number | The y position of the (padded) starting point.   |\n| `x1`     | number | The x position of the (padded) ending point.     |\n| `y1`     | number | The y position of the (padded) ending point.     |\n| `ae`     | number | The angle (in radians) for an ending arrowhead.  |\n| `as`     | number | The angle (in radians) for a starting arrowhead. |\n| `ac`     | number | The angle (in radians) for a center arrowhead.   |\n\n## Example: A React Arrow Component\n\n```jsx\nimport * as React from \"react\"\nimport { getArrow } from \"perfect-arrows\"\n\nexport function PerfectArrow() {\n  const p1 = { x: 64, y: 64 }\n  const p2 = { x: 128, y: 96 }\n\n  const arrow = getArrow(p1.x, p1.y, p2.x, p2.y, {\n    padEnd: 20,\n  })\n\n  const [sx, sy, cx, cy, ex, ey, ae, as, ec] = arrow\n\n  const endAngleAsDegrees = ae * (180 / Math.PI)\n\n  return (\n    <svg\n      viewBox=\"0 0 720 480\"\n      style={{ width: 720, height: 480 }}\n      stroke=\"#000\"\n      fill=\"#000\"\n      strokeWidth={3}\n    >\n      <circle cx={sx} cy={sy} r={4} />\n      <path d={`M${sx},${sy} Q${cx},${cy} ${ex},${ey}`} fill=\"none\" />\n      <polygon\n        points=\"0,-6 12,0, 0,6\"\n        transform={`translate(${ex},${ey}) rotate(${endAngleAsDegrees})`}\n      />\n    </svg>\n  )\n}\n```\n\n---\n\n### `getBoxToBoxArrow(x0, y0, w0, h0, x1, y1, w1, h1, options)`\n\nThe `getBoxToBoxArrow` function accepts the position and dimensions of two boxes (or rectangles) and returns an array containing information for:\n\n- three points: a start, end, and control point\n- three angles: an end, start, and center\n\nYou can use this information to draw an arc and arrow-heads. You can use the options object to tweak the return values.\n\n**Note:** The options and values returned by `getBoxToBoxArrow` are in the same format as the options and values for `getArrow`.\n\n```js\nconst arrow = getBoxToBoxArrow(0, 0, 96, 128, 400, 200, 128, 96, {\n  bow: 0,\n  stretch: 0.5,\n  stretchMin: 0,\n  stretchMax: 420,\n  padStart: 0,\n  padEnd: 0,\n  flip: false,\n  straights: true,\n})\n\nconst [sx, sy, cx, cy, ex, ey, ae, as, sc] = arrow\n```\n\n#### Arguments\n\n| Argument | Type   | Description                                                                 |\n| -------- | ------ | --------------------------------------------------------------------------- |\n| `x0`     | number | The x position of the first rectangle.                                      |\n| `y0`     | number | The y position of the first rectangle.                                      |\n| `w0`     | number | The width of the first rectangle.                                           |\n| `h0`     | number | The height of the first rectangle.                                          |\n| `x1`     | number | The x position of the second rectangle.                                     |\n| `y1`     | number | The y position of the second rectangle.                                     |\n| `w1`     | number | The width of the second rectangle.                                          |\n| `h1`     | number | The height of the second rectangle.                                         |\n| options  | object | An (optional) object containing one or more of the options described below. |\n\n#### Options\n\nSee options in `getArrow` above. (Both functions use the same options object.)\n\n#### Returns\n\nSee returns in `getArrow` above. (Both functions return the same set of values.)\n\n## Example: A React Box-to-box Arrow Component\n\n```jsx\nimport * as React from \"react\"\nimport { getBoxToBoxArrow } from \"perfect-arrows\"\n\nexport function PerfectArrow() {\n  const p1 = { x: 64, y: 64, w: 64, h: 64 }\n  const p2 = { x: 128, y: 96, w: 64, h: 64 }\n\n  const arrow = getBoxToBoxArrow(\n    p1.x,\n    p1.y,\n    p1.w,\n    p1.h,\n    p2.x,\n    p2.y,\n    p2.w,\n    p2.h,\n    {\n      bow: 0.2,\n      stretch: 0.5,\n      stretchMin: 40,\n      stretchMax: 420,\n      padStart: 0,\n      padEnd: 20,\n      flip: false,\n      straights: true,\n    }\n  )\n\n  const [sx, sy, cx, cy, ex, ey, ae, as, ec] = arrow\n\n  const endAngleAsDegrees = ae * (180 / Math.PI)\n\n  return (\n    <svg\n      viewBox=\"0 0 1280 720\"\n      style={{ width: 1280, height: 720 }}\n      stroke=\"#000\"\n      fill=\"#000\"\n      strokeWidth={3}\n    >\n      <circle cx={sx} cy={sy} r={4} />\n      <path d={`M${sx},${sy} Q${cx},${cy} ${ex},${ey}`} fill=\"none\" />\n      <polygon\n        points=\"0,-6 12,0, 0,6\"\n        transform={`translate(${ex},${ey}) rotate(${endAngleAsDegrees})`}\n      />\n    </svg>\n  )\n}\n```\n\n## Author\n\n[@steveruizok](https://twitter.com/steveruizok)\n","readmeFilename":"README.md","repository":{"type":"git","url":"https://github.com/steveruizok/perfect-arrows"}}