{"_id":"perfect-freehand","_rev":"2973578","name":"perfect-freehand","description":"Draw perfect pressure-sensitive freehand strokes.","dist-tags":{"latest":"1.2.0"},"maintainers":[{"name":"steveruizok","email":""}],"time":{"modified":"2023-06-15T08:23:44.000Z","created":"2021-02-19T22:57:45.011Z","1.2.0":"2022-09-07T12:52:38.427Z","1.1.0":"2022-06-01T14:08:23.208Z","1.0.16":"2021-10-13T18:42:59.508Z","1.0.15":"2021-10-06T09:55:25.668Z","1.0.14":"2021-10-05T12:04:51.806Z","1.0.13":"2021-09-28T21:00:59.190Z","1.0.12":"2021-09-24T09:35:55.919Z","1.0.11":"2021-09-24T08:08:50.164Z","1.0.10":"2021-09-24T07:22:07.195Z","1.0.9":"2021-09-21T11:09:47.372Z","1.0.8":"2021-09-20T20:34:56.576Z","1.0.7":"2021-09-20T20:31:49.904Z","1.0.6":"2021-09-18T14:14:46.588Z","1.0.5":"2021-09-18T11:02:28.526Z","1.0.4":"2021-09-16T15:34:46.151Z","1.0.3":"2021-09-16T14:25:39.969Z","1.0.2":"2021-09-16T14:08:50.380Z","1.0.1":"2021-09-16T14:03:20.682Z","1.0.0":"2021-09-16T13:48:03.895Z","0.5.4":"2021-09-15T16:03:59.734Z","0.5.3":"2021-08-31T20:30:41.116Z","0.5.2":"2021-08-27T09:43:38.425Z","0.5.1":"2021-08-23T14:27:22.367Z","0.5.0":"2021-08-23T13:31:49.958Z","0.4.10":"2021-07-14T06:49:23.342Z","0.4.91":"2021-06-28T06:51:53.352Z","0.4.9":"2021-06-08T10:50:47.293Z","0.4.8":"2021-05-28T15:51:57.303Z","0.4.71":"2021-05-10T11:33:30.738Z","0.4.7":"2021-05-08T12:06:33.687Z","0.4.6":"2021-05-04T20:42:46.567Z","0.4.5":"2021-05-03T14:20:16.755Z","0.4.4":"2021-05-03T13:51:22.794Z","0.4.3":"2021-05-03T11:18:05.704Z","0.4.2":"2021-04-30T17:18:56.490Z","0.4.1":"2021-04-30T16:57:01.787Z","0.4.0":"2021-04-30T16:48:18.629Z","0.3.5":"2021-03-14T14:14:56.986Z","0.3.4":"2021-03-12T10:54:43.016Z","0.3.3":"2021-03-06T22:00:11.500Z","0.3.2":"2021-03-05T22:12:38.085Z","0.3.1":"2021-03-05T22:09:42.925Z","0.3.0":"2021-03-04T13:22:13.378Z","0.2.5":"2021-03-03T22:24:41.618Z","0.2.4":"2021-03-03T16:47:22.233Z","0.2.3":"2021-02-21T08:06:33.558Z","0.2.2":"2021-02-21T07:44:27.276Z","0.2.1":"2021-02-21T07:42:25.286Z","0.2.0":"2021-02-20T14:48:24.636Z","0.1.5":"2021-02-20T14:43:36.879Z","0.1.3":"2021-02-20T00:14:56.116Z","0.1.2":"2021-02-20T00:10:34.374Z","0.1.1":"2021-02-19T23:35:31.461Z","0.1.0":"2021-02-19T22:57:45.011Z"},"users":{},"author":{"name":"Steve Ruiz","url":"https://twitter.com/steveruizok"},"repository":{"type":"git","url":"https://github.com/steveruizok/perfect-freehand"},"versions":{"1.2.0":{"version":"1.2.0","name":"perfect-freehand","private":false,"description":"Draw perfect pressure-sensitive freehand strokes.","author":{"name":"Steve Ruiz","url":"https://twitter.com/steveruizok"},"repository":{"type":"git","url":"https://github.com/steveruizok/perfect-freehand"},"keywords":["ink","draw","paint","signature","handwriting","text","drawing","painting"],"exports":{".":{"types":"./dist/types/index.d.ts","require":"./dist/cjs/index.js","import":"./dist/esm/index.js"}},"license":"MIT","main":"./dist/cjs/index.js","module":"./dist/esm/index.js","types":"./dist/types/index.d.ts","typings":"./dist/types/index.d.ts","scripts":{"start":"node scripts/dev & tsc --watch --incremental --emitDeclarationOnly --declarationMap --outDir dist/types","build":"yarn clean && node scripts/build && tsc --project tsconfig.build.json  --emitDeclarationOnly --outDir dist/types","lint":"eslint src/ --ext .ts,.tsx","clean":"rm -rf dist","ts-node":"ts-node","docs":"typedoc --entryPoints src/index.ts"},"devDependencies":{"@babel/core":"^7.15.0","@babel/plugin-syntax-import-meta":"^7.10.4","@babel/preset-env":"^7.15.0","@babel/preset-react":"^7.14.5","@babel/preset-typescript":"^7.15.0","@testing-library/jest-dom":"^5.14.1","@testing-library/react":"^12.0.0","@types/jest":"^27.0.1","@types/node":"^15.0.1","@typescript-eslint/eslint-plugin":"^4.19.0","@typescript-eslint/parser":"^4.19.0","babel-jest":"^27.1.0","eslint":"^7.32.0","fake-indexeddb":"^3.1.3","jest":"^27.1.0","lerna":"^3.15.0","ts-jest":"^27.0.5","tslib":"^2.3.0","typedoc":"^0.21.9","typescript":"^4.4.2"},"licenseText":"MIT License\n\nCopyright (c) 2021 Stephen Ruiz Ltd\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.\n","_id":"perfect-freehand@1.2.0","dist":{"shasum":"706a0f854544f6175772440c51d3b0563eb3988a","size":10245,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-1.2.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-1.2.0.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_1.2.0_1662555158249_0.39057725501123386"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2022-09-07T13:09:17.532Z","publish_time":1662555158427,"_cnpm_publish_time":1662555158427},"1.1.0":{"version":"1.1.0","name":"perfect-freehand","private":false,"description":"Draw perfect pressure-sensitive freehand strokes.","author":{"name":"Steve Ruiz","url":"https://twitter.com/steveruizok"},"repository":{"type":"git","url":"git+https://github.com/steveruizok/perfect-freehand.git"},"keywords":["ink","draw","paint","signature","handwriting","text","drawing","painting"],"license":"MIT","main":"./dist/cjs/index.js","module":"./dist/esm/index.js","types":"./dist/types/index.d.ts","typings":"./dist/types/index.d.ts","scripts":{"start":"node scripts/dev & tsc --watch --incremental --emitDeclarationOnly --declarationMap --outDir dist/types","build":"yarn clean && node scripts/build && tsc --project tsconfig.build.json  --emitDeclarationOnly --outDir dist/types","lint":"eslint src/ --ext .ts,.tsx","clean":"rm -rf dist","ts-node":"ts-node","docs":"typedoc --entryPoints src/index.ts"},"devDependencies":{"@babel/core":"^7.15.0","@babel/plugin-syntax-import-meta":"^7.10.4","@babel/preset-env":"^7.15.0","@babel/preset-react":"^7.14.5","@babel/preset-typescript":"^7.15.0","@testing-library/jest-dom":"^5.14.1","@testing-library/react":"^12.0.0","@types/jest":"^27.0.1","@types/node":"^15.0.1","@typescript-eslint/eslint-plugin":"^4.19.0","@typescript-eslint/parser":"^4.19.0","babel-jest":"^27.1.0","eslint":"^7.32.0","fake-indexeddb":"^3.1.3","jest":"^27.1.0","lerna":"^3.15.0","ts-jest":"^27.0.5","tslib":"^2.3.0","typedoc":"^0.21.9","typescript":"^4.4.2"},"gitHead":"87687e099ca8e0e5864a2b87a56c4c09e57da369","bugs":{"url":"https://github.com/steveruizok/perfect-freehand/issues"},"homepage":"https://github.com/steveruizok/perfect-freehand#readme","_id":"perfect-freehand@1.1.0","_nodeVersion":"16.15.0","_npmVersion":"lerna/3.22.1/node@v16.15.0+arm64 (darwin)","dist":{"shasum":"65b459f4d6ccceb873e9ac06e07c924761649b32","size":9919,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-1.1.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-1.1.0.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_1.1.0_1654092503095_0.4468695023953979"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2022-06-01T14:31:16.781Z","publish_time":1654092503208,"_cnpm_publish_time":1654092503208},"1.0.16":{"version":"1.0.16","name":"perfect-freehand","private":false,"description":"Draw perfect pressure-sensitive freehand strokes.","author":{"name":"Steve Ruiz","url":"https://twitter.com/steveruizok"},"repository":{"type":"git","url":"git+https://github.com/steveruizok/perfect-freehand.git"},"keywords":["ink","draw","paint","signature","handwriting","text","drawing","painting"],"license":"MIT","main":"./dist/cjs/index.js","module":"./dist/esm/index.js","types":"./dist/types/index.d.ts","typings":"./dist/types/index.d.ts","scripts":{"start":"node scripts/dev & tsc --watch --incremental --emitDeclarationOnly --declarationMap --outDir dist/types","build":"yarn clean && node scripts/build && tsc --project tsconfig.build.json  --emitDeclarationOnly --outDir dist/types","lint":"eslint src/ --ext .ts,.tsx","clean":"rm -rf dist","ts-node":"ts-node","docs":"typedoc --entryPoints src/index.ts"},"devDependencies":{"@babel/core":"^7.15.0","@babel/plugin-syntax-import-meta":"^7.10.4","@babel/preset-env":"^7.15.0","@babel/preset-react":"^7.14.5","@babel/preset-typescript":"^7.15.0","@testing-library/jest-dom":"^5.14.1","@testing-library/react":"^12.0.0","@types/jest":"^27.0.1","@types/node":"^15.0.1","@typescript-eslint/eslint-plugin":"^4.19.0","@typescript-eslint/parser":"^4.19.0","babel-jest":"^27.1.0","eslint":"^7.32.0","fake-indexeddb":"^3.1.3","jest":"^27.1.0","lerna":"^3.15.0","ts-jest":"^27.0.5","tslib":"^2.3.0","typedoc":"^0.21.9","typescript":"^4.4.2"},"gitHead":"ef6924584819043d66d7df347180e6feef8f5d8f","bugs":{"url":"https://github.com/steveruizok/perfect-freehand/issues"},"homepage":"https://github.com/steveruizok/perfect-freehand#readme","_id":"perfect-freehand@1.0.16","_nodeVersion":"16.9.1","_npmVersion":"lerna/3.22.1/node@v16.9.1+arm64 (darwin)","dist":{"shasum":"38575ef946ff513b9c94057c763cac003b504020","size":9953,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-1.0.16.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-1.0.16.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_1.0.16_1634150579372_0.10273042115218378"},"_hasShrinkwrap":false,"publish_time":1634150579508,"_cnpm_publish_time":1634150579508,"_cnpmcore_publish_time":"2021-12-17T01:24:00.496Z"},"1.0.15":{"version":"1.0.15","name":"perfect-freehand","private":false,"description":"Draw perfect pressure-sensitive freehand strokes.","author":{"name":"Steve Ruiz","url":"https://twitter.com/steveruizok"},"repository":{"type":"git","url":"git+https://github.com/steveruizok/perfect-freehand.git"},"keywords":["ink","draw","paint","signature","handwriting","text","drawing","painting"],"license":"MIT","main":"./dist/cjs/index.js","module":"./dist/esm/index.js","types":"./dist/types/index.d.ts","typings":"./dist/types/index.d.ts","scripts":{"start":"node scripts/dev & tsc --watch --incremental --emitDeclarationOnly --declarationMap --outDir dist/types","build":"yarn clean && node scripts/build && tsc --project tsconfig.build.json  --emitDeclarationOnly --outDir dist/types","lint":"eslint src/ --ext .ts,.tsx","clean":"rm -rf dist","ts-node":"ts-node","docs":"typedoc --entryPoints src/index.ts"},"devDependencies":{"@babel/core":"^7.15.0","@babel/plugin-syntax-import-meta":"^7.10.4","@babel/preset-env":"^7.15.0","@babel/preset-react":"^7.14.5","@babel/preset-typescript":"^7.15.0","@testing-library/jest-dom":"^5.14.1","@testing-library/react":"^12.0.0","@types/jest":"^27.0.1","@types/node":"^15.0.1","@typescript-eslint/eslint-plugin":"^4.19.0","@typescript-eslint/parser":"^4.19.0","babel-jest":"^27.1.0","eslint":"^7.32.0","fake-indexeddb":"^3.1.3","jest":"^27.1.0","lerna":"^3.15.0","ts-jest":"^27.0.5","tslib":"^2.3.0","typedoc":"^0.21.9","typescript":"^4.4.2"},"gitHead":"b82dc3e526ca11153756d4b4eb72748e3cce0a94","bugs":{"url":"https://github.com/steveruizok/perfect-freehand/issues"},"homepage":"https://github.com/steveruizok/perfect-freehand#readme","_id":"perfect-freehand@1.0.15","_nodeVersion":"16.9.1","_npmVersion":"lerna/3.22.1/node@v16.9.1+arm64 (darwin)","dist":{"shasum":"d3e4769e0420c0d467c0147487a34793f0b421e7","size":9950,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-1.0.15.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-1.0.15.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_1.0.15_1633514125511_0.09173877489937965"},"_hasShrinkwrap":false,"publish_time":1633514125668,"_cnpm_publish_time":1633514125668,"_cnpmcore_publish_time":"2021-12-17T01:24:00.688Z"},"1.0.14":{"version":"1.0.14","name":"perfect-freehand","private":false,"description":"Draw perfect pressure-sensitive freehand strokes.","author":{"name":"Steve Ruiz","url":"https://twitter.com/steveruizok"},"repository":{"type":"git","url":"git+https://github.com/steveruizok/perfect-freehand.git"},"keywords":["ink","draw","paint","signature","handwriting","text","drawing","painting"],"license":"MIT","main":"./dist/cjs/index.js","module":"./dist/esm/index.js","types":"./dist/types/index.d.ts","typings":"./dist/types/index.d.ts","scripts":{"start":"node scripts/dev & tsc --watch --incremental --emitDeclarationOnly --declarationMap --outDir dist/types","build":"yarn clean && node scripts/build && tsc --project tsconfig.build.json  --emitDeclarationOnly --outDir dist/types","lint":"eslint src/ --ext .ts,.tsx","clean":"rm -rf dist","ts-node":"ts-node","docs":"typedoc --entryPoints src/index.ts"},"devDependencies":{"@babel/core":"^7.15.0","@babel/plugin-syntax-import-meta":"^7.10.4","@babel/preset-env":"^7.15.0","@babel/preset-react":"^7.14.5","@babel/preset-typescript":"^7.15.0","@testing-library/jest-dom":"^5.14.1","@testing-library/react":"^12.0.0","@types/jest":"^27.0.1","@types/node":"^15.0.1","@typescript-eslint/eslint-plugin":"^4.19.0","@typescript-eslint/parser":"^4.19.0","babel-jest":"^27.1.0","eslint":"^7.32.0","fake-indexeddb":"^3.1.3","jest":"^27.1.0","lerna":"^3.15.0","ts-jest":"^27.0.5","tslib":"^2.3.0","typedoc":"^0.21.9","typescript":"^4.4.2"},"gitHead":"9a3b3da54b85c34bc6a9803fbc2e7fb1ea1c1fe2","bugs":{"url":"https://github.com/steveruizok/perfect-freehand/issues"},"homepage":"https://github.com/steveruizok/perfect-freehand#readme","_id":"perfect-freehand@1.0.14","_nodeVersion":"16.9.1","_npmVersion":"lerna/3.22.1/node@v16.9.1+arm64 (darwin)","dist":{"shasum":"76621baa268624b087097201fc64eef55fc6d907","size":10005,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-1.0.14.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-1.0.14.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_1.0.14_1633435491589_0.8193364642321499"},"_hasShrinkwrap":false,"publish_time":1633435491806,"_cnpm_publish_time":1633435491806,"_cnpmcore_publish_time":"2021-12-17T01:24:00.932Z"},"1.0.13":{"version":"1.0.13","name":"perfect-freehand","private":false,"description":"Draw perfect pressure-sensitive freehand strokes.","author":{"name":"Steve Ruiz","url":"https://twitter.com/steveruizok"},"repository":{"type":"git","url":"git+https://github.com/steveruizok/perfect-freehand.git"},"keywords":["ink","draw","paint","signature","handwriting","text","drawing","painting"],"license":"MIT","main":"./dist/cjs/index.js","module":"./dist/esm/index.js","types":"./dist/types/index.d.ts","typings":"./dist/types/index.d.ts","scripts":{"start":"node scripts/dev & tsc --watch --incremental --emitDeclarationOnly --declarationMap --outDir dist/types","build":"yarn clean && node scripts/build && tsc --project tsconfig.build.json  --emitDeclarationOnly --outDir dist/types","lint":"eslint src/ --ext .ts,.tsx","clean":"rm -rf dist","ts-node":"ts-node","docs":"typedoc --entryPoints src/index.ts"},"devDependencies":{"@babel/core":"^7.15.0","@babel/plugin-syntax-import-meta":"^7.10.4","@babel/preset-env":"^7.15.0","@babel/preset-react":"^7.14.5","@babel/preset-typescript":"^7.15.0","@testing-library/jest-dom":"^5.14.1","@testing-library/react":"^12.0.0","@types/jest":"^27.0.1","@types/node":"^15.0.1","@typescript-eslint/eslint-plugin":"^4.19.0","@typescript-eslint/parser":"^4.19.0","babel-jest":"^27.1.0","eslint":"^7.32.0","fake-indexeddb":"^3.1.3","jest":"^27.1.0","lerna":"^3.15.0","ts-jest":"^27.0.5","tslib":"^2.3.0","typedoc":"^0.21.9","typescript":"^4.4.2"},"gitHead":"831ea3ece64bbdf63f0d670bf70e072ac04e3924","bugs":{"url":"https://github.com/steveruizok/perfect-freehand/issues"},"homepage":"https://github.com/steveruizok/perfect-freehand#readme","_id":"perfect-freehand@1.0.13","_nodeVersion":"16.9.1","_npmVersion":"lerna/3.22.1/node@v16.9.1+arm64 (darwin)","dist":{"shasum":"93b2e4125b255fc7f3ca17f7f334e8639ac4f3e8","size":8673,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-1.0.13.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-1.0.13.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_1.0.13_1632862858984_0.5275868109230064"},"_hasShrinkwrap":false,"publish_time":1632862859190,"_cnpm_publish_time":1632862859190,"_cnpmcore_publish_time":"2021-12-17T01:24:01.182Z"},"1.0.12":{"version":"1.0.12","name":"perfect-freehand","private":false,"description":"Draw perfect pressure-sensitive freehand strokes.","author":{"name":"Steve Ruiz","url":"https://twitter.com/steveruizok"},"repository":{"type":"git","url":"git+https://github.com/steveruizok/perfect-freehand.git"},"keywords":["ink","draw","paint","signature","handwriting","text","drawing","painting"],"license":"MIT","main":"./dist/cjs/index.js","module":"./dist/esm/index.js","types":"./dist/types/index.d.ts","typings":"./dist/types/index.d.ts","scripts":{"start":"node scripts/dev & tsc --watch --incremental --emitDeclarationOnly --declarationMap --outDir dist/types","build":"yarn clean && node scripts/build && tsc --project tsconfig.build.json  --emitDeclarationOnly --outDir dist/types","lint":"eslint src/ --ext .ts,.tsx","clean":"rm -rf dist","ts-node":"ts-node","docs":"typedoc --entryPoints src/index.ts"},"devDependencies":{"@babel/core":"^7.15.0","@babel/plugin-syntax-import-meta":"^7.10.4","@babel/preset-env":"^7.15.0","@babel/preset-react":"^7.14.5","@babel/preset-typescript":"^7.15.0","@testing-library/jest-dom":"^5.14.1","@testing-library/react":"^12.0.0","@types/jest":"^27.0.1","@types/node":"^15.0.1","@typescript-eslint/eslint-plugin":"^4.19.0","@typescript-eslint/parser":"^4.19.0","babel-jest":"^27.1.0","eslint":"^7.32.0","fake-indexeddb":"^3.1.3","jest":"^27.1.0","lerna":"^3.15.0","ts-jest":"^27.0.5","tslib":"^2.3.0","typedoc":"^0.21.9","typescript":"^4.4.2"},"gitHead":"d3a6f8a0f9757ad02d620652c64a310ea6fcb0b1","bugs":{"url":"https://github.com/steveruizok/perfect-freehand/issues"},"homepage":"https://github.com/steveruizok/perfect-freehand#readme","_id":"perfect-freehand@1.0.12","_nodeVersion":"14.16.1","_npmVersion":"lerna/3.22.1/node@v14.16.1+x64 (darwin)","dist":{"shasum":"5f3614e099ad459ced4f50da9ce109fdf5b62b90","size":8642,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-1.0.12.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-1.0.12.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_1.0.12_1632476155828_0.9436605849457937"},"_hasShrinkwrap":false,"publish_time":1632476155919,"_cnpm_publish_time":1632476155919,"_cnpmcore_publish_time":"2021-12-17T01:24:01.373Z"},"1.0.11":{"version":"1.0.11","name":"perfect-freehand","private":false,"description":"Draw perfect pressure-sensitive freehand strokes.","author":{"name":"Steve Ruiz","url":"https://twitter.com/steveruizok"},"repository":{"type":"git","url":"git+https://github.com/steveruizok/perfect-freehand.git"},"keywords":["ink","draw","paint","signature","handwriting","text","drawing","painting"],"license":"MIT","main":"./dist/cjs/index.js","module":"./dist/esm/index.js","types":"./dist/types/index.d.ts","typings":"./dist/types/index.d.ts","scripts":{"start":"node scripts/dev & tsc --watch --incremental --emitDeclarationOnly --declarationMap --outDir dist/types","build":"yarn clean && node scripts/build && tsc --project tsconfig.build.json  --emitDeclarationOnly --outDir dist/types","lint":"eslint src/ --ext .ts,.tsx","clean":"rm -rf dist","ts-node":"ts-node","docs":"typedoc --entryPoints src/index.ts"},"devDependencies":{"@babel/core":"^7.15.0","@babel/plugin-syntax-import-meta":"^7.10.4","@babel/preset-env":"^7.15.0","@babel/preset-react":"^7.14.5","@babel/preset-typescript":"^7.15.0","@testing-library/jest-dom":"^5.14.1","@testing-library/react":"^12.0.0","@types/jest":"^27.0.1","@types/node":"^15.0.1","@typescript-eslint/eslint-plugin":"^4.19.0","@typescript-eslint/parser":"^4.19.0","babel-jest":"^27.1.0","eslint":"^7.32.0","fake-indexeddb":"^3.1.3","jest":"^27.1.0","lerna":"^3.15.0","ts-jest":"^27.0.5","tslib":"^2.3.0","typedoc":"^0.21.9","typescript":"^4.4.2"},"gitHead":"cbc2e2ed268b77521ec8464e743adabc906a7485","bugs":{"url":"https://github.com/steveruizok/perfect-freehand/issues"},"homepage":"https://github.com/steveruizok/perfect-freehand#readme","_id":"perfect-freehand@1.0.11","_nodeVersion":"14.16.1","_npmVersion":"lerna/3.22.1/node@v14.16.1+x64 (darwin)","dist":{"shasum":"12045ddf130e4ce986d55d9b85c01c9f21b8802c","size":8663,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-1.0.11.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-1.0.11.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_1.0.11_1632470929961_0.7992491864163564"},"_hasShrinkwrap":false,"publish_time":1632470930164,"_cnpm_publish_time":1632470930164,"_cnpmcore_publish_time":"2021-12-17T01:24:01.567Z"},"1.0.10":{"version":"1.0.10","name":"perfect-freehand","private":false,"description":"Draw perfect pressure-sensitive freehand strokes.","author":{"name":"Steve Ruiz","url":"https://twitter.com/steveruizok"},"repository":{"type":"git","url":"git+https://github.com/steveruizok/perfect-freehand.git"},"keywords":["ink","draw","paint","signature","handwriting","text","drawing","painting"],"license":"MIT","main":"./dist/cjs/index.js","module":"./dist/esm/index.js","types":"./dist/types/index.d.ts","typings":"./dist/types/index.d.ts","scripts":{"start":"node scripts/dev & tsc --watch --incremental --emitDeclarationOnly --declarationMap --outDir dist/types","build":"yarn clean && node scripts/build && tsc --project tsconfig.build.json  --emitDeclarationOnly --outDir dist/types","lint":"eslint src/ --ext .ts,.tsx","clean":"rm -rf dist","ts-node":"ts-node","docs":"typedoc --entryPoints src/index.ts"},"devDependencies":{"@babel/core":"^7.15.0","@babel/plugin-syntax-import-meta":"^7.10.4","@babel/preset-env":"^7.15.0","@babel/preset-react":"^7.14.5","@babel/preset-typescript":"^7.15.0","@testing-library/jest-dom":"^5.14.1","@testing-library/react":"^12.0.0","@types/jest":"^27.0.1","@types/node":"^15.0.1","@typescript-eslint/eslint-plugin":"^4.19.0","@typescript-eslint/parser":"^4.19.0","babel-jest":"^27.1.0","eslint":"^7.32.0","fake-indexeddb":"^3.1.3","jest":"^27.1.0","lerna":"^3.15.0","ts-jest":"^27.0.5","tslib":"^2.3.0","typedoc":"^0.21.9","typescript":"^4.4.2"},"gitHead":"81c48d30db02c2b619b40adf002ca3eab20911c3","bugs":{"url":"https://github.com/steveruizok/perfect-freehand/issues"},"homepage":"https://github.com/steveruizok/perfect-freehand#readme","_id":"perfect-freehand@1.0.10","_nodeVersion":"14.16.1","_npmVersion":"lerna/3.22.1/node@v14.16.1+x64 (darwin)","dist":{"shasum":"462dd25706b645c9793d963d73b49426328025b1","size":8645,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-1.0.10.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-1.0.10.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_1.0.10_1632468127014_0.63468219709032"},"_hasShrinkwrap":false,"publish_time":1632468127195,"_cnpm_publish_time":1632468127195,"_cnpmcore_publish_time":"2021-12-17T01:24:01.779Z"},"1.0.9":{"version":"1.0.9","name":"perfect-freehand","private":false,"description":"Draw perfect pressure-sensitive freehand strokes.","author":{"name":"Steve Ruiz","url":"https://twitter.com/steveruizok"},"repository":{"type":"git","url":"git+https://github.com/steveruizok/perfect-freehand.git"},"keywords":["ink","draw","paint","signature","handwriting","text","drawing","painting"],"license":"MIT","main":"./dist/cjs/index.js","module":"./dist/esm/index.js","types":"./dist/types/index.d.ts","typings":"./dist/types/index.d.ts","scripts":{"start":"node scripts/dev & tsc --watch --incremental --emitDeclarationOnly --declarationMap --outDir dist/types","build":"yarn clean && node scripts/build && tsc --project tsconfig.build.json  --emitDeclarationOnly --outDir dist/types","lint":"eslint src/ --ext .ts,.tsx","clean":"rm -rf dist","ts-node":"ts-node","docs":"typedoc --entryPoints src/index.ts"},"devDependencies":{"@babel/core":"^7.15.0","@babel/plugin-syntax-import-meta":"^7.10.4","@babel/preset-env":"^7.15.0","@babel/preset-react":"^7.14.5","@babel/preset-typescript":"^7.15.0","@testing-library/jest-dom":"^5.14.1","@testing-library/react":"^12.0.0","@types/jest":"^27.0.1","@types/node":"^15.0.1","@typescript-eslint/eslint-plugin":"^4.19.0","@typescript-eslint/parser":"^4.19.0","babel-jest":"^27.1.0","eslint":"^7.32.0","fake-indexeddb":"^3.1.3","jest":"^27.1.0","lerna":"^3.15.0","ts-jest":"^27.0.5","tslib":"^2.3.0","typedoc":"^0.21.9","typescript":"^4.4.2"},"gitHead":"9529e0e406174f3cfe9e39d2efe4dc8f26e86a02","bugs":{"url":"https://github.com/steveruizok/perfect-freehand/issues"},"homepage":"https://github.com/steveruizok/perfect-freehand#readme","_id":"perfect-freehand@1.0.9","_nodeVersion":"16.9.1","_npmVersion":"lerna/3.22.1/node@v16.9.1+arm64 (darwin)","dist":{"shasum":"9b5fb96181004bcec62f3721d25cebea2ec34a3f","size":8647,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-1.0.9.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-1.0.9.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_1.0.9_1632222587095_0.6006967581724043"},"_hasShrinkwrap":false,"publish_time":1632222587372,"_cnpm_publish_time":1632222587372,"_cnpmcore_publish_time":"2021-12-17T01:24:02.003Z"},"1.0.8":{"version":"1.0.8","name":"perfect-freehand","private":false,"description":"Draw perfect pressure-sensitive freehand strokes.","author":{"name":"Steve Ruiz","url":"https://twitter.com/steveruizok"},"repository":{"type":"git","url":"git+https://github.com/steveruizok/perfect-freehand.git"},"keywords":["ink","draw","paint","signature","handwriting","text","drawing","painting"],"license":"MIT","main":"./dist/cjs/index.js","module":"./dist/esm/index.js","types":"./dist/types/index.d.ts","typings":"./dist/types/index.d.ts","scripts":{"start":"node scripts/dev & tsc --watch --incremental --emitDeclarationOnly --declarationMap --outDir dist/types","build":"yarn clean && node scripts/build && tsc --project tsconfig.build.json  --emitDeclarationOnly --outDir dist/types","lint":"eslint src/ --ext .ts,.tsx","clean":"rm -rf dist","ts-node":"ts-node","docs":"typedoc --entryPoints src/index.ts"},"devDependencies":{"@babel/core":"^7.15.0","@babel/plugin-syntax-import-meta":"^7.10.4","@babel/preset-env":"^7.15.0","@babel/preset-react":"^7.14.5","@babel/preset-typescript":"^7.15.0","@testing-library/jest-dom":"^5.14.1","@testing-library/react":"^12.0.0","@types/jest":"^27.0.1","@types/node":"^15.0.1","@typescript-eslint/eslint-plugin":"^4.19.0","@typescript-eslint/parser":"^4.19.0","babel-jest":"^27.1.0","eslint":"^7.32.0","fake-indexeddb":"^3.1.3","jest":"^27.1.0","lerna":"^3.15.0","ts-jest":"^27.0.5","tslib":"^2.3.0","typedoc":"^0.21.9","typescript":"^4.4.2"},"gitHead":"d2eccfdf5fe038dfa3718b2958954451660910fb","bugs":{"url":"https://github.com/steveruizok/perfect-freehand/issues"},"homepage":"https://github.com/steveruizok/perfect-freehand#readme","_id":"perfect-freehand@1.0.8","_nodeVersion":"16.9.1","_npmVersion":"lerna/3.22.1/node@v16.9.1+arm64 (darwin)","dist":{"shasum":"f5f414953044c1eac4d0c8c9cf9454730cb3a616","size":10174,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-1.0.8.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-1.0.8.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_1.0.8_1632170096424_0.3397287856476181"},"_hasShrinkwrap":false,"publish_time":1632170096576,"_cnpm_publish_time":1632170096576,"_cnpmcore_publish_time":"2021-12-17T01:24:02.658Z"},"1.0.7":{"version":"1.0.7","name":"perfect-freehand","private":false,"description":"Draw perfect pressure-sensitive freehand strokes.","author":{"name":"Steve Ruiz","url":"https://twitter.com/steveruizok"},"repository":{"type":"git","url":"git+https://github.com/steveruizok/perfect-freehand.git"},"keywords":["ink","draw","paint","signature","handwriting","text","drawing","painting"],"license":"MIT","main":"./dist/cjs/index.js","module":"./dist/esm/index.js","types":"./dist/types/index.d.ts","typings":"./dist/types/index.d.ts","scripts":{"start":"node scripts/dev & tsc --watch --incremental --emitDeclarationOnly --declarationMap --outDir dist/types","build":"yarn clean && node scripts/build && tsc --project tsconfig.build.json  --emitDeclarationOnly --outDir dist/types","lint":"eslint src/ --ext .ts,.tsx","clean":"rm -rf dist","ts-node":"ts-node","docs":"typedoc --entryPoints src/index.ts"},"devDependencies":{"@babel/core":"^7.15.0","@babel/plugin-syntax-import-meta":"^7.10.4","@babel/preset-env":"^7.15.0","@babel/preset-react":"^7.14.5","@babel/preset-typescript":"^7.15.0","@testing-library/jest-dom":"^5.14.1","@testing-library/react":"^12.0.0","@types/jest":"^27.0.1","@types/node":"^15.0.1","@types/react":"^17.0.19","@types/react-dom":"^17.0.9","@typescript-eslint/eslint-plugin":"^4.19.0","@typescript-eslint/parser":"^4.19.0","babel-jest":"^27.1.0","eslint":"^7.32.0","fake-indexeddb":"^3.1.3","jest":"^27.1.0","lerna":"^3.15.0","react":"^17.0.2","react-dom":"^17.0.2","ts-jest":"^27.0.5","tslib":"^2.3.0","typedoc":"^0.21.9","typescript":"^4.4.2"},"gitHead":"0b1fd1bfc560cb15e34724b0b9b56d6a2b750f00","bugs":{"url":"https://github.com/steveruizok/perfect-freehand/issues"},"homepage":"https://github.com/steveruizok/perfect-freehand#readme","_id":"perfect-freehand@1.0.7","_nodeVersion":"16.9.1","_npmVersion":"lerna/3.22.1/node@v16.9.1+arm64 (darwin)","dist":{"shasum":"bc10cfcd00cb23c97a9046054d109dbe475bb340","size":155735,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-1.0.7.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-1.0.7.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_1.0.7_1632169909707_0.41386508990282067"},"_hasShrinkwrap":false,"publish_time":1632169909904,"_cnpm_publish_time":1632169909904,"_cnpmcore_publish_time":"2021-12-17T01:24:03.284Z"},"1.0.6":{"version":"1.0.6","name":"perfect-freehand","private":false,"description":"Draw perfect pressure-sensitive freehand strokes.","author":{"name":"Steve Ruiz","url":"https://twitter.com/steveruizok"},"repository":{"type":"git","url":"git+https://github.com/steveruizok/perfect-freehand.git"},"keywords":["ink","draw","paint","signature","handwriting","text","drawing","painting"],"license":"MIT","main":"./dist/cjs/index.js","module":"./dist/esm/index.js","types":"./dist/types/index.d.ts","typings":"./dist/types/index.d.ts","scripts":{"start":"node scripts/dev & tsc --watch --incremental --emitDeclarationOnly --declarationMap --outDir dist/types","build":"yarn clean && node scripts/build && tsc --project tsconfig.build.json  --emitDeclarationOnly --outDir dist/types","lint":"eslint src/ --ext .ts,.tsx","clean":"rm -rf dist","ts-node":"ts-node","docs":"typedoc --entryPoints src/index.ts"},"devDependencies":{"@babel/core":"^7.15.0","@babel/plugin-syntax-import-meta":"^7.10.4","@babel/preset-env":"^7.15.0","@babel/preset-react":"^7.14.5","@babel/preset-typescript":"^7.15.0","@testing-library/jest-dom":"^5.14.1","@testing-library/react":"^12.0.0","@types/jest":"^27.0.1","@types/node":"^15.0.1","@types/react":"^17.0.19","@types/react-dom":"^17.0.9","@typescript-eslint/eslint-plugin":"^4.19.0","@typescript-eslint/parser":"^4.19.0","babel-jest":"^27.1.0","eslint":"^7.32.0","fake-indexeddb":"^3.1.3","jest":"^27.1.0","lerna":"^3.15.0","react":"^17.0.2","react-dom":"^17.0.2","ts-jest":"^27.0.5","tslib":"^2.3.0","typedoc":"^0.21.9","typescript":"^4.4.2"},"gitHead":"6df6712f75139129bd9916220814d707354fbabc","bugs":{"url":"https://github.com/steveruizok/perfect-freehand/issues"},"homepage":"https://github.com/steveruizok/perfect-freehand#readme","_id":"perfect-freehand@1.0.6","_nodeVersion":"16.9.1","_npmVersion":"lerna/3.22.1/node@v16.9.1+arm64 (darwin)","dist":{"shasum":"feeb25450241f036ec13b43fa84bbb16f8e78e0f","size":154516,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-1.0.6.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-1.0.6.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_1.0.6_1631974486370_0.281158883281742"},"_hasShrinkwrap":false,"publish_time":1631974486588,"_cnpm_publish_time":1631974486588,"_cnpmcore_publish_time":"2021-12-17T01:24:03.746Z"},"1.0.5":{"version":"1.0.5","name":"perfect-freehand","private":false,"description":"Draw perfect pressure-sensitive freehand strokes.","author":{"name":"Steve Ruiz","url":"https://twitter.com/steveruizok"},"repository":{"type":"git","url":"git+https://github.com/steveruizok/perfect-freehand.git"},"keywords":["ink","draw","paint","signature","handwriting","text","drawing","painting"],"license":"MIT","main":"./dist/cjs/index.js","module":"./dist/esm/index.js","types":"./dist/types/index.d.ts","typings":"./dist/types/index.d.ts","scripts":{"start":"node scripts/dev & tsc --watch --incremental --emitDeclarationOnly --declarationMap --outDir dist/types","build":"yarn clean && node scripts/build && tsc --project tsconfig.build.json  --emitDeclarationOnly --outDir dist/types","lint":"eslint src/ --ext .ts,.tsx","clean":"rm -rf dist","ts-node":"ts-node","docs":"typedoc --entryPoints src/index.ts"},"devDependencies":{"@babel/core":"^7.15.0","@babel/plugin-syntax-import-meta":"^7.10.4","@babel/preset-env":"^7.15.0","@babel/preset-react":"^7.14.5","@babel/preset-typescript":"^7.15.0","@testing-library/jest-dom":"^5.14.1","@testing-library/react":"^12.0.0","@types/jest":"^27.0.1","@types/node":"^15.0.1","@types/react":"^17.0.19","@types/react-dom":"^17.0.9","@typescript-eslint/eslint-plugin":"^4.19.0","@typescript-eslint/parser":"^4.19.0","babel-jest":"^27.1.0","eslint":"^7.32.0","fake-indexeddb":"^3.1.3","jest":"^27.1.0","lerna":"^3.15.0","react":"^17.0.2","react-dom":"^17.0.2","ts-jest":"^27.0.5","tslib":"^2.3.0","typedoc":"^0.21.9","typescript":"^4.4.2"},"gitHead":"cb9b0f5a1daacdf204d03b07029781db1abc419b","bugs":{"url":"https://github.com/steveruizok/perfect-freehand/issues"},"homepage":"https://github.com/steveruizok/perfect-freehand#readme","_id":"perfect-freehand@1.0.5","_nodeVersion":"16.9.1","_npmVersion":"lerna/3.22.1/node@v16.9.1+arm64 (darwin)","dist":{"shasum":"aa98adea7dd28b0da42a4ca442b2956e7f772003","size":151762,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-1.0.5.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-1.0.5.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_1.0.5_1631962948364_0.8329223212401715"},"_hasShrinkwrap":false,"publish_time":1631962948526,"_cnpm_publish_time":1631962948526,"_cnpmcore_publish_time":"2021-12-17T01:24:04.340Z"},"1.0.4":{"version":"1.0.4","name":"perfect-freehand","private":false,"description":"Draw perfect pressure-sensitive freehand strokes.","author":{"name":"Steve Ruiz","url":"https://twitter.com/steveruizok"},"repository":{"type":"git","url":"git+https://github.com/steveruizok/perfect-freehand.git"},"keywords":["ink","draw","paint","signature","handwriting","text","drawing","painting"],"license":"MIT","main":"./dist/cjs/index.js","module":"./dist/esm/index.js","types":"./dist/types/index.d.ts","typings":"./dist/types/index.d.ts","scripts":{"start":"node scripts/dev & tsc --watch --incremental --emitDeclarationOnly --declarationMap --outDir dist/types","build":"yarn clean && node scripts/build && tsc --project tsconfig.build.json  --emitDeclarationOnly --outDir dist/types","lint":"eslint src/ --ext .ts,.tsx","clean":"rm -rf dist","ts-node":"ts-node","docs":"typedoc --entryPoints src/index.ts"},"devDependencies":{"@babel/core":"^7.15.0","@babel/plugin-syntax-import-meta":"^7.10.4","@babel/preset-env":"^7.15.0","@babel/preset-react":"^7.14.5","@babel/preset-typescript":"^7.15.0","@testing-library/jest-dom":"^5.14.1","@testing-library/react":"^12.0.0","@types/jest":"^27.0.1","@types/node":"^15.0.1","@types/react":"^17.0.19","@types/react-dom":"^17.0.9","@typescript-eslint/eslint-plugin":"^4.19.0","@typescript-eslint/parser":"^4.19.0","babel-jest":"^27.1.0","eslint":"^7.32.0","fake-indexeddb":"^3.1.3","jest":"^27.1.0","lerna":"^3.15.0","react":"^17.0.2","react-dom":"^17.0.2","ts-jest":"^27.0.5","tslib":"^2.3.0","typedoc":"^0.21.9","typescript":"^4.4.2"},"gitHead":"629d7676258936730d13ecb767d00f79a9cd0e68","bugs":{"url":"https://github.com/steveruizok/perfect-freehand/issues"},"homepage":"https://github.com/steveruizok/perfect-freehand#readme","_id":"perfect-freehand@1.0.4","_nodeVersion":"16.9.1","_npmVersion":"lerna/3.22.1/node@v16.9.1+arm64 (darwin)","dist":{"shasum":"1c5318164b10a74a4e6664b8519ff68799b8ab52","size":151766,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-1.0.4.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-1.0.4.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_1.0.4_1631806485847_0.3776012701775604"},"_hasShrinkwrap":false,"publish_time":1631806486151,"_cnpm_publish_time":1631806486151,"_cnpmcore_publish_time":"2021-12-17T01:24:04.843Z"},"1.0.3":{"version":"1.0.3","name":"perfect-freehand","private":false,"description":"Draw perfect pressure-sensitive freehand strokes.","author":{"name":"Steve Ruiz","url":"https://twitter.com/steveruizok"},"repository":{"type":"git","url":"git+https://github.com/steveruizok/perfect-freehand.git"},"keywords":["ink","draw","paint","signature","handwriting","text","drawing","painting"],"license":"MIT","main":"./dist/cjs/index.js","module":"./dist/esm/index.js","types":"./dist/types/index.d.ts","typings":"./dist/types/index.d.ts","scripts":{"start":"node scripts/dev & tsc --watch --incremental --emitDeclarationOnly --declarationMap --outDir dist/types","build":"yarn clean && node scripts/build && tsc --project tsconfig.build.json  --emitDeclarationOnly --outDir dist/types","lint":"eslint src/ --ext .ts,.tsx","clean":"rm -rf dist","ts-node":"ts-node","docs":"typedoc --entryPoints src/index.ts"},"devDependencies":{"@babel/core":"^7.15.0","@babel/plugin-syntax-import-meta":"^7.10.4","@babel/preset-env":"^7.15.0","@babel/preset-react":"^7.14.5","@babel/preset-typescript":"^7.15.0","@testing-library/jest-dom":"^5.14.1","@testing-library/react":"^12.0.0","@types/jest":"^27.0.1","@types/node":"^15.0.1","@types/react":"^17.0.19","@types/react-dom":"^17.0.9","@typescript-eslint/eslint-plugin":"^4.19.0","@typescript-eslint/parser":"^4.19.0","babel-jest":"^27.1.0","eslint":"^7.32.0","fake-indexeddb":"^3.1.3","jest":"^27.1.0","lerna":"^3.15.0","react":"^17.0.2","react-dom":"^17.0.2","ts-jest":"^27.0.5","tslib":"^2.3.0","typedoc":"^0.21.9","typescript":"^4.4.2"},"gitHead":"1f9b57500bf9750f0fe04d8ab97460c2b65d96da","bugs":{"url":"https://github.com/steveruizok/perfect-freehand/issues"},"homepage":"https://github.com/steveruizok/perfect-freehand#readme","_id":"perfect-freehand@1.0.3","_nodeVersion":"16.9.1","_npmVersion":"lerna/3.22.1/node@v16.9.1+arm64 (darwin)","dist":{"shasum":"5f5e1d908a57177112e67cb7c514727c306a2fdd","size":143273,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-1.0.3.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-1.0.3.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_1.0.3_1631802339741_0.7110125349179783"},"_hasShrinkwrap":false,"publish_time":1631802339969,"_cnpm_publish_time":1631802339969,"_cnpmcore_publish_time":"2021-12-17T01:24:05.248Z"},"1.0.2":{"version":"1.0.2","name":"perfect-freehand","private":false,"description":"Draw perfect pressure-sensitive freehand strokes.","author":{"name":"Steve Ruiz","url":"https://twitter.com/steveruizok"},"repository":{"type":"git","url":"git+https://github.com/steveruizok/perfect-freehand.git"},"keywords":["ink","draw","paint","signature","handwriting","text","drawing","painting"],"license":"MIT","main":"./dist/cjs/index.js","module":"./dist/esm/index.js","types":"./dist/types/index.d.ts","typings":"./dist/types/index.d.ts","scripts":{"start":"node scripts/dev & tsc --watch --incremental --emitDeclarationOnly --declarationMap --outDir dist/types","build":"yarn clean && node scripts/build && tsc --project tsconfig.build.json  --emitDeclarationOnly --outDir dist/types","lint":"eslint src/ --ext .ts,.tsx","clean":"rm -rf dist","ts-node":"ts-node","docs":"typedoc --entryPoints src/index.ts"},"devDependencies":{"@babel/core":"^7.15.0","@babel/plugin-syntax-import-meta":"^7.10.4","@babel/preset-env":"^7.15.0","@babel/preset-react":"^7.14.5","@babel/preset-typescript":"^7.15.0","@testing-library/jest-dom":"^5.14.1","@testing-library/react":"^12.0.0","@types/jest":"^27.0.1","@types/node":"^15.0.1","@types/react":"^17.0.19","@types/react-dom":"^17.0.9","@typescript-eslint/eslint-plugin":"^4.19.0","@typescript-eslint/parser":"^4.19.0","babel-jest":"^27.1.0","eslint":"^7.32.0","fake-indexeddb":"^3.1.3","jest":"^27.1.0","lerna":"^3.15.0","react":"^17.0.2","react-dom":"^17.0.2","ts-jest":"^27.0.5","tslib":"^2.3.0","typedoc":"^0.21.9","typescript":"^4.4.2"},"dependencies":{"@tldraw/core":"^0.0.53","rko":"^0.5.19"},"gitHead":"f8c6dd8b6b1d48fb50758de8bdca2969373c31ae","bugs":{"url":"https://github.com/steveruizok/perfect-freehand/issues"},"homepage":"https://github.com/steveruizok/perfect-freehand#readme","_id":"perfect-freehand@1.0.2","_nodeVersion":"16.9.1","_npmVersion":"lerna/3.22.1/node@v16.9.1+arm64 (darwin)","dist":{"shasum":"35c539dc3166b2498dd2e8c0083d2a7ecb69977a","size":143290,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-1.0.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-1.0.2.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_1.0.2_1631801330213_0.04422630034551234"},"_hasShrinkwrap":false,"publish_time":1631801330380,"_cnpm_publish_time":1631801330380,"_cnpmcore_publish_time":"2021-12-17T01:24:05.946Z"},"1.0.1":{"version":"1.0.1","name":"perfect-freehand","private":false,"description":"Draw perfect pressure-sensitive freehand strokes.","author":{"name":"Steve Ruiz","url":"https://twitter.com/steveruizok"},"repository":{"type":"git","url":"git+https://github.com/steveruizok/perfect-freehand.git"},"keywords":["ink","draw","paint","signature","handwriting","text","drawing","painting"],"license":"MIT","main":"./dist/cjs/index.js","module":"./dist/esm/index.js","types":"./dist/types/index.d.ts","typings":"./dist/types/index.d.ts","scripts":{"start":"node scripts/dev & tsc --watch --incremental --emitDeclarationOnly --declarationMap --outDir dist/types","build":"yarn clean && node scripts/build && tsc --project tsconfig.build.json  --emitDeclarationOnly --outDir dist/types","lint":"eslint src/ --ext .ts,.tsx","clean":"rm -rf dist","ts-node":"ts-node","docs":"typedoc --entryPoints src/index.ts"},"devDependencies":{"@babel/core":"^7.15.0","@babel/plugin-syntax-import-meta":"^7.10.4","@babel/preset-env":"^7.15.0","@babel/preset-react":"^7.14.5","@babel/preset-typescript":"^7.15.0","@testing-library/jest-dom":"^5.14.1","@testing-library/react":"^12.0.0","@types/jest":"^27.0.1","@types/node":"^15.0.1","@types/react":"^17.0.19","@types/react-dom":"^17.0.9","@typescript-eslint/eslint-plugin":"^4.19.0","@typescript-eslint/parser":"^4.19.0","babel-jest":"^27.1.0","eslint":"^7.32.0","fake-indexeddb":"^3.1.3","jest":"^27.1.0","lerna":"^3.15.0","react":"^17.0.2","react-dom":"^17.0.2","ts-jest":"^27.0.5","tslib":"^2.3.0","typedoc":"^0.21.9","typescript":"^4.4.2"},"dependencies":{"@tldraw/core":"^0.0.53","rko":"^0.5.19"},"gitHead":"d2a00defbb7dfc7b6aa1ed3d7fa570e7f1e2b672","bugs":{"url":"https://github.com/steveruizok/perfect-freehand/issues"},"homepage":"https://github.com/steveruizok/perfect-freehand#readme","_id":"perfect-freehand@1.0.1","_nodeVersion":"16.9.1","_npmVersion":"lerna/3.22.1/node@v16.9.1+arm64 (darwin)","dist":{"shasum":"9a3cf447699d108cc4212924a4cba561db60dbb1","size":143356,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-1.0.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-1.0.1.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_1.0.1_1631801000143_0.9169196179732637"},"_hasShrinkwrap":false,"publish_time":1631801000682,"_cnpm_publish_time":1631801000682,"_cnpmcore_publish_time":"2021-12-17T01:24:06.710Z"},"1.0.0":{"version":"1.0.0","name":"perfect-freehand","private":false,"description":"Draw perfect pressure-sensitive freehand strokes.","author":{"name":"Steve Ruiz","url":"https://twitter.com/steveruizok"},"repository":{"type":"git","url":"git+https://github.com/steveruizok/perfect-freehand.git"},"keywords":["ink","draw","paint","signature","handwriting","text","drawing","painting"],"license":"MIT","main":"./dist/cjs/index.js","module":"./dist/esm/index.js","types":"./dist/types/index.d.ts","typings":"./dist/types/index.d.ts","scripts":{"start":"node scripts/dev & tsc --watch --incremental --emitDeclarationOnly --declarationMap --outDir dist/types","build":"yarn clean && node scripts/build && tsc --project tsconfig.build.json  --emitDeclarationOnly --outDir dist/types","lint":"eslint src/ --ext .ts,.tsx","clean":"rm -rf dist","ts-node":"ts-node","docs":"typedoc --entryPoints src/index.ts"},"devDependencies":{"@babel/core":"^7.15.0","@babel/plugin-syntax-import-meta":"^7.10.4","@babel/preset-env":"^7.15.0","@babel/preset-react":"^7.14.5","@babel/preset-typescript":"^7.15.0","@testing-library/jest-dom":"^5.14.1","@testing-library/react":"^12.0.0","@types/jest":"^27.0.1","@types/node":"^15.0.1","@types/react":"^17.0.19","@types/react-dom":"^17.0.9","@typescript-eslint/eslint-plugin":"^4.19.0","@typescript-eslint/parser":"^4.19.0","babel-jest":"^27.1.0","eslint":"^7.32.0","fake-indexeddb":"^3.1.3","jest":"^27.1.0","lerna":"^3.15.0","react":"^17.0.2","react-dom":"^17.0.2","ts-jest":"^27.0.5","tslib":"^2.3.0","typedoc":"^0.21.9","typescript":"^4.4.2"},"dependencies":{"@tldraw/core":"^0.0.53","rko":"^0.5.19"},"gitHead":"4230a43d94d943c6329585a38370983c37bb3433","bugs":{"url":"https://github.com/steveruizok/perfect-freehand/issues"},"homepage":"https://github.com/steveruizok/perfect-freehand#readme","_id":"perfect-freehand@1.0.0","_nodeVersion":"16.9.1","_npmVersion":"lerna/3.22.1/node@v16.9.1+arm64 (darwin)","dist":{"shasum":"3c83e9e9bed0a05b5ff410982e8062ab4cf49ff5","size":28415,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-1.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-1.0.0.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_1.0.0_1631800083756_0.2614382852213759"},"_hasShrinkwrap":false,"publish_time":1631800083895,"_cnpm_publish_time":1631800083895,"_cnpmcore_publish_time":"2021-12-17T01:24:06.961Z"},"0.5.4":{"version":"0.5.4","name":"perfect-freehand","private":false,"description":"Draw perfect pressure-sensitive freehand strokes.","author":{"name":"Steve Ruiz","url":"https://twitter.com/steveruizok"},"repository":{"type":"git","url":"git+https://github.com/steveruizok/perfect-freehand.git"},"keywords":["ink","draw","paint","signature","handwriting","text","drawing","painting"],"license":"MIT","main":"./dist/cjs/index.js","module":"./dist/esm/index.js","types":"./dist/types/index.d.ts","typings":"./dist/types/index.d.ts","scripts":{"start":"node scripts/dev & tsc --watch --incremental --emitDeclarationOnly --declarationMap --outDir dist/types","build":"yarn clean && node scripts/build && tsc --project tsconfig.build.json  --emitDeclarationOnly --outDir dist/types","lint":"eslint src/ --ext .ts,.tsx","clean":"rm -rf dist","ts-node":"ts-node","docs":"typedoc --entryPoints src/index.ts"},"devDependencies":{"@babel/core":"^7.15.0","@babel/plugin-syntax-import-meta":"^7.10.4","@babel/preset-env":"^7.15.0","@babel/preset-react":"^7.14.5","@babel/preset-typescript":"^7.15.0","@testing-library/jest-dom":"^5.14.1","@testing-library/react":"^12.0.0","@types/jest":"^27.0.1","@types/node":"^15.0.1","@types/react":"^17.0.19","@types/react-dom":"^17.0.9","@typescript-eslint/eslint-plugin":"^4.19.0","@typescript-eslint/parser":"^4.19.0","babel-jest":"^27.1.0","eslint":"^7.32.0","fake-indexeddb":"^3.1.3","jest":"^27.1.0","lerna":"^3.15.0","react":"^17.0.2","react-dom":"^17.0.2","ts-jest":"^27.0.5","tslib":"^2.3.0","typedoc":"^0.21.9","typescript":"^4.4.2"},"dependencies":{"@tldraw/core":"^0.0.53","rko":"^0.5.19"},"gitHead":"b52b4d22b7b12fbfc5cff300c7416ca7786aba15","bugs":{"url":"https://github.com/steveruizok/perfect-freehand/issues"},"homepage":"https://github.com/steveruizok/perfect-freehand#readme","_id":"perfect-freehand@0.5.4","_nodeVersion":"16.9.1","_npmVersion":"lerna/3.22.1/node@v16.9.1+arm64 (darwin)","dist":{"shasum":"4cc48dfe34c10977da9a6170d49cedb4c095ead3","size":28707,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-0.5.4.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-0.5.4.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_0.5.4_1631721839614_0.8398000175716069"},"_hasShrinkwrap":false,"publish_time":1631721839734,"_cnpm_publish_time":1631721839734,"_cnpmcore_publish_time":"2021-12-17T01:24:07.201Z"},"0.5.3":{"version":"0.5.3","name":"perfect-freehand","private":false,"description":"Draw perfect pressure-sensitive freehand strokes.","author":{"name":"Steve Ruiz","url":"https://twitter.com/steveruizok"},"repository":{"type":"git","url":"git+https://github.com/steveruizok/perfect-freehand.git"},"keywords":["ink","draw","paint","signature","handwriting","text","drawing","painting"],"license":"MIT","main":"./dist/cjs/index.js","module":"./dist/esm/index.js","types":"./dist/types/index.d.ts","typings":"./dist/types/index.d.ts","scripts":{"start":"node scripts/dev & tsc --watch --incremental --emitDeclarationOnly --declarationMap --outDir dist/types","build":"yarn clean && node scripts/build && tsc --project tsconfig.build.json  --emitDeclarationOnly --outDir dist/types","lint":"eslint src/ --ext .ts,.tsx","clean":"rm -rf dist","ts-node":"ts-node","docs":"typedoc --entryPoints src/index.ts"},"devDependencies":{"@babel/core":"^7.15.0","@babel/plugin-syntax-import-meta":"^7.10.4","@babel/preset-env":"^7.15.0","@babel/preset-react":"^7.14.5","@babel/preset-typescript":"^7.15.0","@testing-library/jest-dom":"^5.14.1","@testing-library/react":"^12.0.0","@types/jest":"^27.0.1","@types/node":"^15.0.1","@types/react":"^17.0.19","@types/react-dom":"^17.0.9","@typescript-eslint/eslint-plugin":"^4.19.0","@typescript-eslint/parser":"^4.19.0","babel-jest":"^27.1.0","eslint":"^7.32.0","fake-indexeddb":"^3.1.3","jest":"^27.1.0","lerna":"^3.15.0","react":"^17.0.2","react-dom":"^17.0.2","ts-jest":"^27.0.5","tslib":"^2.3.0","typedoc":"^0.21.9","typescript":"^4.4.2"},"dependencies":{"@tldraw/core":"^0.0.53","rko":"^0.5.19"},"gitHead":"d2a334f923a58ffa869060b5ce80281f18af919d","bugs":{"url":"https://github.com/steveruizok/perfect-freehand/issues"},"homepage":"https://github.com/steveruizok/perfect-freehand#readme","_id":"perfect-freehand@0.5.3","_nodeVersion":"16.6.1","_npmVersion":"lerna/3.22.1/node@v16.6.1+arm64 (darwin)","dist":{"shasum":"41641d17aceb795db445ae84573396e3cce8878f","size":26658,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-0.5.3.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-0.5.3.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_0.5.3_1630441840938_0.6601223874428486"},"_hasShrinkwrap":false,"publish_time":1630441841116,"_cnpm_publish_time":1630441841116,"_cnpmcore_publish_time":"2021-12-17T01:24:07.886Z"},"0.5.2":{"version":"0.5.2","name":"perfect-freehand","private":false,"description":"Draw perfect pressure-sensitive freehand strokes.","author":{"name":"Steve Ruiz","url":"https://twitter.com/steveruizok"},"repository":{"type":"git","url":"git+https://github.com/steveruizok/perfect-freehand.git"},"keywords":["ink","draw","paint","signature","handwriting","text","drawing","painting"],"license":"MIT","main":"./dist/cjs/index.js","module":"./dist/esm/index.js","types":"./dist/types/index.d.ts","typings":"./dist/types/index.d.ts","scripts":{"start":"node scripts/dev & tsc --watch --incremental --emitDeclarationOnly --declarationMap --outDir dist/types","build":"yarn clean && node scripts/build && tsc --project tsconfig.build.json  --emitDeclarationOnly --outDir dist/types","lint":"eslint src/ --ext .ts,.tsx","clean":"rm -rf dist","ts-node":"ts-node","docs":"typedoc --entryPoints src/index.ts"},"devDependencies":{"@types/jest":"^27.0.1","@types/node":"^15.0.1","@types/react":"^17.0.16","@types/react-dom":"^17.0.9","esbuild":"^0.12.21","eslint":"^7.22.0","react":"^17.0.2","react-dom":"^17.0.2","ts-node":"^9.1.1","tslib":"^2.3.0","typedoc":"^0.20.35","typescript":"^4.3.5"},"gitHead":"c13ecc2363bcd33a72f3c49cf72496794f2cc726","bugs":{"url":"https://github.com/steveruizok/perfect-freehand/issues"},"homepage":"https://github.com/steveruizok/perfect-freehand#readme","_id":"perfect-freehand@0.5.2","_nodeVersion":"16.6.1","_npmVersion":"lerna/3.22.1/node@v16.6.1+arm64 (darwin)","dist":{"shasum":"493f28591f8fdaa852cab185af8902403cf474a3","size":23896,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-0.5.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-0.5.2.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_0.5.2_1630057418306_0.2534148222330017"},"_hasShrinkwrap":false,"publish_time":1630057418425,"_cnpm_publish_time":1630057418425,"_cnpmcore_publish_time":"2021-12-17T01:24:08.617Z"},"0.5.1":{"version":"0.5.1","name":"perfect-freehand","private":false,"description":"Draw perfect pressure-sensitive freehand strokes.","author":{"name":"Steve Ruiz","url":"https://twitter.com/steveruizok"},"repository":{"type":"git","url":"git+https://github.com/steveruizok/perfect-freehand.git"},"keywords":["ink","draw","paint","signature","handwriting","text","drawing","painting"],"license":"MIT","main":"./dist/cjs/index.js","module":"./dist/esm/index.js","types":"./dist/types/index.d.ts","scripts":{"start":"node scripts/dev & tsc --watch --incremental --emitDeclarationOnly --declarationMap --outDir dist/types","build":"yarn clean && node scripts/build && tsc --project tsconfig.build.json  --emitDeclarationOnly --outDir dist/types","lint":"eslint src/ --ext .ts,.tsx","clean":"rm -rf dist","ts-node":"ts-node","docs":"typedoc --entryPoints src/index.ts"},"devDependencies":{"@types/jest":"^27.0.1","@types/node":"^15.0.1","@types/react":"^17.0.16","@types/react-dom":"^17.0.9","esbuild":"^0.12.21","eslint":"^7.22.0","react":"^17.0.2","react-dom":"^17.0.2","ts-node":"^9.1.1","tslib":"^2.3.0","typedoc":"^0.20.35","typescript":"^4.3.5"},"gitHead":"d7e9d7ee6ccc383a542385af78f4583963740eec","bugs":{"url":"https://github.com/steveruizok/perfect-freehand/issues"},"homepage":"https://github.com/steveruizok/perfect-freehand#readme","_id":"perfect-freehand@0.5.1","_nodeVersion":"16.6.1","_npmVersion":"lerna/3.22.1/node@v16.6.1+arm64 (darwin)","dist":{"shasum":"871b1d2d02e731f90dd609d20f153ee9fa48db71","size":23894,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-0.5.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-0.5.1.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_0.5.1_1629728842239_0.8953808495407762"},"_hasShrinkwrap":false,"publish_time":1629728842367,"_cnpm_publish_time":1629728842367,"_cnpmcore_publish_time":"2021-12-17T01:24:08.884Z"},"0.5.0":{"version":"0.5.0","name":"perfect-freehand","private":false,"description":"Draw perfect pressure-sensitive freehand strokes.","author":{"name":"Steve Ruiz","url":"https://twitter.com/steveruizok"},"repository":{"type":"git","url":"git+https://github.com/steveruizok/perfect-freehand.git"},"keywords":["ink","draw","paint","signature","handwriting","text","drawing","painting"],"license":"MIT","main":"./dist/cjs/index.js","module":"./dist/esm/index.js","types":"./dist/types/index.d.ts","scripts":{"start":"node scripts/dev & tsc --watch --incremental --emitDeclarationOnly --declarationMap --outDir dist/types","build":"yarn clean && node scripts/build && tsc --project tsconfig.build.json  --emitDeclarationOnly --outDir dist/types","lint":"eslint src/ --ext .ts,.tsx","clean":"rm -rf dist","ts-node":"ts-node","docs":"typedoc --entryPoints src/index.ts"},"devDependencies":{"@types/jest":"^27.0.1","@types/node":"^15.0.1","@types/react":"^17.0.16","@types/react-dom":"^17.0.9","esbuild":"^0.12.21","eslint":"^7.22.0","react":"^17.0.2","react-dom":"^17.0.2","ts-node":"^9.1.1","tslib":"^2.3.0","typedoc":"^0.20.35","typescript":"^4.3.5"},"gitHead":"285dece1681b7a21bffb9309fee476c5f44495f5","bugs":{"url":"https://github.com/steveruizok/perfect-freehand/issues"},"homepage":"https://github.com/steveruizok/perfect-freehand#readme","_id":"perfect-freehand@0.5.0","_nodeVersion":"16.6.1","_npmVersion":"lerna/3.22.1/node@v16.6.1+arm64 (darwin)","dist":{"shasum":"3ce25f53550ce2b2250fd7c9eea3b5a03059d7e8","size":23876,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-0.5.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-0.5.0.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_0.5.0_1629725509795_0.7802709218650865"},"_hasShrinkwrap":false,"publish_time":1629725509958,"_cnpm_publish_time":1629725509958,"_cnpmcore_publish_time":"2021-12-17T01:24:09.297Z"},"0.4.10":{"version":"0.4.10","name":"perfect-freehand","author":{"name":"Steve Ruiz","url":"https://twitter.com/steveruizok"},"repository":{"type":"git","url":"git+https://github.com/steveruizok/perfect-freehand.git"},"keywords":["ink","draw","paint","signature","handwriting","text","drawing","painting"],"license":"MIT","module":"dist/perfect-freehand.esm.js","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","size":"size-limit","analyze":"size-limit --why"},"husky":{"hooks":{"pre-commit":"tsdx lint"}},"prettier":{"printWidth":80,"semi":false,"singleQuote":true,"trailingComma":"es5"},"size-limit":[{"path":"dist/perfect-freehand.cjs.production.min.js","limit":"10 KB"},{"path":"dist/perfect-freehand.esm.js","limit":"10 KB"}],"devDependencies":{"@size-limit/preset-small-lib":"^4.9.2","husky":"^5.0.9","size-limit":"^4.9.2","tsdx":"^0.14.1","tslib":"^2.1.0","typescript":"^4.1.5"},"peerDependencies":{},"dependencies":{},"gitHead":"bb149cdae7c167f3c8436fa7759e1f90dfaf6260","description":"Draw perfect pressure-sensitive freehand strokes.","bugs":{"url":"https://github.com/steveruizok/perfect-freehand/issues"},"homepage":"https://github.com/steveruizok/perfect-freehand#readme","_id":"perfect-freehand@0.4.10","_nodeVersion":"16.4.1","_npmVersion":"7.18.1","dist":{"shasum":"f866bc4700c854f26a3eaf75254661f08dd1c9af","size":35179,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-0.4.10.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-0.4.10.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_0.4.10_1626245363192_0.010866943441471877"},"_hasShrinkwrap":false,"publish_time":1626245363342,"_cnpm_publish_time":1626245363342,"_cnpmcore_publish_time":"2021-12-17T01:24:09.606Z"},"0.4.91":{"version":"0.4.91","name":"perfect-freehand","author":{"name":"Steve Ruiz","url":"https://twitter.com/steveruizok"},"repository":{"type":"git","url":"git+https://github.com/steveruizok/perfect-freehand.git"},"keywords":["ink","draw","paint","signature","handwriting","text","drawing","painting"],"license":"MIT","module":"dist/perfect-freehand.esm.js","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","size":"size-limit","analyze":"size-limit --why"},"husky":{"hooks":{"pre-commit":"tsdx lint"}},"prettier":{"printWidth":80,"semi":false,"singleQuote":true,"trailingComma":"es5"},"size-limit":[{"path":"dist/perfect-freehand.cjs.production.min.js","limit":"10 KB"},{"path":"dist/perfect-freehand.esm.js","limit":"10 KB"}],"devDependencies":{"@size-limit/preset-small-lib":"^4.9.2","husky":"^5.0.9","size-limit":"^4.9.2","tsdx":"^0.14.1","tslib":"^2.1.0","typescript":"^4.1.5"},"peerDependencies":{},"dependencies":{},"gitHead":"a8951047bf1c4fb26ef206f4f8752b6729f9ace7","description":"Draw perfect pressure-sensitive freehand strokes.","bugs":{"url":"https://github.com/steveruizok/perfect-freehand/issues"},"homepage":"https://github.com/steveruizok/perfect-freehand#readme","_id":"perfect-freehand@0.4.91","_nodeVersion":"15.8.0","_npmVersion":"7.5.0","dist":{"shasum":"f2992d33b96bb8337cc9a082ab0841e5c59ffd90","size":36605,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-0.4.91.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-0.4.91.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_0.4.91_1624863113195_0.732468215325424"},"_hasShrinkwrap":false,"publish_time":1624863113352,"_cnpm_publish_time":1624863113352,"_cnpmcore_publish_time":"2021-12-17T01:24:10.214Z"},"0.4.9":{"version":"0.4.9","name":"perfect-freehand","author":{"name":"Steve Ruiz","url":"https://twitter.com/steveruizok"},"repository":{"type":"git","url":"git+https://github.com/steveruizok/perfect-freehand.git"},"keywords":["ink","draw","paint","signature","handwriting","text","drawing","painting"],"license":"MIT","module":"dist/perfect-freehand.esm.js","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","size":"size-limit","analyze":"size-limit --why"},"husky":{"hooks":{"pre-commit":"tsdx lint"}},"prettier":{"printWidth":80,"semi":false,"singleQuote":true,"trailingComma":"es5"},"size-limit":[{"path":"dist/perfect-freehand.cjs.production.min.js","limit":"10 KB"},{"path":"dist/perfect-freehand.esm.js","limit":"10 KB"}],"devDependencies":{"@size-limit/preset-small-lib":"^4.9.2","husky":"^5.0.9","size-limit":"^4.9.2","tsdx":"^0.14.1","tslib":"^2.1.0","typescript":"^4.1.5"},"peerDependencies":{},"dependencies":{},"gitHead":"f5915f53cc3112e9ea8b367c924817274581ccf5","description":"Draw perfect pressure-sensitive freehand strokes.","bugs":{"url":"https://github.com/steveruizok/perfect-freehand/issues"},"homepage":"https://github.com/steveruizok/perfect-freehand#readme","_id":"perfect-freehand@0.4.9","_nodeVersion":"15.8.0","_npmVersion":"7.5.0","dist":{"shasum":"09e9f5a1057da7eda335367d5f1f2c6fbd369e3e","size":36198,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-0.4.9.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-0.4.9.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_0.4.9_1623149447024_0.31550827035034557"},"_hasShrinkwrap":false,"publish_time":1623149447293,"_cnpm_publish_time":1623149447293,"_cnpmcore_publish_time":"2021-12-17T01:24:10.560Z"},"0.4.8":{"version":"0.4.8","name":"perfect-freehand","author":{"name":"Steve Ruiz","url":"https://twitter.com/steveruizok"},"repository":{"type":"git","url":"git+https://github.com/steveruizok/perfect-freehand.git"},"keywords":["ink","draw","paint","signature","handwriting","text","drawing","painting"],"license":"MIT","module":"dist/perfect-freehand.esm.js","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","size":"size-limit","analyze":"size-limit --why"},"husky":{"hooks":{"pre-commit":"tsdx lint"}},"prettier":{"printWidth":80,"semi":false,"singleQuote":true,"trailingComma":"es5"},"size-limit":[{"path":"dist/perfect-freehand.cjs.production.min.js","limit":"10 KB"},{"path":"dist/perfect-freehand.esm.js","limit":"10 KB"}],"devDependencies":{"@size-limit/preset-small-lib":"^4.9.2","husky":"^5.0.9","size-limit":"^4.9.2","tsdx":"^0.14.1","tslib":"^2.1.0","typescript":"^4.1.5"},"peerDependencies":{},"dependencies":{},"gitHead":"45c4c4514c5f239d26e7946d2c64384b684c71af","description":"Draw perfect pressure-sensitive freehand strokes.","bugs":{"url":"https://github.com/steveruizok/perfect-freehand/issues"},"homepage":"https://github.com/steveruizok/perfect-freehand#readme","_id":"perfect-freehand@0.4.8","_nodeVersion":"15.8.0","_npmVersion":"7.5.0","dist":{"shasum":"0054995322fdd9939c0c38c260d96a9d0f22eb4f","size":31475,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-0.4.8.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-0.4.8.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_0.4.8_1622217117163_0.5057356690617987"},"_hasShrinkwrap":false,"publish_time":1622217117303,"_cnpm_publish_time":1622217117303,"_cnpmcore_publish_time":"2021-12-17T01:24:10.845Z"},"0.4.71":{"version":"0.4.71","name":"perfect-freehand","author":{"name":"Steve Ruiz","url":"https://twitter.com/steveruizok"},"repository":{"type":"git","url":"git+https://github.com/steveruizok/perfect-freehand.git"},"keywords":["ink","draw","paint","signature","handwriting","text","drawing","painting"],"license":"MIT","module":"dist/perfect-freehand.esm.js","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","size":"size-limit","analyze":"size-limit --why"},"husky":{"hooks":{"pre-commit":"tsdx lint"}},"prettier":{"printWidth":80,"semi":false,"singleQuote":true,"trailingComma":"es5"},"size-limit":[{"path":"dist/perfect-freehand.cjs.production.min.js","limit":"10 KB"},{"path":"dist/perfect-freehand.esm.js","limit":"10 KB"}],"devDependencies":{"@size-limit/preset-small-lib":"^4.9.2","husky":"^5.0.9","size-limit":"^4.9.2","tsdx":"^0.14.1","tslib":"^2.1.0","typescript":"^4.1.5"},"peerDependencies":{},"dependencies":{},"gitHead":"4c296a94aff96a76405b6496186efca51cf88261","description":"Draw perfect pressure-sensitive freehand strokes.","bugs":{"url":"https://github.com/steveruizok/perfect-freehand/issues"},"homepage":"https://github.com/steveruizok/perfect-freehand#readme","_id":"perfect-freehand@0.4.71","_nodeVersion":"15.8.0","_npmVersion":"7.5.0","dist":{"shasum":"b98ffc3cbc4e3cd930528e8d74a8849ee77475fb","size":30781,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-0.4.71.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-0.4.71.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_0.4.71_1620646410585_0.8807380660300073"},"_hasShrinkwrap":false,"publish_time":1620646410738,"_cnpm_publish_time":1620646410738,"_cnpmcore_publish_time":"2021-12-17T01:24:11.162Z"},"0.4.7":{"version":"0.4.7","name":"perfect-freehand","author":{"name":"Steve Ruiz","url":"https://twitter.com/steveruizok"},"repository":{"type":"git","url":"git+https://github.com/steveruizok/perfect-freehand.git"},"keywords":["ink","draw","paint","signature","handwriting","text","drawing","painting"],"license":"MIT","module":"dist/perfect-freehand.esm.js","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","size":"size-limit","analyze":"size-limit --why"},"husky":{"hooks":{"pre-commit":"tsdx lint"}},"prettier":{"printWidth":80,"semi":false,"singleQuote":true,"trailingComma":"es5"},"size-limit":[{"path":"dist/perfect-freehand.cjs.production.min.js","limit":"10 KB"},{"path":"dist/perfect-freehand.esm.js","limit":"10 KB"}],"devDependencies":{"@size-limit/preset-small-lib":"^4.9.2","husky":"^5.0.9","size-limit":"^4.9.2","tsdx":"^0.14.1","tslib":"^2.1.0","typescript":"^4.1.5"},"peerDependencies":{},"dependencies":{},"gitHead":"e4ebfe96e1ffab6b7f63704cd9f3a48c0bcc1e44","description":"Draw perfect pressure-sensitive freehand strokes.","bugs":{"url":"https://github.com/steveruizok/perfect-freehand/issues"},"homepage":"https://github.com/steveruizok/perfect-freehand#readme","_id":"perfect-freehand@0.4.7","_nodeVersion":"15.8.0","_npmVersion":"7.5.0","dist":{"shasum":"4d85fd64881ba81b2a4eaa6ac4e8983ccb21dd43","size":30666,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-0.4.7.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-0.4.7.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_0.4.7_1620475593514_0.18861562112772634"},"_hasShrinkwrap":false,"publish_time":1620475593687,"_cnpm_publish_time":1620475593687,"_cnpmcore_publish_time":"2021-12-17T01:24:11.458Z"},"0.4.6":{"version":"0.4.6","name":"perfect-freehand","author":{"name":"Steve Ruiz","url":"https://twitter.com/steveruizok"},"repository":{"type":"git","url":"git+https://github.com/steveruizok/perfect-freehand.git"},"keywords":["ink","draw","paint","signature","handwriting","text","drawing","painting"],"license":"MIT","module":"dist/perfect-freehand.esm.js","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","size":"size-limit","analyze":"size-limit --why"},"husky":{"hooks":{"pre-commit":"tsdx lint"}},"prettier":{"printWidth":80,"semi":false,"singleQuote":true,"trailingComma":"es5"},"size-limit":[{"path":"dist/perfect-freehand.cjs.production.min.js","limit":"10 KB"},{"path":"dist/perfect-freehand.esm.js","limit":"10 KB"}],"devDependencies":{"@size-limit/preset-small-lib":"^4.9.2","husky":"^5.0.9","size-limit":"^4.9.2","tsdx":"^0.14.1","tslib":"^2.1.0","typescript":"^4.1.5"},"peerDependencies":{},"dependencies":{},"gitHead":"3a732aeb853afacba6a913f520354331c5041510","description":"Draw perfect pressure-sensitive freehand strokes.","bugs":{"url":"https://github.com/steveruizok/perfect-freehand/issues"},"homepage":"https://github.com/steveruizok/perfect-freehand#readme","_id":"perfect-freehand@0.4.6","_nodeVersion":"15.8.0","_npmVersion":"7.5.0","dist":{"shasum":"22c54c9099d743841c2dbc8c6642ee2b1deeded1","size":30000,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-0.4.6.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-0.4.6.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_0.4.6_1620160966439_0.19747018174731412"},"_hasShrinkwrap":false,"publish_time":1620160966567,"_cnpm_publish_time":1620160966567,"_cnpmcore_publish_time":"2021-12-17T01:24:11.826Z"},"0.4.5":{"version":"0.4.5","name":"perfect-freehand","author":{"name":"Steve Ruiz","url":"https://twitter.com/steveruizok"},"repository":{"type":"git","url":"git+https://github.com/steveruizok/perfect-freehand.git"},"keywords":["ink","draw","paint","signature","handwriting","text","drawing","painting"],"license":"MIT","module":"dist/perfect-freehand.esm.js","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","size":"size-limit","analyze":"size-limit --why"},"husky":{"hooks":{"pre-commit":"tsdx lint"}},"prettier":{"printWidth":80,"semi":false,"singleQuote":true,"trailingComma":"es5"},"size-limit":[{"path":"dist/perfect-freehand.cjs.production.min.js","limit":"10 KB"},{"path":"dist/perfect-freehand.esm.js","limit":"10 KB"}],"devDependencies":{"@size-limit/preset-small-lib":"^4.9.2","husky":"^5.0.9","size-limit":"^4.9.2","tsdx":"^0.14.1","tslib":"^2.1.0","typescript":"^4.1.5"},"peerDependencies":{},"dependencies":{},"gitHead":"a963457839a53e559787735aeb3f22ff45bac127","description":"Draw perfect pressure-sensitive freehand strokes.","bugs":{"url":"https://github.com/steveruizok/perfect-freehand/issues"},"homepage":"https://github.com/steveruizok/perfect-freehand#readme","_id":"perfect-freehand@0.4.5","_nodeVersion":"15.8.0","_npmVersion":"7.5.0","dist":{"shasum":"6234994e0e452b11e198c4bd0d33858b00c0e39f","size":30566,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-0.4.5.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-0.4.5.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_0.4.5_1620051616587_0.8266828601340948"},"_hasShrinkwrap":false,"publish_time":1620051616755,"_cnpm_publish_time":1620051616755,"_cnpmcore_publish_time":"2021-12-17T01:24:12.204Z"},"0.4.4":{"version":"0.4.4","name":"perfect-freehand","author":{"name":"Steve Ruiz","url":"https://twitter.com/steveruizok"},"repository":{"type":"git","url":"git+https://github.com/steveruizok/perfect-freehand.git"},"keywords":["ink","draw","paint","signature","handwriting","text","drawing","painting"],"license":"MIT","module":"dist/perfect-freehand.esm.js","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","size":"size-limit","analyze":"size-limit --why"},"husky":{"hooks":{"pre-commit":"tsdx lint"}},"prettier":{"printWidth":80,"semi":false,"singleQuote":true,"trailingComma":"es5"},"size-limit":[{"path":"dist/perfect-freehand.cjs.production.min.js","limit":"10 KB"},{"path":"dist/perfect-freehand.esm.js","limit":"10 KB"}],"devDependencies":{"@size-limit/preset-small-lib":"^4.9.2","husky":"^5.0.9","size-limit":"^4.9.2","tsdx":"^0.14.1","tslib":"^2.1.0","typescript":"^4.1.5"},"peerDependencies":{},"dependencies":{},"gitHead":"a963457839a53e559787735aeb3f22ff45bac127","description":"Draw perfect pressure-sensitive freehand strokes.","bugs":{"url":"https://github.com/steveruizok/perfect-freehand/issues"},"homepage":"https://github.com/steveruizok/perfect-freehand#readme","_id":"perfect-freehand@0.4.4","_nodeVersion":"15.8.0","_npmVersion":"7.5.0","dist":{"shasum":"70c266ae85b5f981ea6cec22945f1fa7b5f64ac0","size":30388,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-0.4.4.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-0.4.4.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_0.4.4_1620049882632_0.11672673136493295"},"_hasShrinkwrap":false,"publish_time":1620049882794,"_cnpm_publish_time":1620049882794,"_cnpmcore_publish_time":"2021-12-17T01:24:12.413Z"},"0.4.3":{"version":"0.4.3","name":"perfect-freehand","author":{"name":"Steve Ruiz","url":"https://twitter.com/steveruizok"},"repository":{"type":"git","url":"git+https://github.com/steveruizok/perfect-freehand.git"},"keywords":["ink","draw","paint","signature","handwriting","text","drawing","painting"],"license":"MIT","module":"dist/perfect-freehand.esm.js","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","size":"size-limit","analyze":"size-limit --why"},"husky":{"hooks":{"pre-commit":"tsdx lint"}},"prettier":{"printWidth":80,"semi":false,"singleQuote":true,"trailingComma":"es5"},"size-limit":[{"path":"dist/perfect-freehand.cjs.production.min.js","limit":"10 KB"},{"path":"dist/perfect-freehand.esm.js","limit":"10 KB"}],"devDependencies":{"@size-limit/preset-small-lib":"^4.9.2","husky":"^5.0.9","size-limit":"^4.9.2","tsdx":"^0.14.1","tslib":"^2.1.0","typescript":"^4.1.5"},"peerDependencies":{},"dependencies":{},"gitHead":"0d63e57bde418fc79b26509d9f7cf64782113ebe","description":"Draw perfect pressure-sensitive freehand strokes.","bugs":{"url":"https://github.com/steveruizok/perfect-freehand/issues"},"homepage":"https://github.com/steveruizok/perfect-freehand#readme","_id":"perfect-freehand@0.4.3","_nodeVersion":"15.8.0","_npmVersion":"7.5.0","dist":{"shasum":"07291c5fef5a273c17cfa8e70314b60124f5a3b3","size":30375,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-0.4.3.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-0.4.3.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_0.4.3_1620040685571_0.12111807709261924"},"_hasShrinkwrap":false,"publish_time":1620040685704,"_cnpm_publish_time":1620040685704,"_cnpmcore_publish_time":"2021-12-17T01:24:12.656Z"},"0.4.2":{"version":"0.4.2","name":"perfect-freehand","author":{"name":"Steve Ruiz","url":"https://twitter.com/steveruizok"},"repository":{"type":"git","url":"git+https://github.com/steveruizok/perfect-freehand.git"},"keywords":["ink","draw","paint","signature","handwriting","text","drawing","painting"],"license":"MIT","module":"dist/perfect-freehand.esm.js","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","size":"size-limit","analyze":"size-limit --why"},"husky":{"hooks":{"pre-commit":"tsdx lint"}},"prettier":{"printWidth":80,"semi":false,"singleQuote":true,"trailingComma":"es5"},"size-limit":[{"path":"dist/perfect-freehand.cjs.production.min.js","limit":"10 KB"},{"path":"dist/perfect-freehand.esm.js","limit":"10 KB"}],"devDependencies":{"@size-limit/preset-small-lib":"^4.9.2","husky":"^5.0.9","size-limit":"^4.9.2","tsdx":"^0.14.1","tslib":"^2.1.0","typescript":"^4.1.5"},"peerDependencies":{},"dependencies":{},"gitHead":"cc8f33df80e3473934958f4c5d9aa77ded72d630","description":"Draw perfect pressure-sensitive freehand strokes.","bugs":{"url":"https://github.com/steveruizok/perfect-freehand/issues"},"homepage":"https://github.com/steveruizok/perfect-freehand#readme","_id":"perfect-freehand@0.4.2","_nodeVersion":"14.15.0","_npmVersion":"6.14.8","dist":{"shasum":"67184abf3dab01e15030e173e8bb59dce919275f","size":29196,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-0.4.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-0.4.2.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_0.4.2_1619803136247_0.23147592298773834"},"_hasShrinkwrap":false,"publish_time":1619803136490,"_cnpm_publish_time":1619803136490,"_cnpmcore_publish_time":"2021-12-17T01:24:12.918Z"},"0.4.1":{"version":"0.4.1","name":"perfect-freehand","author":{"name":"Steve Ruiz","url":"https://twitter.com/steveruizok"},"repository":{"type":"git","url":"git+https://github.com/steveruizok/perfect-freehand.git"},"keywords":["ink","draw","paint","signature","handwriting","text","drawing","painting"],"license":"MIT","module":"dist/perfect-freehand.esm.js","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","size":"size-limit","analyze":"size-limit --why"},"husky":{"hooks":{"pre-commit":"tsdx lint"}},"prettier":{"printWidth":80,"semi":false,"singleQuote":true,"trailingComma":"es5"},"size-limit":[{"path":"dist/perfect-freehand.cjs.production.min.js","limit":"10 KB"},{"path":"dist/perfect-freehand.esm.js","limit":"10 KB"}],"devDependencies":{"@size-limit/preset-small-lib":"^4.9.2","husky":"^5.0.9","size-limit":"^4.9.2","tsdx":"^0.14.1","tslib":"^2.1.0","typescript":"^4.1.5"},"peerDependencies":{},"dependencies":{},"gitHead":"85e0ea0ea1384a00f77a80d2208e05b3e1dd74a5","description":"Draw perfect pressure-sensitive freehand strokes.","bugs":{"url":"https://github.com/steveruizok/perfect-freehand/issues"},"homepage":"https://github.com/steveruizok/perfect-freehand#readme","_id":"perfect-freehand@0.4.1","_nodeVersion":"14.15.0","_npmVersion":"6.14.8","dist":{"shasum":"b616db745b29f0210811174a69008202b6dcfde1","size":29212,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-0.4.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-0.4.1.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_0.4.1_1619801821584_0.28545749306743806"},"_hasShrinkwrap":false,"publish_time":1619801821787,"_cnpm_publish_time":1619801821787,"_cnpmcore_publish_time":"2021-12-17T01:24:13.192Z"},"0.4.0":{"version":"0.4.0","name":"perfect-freehand","author":{"name":"Steve Ruiz","url":"https://twitter.com/steveruizok"},"repository":{"type":"git","url":"git+https://github.com/steveruizok/perfect-freehand.git"},"keywords":["ink","draw","paint","signature","handwriting","text","drawing","painting"],"license":"MIT","module":"dist/perfect-freehand.esm.js","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","size":"size-limit","analyze":"size-limit --why"},"husky":{"hooks":{"pre-commit":"tsdx lint"}},"prettier":{"printWidth":80,"semi":false,"singleQuote":true,"trailingComma":"es5"},"size-limit":[{"path":"dist/perfect-freehand.cjs.production.min.js","limit":"10 KB"},{"path":"dist/perfect-freehand.esm.js","limit":"10 KB"}],"devDependencies":{"@size-limit/preset-small-lib":"^4.9.2","husky":"^5.0.9","size-limit":"^4.9.2","tsdx":"^0.14.1","tslib":"^2.1.0","typescript":"^4.1.5"},"peerDependencies":{},"dependencies":{},"gitHead":"af0cfbf7fad260c24ecc666233b0484e41872db8","description":"Draw perfect pressure-sensitive freehand strokes.","bugs":{"url":"https://github.com/steveruizok/perfect-freehand/issues"},"homepage":"https://github.com/steveruizok/perfect-freehand#readme","_id":"perfect-freehand@0.4.0","_nodeVersion":"14.15.0","_npmVersion":"6.14.8","dist":{"shasum":"548c8a2abfa5198392d84cb89c02d2bd43d5e591","size":29021,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-0.4.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-0.4.0.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_0.4.0_1619801298518_0.6372010790821732"},"_hasShrinkwrap":false,"publish_time":1619801298629,"_cnpm_publish_time":1619801298629,"_cnpmcore_publish_time":"2021-12-17T01:24:13.426Z"},"0.3.5":{"version":"0.3.5","name":"perfect-freehand","author":{"name":"Steve Ruiz","url":"https://twitter.com/steveruizok"},"repository":{"type":"git","url":"git+https://github.com/steveruizok/perfect-freehand.git"},"keywords":["ink","draw","paint","signature","handwriting","text","drawing","painting"],"license":"MIT","module":"dist/perfect-freehand.esm.js","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","size":"size-limit","analyze":"size-limit --why"},"husky":{"hooks":{"pre-commit":"tsdx lint"}},"prettier":{"printWidth":80,"semi":false,"singleQuote":true,"trailingComma":"es5"},"size-limit":[{"path":"dist/perfect-freehand.cjs.production.min.js","limit":"10 KB"},{"path":"dist/perfect-freehand.esm.js","limit":"10 KB"}],"devDependencies":{"@size-limit/preset-small-lib":"^4.9.2","husky":"^5.0.9","size-limit":"^4.9.2","tsdx":"^0.14.1","tslib":"^2.1.0","typescript":"^4.1.5"},"peerDependencies":{},"dependencies":{},"gitHead":"b867fc892d0e54539e31bc6dcfb4c31af577f670","description":"Draw perfect pressure-sensitive freehand strokes.","bugs":{"url":"https://github.com/steveruizok/perfect-freehand/issues"},"homepage":"https://github.com/steveruizok/perfect-freehand#readme","_id":"perfect-freehand@0.3.5","_nodeVersion":"15.8.0","_npmVersion":"7.5.0","dist":{"shasum":"4204b4453dffc057edc9086996690c8d63ce9c99","size":19019,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-0.3.5.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-0.3.5.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_0.3.5_1615731296827_0.5810950237392414"},"_hasShrinkwrap":false,"publish_time":1615731296986,"_cnpm_publish_time":1615731296986,"_cnpmcore_publish_time":"2021-12-17T01:24:13.609Z"},"0.3.4":{"version":"0.3.4","name":"perfect-freehand","author":{"name":"Steve Ruiz","url":"https://twitter.com/steveruizok"},"repository":{"type":"git","url":"git+https://github.com/steveruizok/perfect-freehand.git"},"keywords":["ink","draw","paint","signature","handwriting","text","drawing","painting"],"license":"MIT","module":"dist/perfect-freehand.esm.js","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","size":"size-limit","analyze":"size-limit --why"},"husky":{"hooks":{"pre-commit":"tsdx lint"}},"prettier":{"printWidth":80,"semi":false,"singleQuote":true,"trailingComma":"es5"},"size-limit":[{"path":"dist/perfect-freehand.cjs.production.min.js","limit":"10 KB"},{"path":"dist/perfect-freehand.esm.js","limit":"10 KB"}],"devDependencies":{"@size-limit/preset-small-lib":"^4.9.2","husky":"^5.0.9","size-limit":"^4.9.2","tsdx":"^0.14.1","tslib":"^2.1.0","typescript":"^4.1.5"},"peerDependencies":{},"dependencies":{},"gitHead":"41fd8ef1f3098b92a8708e0c0ec210a0fb36fe7f","description":"Draw perfect pressure-sensitive freehand strokes.","bugs":{"url":"https://github.com/steveruizok/perfect-freehand/issues"},"homepage":"https://github.com/steveruizok/perfect-freehand#readme","_id":"perfect-freehand@0.3.4","_nodeVersion":"14.15.0","_npmVersion":"6.14.8","dist":{"shasum":"13a3740cf2fa52e0778f99b666fd64d19edf8ed0","size":19510,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-0.3.4.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-0.3.4.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_0.3.4_1615546482842_0.34208626949383847"},"_hasShrinkwrap":false,"publish_time":1615546483016,"_cnpm_publish_time":1615546483016,"_cnpmcore_publish_time":"2021-12-17T01:24:13.840Z"},"0.3.3":{"version":"0.3.3","name":"perfect-freehand","author":{"name":"Steve Ruiz","url":"https://twitter.com/steveruizok"},"repository":{"type":"git","url":"git+https://github.com/steveruizok/perfect-freehand.git"},"keywords":["ink","draw","paint","signature","handwriting","text","drawing","painting"],"license":"MIT","module":"dist/perfect-freehand.esm.js","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","size":"size-limit","analyze":"size-limit --why"},"husky":{"hooks":{"pre-commit":"tsdx lint"}},"prettier":{"printWidth":80,"semi":false,"singleQuote":true,"trailingComma":"es5"},"size-limit":[{"path":"dist/perfect-freehand.cjs.production.min.js","limit":"10 KB"},{"path":"dist/perfect-freehand.esm.js","limit":"10 KB"}],"devDependencies":{"@size-limit/preset-small-lib":"^4.9.2","husky":"^5.0.9","size-limit":"^4.9.2","tsdx":"^0.14.1","tslib":"^2.1.0","typescript":"^4.1.5"},"peerDependencies":{},"dependencies":{},"gitHead":"5361285a6e6b81a49c30c22d422df883d749fcce","description":"Perfect freehand is a library for generating freehand strokes.","bugs":{"url":"https://github.com/steveruizok/perfect-freehand/issues"},"homepage":"https://github.com/steveruizok/perfect-freehand#readme","_id":"perfect-freehand@0.3.3","_nodeVersion":"15.8.0","_npmVersion":"7.5.0","dist":{"shasum":"63c2f111db2e5a97fd2e0134697393c9b23a564e","size":19396,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-0.3.3.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-0.3.3.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_0.3.3_1615068011291_0.38465732865096536"},"_hasShrinkwrap":false,"publish_time":1615068011500,"_cnpm_publish_time":1615068011500,"_cnpmcore_publish_time":"2021-12-17T01:24:14.048Z"},"0.3.2":{"version":"0.3.2","name":"perfect-freehand","author":{"name":"Steve Ruiz","url":"https://twitter.com/steveruizok"},"repository":{"type":"git","url":"git+https://github.com/steveruizok/perfect-freehand.git"},"keywords":["ink","draw","paint","signature","handwriting","text","drawing","painting"],"license":"MIT","module":"dist/perfect-freehand.esm.js","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","size":"size-limit","analyze":"size-limit --why"},"husky":{"hooks":{"pre-commit":"tsdx lint"}},"prettier":{"printWidth":80,"semi":false,"singleQuote":true,"trailingComma":"es5"},"size-limit":[{"path":"dist/perfect-freehand.cjs.production.min.js","limit":"10 KB"},{"path":"dist/perfect-freehand.esm.js","limit":"10 KB"}],"devDependencies":{"@size-limit/preset-small-lib":"^4.9.2","husky":"^5.0.9","size-limit":"^4.9.2","tsdx":"^0.14.1","tslib":"^2.1.0","typescript":"^4.1.5"},"peerDependencies":{},"dependencies":{},"gitHead":"d2adb833e8228b7236ca5d560c49e4c9f00079e5","description":"Perfect freehand is a library for creating freehand paths by [@steveruizok](https://twitter.com/steveruizok).","bugs":{"url":"https://github.com/steveruizok/perfect-freehand/issues"},"homepage":"https://github.com/steveruizok/perfect-freehand#readme","_id":"perfect-freehand@0.3.2","_nodeVersion":"15.8.0","_npmVersion":"7.5.0","dist":{"shasum":"69399ae2b3d6eb8c35b9cc697fa9517b32f8ab84","size":19359,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-0.3.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-0.3.2.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_0.3.2_1614982357923_0.8911354813770191"},"_hasShrinkwrap":false,"publish_time":1614982358085,"_cnpm_publish_time":1614982358085,"_cnpmcore_publish_time":"2021-12-17T01:24:14.286Z"},"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","size":"size-limit","analyze":"size-limit --why"},"peerDependencies":{},"husky":{"hooks":{"pre-commit":"tsdx lint"}},"prettier":{"printWidth":80,"semi":false,"singleQuote":true,"trailingComma":"es5"},"name":"perfect-freehand","author":{"name":"Steve Ruiz"},"module":"dist/perfect-freehand.esm.js","size-limit":[{"path":"dist/perfect-freehand.cjs.production.min.js","limit":"10 KB"},{"path":"dist/perfect-freehand.esm.js","limit":"10 KB"}],"devDependencies":{"@size-limit/preset-small-lib":"^4.9.2","husky":"^5.0.9","size-limit":"^4.9.2","tsdx":"^0.14.1","tslib":"^2.1.0","typescript":"^4.1.5"},"dependencies":{},"gitHead":"247aeb99ec748d959a2563f9fb148f1728daa693","description":"Perfect freehand is a library for creating freehand paths by [@steveruizok](https://twitter.com/steveruizok).","_id":"perfect-freehand@0.3.1","_nodeVersion":"15.8.0","_npmVersion":"7.5.0","dist":{"shasum":"f37fc4bea0383688a88bfd9d286adce4b24c268e","size":19232,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-0.3.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-0.3.1.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_0.3.1_1614982182769_0.856332567722222"},"_hasShrinkwrap":false,"publish_time":1614982182925,"_cnpm_publish_time":1614982182925,"_cnpmcore_publish_time":"2021-12-17T01:24:14.506Z"},"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","size":"size-limit","analyze":"size-limit --why"},"peerDependencies":{},"husky":{"hooks":{"pre-commit":"tsdx lint"}},"prettier":{"printWidth":80,"semi":false,"singleQuote":true,"trailingComma":"es5"},"name":"perfect-freehand","author":{"name":"Steve Ruiz"},"module":"dist/perfect-freehand.esm.js","size-limit":[{"path":"dist/perfect-freehand.cjs.production.min.js","limit":"10 KB"},{"path":"dist/perfect-freehand.esm.js","limit":"10 KB"}],"devDependencies":{"@size-limit/preset-small-lib":"^4.9.2","husky":"^5.0.9","size-limit":"^4.9.2","tsdx":"^0.14.1","tslib":"^2.1.0","typescript":"^4.1.5"},"dependencies":{},"gitHead":"b1eaeaf0b063ec9a225e0a8ba00b595b46d62703","description":"Perfect freehand is a library for creating freehand paths by [@steveruizok](https://twitter.com/steveruizok).","_id":"perfect-freehand@0.3.0","_nodeVersion":"15.8.0","_npmVersion":"7.5.0","dist":{"shasum":"892624c83550ed2c71b5c9fbe67fc87b1b13ba8a","size":18851,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-0.3.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-0.3.0.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_0.3.0_1614864133204_0.6452768851709305"},"_hasShrinkwrap":false,"publish_time":1614864133378,"_cnpm_publish_time":1614864133378,"_cnpmcore_publish_time":"2021-12-17T01:24:14.758Z"},"0.2.5":{"version":"0.2.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","size":"size-limit","analyze":"size-limit --why"},"peerDependencies":{},"husky":{"hooks":{"pre-commit":"tsdx lint"}},"prettier":{"printWidth":80,"semi":false,"singleQuote":true,"trailingComma":"es5"},"name":"perfect-freehand","author":{"name":"Steve Ruiz"},"module":"dist/perfect-freehand.esm.js","size-limit":[{"path":"dist/perfect-freehand.cjs.production.min.js","limit":"10 KB"},{"path":"dist/perfect-freehand.esm.js","limit":"10 KB"}],"devDependencies":{"@size-limit/preset-small-lib":"^4.9.2","husky":"^5.0.9","size-limit":"^4.9.2","tsdx":"^0.14.1","tslib":"^2.1.0","typescript":"^4.1.5"},"dependencies":{"polygon-clipping":"^0.15.2"},"gitHead":"c2c372b96111f4cf88d1a6aab5df5ee9aa22f335","description":"Perfect freehand is a library for creating freehand paths by [@steveruizok](https://twitter.com/steveruizok).","_id":"perfect-freehand@0.2.5","_nodeVersion":"15.8.0","_npmVersion":"7.5.0","dist":{"shasum":"d497e48f62d5f956eaaab9ef4dd7213ec77e6b3a","size":21961,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-0.2.5.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-0.2.5.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_0.2.5_1614810281474_0.037682278469876485"},"_hasShrinkwrap":false,"publish_time":1614810281618,"_cnpm_publish_time":1614810281618,"_cnpmcore_publish_time":"2021-12-17T01:24:15.036Z"},"0.2.4":{"version":"0.2.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","size":"size-limit","analyze":"size-limit --why"},"peerDependencies":{},"husky":{"hooks":{"pre-commit":"tsdx lint"}},"prettier":{"printWidth":80,"semi":false,"singleQuote":true,"trailingComma":"es5"},"name":"perfect-freehand","author":{"name":"Steve Ruiz"},"module":"dist/perfect-freehand.esm.js","size-limit":[{"path":"dist/perfect-freehand.cjs.production.min.js","limit":"10 KB"},{"path":"dist/perfect-freehand.esm.js","limit":"10 KB"}],"devDependencies":{"@size-limit/preset-small-lib":"^4.9.2","husky":"^5.0.9","size-limit":"^4.9.2","tsdx":"^0.14.1","tslib":"^2.1.0","typescript":"^4.1.5"},"dependencies":{"polygon-clipping":"^0.15.2"},"gitHead":"8a3b85fcb368e467ce1ff9423852bf9ddf641ad9","description":"Perfect freehand is a library for creating freehand paths by [@steveruizok](https://twitter.com/steveruizok).","_id":"perfect-freehand@0.2.4","_nodeVersion":"15.8.0","_npmVersion":"7.5.0","dist":{"shasum":"bc460562e93fb1b8f9ddb173101681aea6094d84","size":20749,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-0.2.4.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-0.2.4.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_0.2.4_1614790042067_0.15225694903299813"},"_hasShrinkwrap":false,"publish_time":1614790042233,"_cnpm_publish_time":1614790042233,"_cnpmcore_publish_time":"2021-12-17T01:24:15.372Z"},"0.2.3":{"version":"0.2.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","size":"size-limit","analyze":"size-limit --why"},"peerDependencies":{},"husky":{"hooks":{"pre-commit":"tsdx lint"}},"prettier":{"printWidth":80,"semi":false,"singleQuote":true,"trailingComma":"es5"},"name":"perfect-freehand","author":{"name":"Steve Ruiz"},"module":"dist/perfect-freehand.esm.js","size-limit":[{"path":"dist/perfect-freehand.cjs.production.min.js","limit":"10 KB"},{"path":"dist/perfect-freehand.esm.js","limit":"10 KB"}],"devDependencies":{"@size-limit/preset-small-lib":"^4.9.2","husky":"^5.0.9","size-limit":"^4.9.2","tsdx":"^0.14.1","tslib":"^2.1.0","typescript":"^4.1.5"},"dependencies":{"polygon-clipping":"^0.15.2"},"gitHead":"6a1be78413b1eb206521a7bed4f3e9d213476d23","description":"Perfect freehand is a library for creating freehand paths by [@steveruizok](https://twitter.com/steveruizok).","_id":"perfect-freehand@0.2.3","_nodeVersion":"15.8.0","_npmVersion":"7.5.0","dist":{"shasum":"dc2edbabd81433f860f2a2f4f018f3480dda792f","size":15962,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-0.2.3.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-0.2.3.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_0.2.3_1613894793372_0.8584190538765479"},"_hasShrinkwrap":false,"publish_time":1613894793558,"_cnpm_publish_time":1613894793558,"_cnpmcore_publish_time":"2021-12-17T01:24:15.627Z"},"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","size":"size-limit","analyze":"size-limit --why"},"peerDependencies":{},"husky":{"hooks":{"pre-commit":"tsdx lint"}},"prettier":{"printWidth":80,"semi":false,"singleQuote":true,"trailingComma":"es5"},"name":"perfect-freehand","author":{"name":"Steve Ruiz"},"module":"dist/perfect-freehand.esm.js","size-limit":[{"path":"dist/perfect-freehand.cjs.production.min.js","limit":"10 KB"},{"path":"dist/perfect-freehand.esm.js","limit":"10 KB"}],"devDependencies":{"@size-limit/preset-small-lib":"^4.9.2","husky":"^5.0.9","size-limit":"^4.9.2","tsdx":"^0.14.1","tslib":"^2.1.0","typescript":"^4.1.5"},"dependencies":{"polygon-clipping":"^0.15.2"},"gitHead":"6a1be78413b1eb206521a7bed4f3e9d213476d23","description":"Perfect freehand is a library for creating freehand paths by [@steveruizok](https://twitter.com/steveruizok).","_id":"perfect-freehand@0.2.2","_nodeVersion":"15.8.0","_npmVersion":"7.5.0","dist":{"shasum":"9fb61fa85fbdb49ed9e74b347b4b6c0e226e0913","size":15756,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-0.2.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-0.2.2.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_0.2.2_1613893467141_0.19833126734188733"},"_hasShrinkwrap":false,"publish_time":1613893467276,"_cnpm_publish_time":1613893467276,"_cnpmcore_publish_time":"2021-12-17T01:24:15.893Z"},"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","size":"size-limit","analyze":"size-limit --why"},"peerDependencies":{},"husky":{"hooks":{"pre-commit":"tsdx lint"}},"prettier":{"printWidth":80,"semi":false,"singleQuote":true,"trailingComma":"es5"},"name":"perfect-freehand","author":{"name":"Steve Ruiz"},"module":"dist/perfect-freehand.esm.js","size-limit":[{"path":"dist/perfect-freehand.cjs.production.min.js","limit":"10 KB"},{"path":"dist/perfect-freehand.esm.js","limit":"10 KB"}],"devDependencies":{"@size-limit/preset-small-lib":"^4.9.2","husky":"^5.0.9","size-limit":"^4.9.2","tsdx":"^0.14.1","tslib":"^2.1.0","typescript":"^4.1.5"},"dependencies":{"polygon-clipping":"^0.15.2"},"gitHead":"6a1be78413b1eb206521a7bed4f3e9d213476d23","description":"Perfect freehand is a library for creating freehand paths by [@steveruizok](https://twitter.com/steveruizok).","_id":"perfect-freehand@0.2.1","_nodeVersion":"15.8.0","_npmVersion":"7.5.0","dist":{"shasum":"2350aeb7ea7d786846e0944b3817fd87f2c3acbe","size":15739,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-0.2.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-0.2.1.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_0.2.1_1613893345122_0.4254309146207871"},"_hasShrinkwrap":false,"publish_time":1613893345286,"_cnpm_publish_time":1613893345286,"_cnpmcore_publish_time":"2021-12-17T01:24:16.117Z"},"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","size":"size-limit","analyze":"size-limit --why"},"peerDependencies":{},"husky":{"hooks":{"pre-commit":"tsdx lint"}},"prettier":{"printWidth":80,"semi":false,"singleQuote":true,"trailingComma":"es5"},"name":"perfect-freehand","author":{"name":"Steve Ruiz"},"module":"dist/perfect-freehand.esm.js","size-limit":[{"path":"dist/perfect-freehand.cjs.production.min.js","limit":"10 KB"},{"path":"dist/perfect-freehand.esm.js","limit":"10 KB"}],"devDependencies":{"@size-limit/preset-small-lib":"^4.9.2","husky":"^5.0.9","size-limit":"^4.9.2","tsdx":"^0.14.1","tslib":"^2.1.0","typescript":"^4.1.5"},"dependencies":{"polygon-clipping":"^0.15.2"},"gitHead":"84b46bff88ce205c82fad2f4b9a174fe82a1e1e0","description":"Perfect freehand is a library for creating freehand paths by [@steveruizok](https://twitter.com/steveruizok).","_id":"perfect-freehand@0.2.0","_nodeVersion":"15.8.0","_npmVersion":"7.5.0","dist":{"shasum":"bb4f49173aca1a0d59e712770a81dd4366e55f31","size":15531,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-0.2.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-0.2.0.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_0.2.0_1613832504478_0.6395722711558853"},"_hasShrinkwrap":false,"publish_time":1613832504636,"_cnpm_publish_time":1613832504636,"_cnpmcore_publish_time":"2021-12-17T01:24:16.344Z"},"0.1.5":{"version":"0.1.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","size":"size-limit","analyze":"size-limit --why"},"peerDependencies":{},"husky":{"hooks":{"pre-commit":"tsdx lint"}},"prettier":{"printWidth":80,"semi":false,"singleQuote":true,"trailingComma":"es5"},"name":"perfect-freehand","author":{"name":"Steve Ruiz"},"module":"dist/perfect-freehand.esm.js","size-limit":[{"path":"dist/perfect-freehand.cjs.production.min.js","limit":"10 KB"},{"path":"dist/perfect-freehand.esm.js","limit":"10 KB"}],"devDependencies":{"@size-limit/preset-small-lib":"^4.9.2","husky":"^5.0.9","size-limit":"^4.9.2","tsdx":"^0.14.1","tslib":"^2.1.0","typescript":"^4.1.5"},"dependencies":{"polygon-clipping":"^0.15.2"},"gitHead":"17c3fcb5c3ea5830070d90dfd703afae4d61de6c","description":"Perfect freehand is a library for creating freehand paths by [@steveruizok](https://twitter.com/steveruizok).","_id":"perfect-freehand@0.1.5","_nodeVersion":"15.8.0","_npmVersion":"7.5.0","dist":{"shasum":"728523ac4b8c2024eb720e00ee9af775af9d7cda","size":15531,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-0.1.5.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-0.1.5.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_0.1.5_1613832216735_0.7993639974815188"},"_hasShrinkwrap":false,"publish_time":1613832216879,"_cnpm_publish_time":1613832216879,"_cnpmcore_publish_time":"2021-12-17T01:24:16.603Z"},"0.1.3":{"version":"0.1.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","size":"size-limit","analyze":"size-limit --why"},"peerDependencies":{},"husky":{"hooks":{"pre-commit":"tsdx lint"}},"prettier":{"printWidth":80,"semi":false,"singleQuote":true,"trailingComma":"es5"},"name":"perfect-freehand","author":{"name":"Steve Ruiz"},"module":"dist/perfect-freehand.esm.js","size-limit":[{"path":"dist/perfect-freehand.cjs.production.min.js","limit":"10 KB"},{"path":"dist/perfect-freehand.esm.js","limit":"10 KB"}],"devDependencies":{"@size-limit/preset-small-lib":"^4.9.2","husky":"^5.0.9","size-limit":"^4.9.2","tsdx":"^0.14.1","tslib":"^2.1.0","typescript":"^4.1.5"},"dependencies":{"polygon-clipping":"^0.15.2"},"gitHead":"c34a4d18b459786acff1ec31809f1f113c1ae0fc","description":"Perfect freehand is a library for creating freehand paths by [@steveruizok](https://twitter.com/steveruizok).","_id":"perfect-freehand@0.1.3","_nodeVersion":"15.8.0","_npmVersion":"7.5.0","dist":{"shasum":"456bf810bd005279489362cf34be2ef24023d5a7","size":12036,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-0.1.3.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-0.1.3.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_0.1.3_1613780095968_0.5580076760351806"},"_hasShrinkwrap":false,"publish_time":1613780096116,"_cnpm_publish_time":1613780096116,"_cnpmcore_publish_time":"2021-12-17T01:24:16.844Z"},"0.1.2":{"version":"0.1.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","size":"size-limit","analyze":"size-limit --why"},"peerDependencies":{},"husky":{"hooks":{"pre-commit":"tsdx lint"}},"prettier":{"printWidth":80,"semi":false,"singleQuote":true,"trailingComma":"es5"},"name":"perfect-freehand","author":{"name":"Steve Ruiz"},"module":"dist/perfect-freehand.esm.js","size-limit":[{"path":"dist/perfect-freehand.cjs.production.min.js","limit":"10 KB"},{"path":"dist/perfect-freehand.esm.js","limit":"10 KB"}],"devDependencies":{"@size-limit/preset-small-lib":"^4.9.2","husky":"^5.0.9","size-limit":"^4.9.2","tsdx":"^0.14.1","tslib":"^2.1.0","typescript":"^4.1.5"},"dependencies":{"polygon-clipping":"^0.15.2"},"gitHead":"c3563ae33effba1fb6421ff1d6a446a7c526a141","description":"Perfect freehand is a library for creating freehand paths by [@steveruizok](https://twitter.com/steveruizok).","_id":"perfect-freehand@0.1.2","_nodeVersion":"15.8.0","_npmVersion":"7.5.0","dist":{"shasum":"539c5e0524c339932e3c43be140cb322c429b793","size":12271,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-0.1.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-0.1.2.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_0.1.2_1613779834227_0.2955532376961316"},"_hasShrinkwrap":false,"publish_time":1613779834374,"_cnpm_publish_time":1613779834374,"_cnpmcore_publish_time":"2021-12-17T01:24:17.070Z"},"0.1.1":{"version":"0.1.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","size":"size-limit","analyze":"size-limit --why"},"peerDependencies":{},"husky":{"hooks":{"pre-commit":"tsdx lint"}},"prettier":{"printWidth":80,"semi":false,"singleQuote":true,"trailingComma":"es5"},"name":"perfect-freehand","author":{"name":"Steve Ruiz"},"module":"dist/perfect-freehand.esm.js","size-limit":[{"path":"dist/perfect-freehand.cjs.production.min.js","limit":"10 KB"},{"path":"dist/perfect-freehand.esm.js","limit":"10 KB"}],"devDependencies":{"@size-limit/preset-small-lib":"^4.9.2","husky":"^5.0.9","size-limit":"^4.9.2","tsdx":"^0.14.1","tslib":"^2.1.0","typescript":"^4.1.5"},"dependencies":{"polygon-clipping":"^0.15.2"},"gitHead":"041874ceba1980c425791968a038ceda35530253","description":"Perfect freehand is a library for creating freehand paths. By [@steveruizok](https://twitter.com/steveruizok).","_id":"perfect-freehand@0.1.1","_nodeVersion":"15.8.0","_npmVersion":"7.5.0","dist":{"shasum":"04f648a588c3f3939ebcebcad4bd459adb77f5fa","size":11969,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-0.1.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-0.1.1.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_0.1.1_1613777731307_0.3039371465209473"},"_hasShrinkwrap":false,"publish_time":1613777731461,"_cnpm_publish_time":1613777731461,"_cnpmcore_publish_time":"2021-12-17T01:24:17.640Z"},"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","size":"size-limit","analyze":"size-limit --why"},"peerDependencies":{},"husky":{"hooks":{"pre-commit":"tsdx lint"}},"prettier":{"printWidth":80,"semi":false,"singleQuote":true,"trailingComma":"es5"},"name":"perfect-freehand","author":{"name":"Steve Ruiz"},"module":"dist/perfect-freehand.esm.js","size-limit":[{"path":"dist/perfect-freehand.cjs.production.min.js","limit":"10 KB"},{"path":"dist/perfect-freehand.esm.js","limit":"10 KB"}],"devDependencies":{"@size-limit/preset-small-lib":"^4.9.2","husky":"^5.0.9","size-limit":"^4.9.2","tsdx":"^0.14.1","tslib":"^2.1.0","typescript":"^4.1.5"},"dependencies":{"polygon-clipping":"^0.15.2"},"gitHead":"d81a08a0f36260a833d47efa3d38dd93c0543271","description":"Perfect freehand is a library for creating freehand paths. By [@steveruizok](https://twitter.com/steveruizok).","_id":"perfect-freehand@0.1.0","_nodeVersion":"15.8.0","_npmVersion":"7.5.0","dist":{"shasum":"d5f3b97a3dbdeeb402f86ef0e52ec4106c7b4383","size":11885,"noattachment":false,"key":"/perfect-freehand/-/perfect-freehand-0.1.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/perfect-freehand/download/perfect-freehand-0.1.0.tgz"},"_npmUser":{"name":"steveruizok","email":"steveruizok@gmail.com"},"directories":{},"maintainers":[{"name":"steveruizok","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/perfect-freehand_0.1.0_1613775464848_0.020925488994395725"},"_hasShrinkwrap":false,"publish_time":1613775465011,"_cnpm_publish_time":1613775465011,"_cnpmcore_publish_time":"2021-12-17T01:24:17.874Z"}},"readme":"# ![Screenshot](assets/perfect-freehand-logo.svg 'Perfect Freehand')\n\nDraw perfect pressure-sensitive freehand lines.\n\n???? Curious? Try out a [demo](https://perfect-freehand-example.vercel.app/).\n\n???? Designer? Check out the [Figma Plugin](https://www.figma.com/community/plugin/950892731860805817).\n\n???? Flutterer? There's now a [dart version](https://pub.dev/packages/perfect_freehand) of this library, too.\n\n???? Love this library? Consider [becoming a sponsor](https://github.com/sponsors/steveruizok?frequency=recurring&sponsor=steveruizok).\n\n## Table of Contents\n\n- [Installation](#installation)\n- [Usage](#usage)\n- [Documentation](#documentation)\n- [Community](#community)\n- [Author](#author)\n\n## Installation\n\n```bash\nnpm install perfect-freehand\n```\n\nor\n\n```bash\nyarn add perfect-freehand\n```\n\n## Introduction\n\nThis package exports a function named `getStroke` that will generate the points for a polygon based on an array of points.\n\n![Screenshot](assets/process.gif 'A GIF showing a stroke with input points, outline points, and a curved path connecting these points')\n\nTo do this work, `getStroke` first creates a set of spline points (red) based on the input points (grey) and then creates outline points (blue). You can render the result any way you like, using whichever technology you prefer.\n\n[![Edit perfect-freehand-example](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/perfect-freehand-example-biwyi?fontsize=14&hidenavigation=1&theme=dark)\n\n## Usage\n\nTo use this library, import the `getStroke` function and pass it an array of **input points**, such as those recorded from a user's mouse movement. The `getStroke` function will return a new array of **outline points**. These outline points will form a polygon (called a \"stroke\") that surrounds the input points.\n\n```js\nimport { getStroke } from 'perfect-freehand'\n\nconst inputPoints = [\n  [0, 0],\n  [10, 5],\n  [20, 8],\n  // ...\n]\n\nconst outlinePoints = getStroke(inputPoints)\n```\n\nYou then can **render** your stroke points using your technology of choice. See the [Rendering](#rendering) section for examples in SVG and HTML Canvas.\n\nYou can **customize** the appearance of the stroke shape by passing `getStroke` a second parameter: an options object containing one or more options. See the [Options](#options) section for a full list of available options.\n\n```js\nconst stroke = getStroke(myPoints, {\n  size: 32,\n  thinning: 0.7,\n})\n```\n\nThe appearance of a stroke is effected by the **pressure** associated with each input point. By default, the `getStroke` function will simulate pressure based on the distance between input points.\n\nTo use **real pressure**, such as that from a pen or stylus, provide the pressure as the third number for each input point, and set the `simulatePressure` option to `false`.\n\n```js\nconst inputPoints = [\n  [0, 0, 0.5],\n  [10, 5, 0.7],\n  [20, 8, 0.8],\n  // ...\n]\n\nconst outlinePoints = getStroke(inputPoints, {\n  simulatePressure: false,\n})\n```\n\nIn addition to providing points as an array of arrays, you may also provide your points as an **array of objects** as show in the example below. In both cases, the value for pressure is optional (it will default to `.5`).\n\n```js\nconst inputPoints = [\n  { x: 0, y: 0, pressure: 0.5 },\n  { x: 10, y: 5, pressure: 0.7 },\n  { x: 20, y: 8, pressure: 0.8 },\n  // ...\n]\n\nconst outlinePoints = getStroke(inputPoints, {\n  simulatePressure: false,\n})\n```\n\n**Note:** Internally, the `getStroke` function will convert your object points to array points, which will have an effect on performance. If you're using this library ambitiously and want to format your points as objects, consider modifying this library's `getStrokeOutlinePoints` to use the object syntax instead (e.g. replacing all `[0]` with `.x`, `[1]` with `.y`, and `[2]` with `.pressure`).\n\n## Example\n\n```jsx\nimport * as React from 'react'\nimport { getStroke } from 'perfect-freehand'\nimport { getSvgPathFromStroke } from './utils'\n\nexport default function Example() {\n  const [points, setPoints] = React.useState([])\n\n  function handlePointerDown(e) {\n    e.target.setPointerCapture(e.pointerId)\n    setPoints([[e.pageX, e.pageY, e.pressure]])\n  }\n\n  function handlePointerMove(e) {\n    if (e.buttons !== 1) return\n    setPoints([...points, [e.pageX, e.pageY, e.pressure]])\n  }\n\n  const stroke = getStroke(points, {\n    size: 16,\n    thinning: 0.5,\n    smoothing: 0.5,\n    streamline: 0.5,\n  })\n\n  const pathData = getSvgPathFromStroke(stroke)\n\n  return (\n    <svg\n      onPointerDown={handlePointerDown}\n      onPointerMove={handlePointerMove}\n      style={{ touchAction: 'none' }}\n    >\n      {points && <path d={pathData} />}\n    </svg>\n  )\n}\n```\n\n> **Tip:** For implementations in Typescript, see the example project included in this repository.\n\n[![Edit perfect-freehand-example](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/perfect-freehand-example-biwyi?fontsize=14&hidenavigation=1&theme=dark)\n\n## Documentation\n\n### Options\n\nThe options object is optional, as are each of its properties.\n\n| Property           | Type     | Default | Description                                           |\n| ------------------ | -------- | ------- | ----------------------------------------------------- |\n| `size`             | number   | 8       | The base size (diameter) of the stroke.               |\n| `thinning`         | number   | .5      | The effect of pressure on the stroke's size.          |\n| `smoothing`        | number   | .5      | How much to soften the stroke's edges.                |\n| `streamline`       | number   | .5      | How much to streamline the stroke.                    |\n| `simulatePressure` | boolean  | true    | Whether to simulate pressure based on velocity.       |\n| `easing`           | function | t => t  | An easing function to apply to each point's pressure. |\n| `start`            | { }      |         | Tapering options for the start of the line.           |\n| `end`              | { }      |         | Tapering options for the end of the line.             |\n| `last`             | boolean  | true    | Whether the stroke is complete.                       |\n\n**Note:** When the `last` property is `true`, the line's end will be drawn at the last input point, rather than slightly behind it.\n\nThe `start` and `end` options accept an object:\n\n| Property | Type              | Default | Description                                                                              |\n| -------- | ----------------- | ------- | ---------------------------------------------------------------------------------------- |\n| `cap`    | boolean           | true    | Whether to draw a cap.                                                                   |\n| `taper`  | number or boolean | 0       | The distance to taper. If set to true, the taper will be the total length of the stroke. |\n| `easing` | function          | t => t  | An easing function for the tapering effect.                                              |\n\n**Note:** The `cap` property has no effect when `taper` is more than zero.\n\n```js\ngetStroke(myPoints, {\n  size: 8,\n  thinning: 0.5,\n  smoothing: 0.5,\n  streamline: 0.5,\n  easing: (t) => t,\n  simulatePressure: true,\n  last: true,\n  start: {\n    cap: true,\n    taper: 0,\n    easing: (t) => t,\n  },\n  end: {\n    cap: true,\n    taper: 0,\n    easing: (t) => t,\n  },\n})\n```\n\n> **Tip:** To create a stroke with a steady line, set the `thinning` option to `0`.\n\n> **Tip:** To create a stroke that gets thinner with pressure instead of thicker, use a negative number for the `thinning` option.\n\n### Other Exports\n\nFor advanced usage, the library also exports smaller functions that `getStroke` uses to generate its outline points.\n\n#### `getStrokePoints`\n\nA function that accepts an array of points (formatted either as `[x, y, pressure]` or `{ x: number, y: number, pressure: number}`) and (optionally) an options object. Returns a set of adjusted points as `{ point, pressure, vector, distance, runningLength }`. The path's total length will be the `runningLength` of the last point in the array.\n\n```js\nimport { getStrokePoints } from 'perfect-freehand'\nimport samplePoints from \"./samplePoints.json'\n\nconst strokePoints = getStrokePoints(samplePoints)\n```\n\n#### `getOutlinePoints`\n\nA function that accepts an array of points (formatted as `{ point, pressure, vector, distance, runningLength }`, i.e. the output of `getStrokePoints`) and (optionally) an options object, and returns an array of points (`[x, y]`) defining the outline of a pressure-sensitive stroke.\n\n```js\nimport { getStrokePoints, getOutlinePoints } from 'perfect-freehand'\nimport samplePoints from \"./samplePoints.json'\n\nconst strokePoints = getStrokePoints(samplePoints)\n\nconst outlinePoints = getOutlinePoints(strokePoints)\n```\n\n**Note:** Internally, the `getStroke` function passes the result of `getStrokePoints` to `getStrokeOutlinePoints`, just as shown in this example. This means that, in this example, the result of `myOutlinePoints` will be the same as if the `samplePoints` array had been passed to `getStroke`.\n\n#### `StrokeOptions`\n\nA TypeScript type for the options object. Useful if you're defining your options outside of the `getStroke` function.\n\n```ts\nimport { StrokeOptions, getStroke } from 'perfect-freehand'\n\nconst options: StrokeOptions = {\n  size: 16,\n}\n\nconst stroke = getStroke(options)\n```\n\n## Tips & Tricks\n\n### Freehand Anything\n\nWhile this library was designed for rendering the types of input points generated by the movement of a human hand, you can pass any set of points into the library's functions. For example, here's what you get when running [Feather Icons](https://feathericons.com/) through `getStroke`.\n\n![Icons](assets/icons.png)\n\n### Rendering\n\nWhile `getStroke` returns an array of points representing the outline of a stroke, it's up to you to decide how you will render these points.\n\nThe function below will turn the points returned by `getStroke` into SVG path data.\n\n```js\nconst average = (a, b) => (a + b) / 2\n\nfunction getSvgPathFromStroke(stroke) {\n  const len = points.length\n\n  if (!len) {\n    return ''\n  }\n\n  const first = points[0]\n  let result = `M${first[0].toFixed(3)},${first[1].toFixed(3)}Q`\n\n  for (let i = 0, max = len - 1; i < max; i++) {\n    const a = points[i]\n    const b = points[i + 1]\n    result += `${a[0].toFixed(3)},${a[1].toFixed(3)} ${average(\n      a[0],\n      b[0]\n    ).toFixed(3)},${average(a[1], b[1]).toFixed(3)} `\n  }\n\n  result += 'Z'\n\n  return result\n}\n```\n\nTo use this function, first run your input points through `getStroke`, then pass the result to `getSvgPathFromStroke`.\n\n```js\nconst outlinePoints = getStroke(inputPoints)\n\nconst pathData = getSvgPathFromStroke(outlinePoints)\n```\n\nYou could then pass this string of SVG path data either to an [SVG path](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/d) element:\n\n```jsx\n<path d={pathData} />\n```\n\nOr, if you are rendering with HTML Canvas, you can pass the string to a [`Path2D` constructor](https://developer.mozilla.org/en-US/docs/Web/API/Path2D/Path2D#using_svg_paths)).\n\n```js\nconst myPath = new Path2D(pathData)\n\nctx.fill(myPath)\n```\n\n### Flattening\n\nBy default, the polygon's paths include self-crossings. You may wish to remove these crossings and render a stroke as a \"flattened\" polygon. To do this, install the [`polygon-clipping`](https://github.com/mfogel/polygon-clipping) package and use the following function together with the `getSvgPathFromStroke`.\n\n```js\nimport polygonClipping from 'polygon-clipping'\n\nfunction getFlatSvgPathFromStroke(stroke) {\n  const faces = polygonClipping.union([stroke])\n\n  const d = []\n\n  faces.forEach((face) =>\n    face.forEach((points) => {\n      d.push(getSvgPathFromStroke(points))\n    })\n  )\n\n  return d.join(' ')\n}\n```\n\n## Development & Contributions\n\nTo work on this library:\n\n- clone this repo\n- run `yarn` in the folder root to install dependencies\n- run `yarn start` to start the local development server\n\nThe development server is located at `packages/dev`. The library and its tests are located at `packages/perfect-freehand`.\n\nPull requests are very welcome!\n\n## Community\n\n### Support\n\nNeed help? Please [open an issue](https://github.com/steveruizok/perfect-freehand/issues/new) for support.\n\n### Discussion\n\nHave an idea or casual question? Visit the [discussion page](https://github.com/steveruizok/perfect-freehand/discussions).\n\n### License\n\n- MIT\n- ...but if you're using `perfect-freehand` in a commercial product, consider [becoming a sponsor](https://github.com/sponsors/steveruizok?frequency=recurring&sponsor=steveruizok). ????\n\n## Author\n\n- [@steveruizok](https://twitter.com/steveruizok)\n","_attachments":{},"license":"MIT"}