{"_id":"@awcrotwell/motion","_rev":"20-13d854dd369e164fdc40ba580375a4f6","time":{"0.1.0":"2020-07-24T15:58:20.515Z","created":"2020-07-24T15:59:44.911Z","0.1.1":"2020-07-24T15:59:45.135Z","modified":"2022-04-04T16:49:44.838Z","0.1.2":"2020-07-24T16:17:31.959Z","0.1.3":"2020-07-24T16:18:05.149Z","0.1.4":"2020-07-25T22:45:55.928Z","0.1.5":"2020-07-25T22:53:54.907Z","0.1.6":"2020-07-25T23:32:56.312Z","0.1.7":"2020-07-26T15:27:47.712Z","0.1.8":"2020-07-26T15:38:50.636Z","0.1.9":"2020-08-16T21:29:57.142Z","0.1.10":"2020-08-16T21:33:20.479Z","0.1.11":"2020-08-16T21:43:24.642Z","0.1.12":"2020-08-19T19:19:29.269Z","0.1.13":"2020-09-08T21:28:54.066Z","0.1.14":"2020-09-08T21:37:02.255Z","0.1.15":"2020-09-09T15:13:09.765Z","0.1.16":"2020-09-09T15:18:52.895Z","0.2.0":"2020-09-09T15:36:31.468Z"},"name":"@awcrotwell/motion","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.1":{"name":"@awcrotwell/motion","version":"0.1.1","description":"Motion allows you to build reactive, real-time frontend UI components in your Amber application using pure Crystal that are reusable, testable & encapsulated. For brevity, we will call them MotionComponents.","main":"javascript/index.js","directories":{"lib":"javascript/**"},"dependencies":{"morphdom":"^2.6.1"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/andrewc910/motion.cr.git"},"keywords":["crystal","crystal-lang"],"author":{"name":"Andrew Crotwell"},"license":"MIT","bugs":{"url":"https://github.com/andrewc910/motion.cr/issues"},"homepage":"https://github.com/andrewc910/motion.cr#readme","gitHead":"487454f27e839e1e699112f19ad548ad2fb87430","_id":"@awcrotwell/motion@0.1.1","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-YmnwK78b16yUEL6vvtu6jG3fEVBVyADvUn+Pnsygbwmj3VMXnkfBcQZR7Z+isuUsx7l/p5i/SNsyY3p7tBHVZw==","shasum":"0061a878c73fee9c53e7744f82f0e1c30034c75c","tarball":"https://registry.npmjs.org/@awcrotwell/motion/-/motion-0.1.1.tgz","fileCount":17,"unpackedSize":36065,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfGwVxCRA9TVsSAnZWagAAv6cP/jwBkBPt280V0HOKbDS+\ndGeC7aPuF98Ipl8nMThPmgf76/p/MRBdB3SyB0sLoT7dGkygOKVBikEj70Mv\nABZU38FqlaMFk6sfMyvTz7wmeZtnVKIFH/PeQt1aDU7hqTWCh/4u/jWd/0u2\nR9HNPpifOLAZ5Q6pqeuyHvN+DQ1P/hIbtKRqs6UTBu7YsdzHbcQoAw3LET1u\nYhaya2xud5en878oX9ba5w3Cx4jqDNKDF0a4iRoggUD1HkVrwLLwQBpQti7a\nsjkXd4e5rX5XQXlI5rJgh8vZITelGl3R27VfxZHyGvc6OQwGUiCDKBjxz8jh\n/VDxMYwr2eJLkhgw0yVuxTZu++1Dv1a6K2vXWBJFJRFbXblPzioxNrLsVWXR\n/UUSP1KmN5grdefiFawD+dgDpc9rXMrX69re7hG6oOQFk4c4cYugbuvzZroJ\nXzdIMZthv0xcWrSGzl6bjWX89sroBCGRo8wEYbmTnlrzJdh6HpQSfDJVYc3u\nimL3+hzlgxe8l79oTqEbeHO2/LKOHF2YLeOndyaRzoF4satfEZN1kdBn4ra6\nnchk5Mye1ju2ZMStMpZ+GjbQGCUtdbJiZvswglrodEO9k5YbBGUGqdw20Ojc\nxrHoEUjSzQB94OwBgbKmzLwZlFq6rxn8/ZK3byFFklbt7Ajr+seQLxFRHrhu\n5jIa\r\n=T55w\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGCo6e9d8BXbQWYhZ44an74wYb/DrILb1pq/8DGeAh4lAiBkK3Aa6hVGzP8mn+Qp6bhebiO3crvHsVC5vEgvnRVnLw=="}]},"maintainers":[{"name":"awcrotwell","email":"awcrotwell@gmail.com"}],"_npmUser":{"name":"awcrotwell","email":"awcrotwell@gmail.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/motion_0.1.1_1595606384947_0.8342123705135938"},"_hasShrinkwrap":false},"0.1.2":{"name":"@awcrotwell/motion","version":"0.1.2","description":"Motion allows you to build reactive, real-time frontend UI components in your Amber application using pure Crystal that are reusable, testable & encapsulated. For brevity, we will call them MotionComponents.","main":"dist/index.js","types":"index.d.ts","prepublish":"tsc","directories":{"lib":"javascript/**"},"dependencies":{"morphdom":"^2.6.1"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/andrewc910/motion.cr.git"},"keywords":["crystal","crystal-lang"],"author":{"name":"Andrew Crotwell"},"license":"MIT","bugs":{"url":"https://github.com/andrewc910/motion.cr/issues"},"homepage":"https://github.com/andrewc910/motion.cr#readme","devDependencies":{"typescript":"^3.9.7"},"gitHead":"c9b26a0f400f6321449c7bafacf683f99082dacb","_id":"@awcrotwell/motion@0.1.2","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-Fv9tyfTtD+3MRS4AM/QwZ2RtaxdQi2v9jJbhdQE8MeY65i5hdygTlVXQSc56L/ADwVzYYgK2lsZ138elSgNSXg==","shasum":"bd8a36ac996d28ca409a5f5b996d0f9632f8ca05","tarball":"https://registry.npmjs.org/@awcrotwell/motion/-/motion-0.1.2.tgz","fileCount":32,"unpackedSize":51570,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfGwmcCRA9TVsSAnZWagAAmwIQAI39sIal8TCWdd3Qjzpt\nMLFPvL9ddor/w2Rt4tQ7oMSIvm9j7SQIbbObxFbvXTbW9xbNwoeIMadZY4no\nCbzz5nnteXZP+XJnoq5ltrQwGoD6WMw307r6RU6u1c0j6sPcch8PXFlRdXU8\nWhnIyqEyTytGea6MpC1d4oH6+A5gXQF+SLE++1b+WlMQ8fega0yleOYmNc7G\n/osPGBvYMbbZ/9KzJpdGvDX1LIdmulHdv/nufYMMLnB2t6V8FVpdML4vNpEE\nOfwaD8ELmaMeZcZPnREsqCI7zIxrj4mVzv6u7Sg9e+QlF6SKXibtBkfBou5j\n+BmsYyY0gkHI7BbFr3pbo/1wUPOb9V7HPh95tOoVMRxsb9siug6Dzp3OY6Fr\n7UeVCwPkXChluuGKiB2/TF8BH3m8zMT4PU8iXuMSQHV8uqr1EGAIlyeT/Qda\nqhQn/7VdcrdNTZZsYtwgtyo6JCQvAw+OrGEJ6uN27at1o+6LG4ndBqmdzbLG\nGjT42gmj9J2e6SYu8r+z0oOIVwh2RaeJ7/XUH1QUXjq8tnBre7ndIFOkl7Rc\nKXPBdYmp+isZK7Kmzn+TOAgcnnCO2imWWsNN16dUj2nHGrDYN0F7UOKc4MWM\n9DyzkyQRjFrXRvk7ZkNoZJ5oatGebTfaNbjZ3YSz/oA9wuQ5SueE8LzP20Ox\nv0sY\r\n=KNK8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDDrGbdeNWct+RcfTAL/2KmeHwCqPuNt8LHEThT4pFyoAiAoW0vWZdr25F4hMHQl6zz3SK3w6qt7dSkwnAS/pwvvoA=="}]},"maintainers":[{"name":"awcrotwell","email":"awcrotwell@gmail.com"}],"_npmUser":{"name":"awcrotwell","email":"awcrotwell@gmail.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/motion_0.1.2_1595607451820_0.28488323815491867"},"_hasShrinkwrap":false},"0.1.3":{"name":"@awcrotwell/motion","version":"0.1.3","description":"Motion allows you to build reactive, real-time frontend UI components in your Amber application using pure Crystal that are reusable, testable & encapsulated. For brevity, we will call them MotionComponents.","main":"dist/index.js","types":"index.d.ts","prepublish":"tsc","directories":{"lib":"javascript/**"},"dependencies":{"morphdom":"^2.6.1"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/andrewc910/motion.cr.git"},"keywords":["crystal","crystal-lang"],"author":{"name":"Andrew Crotwell"},"license":"MIT","bugs":{"url":"https://github.com/andrewc910/motion.cr/issues"},"homepage":"https://github.com/andrewc910/motion.cr#readme","devDependencies":{"typescript":"^3.9.7"},"gitHead":"c9b26a0f400f6321449c7bafacf683f99082dacb","_id":"@awcrotwell/motion@0.1.3","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-zG64kVbd7OUvBPTChvfAZOkGuiRmKWPlRvYt1mr/ziDloPibnLuBoPFxeMC4HpIQeyARqOuw+BZGoNKay/xHcQ==","shasum":"b2ebb5ae88961020fb695e0945a626545307621c","tarball":"https://registry.npmjs.org/@awcrotwell/motion/-/motion-0.1.3.tgz","fileCount":2,"unpackedSize":9873,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfGwm9CRA9TVsSAnZWagAAL8gP/ivyB3kR5oY2IqVcqOuB\ngIuQl+XcZD782LNa977G21GDJFQAxvawL5V2ulouDHO2HzO/4hJWFmwko6bL\nHP0AhdPBVdK6fFEjGBWxvTgtkwv6qwVnf40e/dfMOkDL2nhM4YDB/QNQSZaJ\nT1FBndcDHnusPs5CwVjJ7cwCk+a32YXGXeuOrQkJLZIVTWC5W0sSkwaXLNHD\nSIPK4RCG4DjstuX1EthnW8JaB64Hzzikq4Stm7TSYDGwPa0cBsgH71Y9gY+k\n4LA2lpDF/ASF/2U5uTgDRFpUjM4WX2uygyP1Y6Ox/0wA+ntwg0Dv6kTdk3HP\nJo1P6Cz3yjmVF+z894OPkOrjSyW+cqOucF7K4tpsNWpONUNgPD/XKWaGc61r\n3ZxiQqINnpJUvMHQFmTkGY9csTrS+8BJgMMfyI8ck+ZnuS/iPvd36kejx2iX\nwWLynRB6gJQwnlTRw/WaRcoph/R9ZTBeey6JjTgOnxh7rUTyyOocm/BJMQ/g\nTRVC4jySYQ1FnXr9XP9YWw/m85rqjB6ekGZMy1w7AP1n1eJC7TXs51TJ55Oy\ngxcDlmbmMuJgs2AtPuOUnU5NkwVklT1xllKq9W4OU9l4Obghxlu4/piR521C\nNSa5CP8ALAILrVY7bw3nrlJY5kdjXDe6glU0+3qpPdx2nRzK+/lO1nunNAce\nDeHL\r\n=xaff\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDCYC8H1cTBHP6EbZUKs5Oubyz02sDipkv13KmXg36TsgIhAO5RKVHHSBVV4tyT2TQ20fiIXIBP4jFU/GfO+gpkPI5N"}]},"maintainers":[{"name":"awcrotwell","email":"awcrotwell@gmail.com"}],"_npmUser":{"name":"awcrotwell","email":"awcrotwell@gmail.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/motion_0.1.3_1595607485027_0.018604908709197066"},"_hasShrinkwrap":false},"0.1.4":{"name":"@awcrotwell/motion","version":"0.1.4","description":"Motion allows you to build reactive, real-time frontend UI components in your Amber application using pure Crystal that are reusable, testable & encapsulated. For brevity, we will call them MotionComponents.","main":"dist/index.js","types":"index.d.ts","directories":{"lib":"javascript/**"},"dependencies":{"morphdom":"^2.6.1"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/andrewc910/motion.cr.git"},"keywords":["crystal","crystal-lang"],"author":{"name":"Andrew Crotwell"},"license":"MIT","bugs":{"url":"https://github.com/andrewc910/motion.cr/issues"},"homepage":"https://github.com/andrewc910/motion.cr#readme","devDependencies":{"@typescript-eslint/eslint-plugin":"^3.7.0","@typescript-eslint/parser":"^3.7.0","eslint":"^7.5.0","eslint-config-airbnb-base":"^14.2.0","eslint-plugin-import":"^2.22.0","typescript":"^3.9.7"},"gitHead":"935ccdc820ba63ea70dae29e94e4cc85f11d6fd4","_id":"@awcrotwell/motion@0.1.4","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-YL/ZKZnZ155LlMkoXHARSSdxYsloeCWzhQkF8DGdgxHKcGkgXMz89mB+Vw8adIdma0DQ3D14ln8ZmVU4enceIQ==","shasum":"944e7b6ad17cfb8b5a8122c2b3e5d7ad5c6327b1","tarball":"https://registry.npmjs.org/@awcrotwell/motion/-/motion-0.1.4.tgz","fileCount":27,"unpackedSize":42423,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfHLYkCRA9TVsSAnZWagAApW4QAKBPLrnlv4kLTv4jM+nq\nRDZ7wlpB9EboVtD2XKMsBXa9kqAwTlp9/Fx6joPfs1ZLKuAt9oGnsV1jyN22\nLuG0xwunvLRu440cjyYVGG1ydizHkHcEcxPh/ks5Au0lPrPy6ht0bD7e1Cpy\nVoFxOR1N1ecr1EDyoLZmBDFf+aE/hbWXonlX2IE0RoBCxApIVdFylrk2oDMf\nM5wsbODMbblwPaGZgh0fCi+7lbhbYBhGSwcaMzxfPSl4VwZD/o/wZrAUbhp3\nnEtzoSqGnWXdKaU+FSjfYrWk9cGU8uXwaQH3dF1PWjJNy/MummvfdzecBrk6\nJIUyeqUj7pOzbaBvL1hBQyiJ2fcvFILlT1A0LqMGM5VcQGFfkNUErObjkBK3\ndRMgAsjS5lzH2HQ3RaKAfb//UEJyqayHUhN/DPdpv5rIUwcbi219Gwh0AnVH\nsLQJlCFZJH8J4MfIYhATCNGpwJbwOT04/WiKpuk+Za79PZhzgg5GPC/ntVfq\nZ05yBObgkZfetj/hluur44jPIqQU1vo0EyzjsXNTlBIXHXAEpiwGPw+o93QT\nAjHGNMlVhVwo855JIfF0WrZqOgdhVikSs1JwLrYMa0uYhq+z8i310ulnfcVl\nzkchEZZN1t2KrXQrw31pH3Z/l4PKtCcU43uDDLPxXl/uYErUjl0E5c5RNa5Y\nBH5+\r\n=MGgO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDwJlMNtopwAIWC+Csv2f6HR0NajfecLT+V3480hRHsTQIhAJmlOaE9wHH4CZ2mrWy6Z38mOu1tngzPtFi0TXbYn1dA"}]},"maintainers":[{"name":"awcrotwell","email":"awcrotwell@gmail.com"}],"_npmUser":{"name":"awcrotwell","email":"awcrotwell@gmail.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/motion_0.1.4_1595717155653_0.131988046914854"},"_hasShrinkwrap":false},"0.1.5":{"name":"@awcrotwell/motion","version":"0.1.5","description":"Motion allows you to build reactive, real-time frontend UI components in your Amber application using pure Crystal that are reusable, testable & encapsulated. For brevity, we will call them MotionComponents.","main":"dist/index.js","types":"index.d.ts","directories":{"lib":"javascript/**"},"dependencies":{"morphdom":"^2.6.1"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/andrewc910/motion.cr.git"},"keywords":["crystal","crystal-lang"],"author":{"name":"Andrew Crotwell"},"license":"MIT","bugs":{"url":"https://github.com/andrewc910/motion.cr/issues"},"homepage":"https://github.com/andrewc910/motion.cr#readme","devDependencies":{"@typescript-eslint/eslint-plugin":"^3.7.0","@typescript-eslint/parser":"^3.7.0","eslint":"^7.5.0","eslint-config-airbnb-base":"^14.2.0","eslint-plugin-import":"^2.22.0","typescript":"^3.9.7"},"gitHead":"935ccdc820ba63ea70dae29e94e4cc85f11d6fd4","_id":"@awcrotwell/motion@0.1.5","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-ytAblEvS5ry49d2/rBjzPY9FliRLMiwdL1fZPgaO6xK6n9kGvl4ToiED+e6vIA7Au5ODlKzcYSKr2qdFszaFyQ==","shasum":"a2e4f82acffc361726e1cd1d99bbd1029237489c","tarball":"https://registry.npmjs.org/@awcrotwell/motion/-/motion-0.1.5.tgz","fileCount":27,"unpackedSize":42488,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfHLgDCRA9TVsSAnZWagAANZEP/AkjeS7Ny7KHaGXso2S+\ndvDwy4NfX3oT/9HSt3r/j03hmstsdaJKzngee1EyJDBSaHcw4FicZygQ6rUf\n0wXE2CyJm37KFPDkGnISmSFN3e9YJ44CeNlj124kV4yb/1RmJ/6MsDoQ+8OS\nLIrceQWZfkPMx32wY8AdJDeWy2AvTYIpZqvAZykOkInk5MwBFeE6pg+0gLKH\nbiJbcNGAJ1fget2dbrXCRhRm1HyFoueXg1jgonp7yjry+Hp9V92oJQI8mDs6\nhhSx0rBroVHEv7bYWmvlFWefqD+ssZIbmakguXib+012vygbgf/in8LbCOeT\nr5zf3HDgnBdHcalVRt1YRj85mlADO4dUYVjSfG22txSjaZz+TFDKIao2fACC\nBQRLasaBV8GCS/QJCFc48sant8ubDVdBHwcZll2CwOTFpVb8iErJeFhydZSE\nmMkFtp1smxfH4V4F4f7Puhz4UMbNpGMnd36gjZhj5v1RFdvIN+8vlcYtL3UQ\nc+Jt66N95yf/VaJqj0sA1I8BB1453YixgW7jApuIunQZsANMrKysE4/Nxktf\nt77E7Gb8sI7XhhST3c+JGqoDA4eE61Ff28KKke3OpAkDVsZ90pTE/ayXxSyp\nL3XEpmjHCEMy1yn/Tvcmvy0xulcc4uUKqaiI0HAvqPuRidfVSRqGgAbyiwYh\nM7MA\r\n=GWs0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGuwjqF2kXtdIUo+8j8zkDJVffVNSnhifa4fBFmYELh6AiEAu8XvDh13lgP/y71Mc06sJWX4MfBWXb29fNi/oPWISzA="}]},"maintainers":[{"name":"awcrotwell","email":"awcrotwell@gmail.com"}],"_npmUser":{"name":"awcrotwell","email":"awcrotwell@gmail.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/motion_0.1.5_1595717634709_0.8051053110526489"},"_hasShrinkwrap":false},"0.1.6":{"name":"@awcrotwell/motion","version":"0.1.6","description":"Motion allows you to build reactive, real-time frontend UI components in your Amber application using pure Crystal that are reusable, testable & encapsulated. For brevity, we will call them MotionComponents.","main":"dist/index.js","types":"index.d.ts","directories":{"lib":"javascript/**"},"dependencies":{"morphdom":"^2.6.1"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/andrewc910/motion.cr.git"},"keywords":["crystal","crystal-lang"],"author":{"name":"Andrew Crotwell"},"license":"MIT","bugs":{"url":"https://github.com/andrewc910/motion.cr/issues"},"homepage":"https://github.com/andrewc910/motion.cr#readme","devDependencies":{"@typescript-eslint/eslint-plugin":"^3.7.0","@typescript-eslint/parser":"^3.7.0","eslint":"^7.5.0","eslint-config-airbnb-base":"^14.2.0","eslint-plugin-import":"^2.22.0","typescript":"^3.9.7"},"gitHead":"4253140d936eaee2cd6a0249646981aa18540f64","_id":"@awcrotwell/motion@0.1.6","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-juveIysHFhKW+Ercf9JEMkpahpwxLSeyXwskXPGstg92mRVcrqBE6pi/v/3JJeQQ3+lo4SSrucQOvxhsuzl59Q==","shasum":"3292bb68c5575477d64b0d5b30d3bc054d10e9b3","tarball":"https://registry.npmjs.org/@awcrotwell/motion/-/motion-0.1.6.tgz","fileCount":28,"unpackedSize":41321,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfHMEoCRA9TVsSAnZWagAAC9UP/R7VlRDMJrtjf4KDxXwp\n+FNed2DTkI37kl3pl+xCNZpaiBq4J2jJIVNmXS8qt/RRJfjVNP+jrNVj4r2i\nbaeYzu0dHPFDpxwNDGD/8WGWdWAbcPioQFPP9S9sfg6UxW9bSgbGIh42DDtj\navFvue2WjFGHnCDBxInEAdt4LjineE8jrSvgdfbRs678jgYhkzZjMGDuyLyc\nAFkVxB4gvkF5j0ZOMZQuVpuDvW16I/pb+THTbMCpkFDyqrNjZSna3fe1L0sU\nVuYr0lgcr0LKg6K2pwyHjW9NGvqP47WCD7I1hJK7GdRH1Tx+crAm90O1LRSd\n5+AJcduf5x7HKjXNcmT+EtWK/MhDR6kOUKZEAUA8lqkaTEm/i1gVsDaAbgcZ\nX9ve/lCIgUAkRaaUGQwnzV12wTWhKENfEv0FfQVsPSIeI0HLRtJVb37npQ2D\nb8OWIXCm0E2l+Af0X2B0ZoEjM29OeBfxg6VPAQE+UFNFUINgsCHS5MyNaW+6\n67XTOF49wSPuXwZzzDQyR6M+IRBMjNdwvvI2SmWI+vG3u5hJc7I9/g88r/fQ\nV4LO1JDo9b8h5CCLCYB8SaRZzTN4VqWPlrWPr2RVLP3mxp6KrgVUGT7nz6my\nl3e4bcNQ+eUjXSMz02XAgVoqjvgZgvSBJ0l97BHcjHqM3FM4cwJm/5034YXW\nu+mn\r\n=rR70\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCv37uwhS/5FZb4KAoy9eUIwH8cHOVSSt1YqIOy2qaWFQIgXr411sEsgfzXetMX4H4U/dM0MNNXJUTNAUgfWp/+qFM="}]},"maintainers":[{"name":"awcrotwell","email":"awcrotwell@gmail.com"}],"_npmUser":{"name":"awcrotwell","email":"awcrotwell@gmail.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/motion_0.1.6_1595719976198_0.7036035678609966"},"_hasShrinkwrap":false},"0.1.7":{"name":"@awcrotwell/motion","version":"0.1.7","description":"Motion allows you to build reactive, real-time frontend UI components in your Amber application using pure Crystal that are reusable, testable & encapsulated. For brevity, we will call them MotionComponents.","main":"dist/index.js","types":"index.d.ts","directories":{"lib":"javascript/**"},"dependencies":{"morphdom":"^2.6.1"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/andrewc910/motion.cr.git"},"keywords":["crystal","crystal-lang"],"author":{"name":"Andrew Crotwell"},"license":"MIT","bugs":{"url":"https://github.com/andrewc910/motion.cr/issues"},"homepage":"https://github.com/andrewc910/motion.cr#readme","devDependencies":{"@typescript-eslint/eslint-plugin":"^3.7.0","@typescript-eslint/parser":"^3.7.0","eslint":"^7.5.0","eslint-config-airbnb-base":"^14.2.0","eslint-plugin-import":"^2.22.0","typescript":"^3.9.7"},"gitHead":"f72910a2258f4a68bad0aca4b11967bd932ed56e","_id":"@awcrotwell/motion@0.1.7","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-FiICclIvqligFm3YY6w+PHgKFHtf+uumYUcRcaO3aWPWolWvndcBxKqjgvRUr7q8HTiaIIhgpCrZEy/WmOhOpQ==","shasum":"ebb72b3acb9f3e163a953b0665100c0c01cb9867","tarball":"https://registry.npmjs.org/@awcrotwell/motion/-/motion-0.1.7.tgz","fileCount":28,"unpackedSize":42056,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfHaD0CRA9TVsSAnZWagAAyOwP/3F2Z72KqD15EyVyT+90\n2E46WOW6HXO4LG+3HGopz6R6LVdyw1hqYhfTijSGnREfJjWKWvFTYtqduDDY\n7z/ym0EJQ6jG9RhzV1WjwdaVjTXj5GUUZdyusAYhrUxKhkoOhPd0kR8S/ME4\nPbe1s02dplk4azLqFaCIAoNQDUqIMIRVK04K+/OXOvDcqEukQo4Edh9p/sZ7\nSRlqpufIxVBHwL0XN8gywrgt71sbXnn71aeSA6HJ/yOKb0LPAZTCXGiryG4t\nzwOLQ3S2MlHNgWo1TxjJwHVknMdYroEnzBTkPrpQc5PxZQ77P8D8PMfoVHNk\nizwbTTT+dHOHiQnxlS2H/MepPwaH3ijhzW7uO8E8uSIBy6UhwCtOctXEbWt6\n2vIxsF+rKr+PCecM+aiLsjMkygF8czr/x2cG5OQUI7BLEcKpIp1c9JysXap1\nmjhMB3fqcH4IDQOh0eKrOD9d0TfsA+RuHCJAO6VgxLJEyKXsGYJEwPkn93IY\nTp6JOlpkbYuc11isbPYkk58Kblp3qQvVZzzVuYS9nuuKrZzZpm/9S05CyAMn\nZjo7m94eTV8k5HbAbATxLs8tYwJh4Q3KL19G6coogVhJeWDoRY12oB1eoTjk\n833xfYUqm2VxnHcAcPRKv4Y0mouaG9GOcRIF9L+Zb8CrOMHMngKNy+eSMFAo\nzMGb\r\n=xEkX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCBdVAxX/AloBCOt7QACbouwhcQAL6tOsUb2l+Sltz5CwIhALCjSylnES+FHUqXOKMpyncfMQ3gHXW5C9I3qEQihjEE"}]},"maintainers":[{"name":"awcrotwell","email":"awcrotwell@gmail.com"}],"_npmUser":{"name":"awcrotwell","email":"awcrotwell@gmail.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/motion_0.1.7_1595777267616_0.6331216894365306"},"_hasShrinkwrap":false},"0.1.8":{"name":"@awcrotwell/motion","version":"0.1.8","description":"Motion allows you to build reactive, real-time frontend UI components in your Amber application using pure Crystal that are reusable, testable & encapsulated. For brevity, we will call them MotionComponents.","main":"dist/index.js","types":"index.d.ts","directories":{"lib":"javascript/**"},"dependencies":{"morphdom":"^2.6.1"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/andrewc910/motion.cr.git"},"keywords":["crystal","crystal-lang"],"author":{"name":"Andrew Crotwell"},"license":"MIT","bugs":{"url":"https://github.com/andrewc910/motion.cr/issues"},"homepage":"https://github.com/andrewc910/motion.cr#readme","devDependencies":{"@typescript-eslint/eslint-plugin":"^3.7.0","@typescript-eslint/parser":"^3.7.0","eslint":"^7.5.0","eslint-config-airbnb-base":"^14.2.0","eslint-plugin-import":"^2.22.0","typescript":"^3.9.7"},"gitHead":"f72910a2258f4a68bad0aca4b11967bd932ed56e","_id":"@awcrotwell/motion@0.1.8","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-YiFMEni3uPPDvWSMoLLH6VfLqQdU9t2zRvs5VlXU3Bc8qfJwbV4Zeob7OjU5eIDVtSPrbHV4axOrPAT63JdifA==","shasum":"784935029338873d2c25f8d630f3a7d77162c81c","tarball":"https://registry.npmjs.org/@awcrotwell/motion/-/motion-0.1.8.tgz","fileCount":30,"unpackedSize":42433,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfHaOKCRA9TVsSAnZWagAAaMcQAJu/HyrChvzCazuyccbt\nPTjAS4yD7RLCGsq0Qug6/RJk6ZtPH22S5hgwm4E7hVRs8a7oJJggkSSmriit\n9EL8cq7GcLvIDoshdQ6nRPpCBPnyrt81HoLpTDRV+LgZTvCYyiQMTzl3Oocj\nGBwlGiiQ7SZXdJ1oFjy8JyyzGPqmv43yg881P2/UQet8+WqszTOcQsdeZaUt\nh5yuZrGdKl5ssAXFAV/+CqEcL//1aN7GJ7khf38g/14FM3mP/DxU8B8OXzoY\nO2zzZ/5ZaAurUBgFv8SJOipyy6wb/K3lboxhVxssgW6zeRvYJLiz2f9ZKwan\nkE4Uy45eLvYupdi4hSej30ngsA7zPuluZdBXHpt/hhzf7qsatvuXJH5ncyJx\nJcpL9TQt/ouesgEbSf62st8dgvHEULRzwsbCS9jOdN8liDF1aLjxeiYf78GP\nmbDOFZcZPs55B/4dslEdIndKFATKFbRSxunjey320HQo6cNtIxH4SfmVN6S2\nDrzX2EQPfN1VRx4ybVOy2u7EZfqTlWdJe1ry3uWVUtRwgvt30YA1rGv/azTR\n9mOMwkPKjuiyX3p+yG/vqG3r0qLPQKvc0T0P54ZoM+lRZG9A9wTKst6HyoEL\n/wWpJCywe8f2JMYQfC2ynkImILWy5CGvYoODMYB3BiMsVJABB0oAOih+gRSZ\n/VFf\r\n=/UAx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAOEWLCekuziIv0+GSLFXnjSxGoD+mc7sfP8E7USAqVlAiEA4TZEUzVRAWUH9w58lOJOmFMftvS+UAB6VV6SHamGpSw="}]},"maintainers":[{"name":"awcrotwell","email":"awcrotwell@gmail.com"}],"_npmUser":{"name":"awcrotwell","email":"awcrotwell@gmail.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/motion_0.1.8_1595777930486_0.8337559756596316"},"_hasShrinkwrap":false},"0.1.9":{"name":"@awcrotwell/motion","version":"0.1.9","description":"Motion allows you to build reactive, real-time frontend UI components in your Amber application using pure Crystal that are reusable, testable & encapsulated. For brevity, we will call them MotionComponents.","main":"dist/index.js","types":"index.d.ts","directories":{"lib":"javascript/**"},"dependencies":{"morphdom":"^2.6.1"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/andrewc910/motion.cr.git"},"keywords":["crystal","crystal-lang"],"author":{"name":"Andrew Crotwell"},"license":"MIT","bugs":{"url":"https://github.com/andrewc910/motion.cr/issues"},"homepage":"https://github.com/andrewc910/motion.cr#readme","devDependencies":{"@typescript-eslint/eslint-plugin":"^3.7.0","@typescript-eslint/parser":"^3.7.0","eslint":"^7.5.0","eslint-config-airbnb-base":"^14.2.0","eslint-plugin-import":"^2.22.0","typescript":"^3.9.7"},"gitHead":"e5c552d88bd9b4fab07013449270ba3ab18237d4","_id":"@awcrotwell/motion@0.1.9","_nodeVersion":"14.8.0","_npmVersion":"6.14.7","dist":{"integrity":"sha512-tq7iW8ztQtohs067tVgAA1iw+disN/uWrV2n27U/lfYTHmCba/HmFpkihLKB6T7ugmmOLxZEcR8KVy3npQ34qA==","shasum":"68a3a85b7191946f309f48f0430132b6f7fbf85f","tarball":"https://registry.npmjs.org/@awcrotwell/motion/-/motion-0.1.9.tgz","fileCount":30,"unpackedSize":42840,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfOaVVCRA9TVsSAnZWagAA1XQP/iGCM0SboP2hpiQt3QsV\nifqtYTmFxzJ8Jd55mQujQWXeqXSNumDVo8AyClCBG/ebKRwjYAPBpamcUMLv\ntYcVVDjVDvvJBbFuayTqQ54qGyuMNFpfwgNOjUnsTqvslsCu/pODFHouwpoO\n1uiZVJ4cpu6Ecnf+SSi0XC2M6Y8mUDiyznsgZvEy7cIVZTCQqBxzh4+cqtJx\nCtOsxgNphQoa2BdAXlajxA1QoGFcSnuWkQXxol5BdvO+0+IHt+zMDvm6NBFl\nTsZQ5OttAmk1JKgsNDHMRVUTFvvNz0Sydx0HF48Q/JiXXU/Gkyi7HJ8Sey5x\n84gRCxSzYH87rfZVjME6+iraUN6p/6TtMtPhf5znAojvfrb9W2pbAEDeKjXR\neLti5ZQppzkbji5dNQdoVijJYenYZ5MDDRVItYVwSciGT/kYDGkUdy0fOOOu\niZbVdVJp0dM2jAdwG4ctjV28XkqJg5ysKzlTzWr+t7cqfTPSUBTvbkB8Ur9a\nqCxqL6hje6NZlY92Igs4VZtqvk0FDznhGOcaxSacDew2VEa4IA7LpIBpSyxO\nxkeeE4s1EkQi0SLM/HBYwYeZnaFZ+STuM/BwDgDmSJH/T3AUmG1+/JuAfksk\ndduZHzSB5xRbGJRpmCdad5MAjSuObLjrbdtaOkHIWfJcHYWobXEHtlFmdtVI\nKBUM\r\n=lkdo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDgR5n2tTgquGosnDyIVhpUdZOrIZQHefZSYuWhKNQHygIgOo4ULGPS+RlVeB8crKGuzms8hMvxAS0grE+gYXqj4lE="}]},"maintainers":[{"name":"awcrotwell","email":"awcrotwell@gmail.com"}],"_npmUser":{"name":"awcrotwell","email":"awcrotwell@gmail.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/motion_0.1.9_1597613397014_0.8568108618249144"},"_hasShrinkwrap":false},"0.1.10":{"name":"@awcrotwell/motion","version":"0.1.10","description":"Motion allows you to build reactive, real-time frontend UI components in your Amber application using pure Crystal that are reusable, testable & encapsulated. For brevity, we will call them MotionComponents.","main":"dist/index.js","types":"index.d.ts","directories":{"lib":"javascript/**"},"dependencies":{"morphdom":"^2.6.1"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/andrewc910/motion.cr.git"},"keywords":["crystal","crystal-lang"],"author":{"name":"Andrew Crotwell"},"license":"MIT","bugs":{"url":"https://github.com/andrewc910/motion.cr/issues"},"homepage":"https://github.com/andrewc910/motion.cr#readme","devDependencies":{"@typescript-eslint/eslint-plugin":"^3.7.0","@typescript-eslint/parser":"^3.7.0","eslint":"^7.5.0","eslint-config-airbnb-base":"^14.2.0","eslint-plugin-import":"^2.22.0","typescript":"^3.9.7"},"gitHead":"e5c552d88bd9b4fab07013449270ba3ab18237d4","_id":"@awcrotwell/motion@0.1.10","_nodeVersion":"14.8.0","_npmVersion":"6.14.7","dist":{"integrity":"sha512-mtBIxSqxRvl0jMCDOOXxsDPSTAXprzQoGiLFWGiGU4CEO1mGE62IIa71ZyPGAEa4NGMGClVRzMDkGpVLDJGvYw==","shasum":"d8f7c2b3495c1cc06e64a0df04b1c2465cd76eb2","tarball":"https://registry.npmjs.org/@awcrotwell/motion/-/motion-0.1.10.tgz","fileCount":32,"unpackedSize":54269,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfOaYgCRA9TVsSAnZWagAA5u8P/0qIYJ7bk9QpoV00tknN\ndlhZlWLJpMUzWjyCsM5y4IXR1D+gbc3BSWNjt9auLBVtmril/cWGpZcnAuoF\n8fIrGcswt4u/AeUv1Q+9zqdbsTDROV+1xBCd69y2ejp1EtzlRplxQtXTQRZv\npVvcpBbqTR1Q4ZXiV7FR78prugFyV3h5os1duFT2nugnDRNIr7U+21cm97yY\nS7Eb5TabSAc8Wzz9izvUhA0aiPQDoJiReV0VTAprp7mFbhE/tkDaHQgppsrb\n/6B/K5PypS8TDS9RSBkMQT/0na5CdaBCe9F6S1YF2ABDI8+QoWu88DH/MUdo\n3/d3pTdN2y51zY/++vssd4LHQ7Lhh1NIZQLtFIXsdgFbXR1svBYxuxP7pin/\ns59ipB93lwdthoXcV+7aZktXt/LrbrzAlDxpWo95ZJKeLs0f4FD4Rhi2zZfc\nZCC1uh9D/bgueX+hnBcSKrXYakkBg2dI4edm9J3UP6LG9C6Np9UVtK6pvOn1\nHqPABYCqImPXYBYcgTyPB8/zhHwa4yh/FsjzSA5LcaNKX1PE3xh02AxDo7T2\npcAzYPioRJIWb58vHXeIXqBmsqRRpqqxdn9lgESVZmlyuRK44ogphmbN5s/a\nfsW4/Z9vL4Yg6/dYzTT0VZnuWmoJzDV7x7BB2TMp+BIX6RedtZfu6OzalcKR\nRxIB\r\n=2LLI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCipa2ncQGVlJR9vH1jWTl7oaAu4+kRJzvz+A6p0ix9NQIgMKArKqSfinWJLUBt0daWa4wKyjrFB5XFFWfizGVtqYo="}]},"maintainers":[{"name":"awcrotwell","email":"awcrotwell@gmail.com"}],"_npmUser":{"name":"awcrotwell","email":"awcrotwell@gmail.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/motion_0.1.10_1597613600372_0.09766699313795435"},"_hasShrinkwrap":false},"0.1.11":{"name":"@awcrotwell/motion","version":"0.1.11","description":"Motion allows you to build reactive, real-time frontend UI components in your Amber application using pure Crystal that are reusable, testable & encapsulated. For brevity, we will call them MotionComponents.","main":"dist/index.js","types":"index.d.ts","directories":{"lib":"javascript/**"},"dependencies":{"morphdom":"^2.6.1"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/andrewc910/motion.cr.git"},"keywords":["crystal","crystal-lang"],"author":{"name":"Andrew Crotwell"},"license":"MIT","bugs":{"url":"https://github.com/andrewc910/motion.cr/issues"},"homepage":"https://github.com/andrewc910/motion.cr#readme","devDependencies":{"@typescript-eslint/eslint-plugin":"^3.7.0","@typescript-eslint/parser":"^3.7.0","eslint":"^7.5.0","eslint-config-airbnb-base":"^14.2.0","eslint-plugin-import":"^2.22.0","typescript":"^3.9.7"},"gitHead":"e5c552d88bd9b4fab07013449270ba3ab18237d4","_id":"@awcrotwell/motion@0.1.11","_nodeVersion":"14.8.0","_npmVersion":"6.14.7","dist":{"integrity":"sha512-DyMPvw59e7ArUNiMy5iCoQSnrYVTR7LBJmleKJIcpSp6FP06sXjVktK5P059Yj+IpSSI9RLlgeHuGVxyogfR1g==","shasum":"14a3f5b18032aaa1c17d52895548c87c44c285e8","tarball":"https://registry.npmjs.org/@awcrotwell/motion/-/motion-0.1.11.tgz","fileCount":31,"unpackedSize":53620,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfOah9CRA9TVsSAnZWagAAt/EP/RMJhQhoJgp0Jdqz3SCy\nUlEeCnAAVnTSEYfdXCPJjq2J4lsLcnVf31mZBGs9U6SFsUvFQgDiu4wFruhj\n9+5885Sb3lCwxzRp4a31qOdo8N4fVsZN8G3WI2xHBwhNrPTjCp7NJWre4ky/\n61VIDepLSR6fGgQwxEbmXbolPkg4yiA5g8Wfv+DiBGM3hSM9jH3g/HMXJMmz\nBDFMIheb/awk5BCySK8nZDNLrviXex5Zio8w+Utv054T5v4/D0EUTtxU47FP\n+7ye3bKSPkF/oPC6Fx34c9p3eeX173geGCXOjcKeb0of4Pdcglh0se6vwitO\ntuQ5WqCKyG3sAXLJCyJHp7+8c6FMOSkGJsfdXxpYPsW1rhWye1Kw0tqBA52l\npnQH9qqMPX4MwFUOxifnrg9KWdEk4i/34MIlaDp79pI7QNWXjJWqxNt4wndc\nihkQFe7D6ZK+vM82y+kg9zIF0fYC8xZuBvywYlODHTpr7m3hjppmUfgTekEB\nfN4Gv5yW5zeSM3gRpFWAseltw+r9J362n+nwQBlRPcpBFz2XKgdyqSWYK/Y0\n4kf1pfKFuJ2DzD6aJjwPmeMINAdOI9lZ1B1X21aZNUzHe/UtWl0j3S4t9UEP\n7QscfL+C8ZRzKo32rWXGg0n8NKz7Iw158LXr6YsjRmLk7dQwpFtZOHZme4kw\nNI8X\r\n=QLFu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID9vv8A0XbGlDbQMSOkBHdAjqJriI8fgpIO/LO8qlrMsAiEAur9jFhdOSk20p35hzl4nSQNxsDb7wDy5VmQNAM1Nnrc="}]},"maintainers":[{"name":"awcrotwell","email":"awcrotwell@gmail.com"}],"_npmUser":{"name":"awcrotwell","email":"awcrotwell@gmail.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/motion_0.1.11_1597614204508_0.2914931494823836"},"_hasShrinkwrap":false},"0.1.12":{"name":"@awcrotwell/motion","version":"0.1.12","description":"Motion allows you to build reactive, real-time frontend UI components in your Amber application using pure Crystal that are reusable, testable & encapsulated. For brevity, we will call them MotionComponents.","main":"dist/index.js","types":"index.d.ts","directories":{"lib":"javascript/**"},"dependencies":{"morphdom":"^2.6.1"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/andrewc910/motion.cr.git"},"keywords":["crystal","crystal-lang"],"author":{"name":"Andrew Crotwell"},"license":"MIT","bugs":{"url":"https://github.com/andrewc910/motion.cr/issues"},"homepage":"https://github.com/andrewc910/motion.cr#readme","devDependencies":{"@typescript-eslint/eslint-plugin":"^3.7.0","@typescript-eslint/parser":"^3.7.0","eslint":"^7.5.0","eslint-config-airbnb-base":"^14.2.0","eslint-plugin-import":"^2.22.0","typescript":"^3.9.7"},"gitHead":"063eac819957169e9f9ab85d6754dc8ff3fe58e9","_id":"@awcrotwell/motion@0.1.12","_nodeVersion":"14.8.0","_npmVersion":"6.14.7","dist":{"integrity":"sha512-0FYQq9k2FSOEeWLYlJDUFA7G6A+l3XpM0mHZZgf2GbALxqhBKiYelL+g3yhrjSN9qZOierzWPK/lyLXrQh5R7w==","shasum":"f23282ee26808323692e76c4be32935f884b2019","tarball":"https://registry.npmjs.org/@awcrotwell/motion/-/motion-0.1.12.tgz","fileCount":31,"unpackedSize":53627,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfPXtBCRA9TVsSAnZWagAASEIQAJh10zW2q4X9D+fKDUiW\nEbVGIqGcvu/S76AMWjYn3Qh5pTH7aKxPoSQ9WGpyt9E8qPQJGID6XTbdFFAQ\nRnGduhrG8R4pXIWf2uYI047rJ7KJcuwkPqp+uOoliE5AqpmaQA9qif0JIS+U\nUMrZ9t3UvFfVtKSJPmAHqTFFXRkzoE7A9b2JSjQYXveX+7h4TCaHVI9NTY4R\nfpe+1rr4LTsQJkgnXE/lCiuSAaMUlpxILkCIqgfrLI4J3Kz10cXPBAsO5WSf\nOKYKvnJtyTl85fL457G8OR5f9Hh8b8NC0+rP976/JhE3x+n09otwPy4EqfIL\nYSvDaBVr5oVC/Pg+8QlS/8zq0hZmgwRgrQ0Elz9RPGJa9dYnASCux5U0lTwv\nKhjjmvzKIvU1oqudOGsNEjkWFrQ2OcWGtH3y84C7hv2rHbsVqpyfL57wIrGB\nL/ftNEAuOi+siS9Xr/O1+0vk9dtEL7+OhNZB+kjSTZt1kXa0MIXTN96mwpWq\nNEeOgU5FVbOnn5zA9gTqUf8eOTiALOnpH5l2lvu1U7Y4SkRjFMiO+fK1ETNE\ngn9oyBHb5tlFqCC7dWbITHqjOncUQ5X9iOn586V15R3e5z/fRfQG0rjCx1Co\nrYQSEFDVgeTWUWPzUeCcGLzzX4rh3Qko9jqU9bdMM0BfiCR9J0qzEMah4uCm\nrd/q\r\n=WTAI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDxXHM2MdeAq6RjEFt2hiq0O48SASdvNISls8pJNsfqegIgRX1qtQg3zmrVdFVsZPVF+FS1h+7ZjXMmbga028m5h7w="}]},"maintainers":[{"name":"awcrotwell","email":"awcrotwell@gmail.com"}],"_npmUser":{"name":"awcrotwell","email":"awcrotwell@gmail.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/motion_0.1.12_1597864769116_0.9015082784741282"},"_hasShrinkwrap":false},"0.1.13":{"name":"@awcrotwell/motion","version":"0.1.13","description":"Motion allows you to build reactive, real-time frontend UI components in your Amber application using pure Crystal that are reusable, testable & encapsulated. For brevity, we will call them MotionComponents.","main":"dist/index.js","types":"index.d.ts","directories":{"lib":"javascript/**"},"dependencies":{"morphdom":"^2.6.1"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/andrewc910/motion.cr.git"},"keywords":["crystal","crystal-lang"],"author":{"name":"Andrew Crotwell"},"license":"MIT","bugs":{"url":"https://github.com/andrewc910/motion.cr/issues"},"homepage":"https://github.com/andrewc910/motion.cr#readme","devDependencies":{"@typescript-eslint/eslint-plugin":"^3.7.0","@typescript-eslint/parser":"^3.7.0","eslint":"^7.5.0","eslint-config-airbnb-base":"^14.2.0","eslint-config-prettier":"^6.11.0","eslint-plugin-import":"^2.22.0","prettier":"2.1.1","typescript":"^3.9.7"},"gitHead":"f1e67ea7819efa9fefe9d451a9abd791d48894ef","_id":"@awcrotwell/motion@0.1.13","_nodeVersion":"14.9.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-oj5wojBpgbKeZa+A/Ul0HhGyoKmsZT0PNHsXUS4RU0F4v3G8zc5wHCjiFDCajFUVvMJBFfX7jWJomDpIN9y1Lg==","shasum":"f2c617a306f9904e42d53fc542860ae6cd3e8848","tarball":"https://registry.npmjs.org/@awcrotwell/motion/-/motion-0.1.13.tgz","fileCount":48,"unpackedSize":75394,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfV/eWCRA9TVsSAnZWagAA7O0QAIUmt608T2bESayPZIGE\nGsXIFvMJVrSmRbjP6fe6+jq+G0wGTa74tntmJqEgMRApnD/IShgxcr0/NhhC\nTEmBaNSoQskbXC/RbpXT1Qlp64kpFnNYO5lQMfvz4k+oHUNkCn1YI952rSKQ\n7i+0fWI/DfdihGGzIjsJKXfELBLowvZGU/EtOcMgbKkJadqAidBqBaz4d4U2\nPo18EwXSkE9pRnjB1Df7ulGPxPo8RhO/7RG7mKOAcV3YPh5JdkvzLN6egSRs\n8S9sDkNCxrykq4RLQnD4C46gfOGB8JBRprzYXr6Ydkpf3ZPLwyL6JkqokNDg\nBp7Z4ltX/3gu1c0KnSgL6OIcTs6Ah2DYHwf5yku9h9sViFIR9BYAY1yzf9BQ\nG+kMd8lB6hB4dpH6O+XE1IhVMJlCMw7G4eSCGaVo3A7my4GI+Zdt5L4hPpWu\nTORtoavKYLmm0SVyNevtny5ZkasEO9wOfdJxm5tl3BU6DarT8bUzZgRd+zi1\nvRKHh5j0KpuD+XtzNHCwJ2VB3gJbmmC6UoJmr98x7nLr/3YKruotPRfE5D5x\npBoM1L2kGTd5uocw2JvOg6Ut4z8zjN2pa9MrLR7JvPYZzOdsg9PFg9Csusip\nuTSax7LrPhe4aDwqkKNnqKQ26dUHwybyrxv22xNMgJDTGlhkzWsFimaLZRHK\nvq7I\r\n=MErn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICd3WF6wa/UOnNRJaHfxJeriBxaX9bmW3YXImnb1aVi9AiB0yViuLo/l9kFURgGlr4t2U7BTb04SrDL5us6uLvgppQ=="}]},"maintainers":[{"name":"awcrotwell","email":"awcrotwell@gmail.com"}],"_npmUser":{"name":"awcrotwell","email":"awcrotwell@gmail.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/motion_0.1.13_1599600533912_0.19025340003722557"},"_hasShrinkwrap":false},"0.1.14":{"name":"@awcrotwell/motion","version":"0.1.14","description":"Motion allows you to build reactive, real-time frontend UI components in your Amber application using pure Crystal that are reusable, testable & encapsulated. For brevity, we will call them MotionComponents.","main":"dist/index.js","types":"index.d.ts","directories":{"lib":"javascript/**"},"dependencies":{"morphdom":"^2.6.1"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/andrewc910/motion.cr.git"},"keywords":["crystal","crystal-lang"],"author":{"name":"Andrew Crotwell"},"license":"MIT","bugs":{"url":"https://github.com/andrewc910/motion.cr/issues"},"homepage":"https://github.com/andrewc910/motion.cr#readme","devDependencies":{"@typescript-eslint/eslint-plugin":"^3.7.0","@typescript-eslint/parser":"^3.7.0","eslint":"^7.5.0","eslint-config-airbnb-base":"^14.2.0","eslint-config-prettier":"^6.11.0","eslint-plugin-import":"^2.22.0","prettier":"2.1.1","typescript":"^3.9.7"},"gitHead":"f1e67ea7819efa9fefe9d451a9abd791d48894ef","_id":"@awcrotwell/motion@0.1.14","_nodeVersion":"14.9.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-SlwD21dBt9AVqT560SVKDs3uIvcxR3DC0SvwHacvSUJ3B/Lysr7j7EhFyJmZUXf6eqav/VGsAYjZlfhnkzIj0w==","shasum":"69961583fb01fecb84e897b786df3e72bcd160e9","tarball":"https://registry.npmjs.org/@awcrotwell/motion/-/motion-0.1.14.tgz","fileCount":48,"unpackedSize":75440,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfV/l+CRA9TVsSAnZWagAAlUcP/RpSuC9JVq3ffyyyEK1D\ngDE/zLJfRTJMpOZjvzvanrECgWbOGe+7iJmD4thyvtL9TBbRAl4VWsGLJD7J\nBdfiFMyf48dcFBaTCMpnX08GnE4X7dmc7LJqBbz4NJ+WWYyVheUnIQrTRCG+\n5akAladNt1jildkau5UvO/7mwPzOskWWQS3935ogErs3qDkEn8BI2x62WQzZ\nszWR5yRvTin/C/7pe2SuT+BYrvw2jzvTxampo2+QrxBAsTn/PXMxvYSnFl7f\n7SFA8rm5fPyHmoy6k24Ge3b8C2j7V7InXYaxTTuaK2PIdzjnkygTDamI7jf8\nNzDS7d/QFg/oEMzCR/XbwBq9QeW/9Z2ZQ5H6KOaIsHLke2zWs44ItphOmGLR\nHG48MKojaR7kf7AtFhcF53VkrRyU50OrgBIZ5HOq7HoNiOrKstoPm4KI+Fl8\nKxkBpYqwH2w/Dd43wvRRN6ohORKWL/w8gsZV/oz6D/ZGleuFVCHGOarqKiq3\nQRKxXhd11YMu+cTxWhLkZnnPo1qhwxH8Fc8bN3q94tYSdTTwQksBmOvqKCr4\naRPbR52xbd069Gwq1GX242yGrTzyTt9tFqpKapDdp/HzA6o+FPWr1p81wcsn\nPoxqUzgmoQbx69drHP5fV6nFFyRN9ZgbymdknZQgAdkAnw4S35dpgXBaZXCj\nTzsi\r\n=nOoN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGtbFNYI8U2nBWBLoKHRZ6umDKEtgg1eg8Cw5q7UIlc3AiAXKx9SXZ40ueEfGd32U0X0ebwbkrKdBGDZ5hogBxjxOg=="}]},"maintainers":[{"name":"awcrotwell","email":"awcrotwell@gmail.com"}],"_npmUser":{"name":"awcrotwell","email":"awcrotwell@gmail.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/motion_0.1.14_1599601022035_0.8124101645299948"},"_hasShrinkwrap":false},"0.1.15":{"name":"@awcrotwell/motion","version":"0.1.15","description":"Motion allows you to build reactive, real-time frontend UI components in your Amber application using pure Crystal that are reusable, testable & encapsulated. For brevity, we will call them MotionComponents.","main":"dist/index.js","types":"index.d.ts","directories":{"lib":"javascript/**"},"dependencies":{"morphdom":"^2.6.1"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/andrewc910/motion.cr.git"},"keywords":["crystal","crystal-lang"],"author":{"name":"Andrew Crotwell"},"license":"MIT","bugs":{"url":"https://github.com/andrewc910/motion.cr/issues"},"homepage":"https://github.com/andrewc910/motion.cr#readme","devDependencies":{"@typescript-eslint/eslint-plugin":"^3.7.0","@typescript-eslint/parser":"^3.7.0","eslint":"^7.5.0","eslint-config-airbnb-base":"^14.2.0","eslint-config-prettier":"^6.11.0","eslint-plugin-import":"^2.22.0","prettier":"2.1.1","typescript":"^3.9.7"},"gitHead":"b1a67c2f8004507e1971113fbf5c28c91230a4c2","_id":"@awcrotwell/motion@0.1.15","_nodeVersion":"14.9.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-STL6KjeJtYTpwVHreNdFhd11QVZCPvgv5ZLxN74Ydj0czbd5GuRhxyyiMYcdnIwKOoN0GfB078M4uNRWMgbu+A==","shasum":"a0289ff0d487d5a78f88677eda7d6d5221c78818","tarball":"https://registry.npmjs.org/@awcrotwell/motion/-/motion-0.1.15.tgz","fileCount":48,"unpackedSize":76059,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfWPEGCRA9TVsSAnZWagAAE1wQAJRacTt0K7tXoTPEwyjF\n+njY8Xcq6+It9JJzcS/QcMhXdbKluszFuoDZm9kXQRz90V5vguyRCukmVaYk\noXFgw0JDi+FAyec1SfPenWOzR+vWSqxfZdgQgKZUk1ay6OcBtMevZXDek5H7\nMybChGnG09fehWO4dpwRXVmRG7quhIFjWmlLhSgt3nv/nJRFoQbbpofxphVM\n7oLtu1LkCSz7dsqi+zehy0UG+RHngLHmdfe0xwwOMU2gb7ObZKq/4Ph49XLT\nBPj/Qxa7QcsnVVVFENKyU1Fx8gIEjcfcQ6qI1Rsb4+2Yn81qwzlaj2474ErW\ndbW+72+Ipw9HGa5MwzQiQbL2UQkaIaEFuJGwGTaqSYcmojnAK6GhhtjY2g7l\nQ8yW0AQNJQY7c2JdxRLhwamoYZnrt/DEpp0YoATRl2N5qQGKL9SlHPMu2Bdi\n0uPOrJKSNwmriZwsqrh9mD+BcOsg7wYLklE8qjf8Koz4wUFeHyZJc4xHnp49\n1mxGf1UYA0SeTTkZZq4G3p2z6yauGXuseRqDhFNHq9IUsNlHIHdWclJJ3GW5\n6fbAF0dLLBuvYtmQJKKnLl8A5Wv1+ZaV/8pDaMTYaAZkpHlmEffKpXGEhUoK\nMbD8P8B8dxJitEFyogDe67nRHvTxv2E45RYMD/UlX4ooPnVTegBzy+1yZ8L9\nmil4\r\n=YMAU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHTwf0o/0WYRAglU3DiHMmforK/Pfj9L45AgofidbaMjAiBvUKC8c/BhzPG6HxcCJVMAJpfiCE/6KQV4vE1P6vznRg=="}]},"maintainers":[{"name":"awcrotwell","email":"awcrotwell@gmail.com"}],"_npmUser":{"name":"awcrotwell","email":"awcrotwell@gmail.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/motion_0.1.15_1599664389642_0.12493844941069332"},"_hasShrinkwrap":false},"0.1.16":{"name":"@awcrotwell/motion","version":"0.1.16","description":"Motion allows you to build reactive, real-time frontend UI components in your Amber application using pure Crystal that are reusable, testable & encapsulated. For brevity, we will call them MotionComponents.","main":"dist/index.js","types":"index.d.ts","directories":{"lib":"javascript/**"},"dependencies":{"morphdom":"^2.6.1"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/andrewc910/motion.cr.git"},"keywords":["crystal","crystal-lang"],"author":{"name":"Andrew Crotwell"},"license":"MIT","bugs":{"url":"https://github.com/andrewc910/motion.cr/issues"},"homepage":"https://github.com/andrewc910/motion.cr#readme","devDependencies":{"@typescript-eslint/eslint-plugin":"^3.7.0","@typescript-eslint/parser":"^3.7.0","eslint":"^7.5.0","eslint-config-airbnb-base":"^14.2.0","eslint-config-prettier":"^6.11.0","eslint-plugin-import":"^2.22.0","prettier":"2.1.1","typescript":"^3.9.7"},"gitHead":"b1a67c2f8004507e1971113fbf5c28c91230a4c2","_id":"@awcrotwell/motion@0.1.16","_nodeVersion":"14.9.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-WKS0Dkrcr/2yA8AelGTs8CLzMVKHiMeAWFgtJi8XSuAQaw3HxOYCxN1BC0cQN5LldTefpgZyFtVyGjLE+neA7A==","shasum":"f69c63fe772770109fdbd0bd3b353fc4f51e4873","tarball":"https://registry.npmjs.org/@awcrotwell/motion/-/motion-0.1.16.tgz","fileCount":48,"unpackedSize":76089,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfWPJdCRA9TVsSAnZWagAAn98P/jEcmwc2j295SpG6pEbQ\nPjrROnPzN7oLgjWoqHL0q0J3cIAPvpp+RkvhYK3m99DRLEfyc190GoQMtPG9\ntN8pFrPJP6sPLeYNx8wU9TD7IrufJiftx8ECipX2o4MuGCsqSd+tKb9YklX1\nMJhDZ8voyA0pBbUMPFo1oWPjMnNP1OC+aHe/vamgULN6mUYdU8mpqGarvbli\n5a0WzXMl8vT+jmWBktBuFfOG2+AFYadSYBPrm50ISEd3vcy+IIm7lbeBex8S\n5yZsgKacGPkWQuLhkQ1vurZrr891LYag114BNdlcQfB1oKBkK/Kae82CDc/C\nhwPPgIEkCqQskQ6pN/0SZrrcUzVw5gaRZi8vIq9MVnso7ojgUqUXmqsq0E4r\nksyezJbIB1TZXgiATOCXa7DEZnLQ6Lr7x8Hgy1rtJLE4aG0M2KiobRr6o23V\nMTtZXrwAbCGKnKn/n5TIEfHdLRPcl3qrvWHqQ+vkAPinbsCBWoZ5gnfKqGun\nYYt/Zem/lInTO7GVM39Q8O0Z0+I2tQ+DT2x8uyct2hbITodiIZtUue4yWV75\nh0eCY4j7JDSywM2SlIitjcyV4jwhxTkELB9uyrRIPjsN0eTzX648McZDnjY0\nTnxpBk89NVjkDOkpo/6RSbLb5DgO+Qk+jDf1u0tqxAWsWgE+NTelv3t/YYBF\nDqGZ\r\n=NfNK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICyLO/1PftdGSoKOeM70KAAHmu6ydDlw3vYlPh9fgbiHAiEAzLqFh7/wq/KjMuLy0I/V+FWtaloJ3mdo7hZvol0/yh4="}]},"maintainers":[{"name":"awcrotwell","email":"awcrotwell@gmail.com"}],"_npmUser":{"name":"awcrotwell","email":"awcrotwell@gmail.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/motion_0.1.16_1599664732768_0.798934187075176"},"_hasShrinkwrap":false},"0.2.0":{"name":"@awcrotwell/motion","version":"0.2.0","description":"Motion allows you to build reactive, real-time frontend UI components in your Amber application using pure Crystal that are reusable, testable & encapsulated. For brevity, we will call them MotionComponents.","main":"dist/index.js","types":"index.d.ts","directories":{"lib":"javascript/**"},"dependencies":{"morphdom":"^2.6.1"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/andrewc910/motion.cr.git"},"keywords":["crystal","crystal-lang"],"author":{"name":"Andrew Crotwell"},"license":"MIT","bugs":{"url":"https://github.com/andrewc910/motion.cr/issues"},"homepage":"https://github.com/andrewc910/motion.cr#readme","devDependencies":{"@typescript-eslint/eslint-plugin":"^3.7.0","@typescript-eslint/parser":"^3.7.0","eslint":"^7.5.0","eslint-config-airbnb-base":"^14.2.0","eslint-config-prettier":"^6.11.0","eslint-plugin-import":"^2.22.0","prettier":"2.1.1","typescript":"^3.9.7"},"gitHead":"2eddf3fb477db7baee8bb912bf68c2ccddd31499","_id":"@awcrotwell/motion@0.2.0","_nodeVersion":"14.9.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-C4FH1p2WCfmTgAHiXkHgmWxtTBy0kl/9La8kXWVYAWlUXkwDNx2JDwJ8gOaW8jLrXZMMf1h8hFOxCm3fMyMnmg==","shasum":"16ec17d0743db04937148005694cb2a3cbc8a81f","tarball":"https://registry.npmjs.org/@awcrotwell/motion/-/motion-0.2.0.tgz","fileCount":48,"unpackedSize":76088,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfWPZ/CRA9TVsSAnZWagAAOKgP/0geVNsyKjIaNaeUMMyG\nuGBMWujQqcA5cl8T9G76g9uWMs5fkjUE/yd1WDw/vaqDpnkexzX7lpKvZK/4\n1sjBe/L0qf8qwzLE60qjqknQOEvFILmTMcwH0femmBHTOxvgus8P3wkC2kKs\nAHTri3zPZLsT4FjXBulX5uVRnZ65/5zUi6JrkIZlHns3JFjpQsJMgkcZyX5z\nA4vssq3ZvkS7kYGcVOxkrPi7b3QRhRULe8w/1sOqZ4ReXNUA4SKoOhxueR3b\ni/Bx1OqLnih84wKoNOx4/K+yUiTdkKWGq3pNJvK3F80mnvIgIrL2mAjNIDbA\n57nKxhMgFGOHU+b8u7WMo8gEQKB08aTM5C3M3w5zUzMN2hEP3KljKt/u7+/x\nGVKGIxMk2WmpSDVF/TUAKPmgt4/SnJfLzcjBD4lPWBPeaLfn14I+CHUOZgmU\nS6YJ2xUmqFftD6pG0QCs0v80cFFmjViEsuIqi/PHBwfTiH+z3alTyai4EwZ1\nnPR2hWLGfkFPwbIIH0t8yY5GUfOxFxMoO0+jH7CErv3JRLwwKSjRR6q6Hxkf\n1yoQsBkqRrGQfgPsw7BPwrHf5Tf2K3ZUktBerdASP7wcx73HbP2Y0sIGJ6VY\nZoIZdwgVnGMfBldXWp173iPaUgZ0nFo4iUT7ELZfKaU0td5jIS8sMEV+EY5K\nBhT2\r\n=ZMZT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIChVkuUdwLQB2xH3LJrc4RjoJB7zLt9Q/hsBxznihzA4AiEAqgB2VGQZ7CRQSyFo2EobAbNJx5nSIB0VVFlOL3L7Yoo="}]},"maintainers":[{"name":"awcrotwell","email":"awcrotwell@gmail.com"}],"_npmUser":{"name":"awcrotwell","email":"awcrotwell@gmail.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/motion_0.2.0_1599665791310_0.5247160402011408"},"_hasShrinkwrap":false}},"maintainers":[{"name":"awcrotwell","email":"awcrotwell@gmail.com"}],"description":"Motion allows you to build reactive, real-time frontend UI components in your Amber application using pure Crystal that are reusable, testable & encapsulated. For brevity, we will call them MotionComponents.","homepage":"https://github.com/andrewc910/motion.cr#readme","keywords":["crystal","crystal-lang"],"repository":{"type":"git","url":"git+https://github.com/andrewc910/motion.cr.git"},"author":{"name":"Andrew Crotwell"},"bugs":{"url":"https://github.com/andrewc910/motion.cr/issues"},"license":"MIT","readme":"<p align=\"center\">\n  <img src=\"./images/logo.svg\" width=\"800\">\n  <p align=\"center\">Reactive, Real-time Frontend Components</p>\n  <p align=\"center\"><a href=\"http://3.23.28.58/\">Try the Motion Demo</a></p>\n  <p align=\"center\">\n    <a href=\"https://www.codacy.com/manual/andrewc910/motion.cr?utm_source=github.com&utm_medium=referral&utm_content=andrewc910/motion.cr&utm_campaign=Badge_Grade\"><img src=\"https://app.codacy.com/project/badge/Grade/91df8833c8fd48b3a0397bf51e2c3787\"></a>\n    <a href=\"https://github.com/andrewc910/motion.cr/releases\"><img src=\"https://img.shields.io/github/release/andrewc910/motion.cr.svg?maxAge=360\"></a>\n    <a href=\"https://www.npmjs.com/package/@awcrotwell/motion\"><img alt=\"npm\" src=\"https://img.shields.io/npm/v/@awcrotwell/motion\"></a>\n    <a href=\"https://github.com/andrewc910/motion.cr/blob/master/LICENSE\"><img src=\"https://img.shields.io/github/license/andrewc910/motion.cr.svg\"></a>\n    <a href=\"#\"><img src=\"https://github.com/andrewc910/motion.cr/workflows/Build/badge.svg\"></a>\n    <a href=\"#\"><img src=\"https://github.com/andrewc910/motion.cr/workflows/Docs/badge.svg\"></a>\n  </p>\n</p>\n\n<p align=\"center\"> \n  <img src=\"./images/motion-calculator.gif\" width=\"450\" />\n</p>\n\nMotion is a framework for building reactive, real-time frontend UI components in your Amber application using pure Crystal that are reusable, testable & encapsulated. For brevity, we will call them MotionComponents.\n\n- Motion is an Object-Oriented View Layer\n- Plays nicely with the Amber monolith you have.\n- Peacefully coexists with your existing frontend\n- Real-time frontend UI updates from frontend user interaction AND server-side updates.\n- No more frontend models, stores, or syncing; your source of truth is the database you already have.\n- **No JavaScript required!**\n\n## Table of Contents\n\n- [Motion.cr](#motioncr)\n  - [Table of Contents](#table-of-contents)\n  - [Installation](#installation)\n  - [Documentation](#documentation)\n  - [Component Guide](#component-guide)\n    - [Why should I use components?](#why-should-i-use-components-)\n      - [Testing](#testing)\n      - [Data Flow](#data-flow)\n      - [Standards](#standards)\n    - [Building components](#building-components)\n      - [Conventions](#conventions)\n      - [Quick start](#quick-start)\n      - [HTML Generation](#html-generation)\n      - [Props & Type Safety](#props---type-safety)\n      - [Blocks & Procs](#blocks---procs)\n  - [Motion Guide](#motion-guide)\n    - [Installation](#installation-1)\n    - [Building Motions](#building-motions)\n      - [Frontend interactions](#frontend-interactions)\n      - [Motion::Event and Motion::Element](#motionevent-and-motionelement)\n  - [Limitations](#limitations)\n  - [Roadmap](#roadmap)\n  - [Contributing](#contributing)\n  - [License](#license)\n\n## Installation\n\nMotion.cr has Crystal and JavaScript parts, execute both of these commands:\n\n```sh\ndependencies:\n  motion.cr:\n    github: andrewc910/motion.cr\n```\n\nCreate a file `motion.cr` in `config/initializers` and add:\n\n```crystal\nrequire \"motion\"\n# The next require adds the `render` method for components to Amber controllers\nrequire \"motion/amber/monkey_patch\"\n```\n\n## Documentation\n\n- [API Documentation](https://andrewc910.github.io/motion.cr/)\n\n## Component Guide\n\nMotionComponents are Crystal objects that output HTML. MotionComponents are most effective in cases where view code is reused or benefits from being tested directly. The code itself was pulled & altered from [Lucky Framework](https://github.com/luckyframework/lucky).\n\n### Why should I use components?\n\n#### Testing\n\nUnlike traditional views, Motion Components can be unit-tested.\n\nViews are typically tested with slow integration tests that also exercise the routing and controller layers in addition to the view. This cost often discourages thorough test coverage.\n\nWith MotionComponents, integration tests can be reserved for end-to-end assertions, with permutations and corner cases covered at the unit level.\n\n#### Data Flow\n\nTraditional views have an implicit interface, making it hard to reason about what information is needed to render, leading to subtle bugs when rendering the same view in different contexts.\n\nMotionComponents use defined props that clearly defines what is needed to render, making them easier (and safer) to reuse than partials.\n\n#### Standards\n\nViews often fail basic code quality standards: long methods, deep conditional nesting, and mystery guests abound.\n\nMotionComponents are Crystal objects, making it easy to follow (and enforce) code quality standards.\n\n### Building components\n\n#### Conventions\n\nComponents are subclasses of `Motion::Base` and live in `views/components`. It's common practice to create and inherit from an `ApplicationComponent` that is a subclass of `Motion::Base`. By doing so, not only can you share logic, you can share view templates.\n\nComponent names end in `Component`.\n\nComponent module names are plural, as for controllers and jobs: `Users::AvatarComponent`\n\n#### Quick start\n\nIf you followed the installation guide above, you can start with you first component.\n\n1. Create a `components` folder in `views`\n2. Create your first component:\n\n```crystal\nclass MyFirstComponent < Motion::Base\n  def render\n    html_doctype\n    head do\n      css_link \"/css/main.css\"\n      utf8_charset\n      meta content: \"text/html;charset=utf-8\", http_equiv: \"Content-Type\"\n      title \"My First Component\"\n    end\n\n    body do\n      h1 { \"My First Component!\" }\n    end\n  end\nend\n```\n\n3. Render it in your controller:\n\n```crystal\nrender MyFirstComponent\n```\n\n#### HTML Generation\n\nFor static html rendering, please review the [lucky framework documentation](https://www.luckyframework.org/guides/frontend/rendering-html#layouts)\n\n> Note: Lucky uses the macro keyword `needs`, motion uses `prop`\n\n#### Props & Type Safety\n\nProps allow you to pass arguements to child components that are type safe. One of the problems with ecr views & partials is, it's hard to reason what variables & data the page requires to render because everything is within scope. Props explicity display what is required for a particular component.\n\n```crystal\nclass MyFirstComponent < Motion::Base\n  prop title : String\n\n  def render\n    html_doctype\n    head do\n      css_link \"/css/main.css\"\n      utf8_charset\n      meta content: \"text/html;charset=utf-8\", http_equiv: \"Content-Type\"\n      title \"My First Component\"\n    end\n\n    body do\n      h1 { @title }\n    end\n  end\nend\n```\n\nIn your controller:\n\n```crystal\nrender(MyFirstComponent, title: \"Hello World\")\n```\n\nor rendering from a component:\n\n```crystal\nm(MyFirstComponent, title: \"Hello World\") # m is shorthand for mount. mount is also acceptable\n```\n\n#### Blocks & Procs\n\nBlocks & Procs can be passed to child components. This will allow you to create more generic & reusable components.\n\n```crystal\nclass MyFirstComponent < Motion::Base\n  prop title : Proc(void)\n\n  def render\n    html_doctype\n    head do\n      css_link \"/css/main.css\"\n      utf8_charset\n      meta content: \"text/html;charset=utf-8\", http_equiv: \"Content-Type\"\n      title \"My First Component\"\n    end\n\n    body do\n      title.call\n    end\n  end\nend\n```\n\nIn your parent component:\n\n```crystal\ntitle = Proc(void).new { h1 \"Hello World!\" }\nm(MyFirstComponent, title: title)\n```\n\n## Motion Guide\n\nMotion.cr allows you to mount special DOM elements that can be updated real-time from frontend interactions, backend state changes, or a combination of both. Some features include:\n\n- **Websockets Communication** - Communication with your Amber backend is performed via websockets\n- **No Full Page Reload** - The current page for a user is updated in place.\n- **Fast DOM Diffing** - DOM diffing is performed when replacing existing content with new content.\n- **Server Triggered Events** - Server-side events can trigger updates to arbitrarily many components via WebSocket channels.\n\nMotion.cr is similar to [Phoenix LiveView](https://github.com/phoenixframework/phoenix_live_view) (and even React!) in some key ways:\n\n- **Partial Page Replacement** - Motion does not use full page replacement, but rather replaces only the component on the page with new HTML, DOM diffed for performance.\n- **Encapsulated, consistent stateful components** - Components have continuous internal state that persists and updates. This means each time a component changes, new rendered HTML is generated and can replace what was there before.\n- **Blazing Fast** - Communication does not have to go through the full Amber router and controller stack. No changes to your routing or controller are required to get the full functionality of Motion. Motions take less than 1ms to process with typical times being around 300μs.\n\n### Installation\n\n```sh\nyarn add @andrewc910/motion.cr\n```\n\nIn `main.js` add:\n\n```js\nimport { createClient } from '@awcrotwell/motion';\n\nconst client = createClient();\n```\n\n### Building Motions\n\n#### Frontend interactions\n\nFrontend interactions can update your MotionComponents using standard JavaScript events that you're already familiar with: `change`, `blur`, form submission, and more. Motions default to click events however you can override this to make it any event you would like. You can invoke motions manually using JavaScript if you need to.\n\nThe primary way to handle user interactions on the frontend is by setting `motion_component` to `true` annotating `@[Motion::MapMethod]` any motion methods:\n\n```crystal\n# Whenever a user click with the portion of the\n# page that contains this component,\n# `add` will be invoked, the component will be rerendered\n# and the dom will be updated with the new html\nclass MyMotionComponent < Motion::Base\n  # Let motion know this is a motion component\n  prop motion_component = true\n  # Add your props that you plan to pass in or default\n  prop total : Int32 = 0\n\n  # Annotate any motion methods\n  @[Motion::MapMethod]\n  def add\n    @total += 1\n  end\n\n  # render is what motion will invoke\n  # to generate your components html\n  def render\n    # data_motion: add tells the motion JS library what method\n    # to invoke when a user interacts with this component\n    div do\n      span do\n        @total\n        button data_motion: \"add\" do # data_motion: \"add\" defaults to a click event\n                                     # data_motion: \"mouseover->add\" to make it a mouseover event\n                                     # data_motion: \"mouseover->add mouseout->add\" to map multiple events to a single element\n          \"Increment\" # button text\n        end\n      end\n    end\n  end\nend\n\nclass MyFirstComponent < Motion::Base\n  def render\n    html_doctype\n    head do\n      css_link \"/css/main.css\"\n      utf8_charset\n      meta content: \"text/html;charset=utf-8\", http_equiv: \"Content-Type\"\n      title \"My First Component\"\n    end\n\n    body do\n      m(MyFirstMotionComponent)\n    end\n  end\nend\n```\n\nThis component can be rendered from your controller:\n\n```crystal\nrender MyFirstComponent\n```\n\nEvery time the \"Increment\" button is clicked, MyComponent will call the `add` method, re-render your component and send it back to the frontend to replace the existing DOM. All invocations of mapped motions will cause the component to re-render, and unchanged rendered HTML will not perform any changes.\n\n#### Periodic Timers\n\nMotion can automatically invoke a method on your component at regular intervals:\n\n```crystal\nclass TickerComponent < Motion::Base\n  props ticker : Int32 = 0\n  props motion_component : Bool = true\n\n  @[Motion::PeriodicTimer(interval: 1.second)]\n  def tick\n    @ticker += 1\n  end\n\n  def render\n    div do\n      span @ticker.to_s\n    end\n  end\nend\n```\n\nIn this example, after the component has mounted to a websockets channel, `tick` will be invoked every second and the component will be rerendered on the frontend.\n\n#### Motion::Event and Motion::Element\n\nMethods that are mapped using `@[Motion::MapMethod]` can choose to accept an `event` parameter which is a `Motion::Event`. This object has a `target` attribute which is a `Motion::Element`, the element in the DOM that triggered the motion. Useful state and attributes can be extracted from these objects, including value, selected, checked, form state, data attributes, and more.\n\n```crystal\n  @[Motion::MapMethod]\n  def example(event)\n    event.type # => \"change\"\n    event.name # alias for type\n\n    # Motion::Element instance, the element that received the event.\n    event.target\n\n    # Motion::Element instance, the element with the event handler and the `data-motion` attribute\n    element = event.current_target\n    # Alias for #current_target\n    event.element\n\n\n    # Element API examples\n    element.tag_name # => \"input\"\n    element.value # => \"5\"\n    element.attributes # { class: \"col-xs-12\", ... }\n\n    # DOM element with aria-label=\"...\"\n    element[:aria_label]\n\n    # DOM element with data-extra-info=\"...\"\n    element.data[:extra_info]\n\n    # ActionController::Parameters instance with all form params. Also\n    # available on Motion::Event objects for convenience.\n    element.form_data\n  end\n```\n\nSee the code for full API for [Event](https://andrewc910.github.io/motion.cr/Motion/Event.html) and [Element](https://andrewc910.github.io/motion.cr/Motion/Element.html).\n\n## Limitations\n\n- Due to the way that your components are replaced on the page, Components that set `motion_component` to `true` are limited to a single top-level DOM element. If you have multiple DOM elements in your template at the top level, you must wrap them in a single element. This is a similar limitation that React enforced until `React.Fragment` appeared and is for a very similar reason. Because of this, your upper most component (the component you call from the controller) cannot be a set `motion_component`. The top most component will return the entire html document to the controller and there is no way to wrap an entire document in a single tag.\n\n- Motion generates the `initialize` method for you. You cannot define your own. To add an instance variable to the parameters & initialize it, add a prop like `prop name : String = \"Default Name\"`\n\n## Roadmap\n\n- Stream Updates from Models\n- Routing for a full SPA experience\n- AJAX?(TBD)\n\n## Contributing\n\nBug reports and pull requests are welcome on GitHub at https://github.com/andrewc910/motion.cr/issues.\n\n## License\n\nThe shard is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).\n\n<!---\n### Backend interactions\n\nBackend changes can be streamed to your Motion components in 2 steps.\n\n1. Broadcast changes using ActionCable after an event you care about:\n\n```ruby\nclass Todo < ApplicationModel\n  after_commit :broadcast_created, on: :create\n\n  def broadcast_created\n    ActionCable.server.broadcast(\"todos:created\", name)\n  end\nend\n```\n\n2. Configure your Motion component to listen to an ActionCable channel:\n\n```ruby\nclass TopTodosComponent < Motion::Base\n  stream_from \"todos:created\", :handle_created\n\n  def initialize(count: 5)\n    @count = count\n    @todos = Todo.order(created_at: :desc).limit(count).pluck(:name)\n  end\n\n  def handle_created(name)\n    @todos = [name, *@todos.first(@count - 1)]\n  end\nend\n```\n\nThis will cause any user that has a page open with `MyComponent` mounted on it to re-render that component's portion of the page.\n\nAll invocations of `stream_from` connected methods will cause the component to re-render everywhere, and unchanged rendered HTML will not perform any changes.\n-->","readmeFilename":"README.md"}