on master help sign in
merging new card design into mino
5ed1925Anthony Arroyo
package-lock.json+64−64
@@ -51,7 +51,7 @@
51 },
51 },
52 "minimist": {
52 "minimist": {
53 "version": "1.2.0",
53 "version": "1.2.0",
54− "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
54+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
55 "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
55 "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
56 },
56 },
57 "ms": {
57 "ms": {
@@ -2217,7 +2217,7 @@
2217 },
2217 },
2218 "arg": {
2218 "arg": {
2219 "version": "2.0.0",
2219 "version": "2.0.0",
2220− "resolved": "http://registry.npmjs.org/arg/-/arg-2.0.0.tgz",
2220+ "resolved": "https://registry.npmjs.org/arg/-/arg-2.0.0.tgz",
2221 "integrity": "sha512-XxNTUzKnz1ctK3ZIcI2XUPlD96wbHP2nGqkPKpvk/HNRlPveYrXIVSTk9m3LcqOgDPg3B1nMvdV/K8wZd7PG4w==",
2221 "integrity": "sha512-XxNTUzKnz1ctK3ZIcI2XUPlD96wbHP2nGqkPKpvk/HNRlPveYrXIVSTk9m3LcqOgDPg3B1nMvdV/K8wZd7PG4w==",
2222 "dev": true
2222 "dev": true
2223 },
2223 },
@@ -2281,7 +2281,7 @@
2281 },
2281 },
2282 "array-equal": {
2282 "array-equal": {
2283 "version": "1.0.0",
2283 "version": "1.0.0",
2284− "resolved": "http://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz",
2284+ "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz",
2285 "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM="
2285 "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM="
2286 },
2286 },
2287 "array-filter": {
2287 "array-filter": {
@@ -2434,7 +2434,7 @@
2434 },
2434 },
2435 "util": {
2435 "util": {
2436 "version": "0.10.3",
2436 "version": "0.10.3",
2437− "resolved": "http://registry.npmjs.org/util/-/util-0.10.3.tgz",
2437+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
2438 "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
2438 "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
2439 "requires": {
2439 "requires": {
2440 "inherits": "2.0.1"
2440 "inherits": "2.0.1"
@@ -2842,7 +2842,7 @@
2842 },
2842 },
2843 "babel-plugin-syntax-object-rest-spread": {
2843 "babel-plugin-syntax-object-rest-spread": {
2844 "version": "6.13.0",
2844 "version": "6.13.0",
2845− "resolved": "http://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz",
2845+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz",
2846 "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U="
2846 "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U="
2847 },
2847 },
2848 "babel-plugin-transform-object-rest-spread": {
2848 "babel-plugin-transform-object-rest-spread": {
@@ -3257,7 +3257,7 @@
3257 },
3257 },
3258 "bl": {
3258 "bl": {
3259 "version": "1.2.2",
3259 "version": "1.2.2",
3260− "resolved": "http://registry.npmjs.org/bl/-/bl-1.2.2.tgz",
3260+ "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz",
3261 "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==",
3261 "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==",
3262 "requires": {
3262 "requires": {
3263 "readable-stream": "^2.3.5",
3263 "readable-stream": "^2.3.5",
@@ -3475,7 +3475,7 @@
3475 "dependencies": {
3475 "dependencies": {
3476 "resolve": {
3476 "resolve": {
3477 "version": "1.1.7",
3477 "version": "1.1.7",
3478− "resolved": "http://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
3478+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
3479 "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs="
3479 "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs="
3480 }
3480 }
3481 }
3481 }
@@ -3487,7 +3487,7 @@
3487 },
3487 },
3488 "browserify-aes": {
3488 "browserify-aes": {
3489 "version": "1.2.0",
3489 "version": "1.2.0",
3490− "resolved": "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
3490+ "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
3491 "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
3491 "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
3492 "requires": {
3492 "requires": {
3493 "buffer-xor": "^1.0.3",
3493 "buffer-xor": "^1.0.3",
@@ -3521,7 +3521,7 @@
3521 },
3521 },
3522 "browserify-rsa": {
3522 "browserify-rsa": {
3523 "version": "4.0.1",
3523 "version": "4.0.1",
3524− "resolved": "http://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
3524+ "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
3525 "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
3525 "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
3526 "requires": {
3526 "requires": {
3527 "bn.js": "^4.1.0",
3527 "bn.js": "^4.1.0",
@@ -3750,7 +3750,7 @@
3750 },
3750 },
3751 "callsites": {
3751 "callsites": {
3752 "version": "2.0.0",
3752 "version": "2.0.0",
3753− "resolved": "http://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
3753+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
3754 "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA="
3754 "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA="
3755 },
3755 },
3756 "camel-case": {
3756 "camel-case": {
@@ -3821,7 +3821,7 @@
3821 },
3821 },
3822 "chalk": {
3822 "chalk": {
3823 "version": "1.1.3",
3823 "version": "1.1.3",
3824− "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
3824+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
3825 "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
3825 "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
3826 "requires": {
3826 "requires": {
3827 "ansi-styles": "^2.2.1",
3827 "ansi-styles": "^2.2.1",
@@ -4031,7 +4031,7 @@
4031 },
4031 },
4032 "clone-deep": {
4032 "clone-deep": {
4033 "version": "0.2.4",
4033 "version": "0.2.4",
4034− "resolved": "http://registry.npmjs.org/clone-deep/-/clone-deep-0.2.4.tgz",
4034+ "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.2.4.tgz",
4035 "integrity": "sha1-TnPdCen7lxzDhnDF3O2cGJZIHMY=",
4035 "integrity": "sha1-TnPdCen7lxzDhnDF3O2cGJZIHMY=",
4036 "requires": {
4036 "requires": {
4037 "for-own": "^0.1.3",
4037 "for-own": "^0.1.3",
@@ -4413,7 +4413,7 @@
4413 },
4413 },
4414 "create-hash": {
4414 "create-hash": {
4415 "version": "1.2.0",
4415 "version": "1.2.0",
4416− "resolved": "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
4416+ "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
4417 "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
4417 "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
4418 "requires": {
4418 "requires": {
4419 "cipher-base": "^1.0.1",
4419 "cipher-base": "^1.0.1",
@@ -4425,7 +4425,7 @@
4425 },
4425 },
4426 "create-hmac": {
4426 "create-hmac": {
4427 "version": "1.1.7",
4427 "version": "1.1.7",
4428− "resolved": "http://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
4428+ "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
4429 "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
4429 "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
4430 "requires": {
4430 "requires": {
4431 "cipher-base": "^1.0.3",
4431 "cipher-base": "^1.0.3",
@@ -4476,7 +4476,7 @@
4476 },
4476 },
4477 "css-color-names": {
4477 "css-color-names": {
4478 "version": "0.0.4",
4478 "version": "0.0.4",
4479− "resolved": "http://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz",
4479+ "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz",
4480 "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA="
4480 "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA="
4481 },
4481 },
4482 "css-declaration-sorter": {
4482 "css-declaration-sorter": {
@@ -4878,12 +4878,12 @@
4878 "dependencies": {
4878 "dependencies": {
4879 "file-type": {
4879 "file-type": {
4880 "version": "3.9.0",
4880 "version": "3.9.0",
4881− "resolved": "http://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz",
4881+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz",
4882 "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek="
4882 "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek="
4883 },
4883 },
4884 "get-stream": {
4884 "get-stream": {
4885 "version": "2.3.1",
4885 "version": "2.3.1",
4886− "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz",
4886+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz",
4887 "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=",
4887 "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=",
4888 "requires": {
4888 "requires": {
4889 "object-assign": "^4.0.1",
4889 "object-assign": "^4.0.1",
@@ -5019,7 +5019,7 @@
5019 "dependencies": {
5019 "dependencies": {
5020 "globby": {
5020 "globby": {
5021 "version": "6.1.0",
5021 "version": "6.1.0",
5022− "resolved": "http://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
5022+ "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
5023 "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
5023 "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
5024 "requires": {
5024 "requires": {
5025 "array-union": "^1.0.1",
5025 "array-union": "^1.0.1",
@@ -5031,7 +5031,7 @@
5031 "dependencies": {
5031 "dependencies": {
5032 "pify": {
5032 "pify": {
5033 "version": "2.3.0",
5033 "version": "2.3.0",
5034− "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
5034+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
5035 "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
5035 "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
5036 }
5036 }
5037 }
5037 }
@@ -5117,7 +5117,7 @@
5117 },
5117 },
5118 "diffie-hellman": {
5118 "diffie-hellman": {
5119 "version": "5.0.3",
5119 "version": "5.0.3",
5120− "resolved": "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
5120+ "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
5121 "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
5121 "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
5122 "requires": {
5122 "requires": {
5123 "bn.js": "^4.1.0",
5123 "bn.js": "^4.1.0",
@@ -5273,7 +5273,7 @@
5273 },
5273 },
5274 "duplexer": {
5274 "duplexer": {
5275 "version": "0.1.1",
5275 "version": "0.1.1",
5276− "resolved": "http://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
5276+ "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
5277 "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E="
5277 "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E="
5278 },
5278 },
5279 "duplexer3": {
5279 "duplexer3": {
@@ -5744,7 +5744,7 @@
5744 "dependencies": {
5744 "dependencies": {
5745 "doctrine": {
5745 "doctrine": {
5746 "version": "1.5.0",
5746 "version": "1.5.0",
5747− "resolved": "http://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
5747+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
5748 "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
5748 "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
5749 "requires": {
5749 "requires": {
5750 "esutils": "^2.0.2",
5750 "esutils": "^2.0.2",
@@ -5761,7 +5761,7 @@
5761 },
5761 },
5762 "load-json-file": {
5762 "load-json-file": {
5763 "version": "2.0.0",
5763 "version": "2.0.0",
5764− "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
5764+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
5765 "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
5765 "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
5766 "requires": {
5766 "requires": {
5767 "graceful-fs": "^4.1.2",
5767 "graceful-fs": "^4.1.2",
@@ -6817,7 +6817,7 @@
6817 },
6817 },
6818 "fs-extra": {
6818 "fs-extra": {
6819 "version": "0.30.0",
6819 "version": "0.30.0",
6820− "resolved": "http://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz",
6820+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz",
6821 "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=",
6821 "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=",
6822 "requires": {
6822 "requires": {
6823 "graceful-fs": "^4.1.2",
6823 "graceful-fs": "^4.1.2",
@@ -9256,7 +9256,7 @@
9256 },
9256 },
9257 "is-accessor-descriptor": {
9257 "is-accessor-descriptor": {
9258 "version": "0.1.6",
9258 "version": "0.1.6",
9259− "resolved": "http://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
9259+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
9260 "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
9260 "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
9261 "requires": {
9261 "requires": {
9262 "kind-of": "^3.0.2"
9262 "kind-of": "^3.0.2"
@@ -9313,7 +9313,7 @@
9313 },
9313 },
9314 "is-data-descriptor": {
9314 "is-data-descriptor": {
9315 "version": "0.1.4",
9315 "version": "0.1.4",
9316− "resolved": "http://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
9316+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
9317 "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
9317 "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
9318 "requires": {
9318 "requires": {
9319 "kind-of": "^3.0.2"
9319 "kind-of": "^3.0.2"
@@ -9415,7 +9415,7 @@
9415 },
9415 },
9416 "is-obj": {
9416 "is-obj": {
9417 "version": "1.0.1",
9417 "version": "1.0.1",
9418− "resolved": "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
9418+ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
9419 "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8="
9419 "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8="
9420 },
9420 },
9421 "is-object": {
9421 "is-object": {
@@ -11069,7 +11069,7 @@
11069 },
11069 },
11070 "jsesc": {
11070 "jsesc": {
11071 "version": "1.3.0",
11071 "version": "1.3.0",
11072− "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
11072+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
11073 "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s="
11073 "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s="
11074 },
11074 },
11075 "json-parse-better-errors": {
11075 "json-parse-better-errors": {
@@ -11112,12 +11112,12 @@
11112 },
11112 },
11113 "json5": {
11113 "json5": {
11114 "version": "0.5.1",
11114 "version": "0.5.1",
11115− "resolved": "http://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
11115+ "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
11116 "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE="
11116 "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE="
11117 },
11117 },
11118 "jsonfile": {
11118 "jsonfile": {
11119 "version": "2.4.0",
11119 "version": "2.4.0",
11120− "resolved": "http://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
11120+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
11121 "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
11121 "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
11122 "requires": {
11122 "requires": {
11123 "graceful-fs": "^4.1.6"
11123 "graceful-fs": "^4.1.6"
@@ -11337,7 +11337,7 @@
11337 },
11337 },
11338 "load-json-file": {
11338 "load-json-file": {
11339 "version": "1.1.0",
11339 "version": "1.1.0",
11340− "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
11340+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
11341 "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
11341 "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
11342 "requires": {
11342 "requires": {
11343 "graceful-fs": "^4.1.2",
11343 "graceful-fs": "^4.1.2",
@@ -11393,7 +11393,7 @@
11393 "dependencies": {
11393 "dependencies": {
11394 "json5": {
11394 "json5": {
11395 "version": "1.0.1",
11395 "version": "1.0.1",
11396− "resolved": "http://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
11396+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
11397 "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
11397 "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
11398 "requires": {
11398 "requires": {
11399 "minimist": "^1.2.0"
11399 "minimist": "^1.2.0"
@@ -11401,7 +11401,7 @@
11401 },
11401 },
11402 "minimist": {
11402 "minimist": {
11403 "version": "1.2.0",
11403 "version": "1.2.0",
11404− "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
11404+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
11405 "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
11405 "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
11406 }
11406 }
11407 }
11407 }
@@ -11655,7 +11655,7 @@
11655 },
11655 },
11656 "media-typer": {
11656 "media-typer": {
11657 "version": "0.3.0",
11657 "version": "0.3.0",
11658− "resolved": "http://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
11658+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
11659 "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
11659 "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
11660 },
11660 },
11661 "mem": {
11661 "mem": {
@@ -11852,7 +11852,7 @@
11852 },
11852 },
11853 "minimist": {
11853 "minimist": {
11854 "version": "0.0.8",
11854 "version": "0.0.8",
11855− "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
11855+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
11856 "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
11856 "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
11857 },
11857 },
11858 "minipass": {
11858 "minipass": {
@@ -11926,7 +11926,7 @@
11926 },
11926 },
11927 "mkdirp": {
11927 "mkdirp": {
11928 "version": "0.5.1",
11928 "version": "0.5.1",
11929− "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
11929+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
11930 "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
11930 "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
11931 "requires": {
11931 "requires": {
11932 "minimist": "0.0.8"
11932 "minimist": "0.0.8"
@@ -12814,12 +12814,12 @@
12814 },
12814 },
12815 "os-homedir": {
12815 "os-homedir": {
12816 "version": "1.0.2",
12816 "version": "1.0.2",
12817− "resolved": "http://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
12817+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
12818 "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
12818 "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
12819 },
12819 },
12820 "os-locale": {
12820 "os-locale": {
12821 "version": "1.4.0",
12821 "version": "1.4.0",
12822− "resolved": "http://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
12822+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
12823 "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
12823 "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
12824 "requires": {
12824 "requires": {
12825 "lcid": "^1.0.0"
12825 "lcid": "^1.0.0"
@@ -12827,7 +12827,7 @@
12827 },
12827 },
12828 "os-tmpdir": {
12828 "os-tmpdir": {
12829 "version": "1.0.2",
12829 "version": "1.0.2",
12830− "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
12830+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
12831 "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
12831 "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
12832 },
12832 },
12833 "osenv": {
12833 "osenv": {
@@ -13030,7 +13030,7 @@
13030 },
13030 },
13031 "path-is-absolute": {
13031 "path-is-absolute": {
13032 "version": "1.0.1",
13032 "version": "1.0.1",
13033− "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
13033+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
13034 "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
13034 "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
13035 },
13035 },
13036 "path-is-inside": {
13036 "path-is-inside": {
@@ -13106,7 +13106,7 @@
13106 },
13106 },
13107 "pify": {
13107 "pify": {
13108 "version": "2.3.0",
13108 "version": "2.3.0",
13109− "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
13109+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
13110 "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
13110 "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
13111 },
13111 },
13112 "pinkie": {
13112 "pinkie": {
@@ -14305,7 +14305,7 @@
14305 },
14305 },
14306 "query-string": {
14306 "query-string": {
14307 "version": "5.1.1",
14307 "version": "5.1.1",
14308− "resolved": "http://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz",
14308+ "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz",
14309 "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==",
14309 "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==",
14310 "requires": {
14310 "requires": {
14311 "decode-uri-component": "^0.2.0",
14311 "decode-uri-component": "^0.2.0",
@@ -14395,7 +14395,7 @@
14395 "dependencies": {
14395 "dependencies": {
14396 "minimist": {
14396 "minimist": {
14397 "version": "1.2.0",
14397 "version": "1.2.0",
14398− "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
14398+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
14399 "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
14399 "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
14400 "dev": true
14400 "dev": true
14401 }
14401 }
@@ -14801,7 +14801,7 @@
14801 },
14801 },
14802 "readable-stream": {
14802 "readable-stream": {
14803 "version": "2.3.6",
14803 "version": "2.3.6",
14804− "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
14804+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
14805 "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
14805 "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
14806 "requires": {
14806 "requires": {
14807 "core-util-is": "~1.0.0",
14807 "core-util-is": "~1.0.0",
@@ -14957,7 +14957,7 @@
14957 "dependencies": {
14957 "dependencies": {
14958 "jsesc": {
14958 "jsesc": {
14959 "version": "0.5.0",
14959 "version": "0.5.0",
14960− "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
14960+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
14961 "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0="
14961 "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0="
14962 }
14962 }
14963 }
14963 }
@@ -15010,7 +15010,7 @@
15010 "dependencies": {
15010 "dependencies": {
15011 "css-select": {
15011 "css-select": {
15012 "version": "1.2.0",
15012 "version": "1.2.0",
15013− "resolved": "http://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
15013+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
15014 "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
15014 "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
15015 "requires": {
15015 "requires": {
15016 "boolbase": "~1.0.0",
15016 "boolbase": "~1.0.0",
@@ -15247,7 +15247,7 @@
15247 },
15247 },
15248 "rgba-regex": {
15248 "rgba-regex": {
15249 "version": "1.0.0",
15249 "version": "1.0.0",
15250− "resolved": "http://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz",
15250+ "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz",
15251 "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM="
15251 "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM="
15252 },
15252 },
15253 "rimraf": {
15253 "rimraf": {
@@ -15333,7 +15333,7 @@
15333 },
15333 },
15334 "safe-regex": {
15334 "safe-regex": {
15335 "version": "1.1.0",
15335 "version": "1.1.0",
15336− "resolved": "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
15336+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
15337 "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
15337 "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
15338 "requires": {
15338 "requires": {
15339 "ret": "~0.1.10"
15339 "ret": "~0.1.10"
@@ -15362,7 +15362,7 @@
15362 "dependencies": {
15362 "dependencies": {
15363 "minimist": {
15363 "minimist": {
15364 "version": "1.2.0",
15364 "version": "1.2.0",
15365− "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
15365+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
15366 "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
15366 "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
15367 }
15367 }
15368 }
15368 }
@@ -15519,7 +15519,7 @@
15519 },
15519 },
15520 "scrypt.js": {
15520 "scrypt.js": {
15521 "version": "0.2.0",
15521 "version": "0.2.0",
15522− "resolved": "http://registry.npmjs.org/scrypt.js/-/scrypt.js-0.2.0.tgz",
15522+ "resolved": "https://registry.npmjs.org/scrypt.js/-/scrypt.js-0.2.0.tgz",
15523 "integrity": "sha1-r40UZbcemZARC+38WTuUeeA6ito=",
15523 "integrity": "sha1-r40UZbcemZARC+38WTuUeeA6ito=",
15524 "requires": {
15524 "requires": {
15525 "scrypt": "^6.0.2",
15525 "scrypt": "^6.0.2",
@@ -15580,7 +15580,7 @@
15580 "dependencies": {
15580 "dependencies": {
15581 "commander": {
15581 "commander": {
15582 "version": "2.8.1",
15582 "version": "2.8.1",
15583− "resolved": "http://registry.npmjs.org/commander/-/commander-2.8.1.tgz",
15583+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz",
15584 "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=",
15584 "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=",
15585 "requires": {
15585 "requires": {
15586 "graceful-readlink": ">= 1.0.0"
15586 "graceful-readlink": ">= 1.0.0"
@@ -15892,7 +15892,7 @@
15892 },
15892 },
15893 "sha.js": {
15893 "sha.js": {
15894 "version": "2.4.11",
15894 "version": "2.4.11",
15895− "resolved": "http://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
15895+ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
15896 "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
15896 "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
15897 "requires": {
15897 "requires": {
15898 "inherits": "^2.0.1",
15898 "inherits": "^2.0.1",
@@ -15927,7 +15927,7 @@
15927 "dependencies": {
15927 "dependencies": {
15928 "kind-of": {
15928 "kind-of": {
15929 "version": "2.0.1",
15929 "version": "2.0.1",
15930− "resolved": "http://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz",
15930+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz",
15931 "integrity": "sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU=",
15931 "integrity": "sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU=",
15932 "requires": {
15932 "requires": {
15933 "is-buffer": "^1.0.2"
15933 "is-buffer": "^1.0.2"
@@ -16545,7 +16545,7 @@
16545 },
16545 },
16546 "sprintf-js": {
16546 "sprintf-js": {
16547 "version": "1.0.3",
16547 "version": "1.0.3",
16548− "resolved": "http://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
16548+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
16549 "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
16549 "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
16550 },
16550 },
16551 "sshpk": {
16551 "sshpk": {
@@ -16696,7 +16696,7 @@
16696 },
16696 },
16697 "string-width": {
16697 "string-width": {
16698 "version": "1.0.2",
16698 "version": "1.0.2",
16699− "resolved": "http://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
16699+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
16700 "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
16700 "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
16701 "requires": {
16701 "requires": {
16702 "code-point-at": "^1.0.0",
16702 "code-point-at": "^1.0.0",
@@ -16745,7 +16745,7 @@
16745 },
16745 },
16746 "string_decoder": {
16746 "string_decoder": {
16747 "version": "1.1.1",
16747 "version": "1.1.1",
16748− "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
16748+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
16749 "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
16749 "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
16750 "requires": {
16750 "requires": {
16751 "safe-buffer": "~5.1.0"
16751 "safe-buffer": "~5.1.0"
@@ -16763,7 +16763,7 @@
16763 },
16763 },
16764 "strip-ansi": {
16764 "strip-ansi": {
16765 "version": "3.0.1",
16765 "version": "3.0.1",
16766− "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
16766+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
16767 "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
16767 "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
16768 "requires": {
16768 "requires": {
16769 "ansi-regex": "^2.0.0"
16769 "ansi-regex": "^2.0.0"
@@ -16796,7 +16796,7 @@
16796 },
16796 },
16797 "strip-eof": {
16797 "strip-eof": {
16798 "version": "1.0.0",
16798 "version": "1.0.0",
16799− "resolved": "http://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
16799+ "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
16800 "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8="
16800 "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8="
16801 },
16801 },
16802 "strip-hex-prefix": {
16802 "strip-hex-prefix": {
@@ -17323,7 +17323,7 @@
17323 },
17323 },
17324 "through": {
17324 "through": {
17325 "version": "2.3.8",
17325 "version": "2.3.8",
17326− "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz",
17326+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
17327 "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
17327 "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
17328 },
17328 },
17329 "through2": {
17329 "through2": {
@@ -17554,7 +17554,7 @@
17554 },
17554 },
17555 "tty-browserify": {
17555 "tty-browserify": {
17556 "version": "0.0.0",
17556 "version": "0.0.0",
17557− "resolved": "http://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
17557+ "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
17558 "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY="
17558 "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY="
17559 },
17559 },
17560 "tunnel-agent": {
17560 "tunnel-agent": {
@@ -17969,7 +17969,7 @@
17969 },
17969 },
17970 "utf8": {
17970 "utf8": {
17971 "version": "2.1.1",
17971 "version": "2.1.1",
17972− "resolved": "http://registry.npmjs.org/utf8/-/utf8-2.1.1.tgz",
17972+ "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.1.tgz",
17973 "integrity": "sha1-LgHbAvfY0JRPdxBPFgnrDDBM92g="
17973 "integrity": "sha1-LgHbAvfY0JRPdxBPFgnrDDBM92g="
17974 },
17974 },
17975 "util": {
17975 "util": {
@@ -19431,7 +19431,7 @@
19431 },
19431 },
19432 "wrap-ansi": {
19432 "wrap-ansi": {
19433 "version": "2.1.0",
19433 "version": "2.1.0",
19434− "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
19434+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
19435 "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
19435 "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
19436 "requires": {
19436 "requires": {
19437 "string-width": "^1.0.1",
19437 "string-width": "^1.0.1",
@@ -19599,7 +19599,7 @@
19599 },
19599 },
19600 "yargs": {
19600 "yargs": {
19601 "version": "4.8.1",
19601 "version": "4.8.1",
19602− "resolved": "http://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz",
19602+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz",
19603 "integrity": "sha1-wMQpJMpKqmsObaFznfshZDn53cA=",
19603 "integrity": "sha1-wMQpJMpKqmsObaFznfshZDn53cA=",
19604 "requires": {
19604 "requires": {
19605 "cliui": "^3.2.0",
19605 "cliui": "^3.2.0",
@@ -19620,7 +19620,7 @@
19620 },
19620 },
19621 "yargs-parser": {
19621 "yargs-parser": {
19622 "version": "2.4.1",
19622 "version": "2.4.1",
19623− "resolved": "http://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz",
19623+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz",
19624 "integrity": "sha1-hVaN488VD/SfpRgl8DqMiA3cxcQ=",
19624 "integrity": "sha1-hVaN488VD/SfpRgl8DqMiA3cxcQ=",
19625 "requires": {
19625 "requires": {
19626 "camelcase": "^3.0.0",
19626 "camelcase": "^3.0.0",
public/spritesheet_a.pngnew file

Binary file not shown.

src/components/Passport.js+279−136
@@ -1,36 +1,57 @@
1−import React, { useMemo } from 'react';
1+import React from 'react';
2−import cn from 'classnames';
3import { Just, Nothing } from 'folktale/maybe';
2import { Just, Nothing } from 'folktale/maybe';
4import ob from 'urbit-ob';
3import ob from 'urbit-ob';
5−import { Grid, Flex, Text } from 'indigo-react';
4+import BN from 'bn.js';
6−import { times } from 'lodash';
5+import 'style/anim.css';
7
6
8import * as need from 'lib/need';
7import * as need from 'lib/need';
9−import usePointBirthday from 'lib/usePointBirthday';
8+import { chunkStr, Matrix, walk, rand } from 'lib/card';
10−
11−import Blinky, {
12− LOADING_CHARACTER,
13− INTERSTITIAL_CHARACTER,
14− matchBlinkyDate,
15−} from './Blinky';
16−import Sigil from './Sigil';
17−import MaybeSigil from './MaybeSigil';
18import usePermissionsForPoint from 'lib/usePermissionsForPoint';
9import usePermissionsForPoint from 'lib/usePermissionsForPoint';
19−import { useWallet } from 'store/wallet';
20import { useSyncOwnedPoints } from 'lib/useSyncPoints';
10import { useSyncOwnedPoints } from 'lib/useSyncPoints';
21
11
22−const TICKET_CHAR_LENGTH = 30;
12+import { useWallet } from 'store/wallet';
23−const TICKET = times(TICKET_CHAR_LENGTH, i =>
13+
24− i % 2 === 0 ? LOADING_CHARACTER : INTERSTITIAL_CHARACTER
14+import Sigil from './Sigil';
25−).join('');
15+import { sigil, reactRenderer } from 'urbit-sigil-js';
26−const PENDING_TICKET = TICKET;
27−const VALID_TICKET = `${TICKET} ◆`;
28
16
29−const VISIBLE_ADDRESS_CHAR_COUNT = 20;
17+function makeSigil(size, patp, colors) {
30−const EMPTY_ADDRESS = times(VISIBLE_ADDRESS_CHAR_COUNT, () => '<').join('');
18+ const config = {
31−const ADDRESS_BUFFER_CHARS = times(40, () => '<').join('');
19+ patp: patp,
20+ colors: colors,
21+ margin: 0,
22+ renderer: reactRenderer,
23+ };
32
24
33−const INVERTED_COLORWAY = ['#fff', '#000'];
25+ console.log(patp);
26+
27+ // Planet
28+ if (patp.length === 14) {
29+ return sigil({
30+ patp: patp,
31+ size: size,
32+ ...config,
33+ });
34+ }
35+ // Star
36+ if (patp.length === 7) {
37+ return sigil({
38+ patp: patp,
39+ width: size * 2,
40+ height: size,
41+ full: true,
42+ ...config,
43+ });
44+ }
45+ // Galaxy
46+ if (patp.length === 4) {
47+ return sigil({
48+ patp: patp,
49+ size: size,
50+ full: true,
51+ ...config,
52+ });
53+ }
54+}
34
55
35const buildKeyType = permissions => {
56const buildKeyType = permissions => {
36 if (permissions.isOwner) {
57 if (permissions.isOwner) {
@@ -46,139 +67,261 @@ const buildKeyType = permissions => {
46 }
67 }
47};
68};
48
69
70+const symbols = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13];
71+
49/**
72/**
73+ * Address is Maybe<string>
50− * point is Maybe<number>
74+ * point is Maybe<string>
51− * ticket is null | boolean
75+ * animationMode is 'slide' | 'step' | 'none'
52− * address is null | Maybe<string>
76+ *
53 */
77 */
54function Passport({
78function Passport({
79+ address,
55 point,
80 point,
56− className,
81+ inverted,
57− ticket = null,
82+ animationMode = 'none',
58− address = Nothing(),
83+ keyType,
59− onClick,
60}) {
84}) {
61− const birthday = usePointBirthday(point.getOrElse(null));
85+ const [cols, rows, tile] = [35, 12, 12];
62− const visualBirthday = matchBlinkyDate(birthday);
63
86
64− const name = point.matchWith({
87+ const loading = Nothing.hasInstance(address) || Nothing.hasInstance(point);
65− Nothing: () => Nothing(),
88+ const defaultMatrix = () => {
89+ return Matrix.new(rows, cols);
90+ };
91+
66− Just: p => Just(ob.patp(p.value)),
92+ const patp = ob.patp(point.value);
67− });
93+
68− const visualName = name.matchWith({
94+ const makeMatrix = addr => {
69− Nothing: () => '...',
95+ // remove the 0x
96+ const onlyTheNumberPart = addr.substring(2);
97+ // make bigNum from hex
98+ const int = new BN(onlyTheNumberPart, 16);
99+ // make a bigger number
100+ const big = int.pow(new BN(10));
101+ // parse that to a string and pad
102+ const b10 = big.toString(10).padStart(32, '0');
103+ // split the big number into parts
104+ const chunkSize = Math.ceil(b10.length / 8);
105+ const chunks = chunkStr(b10, chunkSize).map(c => new BN(c));
106+ // generate an empty matrix
107+ const startMatrix = Matrix.new(rows, cols);
108+ // do a few random walks starting at diff coordinates
109+ const [, matrix] = chunks.reduce((acc, chunk) => {
110+ return walk(chunk, acc[1]);
111+ // start with the 'random' points (not actually random, they are deterministic)
112+ }, rand(big, startMatrix));
113+
114+ return matrix;
115+ };
116+
117+ const matrix = address.matchWith({
70− Just: p => p.value,
118+ Just: ({ value }) => makeMatrix(value),
119+ Nothing: defaultMatrix,
71 });
120 });
72
121
73− const showTicket = ticket !== null;
122+ const bgColor = inverted ? 'white' : 'black';
74− const isValidTicket = !!ticket;
123+
75− const visibleTicket = isValidTicket ? VALID_TICKET : PENDING_TICKET;
124+ const fgColor = inverted ? 'black' : 'white';
76− const visibleAddress = `${address.matchWith({
77− Nothing: () => EMPTY_ADDRESS,
78− Just: p => p.value.slice(0, VISIBLE_ADDRESS_CHAR_COUNT),
79− })}${ADDRESS_BUFFER_CHARS}`;
80
125
81 return (
126 return (
82− <Grid onClick={onClick} gap={4} className={cn('bg-black r8 p7', className)}>
127+ <div
83− <Grid.Item cols={[1, 4]}>
128+ style={{
84− <MaybeSigil patp={name} size={64} />
129+ fontFamily: 'Inter',
85− </Grid.Item>
130+ backgroundColor: bgColor,
86− <Grid.Item as={Flex} cols={[4, 13]} col justify="between">
131+ border: inverted ? '2px solid #E6E6E6' : '2px solid black',
87− <Flex.Item className="mono white f5 pb2">{visualName}</Flex.Item>
132+ borderRadius: '20px',
88− <Flex.Item as={Flex} col>
133+ marginBottom: '16px',
89− <Flex.Item as={Text} className="mono f6 f5-ns gray4 uppercase">
134+ width: `${16 + 16 + cols * tile}px`,
90− Birth Time
135+ minWidth: `${16 + 16 + cols * tile}px`,
91− </Flex.Item>
136+ display: 'flex',
92− <Flex.Item as={Text} className="mono f6 f5-ns gray4 uppercase">
137+ flexDirection: 'column',
93− {visualBirthday}
138+ }}>
94− </Flex.Item>
139+ <div
95− </Flex.Item>
140+ style={{
96− </Grid.Item>
141+ height: '64px',
97− {showTicket && (
142+ padding: '16px',
98− <Grid.Item full className="mv3" as={Flex} col>
143+ display: 'flex',
99− <Flex.Item as={Text} className="mono f6 f5-ns gray4 uppercase">
144+ }}>
100− Master Ticket
145+ <div
101− </Flex.Item>
146+ style={{
102− <Flex.Item
147+ width: '100%',
103− as={Text}
148+ display: 'flex',
104− className={cn('arial f6 f5-ns wrap', {
149+ alignItems: 'center',
105− gray4: !isValidTicket,
150+ }}>
106− green3: isValidTicket,
151+ {Just.hasInstance(point) && makeSigil(64, patp, [bgColor, fgColor])}
152+ <div
153+ style={{
154+ marginLeft: '16px',
155+ }}>
156+ <div
157+ style={{
158+ fontWeight: '600',
159+ color: fgColor,
160+ fontSize: '16px',
161+ fontFamily: 'Source Code Pro',
162+ }}>
163+ {Just.hasInstance(point) && patp}
164+ </div>
165+ {keyType !== '' ? (
166+ <div
167+ style={{
168+ marginTop: '8px',
169+ fontWeight: '500',
170+ color: fgColor,
171+ fontSize: '14px',
172+ fontFamily: 'Source Code Pro',
173+ }}>
174+ {keyType}
175+ </div>
176+ ) : (
177+ <div />
178+ )}
179+ </div>
180+ </div>
181+ </div>
182+ <div
183+ style={{
184+ display: 'flex',
185+ flexDirection: 'column',
186+ padding: '16px',
187+ paddingTop: '0px',
188+ filter: inverted ? 'invert(1)' : '',
189+ }}>
190+ {matrix.map((row, _row) => {
191+ return (
192+ <div
193+ key={`card:row:${_row}`}
194+ style={{ display: 'flex', justifyContent: 'space-between' }}>
195+ {row.map((v, _col) => {
196+ return (
197+ <Cell
198+ row={_row}
199+ col={_col}
200+ value={typeof symbols[v] === 'undefined' ? 13 : v}
201+ spriteSheet={'a'}
202+ spriteSheetHeight={12}
203+ spriteSheetWidth={168}
204+ inverted={inverted}
205+ loading={loading}
206+ animationMode={animationMode}
207+ />
208+ );
107− })}>
209+ })}
108− {visibleTicket}
210+ </div>
109− </Flex.Item>
211+ );
110− <Flex.Item as={Text} className="mono f6 f5-ns gray4 wrap">
212+ })}
111− {visibleAddress}
213+ </div>
112− </Flex.Item>
214+ </div>
113− </Grid.Item>
114− )}
115− </Grid>
116 );
215 );
117}
216}
118
217
119−// TODO: Passport.Mini should probably accept Maybe<> for point
218+const Cell = props => {
120−// in order to display a pretty skeleton loading view
219+ return (
121−// but that requires making usePermissionsForPoint accept a Maybe<point>
220+ <div
122−// and I don't feel like that refactor is worth it right now, and the spec
221+ key={`card:cell:${props.row}:${props.col}:${props.value}`}
123−// doesn't call for it, hence the TODO
222+ className={
124−Passport.Mini = function MiniPassport({ point, className, inverted, ...rest }) {
223+ props.loading
125− useSyncOwnedPoints([point]);
224+ ? 'blink'
225+ : props.animationMode === 'none'
226+ ? ''
227+ : `${props.animationMode}-h-${props.value}`
228+ }
229+ style={{
230+ backgroundImage: `url(/spritesheet_a.png)`,
231+ backgroundPosition:
232+ props.animationMode === 'none'
233+ ? `-${props.spriteSheetHeight * props.value}px 0px`
234+ : '',
235+ backgroundSize: `${props.spriteSheetWidth}px ${props.spriteSheetHeight}px`,
236+ width: `${props.spriteSheetHeight}px`,
237+ maxWidth: `${props.spriteSheetHeight}px`,
238+ height: `${props.spriteSheetHeight}px`,
239+ maxHeight: `${props.spriteSheetHeight}px`,
240+ animationDelay: `${props.value * 50}ms`,
241+ }}
242+ />
243+ );
244+};
126
245
246+/**
247+ * point is number
248+ *
249+ */
250+function MiniPassport({ point, inverted, ...rest }) {
251+ useSyncOwnedPoints([point]);
127 const { wallet } = useWallet();
252 const { wallet } = useWallet();
128 const address = need.addressFromWallet(wallet);
253 const address = need.addressFromWallet(wallet);
129
254
255+ const patp = ob.patp(point);
130 const permissions = usePermissionsForPoint(address, point);
256 const permissions = usePermissionsForPoint(address, point);
131 const keyType = buildKeyType(permissions);
257 const keyType = buildKeyType(permissions);
132− const name = useMemo(() => ob.patp(point), [point]);
133−
134 return (
258 return (
135− <Grid
259+ <div
136− gap={4}
260+ style={{
137− className={cn(
261+ fontFamily: 'Inter',
138− 'r8 p4',
262+ backgroundColor: inverted ? 'white' : 'black',
139− {
263+ border: inverted ? '2px solid #E6E6E6' : '2px solid black',
140− 'bg-black': !inverted,
264+ borderRadius: '20px',
141− 'bg-white b-gray4 b1': inverted,
265+ marginBottom: '16px',
142− },
266+ maxWidth: `${230}px`,
143− className
267+ display: 'flex',
268+ flexDirection: 'column',
144− )}
269+ }}
145 {...rest}>
270 {...rest}>
146− <Grid.Item cols={[1, 4]}>
271+ <div
147− <Sigil
272+ style={{
148− patp={name}
273+ height: '44px',
149− size={64}
274+ padding: '16px',
150− colors={inverted ? INVERTED_COLORWAY : undefined}
275+ display: 'flex',
151− />
276+ }}>
152− </Grid.Item>
277+ <div
153− <Grid.Item as={Flex} cols={[4, 13]} col justify="between">
278+ style={{
154− <Flex.Item
279+ width: '100%',
155− className={cn('mono f6 pb2', {
280+ display: 'flex',
156− white: !inverted,
281+ alignItems: 'center',
157− black: inverted,
282+ }}>
283+ {makeSigil(
284+ 44,
285+ patp,
286+ inverted ? ['white', 'black'] : ['black', 'white']
287+ )}
288+ <div
289+ style={{
290+ marginLeft: '16px',
291+ display: 'flex',
292+ flexDirection: 'column',
293+ justifyContent: 'space-between',
294+ }}>
295+ <div
296+ style={{
297+ fontWeight: '600',
298+ color: inverted ? 'black' : 'white',
299+ fontSize: '14px',
300+ fontFamily: 'Source Code Pro',
158− })}>
301+ }}>
159− {name}
302+ {patp}
160− </Flex.Item>
303+ </div>
161− <Flex.Item as={Flex} col className={cn('mono f6 uppercase')}>
304+ {keyType !== '' ? (
162− <Flex.Item
305+ <div
163− as={Text}
306+ style={{
164− className={cn({
307+ marginTop: '8px',
165− gray4: !inverted,
308+ fontWeight: '500',
166− black: inverted,
309+ color: inverted ? 'black' : 'white',
167− })}>
310+ fontSize: '12px',
168− Key Type
311+ fontFamily: 'Source Code Pro',
169− </Flex.Item>
170− <Flex.Item
171− as={Text}
172− className={cn({
173− white: !inverted,
174− black: inverted,
175− })}>
312+ }}>
176− {keyType || <Blinky />}
313+ {keyType}
177− </Flex.Item>
314+ </div>
178− </Flex.Item>
315+ ) : (
179− </Grid.Item>
316+ <div />
180− </Grid>
317+ )}
318+ </div>
319+ </div>
320+ </div>
321+ </div>
181 );
322 );
182−};
323+}
324+
325+Passport.Mini = MiniPassport;
183
326
184export default Passport;
327export default Passport;
src/lib/card.jsnew file+190
@@ -0,0 +1,190 @@
1+const initCanvas = (canvas, size, ratio) => {
2+ const { x, y } = size;
3+ // let ctx = canvas.getContext('2d')
4+
5+ const dpi200 = window.devicePixelRatio * (200 / 72);
6+
7+ canvas.width = x * dpi200;
8+ canvas.height = y * dpi200;
9+ canvas.style.width = x + 'px';
10+ canvas.style.height = y + 'px';
11+
12+ canvas.getContext('2d').scale(dpi200, dpi200);
13+
14+ return canvas;
15+};
16+
17+const mapToRange = (v, l1, h1, l2, h2) =>
18+ l2 + ((h2 - l2) * (v - l1)) / (h1 - l1);
19+
20+const seq = num => Array.from(Array(num), (_, i) => i);
21+
22+const compose = (...fns) =>
23+ fns.reduce((f, g) => (...xs) => {
24+ const r = g(...xs);
25+ return Array.isArray(r) ? f(...r) : f(r);
26+ });
27+
28+const Matrix = {
29+ get: {
30+ at: (m, r, c) => m[r][c],
31+ nn: (m, r, c) => m[r - 1][c],
32+ ne: (m, r, c) => m[r - 1][c + 1],
33+ ee: (m, r, c) => m[r][c + 1],
34+ se: (m, r, c) => m[r + 1][c + 1],
35+ ss: (m, r, c) => m[r + 1][c],
36+ sw: (m, r, c) => m[r + 1][c - 1],
37+ ww: (m, r, c) => m[r][c - 1],
38+ nw: (m, r, c) => m[r - 1][c - 1],
39+ },
40+ set: {
41+ at: (m, r, c, v) => (m[r][c] = v),
42+ nn: (m, r, c, v) => (m[r - 1][c] = v),
43+ ne: (m, r, c, v) => (m[r - 1][c + 1] = v),
44+ ee: (m, r, c, v) => (m[r][c + 1] = v),
45+ se: (m, r, c, v) => (m[r + 1][c + 1] = v),
46+ ss: (m, r, c, v) => (m[r + 1][c] = v),
47+ sw: (m, r, c, v) => (m[r + 1][c - 1] = v),
48+ ww: (m, r, c, v) => (m[r][c - 1] = v),
49+ nw: (m, r, c, v) => (m[r - 1][c - 1] = v),
50+ },
51+ coord: {
52+ at: (r, c) => ({ r: r, c: c }),
53+ nn: (r, c) => ({ r: r - 1, c: c }),
54+ ne: (r, c) => ({ r: r - 1, c: c + 1 }),
55+ ee: (r, c) => ({ r: r, c: c + 1 }),
56+ se: (r, c) => ({ r: r + 1, c: c + 1 }),
57+ ss: (r, c) => ({ r: r + 1, c: c }),
58+ sw: (r, c) => ({ r: r + 1, c: c - 1 }),
59+ ww: (r, c) => ({ r: r, c: c - 1 }),
60+ nw: (r, c) => ({ r: r - 1, c: c - 1 }),
61+ },
62+ dirs: {
63+ NN: 'nn',
64+ NE: 'ne',
65+ EE: 'ee',
66+ SE: 'se',
67+ SS: 'ss',
68+ SW: 'sw',
69+ WW: 'ww',
70+ NW: 'nw',
71+ },
72+ new: (rs, cs) => seq(rs).map(_ => seq(cs).map(_ => 0)),
73+ rows: m => m.length - 1,
74+ cols: m => m[0].length - 1,
75+};
76+
77+const chunkStr = (str, size) => {
78+ const r = new RegExp(`.{1,${size}}`, 'g');
79+ return str.match(r);
80+};
81+
82+const Base3Mapping = [
83+ Matrix.dirs.NN,
84+ Matrix.dirs.NE,
85+ Matrix.dirs.EE,
86+ Matrix.dirs.SE,
87+ Matrix.dirs.SS,
88+ Matrix.dirs.SW,
89+ Matrix.dirs.WW,
90+ Matrix.dirs.NW,
91+];
92+
93+const walk = (int, matrix) => {
94+ // convert the int to a base8 string, split to array
95+ var chunks = int.toString(8).split('');
96+
97+ // convert the int to a base10 string
98+ var b10 = int.toString(10);
99+
100+ // get number of rows and cols
101+ var rows = Matrix.rows(matrix);
102+ var cols = Matrix.cols(matrix);
103+
104+ // split the length-4 number into 2 parts, which is a number from 0-99
105+ // if the substring is empty, substitute 10
106+ var sx = parseInt(b10.substring(0, 2) || 0, 10);
107+ var sy = parseInt(b10.substring(2, 4) || 0, 10);
108+
109+ // generate a starting coordinate
110+ var coord = {
111+ c: ~~mapToRange(sx, 0, 99, 0, cols),
112+ r: ~~mapToRange(sy, 0, 99, 0, rows),
113+ };
114+
115+ var vect;
116+ var next;
117+
118+ for (var i = 0; i < chunks.length; i++) {
119+ // Each chunk is a number from 0-7 which refers to a direction assigned in Base3Mapping.
120+ // Get the current chunk, and then get the direction it has been paired with.
121+ vect = Base3Mapping[chunks[i]];
122+
123+ // generate the next coordinate to go to, based on the current coordinate and the direction stored in vect.
124+ next = Matrix.coord[vect](coord.r, coord.c);
125+
126+ // If at an edge of the matrix, substitute the opposite direction.
127+ if (next.r < 0) vect = Matrix.dirs.SS;
128+ if (next.c < 0) vect = Matrix.dirs.EE;
129+ if (next.r > rows) vect = Matrix.dirs.NN;
130+ if (next.c > cols) vect = Matrix.dirs.WW;
131+
132+ // If at in the corner of the matrix, substitute an alternative direction.
133+ if (next.r === 0 && coord.c === 0) vect = Matrix.dirs.SE;
134+ if (next.r > rows && coord.c === 0) vect = Matrix.dirs.NE;
135+ if (next.r === 0 && coord.c > cols) vect = Matrix.dirs.SW;
136+ if (next.r > rows && coord.c > cols) vect = Matrix.dirs.NW;
137+
138+ // get the next coordinate again in case there was an edge/cornercase
139+ next = Matrix.coord[vect](coord.r, coord.c);
140+
141+ // increment the value at the next coordinate.
142+ Matrix.set.at(
143+ matrix,
144+ next.r,
145+ next.c,
146+ Matrix.get.at(matrix, next.r, next.c) + 1
147+ );
148+
149+ // set the new current coordinate.
150+ coord = next;
151+ }
152+
153+ // return a 2-ary array in order to pass both values to the next function in the compose pipeline.
154+ return [int, matrix];
155+};
156+
157+const rand = (int, matrix) => {
158+ // break base10 integer into chunks with length of 4
159+ var chunks = chunkStr(int.toString(10), 4);
160+ var cols = Matrix.cols(matrix);
161+ var rows = Matrix.rows(matrix);
162+ var ch;
163+ var x;
164+ var y;
165+ var c;
166+ var r;
167+
168+ for (var i = 0; i < chunks.length; i++) {
169+ // for each chunk in chunks
170+ ch = chunks[i];
171+
172+ // split the length-4 number into 2 parts, which is a number from 0-99
173+ // if the substring is empty, substitute 10
174+ x = parseInt(ch.substring(0, 2) || 0, 10);
175+ y = parseInt(ch.substring(2, 4) || 0, 10);
176+
177+ // map num from 0-99 to 0 - num of cols, then use ~~ for fast math.floor
178+ // c (col) and r (row) are coordinates
179+ c = ~~mapToRange(x, 0, 99, 0, cols);
180+ r = ~~mapToRange(y, 0, 99, 0, rows);
181+
182+ // increment number at the coordinate
183+ Matrix.set.at(matrix, r, c, Matrix.get.at(matrix, r, c) + 1);
184+ }
185+
186+ // return a 2-ary array in order to pass both values to the next function in the compose pipeline.
187+ return [int, matrix];
188+};
189+
190+export { chunkStr, initCanvas, seq, Matrix, compose, mapToRange, walk, rand };
src/style/anim.cssnew file+460
@@ -0,0 +1,460 @@
1+/* @for $i from 0 through 13 {
2+ .anim-s#{$i} {
3+ animation: s#{$i} #{$i*50}ms steps(#{$i}, end) forwards;
4+}
5+} */
6+.step-h-0 {
7+ animation: frame-h-0 0ms steps(0, end) forwards;
8+}
9+
10+.step-h-1 {
11+ animation: frame-h-1 50ms steps(1, end) forwards;
12+}
13+
14+.step-h-2 {
15+ animation: frame-h-2 100ms steps(2, end) forwards;
16+}
17+
18+.step-h-3 {
19+ animation: frame-h-3 150ms steps(3, end) forwards;
20+}
21+
22+.step-h-4 {
23+ animation: frame-h-4 200ms steps(4, end) forwards;
24+}
25+
26+.step-h-5 {
27+ animation: frame-h-5 250ms steps(5, end) forwards;
28+}
29+
30+.step-h-6 {
31+ animation: frame-h-6 300ms steps(6, end) forwards;
32+}
33+
34+.step-h-7 {
35+ animation: frame-h-7 350ms steps(7, end) forwards;
36+}
37+
38+.step-h-8 {
39+ animation: frame-h-8 400ms steps(8, end) forwards;
40+}
41+
42+.step-h-9 {
43+ animation: frame-h-9 450ms steps(9, end) forwards;
44+}
45+
46+.step-h-10 {
47+ animation: frame-h-10 500ms steps(10, end) forwards;
48+}
49+
50+.step-h-11 {
51+ animation: frame-h-11 550ms steps(11, end) forwards;
52+}
53+
54+.step-h-12 {
55+ animation: frame-h-12 600ms steps(12, end) forwards;
56+}
57+
58+.step-h-13 {
59+ animation: frame-h-13 650ms steps(13, end) forwards;
60+}
61+
62+.step-h-14 {
63+ animation: frame-h-14 700ms steps(14, end) forwards;
64+}
65+
66+.step-v-0 {
67+ animation: frame-v-0 0ms steps(0, end) forwards;
68+}
69+
70+.step-v-1 {
71+ animation: frame-v-1 50ms steps(1, end) forwards;
72+}
73+
74+.step-v-2 {
75+ animation: frame-v-2 100ms steps(2, end) forwards;
76+}
77+
78+.step-v-3 {
79+ animation: frame-v-3 150ms steps(3, end) forwards;
80+}
81+
82+.step-v-4 {
83+ animation: frame-v-4 200ms steps(4, end) forwards;
84+}
85+
86+.step-v-5 {
87+ animation: frame-v-5 250ms steps(5, end) forwards;
88+}
89+
90+.step-v-6 {
91+ animation: frame-v-6 300ms steps(6, end) forwards;
92+}
93+
94+.step-v-7 {
95+ animation: frame-v-7 350ms steps(7, end) forwards;
96+}
97+
98+.step-v-8 {
99+ animation: frame-v-8 400ms steps(8, end) forwards;
100+}
101+
102+.step-v-9 {
103+ animation: frame-v-9 450ms steps(9, end) forwards;
104+}
105+
106+.step-v-10 {
107+ animation: frame-v-10 500ms steps(10, end) forwards;
108+}
109+
110+.step-v-11 {
111+ animation: frame-v-11 550ms steps(11, end) forwards;
112+}
113+
114+.step-v-12 {
115+ animation: frame-v-12 600ms steps(12, end) forwards;
116+}
117+
118+.step-v-13 {
119+ animation: frame-v-13 650ms steps(13, end) forwards;
120+}
121+
122+.step-v-14 {
123+ animation: frame-v-14 700ms steps(14, end) forwards;
124+}
125+
126+.slide-h-0 {
127+ animation: frame-h-0 0ms forwards;
128+}
129+
130+.slide-h-1 {
131+ animation: frame-h-1 100ms forwards;
132+}
133+
134+.slide-h-2 {
135+ animation: frame-h-2 200ms forwards;
136+}
137+
138+.slide-h-3 {
139+ animation: frame-h-3 300ms forwards;
140+}
141+
142+.slide-h-4 {
143+ animation: frame-h-4 400ms forwards;
144+}
145+
146+.slide-h-5 {
147+ animation: frame-h-5 500ms forwards;
148+}
149+
150+.slide-h-6 {
151+ animation: frame-h-6 600ms forwards;
152+}
153+
154+.slide-h-7 {
155+ animation: frame-h-7 700ms forwards;
156+}
157+
158+.slide-h-8 {
159+ animation: frame-h-8 800ms forwards;
160+}
161+
162+.slide-h-9 {
163+ animation: frame-h-9 900ms forwards;
164+}
165+
166+.slide-h-10 {
167+ animation: frame-h-10 1000ms forwards;
168+}
169+
170+.slide-h-11 {
171+ animation: frame-h-11 1100ms forwards;
172+}
173+
174+.slide-h-12 {
175+ animation: frame-h-12 1200ms forwards;
176+}
177+
178+.slide-h-13 {
179+ animation: frame-h-13 1300ms forwards;
180+}
181+
182+.slide-h-14 {
183+ animation: frame-h-14 1400ms forwards;
184+}
185+
186+.slide-v-0 {
187+ animation: frame-v-0 0ms forwards;
188+}
189+
190+.slide-v-1 {
191+ animation: frame-v-1 200ms forwards;
192+}
193+
194+.slide-v-2 {
195+ animation: frame-v-2 400ms forwards;
196+}
197+
198+.slide-v-3 {
199+ animation: frame-v-3 600ms forwards;
200+}
201+
202+.slide-v-4 {
203+ animation: frame-v-4 800ms forwards;
204+}
205+
206+.slide-v-5 {
207+ animation: frame-v-5 1000ms forwards;
208+}
209+
210+.slide-v-6 {
211+ animation: frame-v-6 1200ms forwards;
212+}
213+
214+.slide-v-7 {
215+ animation: frame-v-7 1400ms forwards;
216+}
217+
218+.slide-v-8 {
219+ animation: frame-v-8 1600ms forwards;
220+}
221+
222+.slide-v-9 {
223+ animation: frame-v-9 1800ms forwards;
224+}
225+
226+.slide-v-10 {
227+ animation: frame-v-10 2000ms forwards;
228+}
229+
230+.slide-v-11 {
231+ animation: frame-v-11 2200ms forwards;
232+}
233+
234+.slide-v-12 {
235+ animation: frame-v-12 2400ms forwards;
236+}
237+
238+.slide-v-13 {
239+ animation: frame-v-13 2600ms forwards;
240+}
241+
242+.slide-v-14 {
243+ animation: frame-v-14 2800ms forwards;
244+}
245+
246+@keyframes s0 {
247+ to {
248+ background-position: 0px 0px;
249+ }
250+}
251+@keyframes frame-h-0 {
252+ to {
253+ background-position: -0px 0px;
254+ }
255+}
256+@keyframes frame-h-1 {
257+ to {
258+ background-position: -12px 0px;
259+ }
260+}
261+@keyframes frame-h-2 {
262+ to {
263+ background-position: -24px 0px;
264+ }
265+}
266+@keyframes frame-h-3 {
267+ to {
268+ background-position: -36px 0px;
269+ }
270+}
271+@keyframes frame-h-4 {
272+ to {
273+ background-position: -48px 0px;
274+ }
275+}
276+@keyframes frame-h-5 {
277+ to {
278+ background-position: -60px 0px;
279+ }
280+}
281+@keyframes frame-h-6 {
282+ to {
283+ background-position: -72px 0px;
284+ }
285+}
286+@keyframes frame-h-7 {
287+ to {
288+ background-position: -84px 0px;
289+ }
290+}
291+@keyframes frame-h-8 {
292+ to {
293+ background-position: -96px 0px;
294+ }
295+}
296+@keyframes frame-h-9 {
297+ to {
298+ background-position: -108px 0px;
299+ }
300+}
301+@keyframes frame-h-10 {
302+ to {
303+ background-position: -120px 0px;
304+ }
305+}
306+@keyframes frame-h-11 {
307+ to {
308+ background-position: -132px 0px;
309+ }
310+}
311+@keyframes frame-h-12 {
312+ to {
313+ background-position: -144px 0px;
314+ }
315+}
316+@keyframes frame-h-13 {
317+ to {
318+ background-position: -156px 0px;
319+ }
320+}
321+@keyframes frame-h-14 {
322+ to {
323+ background-position: -168px 0px;
324+ }
325+}
326+@keyframes frame-v-14 {
327+ to {
328+ background-position: 0px 0px;
329+ }
330+}
331+@keyframes frame-v-13 {
332+ to {
333+ background-position: 0px 12px;
334+ }
335+}
336+@keyframes frame-v-12 {
337+ to {
338+ background-position: 0px 24px;
339+ }
340+}
341+@keyframes frame-v-11 {
342+ to {
343+ background-position: 0px 36px;
344+ }
345+}
346+@keyframes frame-v-10 {
347+ to {
348+ background-position: 0px 48px;
349+ }
350+}
351+@keyframes frame-v-9 {
352+ to {
353+ background-position: 0px 60px;
354+ }
355+}
356+@keyframes frame-v-8 {
357+ to {
358+ background-position: 0px 72px;
359+ }
360+}
361+@keyframes frame-v-7 {
362+ to {
363+ background-position: 0px 84px;
364+ }
365+}
366+@keyframes frame-v-6 {
367+ to {
368+ background-position: 0px 96px;
369+ }
370+}
371+@keyframes frame-v-5 {
372+ to {
373+ background-position: 0px 108px;
374+ }
375+}
376+@keyframes frame-v-4 {
377+ to {
378+ background-position: 0px 120px;
379+ }
380+}
381+@keyframes frame-v-3 {
382+ to {
383+ background-position: 0px 132px;
384+ }
385+}
386+@keyframes frame-v-2 {
387+ to {
388+ background-position: 0px 144px;
389+ }
390+}
391+@keyframes frame-v-1 {
392+ to {
393+ background-position: 0px 156px;
394+ }
395+}
396+@keyframes frame-v-0 {
397+ to {
398+ background-position: 0px 168px;
399+ }
400+}
401+
402+.blink {
403+ animation: s0 1s steps(2, forwards) infinite;
404+ -webkit-animation: s0 1s steps(2, forwards) infinite;
405+}
406+
407+/* @keyframes blink-animation {
408+ to {
409+ visibility: hidden;
410+ }
411+}
412+@-webkit-keyframes blink-animation {
413+ to {
414+ visibility: hidden;
415+ }
416+} */
417+
418+
419+
420+button {
421+ border: 1px solid #A6A6A6;
422+ padding: 5px 5px;
423+ margin-bottom: 2px;
424+ border-radius: 7px;
425+ font-family: Inter;
426+ outline: none;
427+}
428+
429+button:hover {
430+ cursor: pointer;
431+ /* border: 2px solid #E6E6E6;
432+ background-color: #E6E6E6; */
433+}
434+
435+/*
436+button:active {
437+ background-color: #4330FC;
438+ border: 1px solid #4330FC;
439+ color: white;
440+} */
441+
442+button:active {
443+ background-color: #000;
444+ border: 1px solid #000;
445+ color: white;
446+}
447+
448+button:disabled{
449+ cursor: default;
450+ pointer-events: none;
451+}
452+
453+p {
454+ font-size: 12px;
455+}
456+
457+*{
458+ -moz-osx-font-smoothing: grayscale;
459+ font-smoothing: grayscale;
460+}
src/style/indigo-proposals.scss+1−1
@@ -1,6 +1,6 @@
1.mw1 {
1.mw1 {
2 margin: 0 auto;
2 margin: 0 auto;
3− max-width: calc(32rem + 48px * 2);
3+ max-width: calc(28rem + 52px * 2);
4 // TODO: this css is gross, fix
4 // TODO: this css is gross, fix
5}
5}
6
6
src/views/Activate/ActivateCode.js+7−2
@@ -1,5 +1,5 @@
1import React, { useCallback, useMemo, useRef } from 'react';
1import React, { useCallback, useMemo, useRef } from 'react';
2−import { Just } from 'folktale/maybe';
2+import { Just, Nothing } from 'folktale/maybe';
3import * as azimuth from 'azimuth-js';
3import * as azimuth from 'azimuth-js';
4import { Grid, H4, P, CheckboxInput } from 'indigo-react';
4import { Grid, H4, P, CheckboxInput } from 'indigo-react';
5import { FORM_ERROR } from 'final-form';
5import { FORM_ERROR } from 'final-form';
@@ -146,7 +146,12 @@ export default function ActivateCode() {
146 return (
146 return (
147 <View inset>
147 <View inset>
148 <Grid>
148 <Grid>
149+ <Grid.Item
150+ full
151+ as={Passport}
149− <Grid.Item full as={Passport} point={derivedPoint} />
152+ point={derivedPoint}
153+ address={Nothing()}
154+ />
150 <Grid.Item full as={H4} className="mt3">
155 <Grid.Item full as={H4} className="mt3">
151 Activate
156 Activate
152 </Grid.Item>
157 </Grid.Item>
src/views/Activate/ActivatePassport.js+5−6
@@ -1,6 +1,6 @@
1import React, { useMemo } from 'react';
1import React, { useMemo } from 'react';
2import cn from 'classnames';
2import cn from 'classnames';
3−import { Grid } from 'indigo-react';
3+import { Grid, Flex } from 'indigo-react';
4
4
5import { LocalRouterProvider, useLocalRouter } from 'lib/LocalRouter';
5import { LocalRouterProvider, useLocalRouter } from 'lib/LocalRouter';
6
6
@@ -62,12 +62,12 @@ export default function ActivatePassport() {
62 .map(wallet => addressFromSecp256k1Public(wallet.publicKey)),
62 .map(wallet => addressFromSecp256k1Public(wallet.publicKey)),
63 [derivedWallet]
63 [derivedWallet]
64 );
64 );
65−
65+ //~hobbyn-mismur-fonrux-datber
66 return (
66 return (
67− <View full={fullView}>
67+ <View inset>
68 <LocalRouterProvider value={router}>
68 <LocalRouterProvider value={router}>
69 <Grid gap={gap} className="mt8 mb10">
69 <Grid gap={gap} className="mt8 mb10">
70− <Grid.Item half={half && 1} full={full}>
70+ <Grid.Item full>
71 <Passport
71 <Passport
72 className={cn({ [`mt${marginTop}`]: marginTop })}
72 className={cn({ [`mt${marginTop}`]: marginTop })}
73 point={derivedPoint}
73 point={derivedPoint}
@@ -76,8 +76,7 @@ export default function ActivatePassport() {
76 />
76 />
77 </Grid.Item>
77 </Grid.Item>
78 <Grid.Item
78 <Grid.Item
79− half={half && 2}
80− full={full}
79+ full
81 as={Route}
80 as={Route}
82 resetActivateRouter={resetActivateRouter}
81 resetActivateRouter={resetActivateRouter}
83 />
82 />
src/views/Invite/InviteEmail.js+1−10
@@ -378,16 +378,7 @@ export default function InviteEmail() {
378 if (errorString !== '') {
378 if (errorString !== '') {
379 throw new Error(errorString);
379 throw new Error(errorString);
380 }
380 }
381− }, [
381+ }, [web3, wallet, point, gasPrice, invites, clearReceipts, addReceipt]);
382− web3,
383− wallet,
384− point,
385− gasPrice,
386− invites,
387− clearReceipts,
388− addReceipt,
389− sendMail,
390− ]);
391
382
392 const onSubmit = useCallback(
383 const onSubmit = useCallback(
393 async values => {
384 async values => {
src/views/Point.js+9−1
@@ -4,6 +4,7 @@ import { Grid } from 'indigo-react';
4import { azimuth } from 'azimuth-js';
4import { azimuth } from 'azimuth-js';
5
5
6import { usePointCursor } from 'store/pointCursor';
6import { usePointCursor } from 'store/pointCursor';
7+import { useWallet } from 'store/wallet';
7
8
8import View from 'components/View';
9import View from 'components/View';
9import Greeting from 'components/Greeting';
10import Greeting from 'components/Greeting';
@@ -22,6 +23,7 @@ export default function Point() {
22 const { pop, push, names } = useLocalRouter();
23 const { pop, push, names } = useLocalRouter();
23 const { pointCursor } = usePointCursor();
24 const { pointCursor } = usePointCursor();
24
25
26+ const { wallet } = useWallet();
25 const point = need.point(pointCursor);
27 const point = need.point(pointCursor);
26
28
27 const {
29 const {
@@ -87,10 +89,16 @@ export default function Point() {
87 // sync the current cursor
89 // sync the current cursor
88 useSyncOwnedPoints([point]);
90 useSyncOwnedPoints([point]);
89
91
92+ const address = need.addressFromWallet(wallet);
93+
90 return (
94 return (
91 <View pop={pop} inset>
95 <View pop={pop} inset>
92 <Greeting point={point} />
96 <Greeting point={point} />
97+ <Passport
93− <Passport point={Just(point)} />
98+ point={Just(point)}
99+ address={Just(address)}
100+ animationMode={'slide'}
101+ />
94 <Grid className="pt2">
102 <Grid className="pt2">
95 {inviteButton}
103 {inviteButton}
96 <Grid.Item
104 <Grid.Item