on master help sign in
integrates PaperRenderer
f14f06aGavin Atkinson
package-lock.json+30−48
@@ -2167,37 +2167,6 @@
2167 "integrity": "sha512-uUrgZ8AxS+Lio0fZKAipJjAh415JyrOZowliZAzmnJSsf7piVL5w+G0+gFJ0KSu3QRhvui/7zuvpLz03YjXAhg==",
2167 "integrity": "sha512-uUrgZ8AxS+Lio0fZKAipJjAh415JyrOZowliZAzmnJSsf7piVL5w+G0+gFJ0KSu3QRhvui/7zuvpLz03YjXAhg==",
2168 "dev": true
2168 "dev": true
2169 },
2169 },
2170− "PaperRenderer": {
2171− "version": "github:urbit/PaperRenderer#4a5dd07e3ff2d225d6a955ef6a2ed822c7369422",
2172− "from": "github:urbit/PaperRenderer#rc-2.0",
2173− "requires": {
2174− "lodash.get": "^4.4.2",
2175− "prop-types": "^15.7.2",
2176− "urbit-sigil-js": "^1.3.7"
2177− },
2178− "dependencies": {
2179− "prop-types": {
2180− "version": "15.7.2",
2181− "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
2182− "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
2183− "requires": {
2184− "loose-envify": "^1.4.0",
2185− "object-assign": "^4.1.1",
2186− "react-is": "^16.8.1"
2187− }
2188− },
2189− "urbit-sigil-js": {
2190− "version": "1.3.7",
2191− "resolved": "https://registry.npmjs.org/urbit-sigil-js/-/urbit-sigil-js-1.3.7.tgz",
2192− "integrity": "sha512-s/4sBpzSRX22r39FvNkpaMkt3xI6FJBj79Dp7FtYGR90es4ZLWNY3eA8QVrjHL+pcj4RyX56O62mXrRQ83ZsoQ==",
2193− "requires": {
2194− "react": "^16.8.6",
2195− "svgson": "^4.0.0",
2196− "transformation-matrix": "^1.14.0"
2197− }
2198− }
2199− }
2200− },
2201 "abab": {
2170 "abab": {
2202 "version": "2.0.0",
2171 "version": "2.0.0",
2203 "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz",
2172 "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz",
@@ -11507,11 +11476,21 @@
11507 "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz",
11476 "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz",
11508 "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc="
11477 "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc="
11509 },
11478 },
11479+ "lodash.chunk": {
11480+ "version": "4.2.0",
11481+ "resolved": "https://registry.npmjs.org/lodash.chunk/-/lodash.chunk-4.2.0.tgz",
11482+ "integrity": "sha1-ZuXOH3btJ7QwPYxlEujRIW6BBrw="
11483+ },
11510 "lodash.get": {
11484 "lodash.get": {
11511 "version": "4.4.2",
11485 "version": "4.4.2",
11512 "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
11486 "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
11513 "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk="
11487 "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk="
11514 },
11488 },
11489+ "lodash.isequal": {
11490+ "version": "4.5.0",
11491+ "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
11492+ "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA="
11493+ },
11515 "lodash.memoize": {
11494 "lodash.memoize": {
11516 "version": "4.1.2",
11495 "version": "4.1.2",
11517 "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
11496 "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
@@ -17522,9 +17501,9 @@
17522 "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg="
17501 "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg="
17523 },
17502 },
17524 "urbit-key-generation": {
17503 "urbit-key-generation": {
17525− "version": "0.16.0",
17504+ "version": "0.17.1",
17526− "resolved": "https://registry.npmjs.org/urbit-key-generation/-/urbit-key-generation-0.16.0.tgz",
17505+ "resolved": "https://registry.npmjs.org/urbit-key-generation/-/urbit-key-generation-0.17.1.tgz",
17527− "integrity": "sha512-3nwiIb2OGg0KdT/k+iJGjJJ5hUjPt64gmUu6wbDkLCfPLAn0xMN0FqaBd9mEc0niqWH1z6v0iJR4N7Vv0xMPVg==",
17506+ "integrity": "sha512-pAbpl7dDi/VsNm1wMSLLVKByJcOH4GxbW5HwjAB8UxR2SToHBpgQh/B8BZ2BuS+9yCc1xWWzRveO/aKcxqJ/VQ==",
17528 "requires": {
17507 "requires": {
17529 "argon2-wasm": "^0.9.0",
17508 "argon2-wasm": "^0.9.0",
17530 "bip32": "^1.0.2",
17509 "bip32": "^1.0.2",
@@ -17533,32 +17512,35 @@
17533 "keccak": "^1.4.0",
17512 "keccak": "^1.4.0",
17534 "secp256k1": "^3.5.2",
17513 "secp256k1": "^3.5.2",
17535 "tweetnacl": "^1.0.0",
17514 "tweetnacl": "^1.0.0",
17536− "urbit-ob": "^4.0.0"
17515+ "urbit-ob": "4.1.1"
17537 },
17516 },
17538 "dependencies": {
17517 "dependencies": {
17539 "urbit-ob": {
17518 "urbit-ob": {
17540− "version": "4.0.0",
17519+ "version": "4.1.1",
17541− "resolved": "https://registry.npmjs.org/urbit-ob/-/urbit-ob-4.0.0.tgz",
17520+ "resolved": "https://registry.npmjs.org/urbit-ob/-/urbit-ob-4.1.1.tgz",
17542− "integrity": "sha512-FsVQx4h2Kuu+ZqUOmAUDAQFlw9r1R+B6r9Bu9TnyNDOraLUlojBw5wG5ONbWiK0g7sgeQkQ3rMVyXqiv41Vrpg==",
17521+ "integrity": "sha512-YaUhzaGpFOHZoXr9qp8417kPkEcTlVdzrX+izGlwfLpWIwiSiCoI+0ZiPxgX+uDZmfQ2KqGEQxAS2BosDQne9Q==",
17543 "requires": {
17522 "requires": {
17544 "bn.js": "^4.11.8",
17523 "bn.js": "^4.11.8",
17545− "lodash": "^4.17.11"
17524+ "lodash.chunk": "^4.2.0",
17525+ "lodash.isequal": "^4.5.0"
17546 }
17526 }
17547 }
17527 }
17548 }
17528 }
17549 },
17529 },
17550 "urbit-ob": {
17530 "urbit-ob": {
17551− "version": "4.0.1",
17531+ "version": "4.1.2",
17552− "resolved": "https://registry.npmjs.org/urbit-ob/-/urbit-ob-4.0.1.tgz",
17532+ "resolved": "https://registry.npmjs.org/urbit-ob/-/urbit-ob-4.1.2.tgz",
17553− "integrity": "sha512-+qjXNJ1tTf7hTUU/2uOj0w3RgvfTWSOIug8sM1IBy8AEbEU7H/Mv/oIudVNeR5AQa2WusvTxgfSZ4GxenPZdDg==",
17533+ "integrity": "sha512-r9Y25Lb5gHSgOEZ2hc+NG2qi1fySfQdoqbim4ygz/yQcBZ5mpEuF6DLOON7o01eBx3vspHZeQVQaoFJ9DrCesg==",
17554 "requires": {
17534 "requires": {
17555 "bn.js": "^4.11.8",
17535 "bn.js": "^4.11.8",
17556− "lodash": "^4.17.11"
17536+ "lodash.chunk": "^4.2.0",
17537+ "lodash.isequal": "^4.5.0"
17557 }
17538 }
17558 },
17539 },
17559 "urbit-paper-renderer": {
17540 "urbit-paper-renderer": {
17560− "version": "github:urbit/PaperRenderer#4a5dd07e3ff2d225d6a955ef6a2ed822c7369422",
17541+ "version": "2.0.4",
17561− "from": "github:urbit/PaperRenderer#rc-2.0",
17542+ "resolved": "https://registry.npmjs.org/urbit-paper-renderer/-/urbit-paper-renderer-2.0.4.tgz",
17543+ "integrity": "sha512-mwyyLSr6gh1YDQZELU7gktGHQWVhniJ1bOTtEJOSrt0KY2EML5uDGYabl0wLBqFzG9NsgnqEDDCxFhWvWCMUcw==",
17562 "requires": {
17544 "requires": {
17563 "lodash.get": "^4.4.2",
17545 "lodash.get": "^4.4.2",
17564 "prop-types": "^15.7.2",
17546 "prop-types": "^15.7.2",
@@ -17576,9 +17558,9 @@
17576 }
17558 }
17577 },
17559 },
17578 "urbit-sigil-js": {
17560 "urbit-sigil-js": {
17579− "version": "1.3.7",
17561+ "version": "1.3.8",
17580− "resolved": "https://registry.npmjs.org/urbit-sigil-js/-/urbit-sigil-js-1.3.7.tgz",
17562+ "resolved": "https://registry.npmjs.org/urbit-sigil-js/-/urbit-sigil-js-1.3.8.tgz",
17581− "integrity": "sha512-s/4sBpzSRX22r39FvNkpaMkt3xI6FJBj79Dp7FtYGR90es4ZLWNY3eA8QVrjHL+pcj4RyX56O62mXrRQ83ZsoQ==",
17563+ "integrity": "sha512-79sUuTuloZ49+YZjbMwbUB8MGLQcfnceksuuwnux8Vj/m0+GHAzxvxWvRKeQioPnfrLGfjTbQ8vWgfkXWaB/Pg==",
17582 "requires": {
17564 "requires": {
17583 "react": "^16.8.6",
17565 "react": "^16.8.6",
17584 "svgson": "^4.0.0",
17566 "svgson": "^4.0.0",
package.json+3−4
@@ -18,7 +18,6 @@
18 "@ledgerhq/hw-app-eth": "^4.61.0",
18 "@ledgerhq/hw-app-eth": "^4.61.0",
19 "@ledgerhq/hw-transport-u2f": "^4.61.0",
19 "@ledgerhq/hw-transport-u2f": "^4.61.0",
20 "@welldone-software/why-did-you-render": "^3.2.3",
20 "@welldone-software/why-did-you-render": "^3.2.3",
21− "PaperRenderer": "github:urbit/PaperRenderer#rc-2.0",
22 "async-retry": "^1.2.3",
21 "async-retry": "^1.2.3",
23 "azimuth-js": "^0.15.1",
22 "azimuth-js": "^0.15.1",
24 "azimuth-solidity": "^1.2.0",
23 "azimuth-solidity": "^1.2.0",
@@ -49,9 +48,9 @@
49 "react-teleporter": "^1.1.0",
48 "react-teleporter": "^1.1.0",
50 "secp256k1": "^3.5.2",
49 "secp256k1": "^3.5.2",
51 "trezor-connect": "^7.0.1",
50 "trezor-connect": "^7.0.1",
52− "urbit-key-generation": "^0.16.0",
51+ "urbit-key-generation": "^0.17.1",
53− "urbit-ob": "^4.0.1",
52+ "urbit-ob": "^4.1.2",
54− "urbit-paper-renderer": "github:urbit/PaperRenderer#rc-2.0",
53+ "urbit-paper-renderer": "^2.0.4",
55 "urbit-sigil-js": "^1.3.5",
54 "urbit-sigil-js": "^1.3.5",
56 "web3": "1.0.0-beta.54",
55 "web3": "1.0.0-beta.54",
57 "web3-utils": "^1.0.0-beta.52"
56 "web3-utils": "^1.0.0-beta.52"
src/components/Greeting.js+1−1
@@ -1,6 +1,6 @@
1import React, { useCallback } from 'react';
1import React, { useCallback } from 'react';
2import cn from 'classnames';
2import cn from 'classnames';
3−import * as ob from 'urbit-ob';
3+import ob from 'urbit-ob';
4import { Grid, Text, LinkButton } from 'indigo-react';
4import { Grid, Text, LinkButton } from 'indigo-react';
5
5
6import { useLocalRouter } from 'lib/LocalRouter';
6import { useLocalRouter } from 'lib/LocalRouter';
src/components/MaybeSigil.js+1−1
@@ -1,5 +1,5 @@
1import React from 'react';
1import React from 'react';
2−import * as ob from 'urbit-ob';
2+import ob from 'urbit-ob';
3
3
4import Sigil from './Sigil';
4import Sigil from './Sigil';
5import AspectRatio from './AspectRatio';
5import AspectRatio from './AspectRatio';
src/components/PaperBuilder.js+6−4
@@ -1,14 +1,16 @@
1import React from 'react';
1import React from 'react';
2import PaperRenderer from 'urbit-paper-renderer';
2import PaperRenderer from 'urbit-paper-renderer';
3
3
4−export default function PaperBuilder({ point, wallet, callback, ...props }) {
4+export default function PaperBuilder({ point, wallets, callback, ...props }) {
5 return (
5 return (
6 <PaperRenderer
6 <PaperRenderer
7− wallet={[wallet]}
7+ wallets={wallets}
8− callback={callback}
8+ callback={data => {
9− className="super-hidden"
9+ callback(data);
10+ }}
10 show={false}
11 show={false}
11 debug={false}
12 debug={false}
13+ output={'png'}
12 />
14 />
13 );
15 );
14}
16}
src/components/Passport.js+1−1
@@ -1,7 +1,7 @@
1import React, { useMemo } from 'react';
1import React, { useMemo } from 'react';
2import cn from 'classnames';
2import cn from 'classnames';
3import { Just, Nothing } from 'folktale/maybe';
3import { Just, Nothing } from 'folktale/maybe';
4−import * as ob from 'urbit-ob';
4+import ob from 'urbit-ob';
5import { Grid, Flex, Text } from 'indigo-react';
5import { Grid, Flex, Text } from 'indigo-react';
6import { times } from 'lodash';
6import { times } from 'lodash';
7
7
src/lib/invite.js+16−23
@@ -10,32 +10,25 @@ export async function generateWallet(point) {
10}
10}
11
11
12//TODO should be moved to lib/walletgen
12//TODO should be moved to lib/walletgen
13−export async function downloadWallet(paper) {
13+export async function downloadWallet(paperWallets) {
14− return new Promise((resolve, reject) => {
14+ if (paperWallets.length === 1) {
15 const zip = new JSZip();
15 const zip = new JSZip();
16− //TODO the categories here aren't explained in bridge at all...
17
16
18− const bin0 = paper.filter(item => item.bin === '0');
17+ const wallet = paperWallets[0];
19− const bin1 = paper.filter(item => item.bin === '1');
18+ const ship = wallet.wallet.meta.patp.replace('~', '');
20− const bin2 = paper.filter(item => item.bin === '2');
19+ const zipName = `${ship}-passport`;
21− const bin3 = paper.filter(item => item.bin === '3');
20+ const folder = zip.folder(zipName);
22− const bin4 = paper.filter(item => item.bin === '4');
23
21
24− const bin0Folder = zip.folder('0. Public');
22+ wallet.frames.forEach(frame => {
25− const bin1Folder = zip.folder('1. Very High Friction Custody');
23+ const filename = `${ship}-${frame.givenName}.png`;
26− const bin2Folder = zip.folder('2. High Friction Custody');
24+ folder.file(filename, frame.image);
27− const bin3Folder = zip.folder('3. Medium Friction Custody');
25+ });
28− const bin4Folder = zip.folder('4. Low Friction Custody');
29−
30− bin0.forEach(item => bin0Folder.file(`${item.pageTitle}.png`, item.png));
31− bin1.forEach(item => bin1Folder.file(`${item.pageTitle}.png`, item.png));
32− bin2.forEach(item => bin2Folder.file(`${item.pageTitle}.png`, item.png));
33− bin3.forEach(item => bin3Folder.file(`${item.pageTitle}.png`, item.png));
34− bin4.forEach(item => bin4Folder.file(`${item.pageTitle}.png`, item.png));
35
26
36− zip.generateAsync({ type: 'blob' }).then(content => {
27+ await zip.generateAsync({ type: 'blob' }).then(content => {
37− saveAs(content, 'urbit-wallet.zip');
28+ saveAs(content, `${zipName}.zip`);
38− resolve(true);
29+ // resolve(true);
39 });
30 });
40− });
31+ } else {
32+ console.error('downloadWallet() can only download 1 wallet at a time.');
33+ }
41}
34}
src/lib/lib.js+1−1
@@ -1,4 +1,4 @@
1−import * as ob from 'urbit-ob';
1+import ob from 'urbit-ob';
2import patp2dec from './patp2dec';
2import patp2dec from './patp2dec';
3
3
4const compose = (...fs) =>
4const compose = (...fs) =>
src/lib/patp2dec.js+1−1
@@ -1,4 +1,4 @@
1−import * as ob from 'urbit-ob';
1+import ob from 'urbit-ob';
2
2
3import convertToInt from './convertToInt';
3import convertToInt from './convertToInt';
4
4
src/lib/useCurrentPointName.js+1−1
@@ -1,4 +1,4 @@
1−import * as ob from 'urbit-ob';
1+import ob from 'urbit-ob';
2
2
3import { usePointCursor } from 'store/pointCursor';
3import { usePointCursor } from 'store/pointCursor';
4
4
src/lib/useImpliedPoint.js+1−1
@@ -1,4 +1,4 @@
1−import * as ob from 'urbit-ob';
1+import ob from 'urbit-ob';
2
2
3import { ensurePatFormat } from 'form/formatters';
3import { ensurePatFormat } from 'form/formatters';
4
4
src/lib/useImpliedTicket.js+1−1
@@ -1,4 +1,4 @@
1−import * as ob from 'urbit-ob';
1+import ob from 'urbit-ob';
2
2
3import { ensurePatFormat } from 'form/formatters';
3import { ensurePatFormat } from 'form/formatters';
4
4
src/lib/useKeyfileGenerator.js+1−1
@@ -1,7 +1,7 @@
1import { useCallback, useEffect, useState } from 'react';
1import { useCallback, useEffect, useState } from 'react';
2import { Just, Nothing } from 'folktale/maybe';
2import { Just, Nothing } from 'folktale/maybe';
3import saveAs from 'file-saver';
3import saveAs from 'file-saver';
4−import * as ob from 'urbit-ob';
4+import ob from 'urbit-ob';
5
5
6import { usePointCache } from 'store/pointCache';
6import { usePointCache } from 'store/pointCache';
7import { useWallet } from 'store/wallet';
7import { useWallet } from 'store/wallet';
src/lib/validators.js+1−1
@@ -1,5 +1,5 @@
1import * as bip39 from 'bip39';
1import * as bip39 from 'bip39';
2−import * as ob from 'urbit-ob';
2+import ob from 'urbit-ob';
3import { includes } from 'lodash';
3import { includes } from 'lodash';
4
4
5import { isValidAddress, ETH_ZERO_ADDR, ETH_ZERO_ADDR_SHORT } from './wallet';
5import { isValidAddress, ETH_ZERO_ADDR, ETH_ZERO_ADDR_SHORT } from './wallet';
src/lib/wallet.js+1−1
@@ -4,7 +4,7 @@ import keccak from 'keccak';
4import { reduce } from 'lodash';
4import { reduce } from 'lodash';
5import { Just, Nothing } from 'folktale/maybe';
5import { Just, Nothing } from 'folktale/maybe';
6import * as secp256k1 from 'secp256k1';
6import * as secp256k1 from 'secp256k1';
7−import * as kg from 'urbit-key-generation/dist';
7+import * as kg from 'urbit-key-generation';
8import { isAddress } from 'web3-utils';
8import { isAddress } from 'web3-utils';
9
9
10export const DEFAULT_HD_PATH = "m/44'/60'/0'/0/0";
10export const DEFAULT_HD_PATH = "m/44'/60'/0'/0/0";
src/lib/walletgen.js+2−2
@@ -1,5 +1,5 @@
1−import * as ob from 'urbit-ob';
1+import ob from 'urbit-ob';
2−import * as kg from 'urbit-key-generation/dist';
2+import kg from 'urbit-key-generation';
3import * as more from 'more-entropy';
3import * as more from 'more-entropy';
4import { chunk, flatMap, zipWith } from 'lodash';
4import { chunk, flatMap, zipWith } from 'lodash';
5
5
src/views/Activate/PassportDownload.js+4−2
@@ -79,8 +79,10 @@ export default function PassportDownload({ className }) {
79 </PassportView>
79 </PassportView>
80 <PaperBuilder
80 <PaperBuilder
81 point={pointAsString}
81 point={pointAsString}
82− wallet={wallet}
82+ wallets={[wallet]}
83+ callback={data => {
83− callback={data => setPaper(Just(data))}
84+ setPaper(Just(data));
85+ }}
84 />
86 />
85 </>
87 </>
86 );
88 );
src/views/Admin/AdminRedownload.js+1−1
@@ -62,7 +62,7 @@ export default function AdminRedownload() {
62 </Grid>
62 </Grid>
63 <PaperBuilder
63 <PaperBuilder
64 point={point}
64 point={point}
65− wallet={_urbitWallet}
65+ wallets={[_urbitWallet]}
66 callback={paper => {
66 callback={paper => {
67 setPaper(Just(paper));
67 setPaper(Just(paper));
68 }}
68 }}
src/views/Admin/Reticket/ReticketConfirm.js+1−1
@@ -56,7 +56,7 @@ export default function ReticketConfirm({ newWallet, setNewWallet }) {
56 Just: ({ value: wallet }) => (
56 Just: ({ value: wallet }) => (
57 <PaperBuilder
57 <PaperBuilder
58 point={point}
58 point={point}
59− wallet={wallet}
59+ wallets={[wallet]}
60 callback={paper => {
60 callback={paper => {
61 setNewWallet(wallet, paper);
61 setNewWallet(wallet, paper);
62 }}
62 }}
src/views/Invite/InviteEmail.js+1−1
@@ -6,7 +6,7 @@ import React, {
6 useState,
6 useState,
7} from 'react';
7} from 'react';
8import cn from 'classnames';
8import cn from 'classnames';
9−import * as ob from 'urbit-ob';
9+import ob from 'urbit-ob';
10import * as azimuth from 'azimuth-js';
10import * as azimuth from 'azimuth-js';
11import {
11import {
12 Grid,
12 Grid,
src/views/IssueChild.js+1−1
@@ -2,7 +2,7 @@ import React, { useCallback, useMemo, useState } from 'react';
2import cn from 'classnames';
2import cn from 'classnames';
3import { Grid, Text } from 'indigo-react';
3import { Grid, Text } from 'indigo-react';
4import * as azimuth from 'azimuth-js';
4import * as azimuth from 'azimuth-js';
5−import * as ob from 'urbit-ob';
5+import ob from 'urbit-ob';
6
6
7import { useNetwork } from 'store/network';
7import { useNetwork } from 'store/network';
8import { usePointCache } from 'store/pointCache';
8import { usePointCache } from 'store/pointCache';
src/views/Login/Ticket.js+1−1
@@ -2,7 +2,7 @@ import React, { useCallback, useMemo, useRef } from 'react';
2import { Just } from 'folktale/maybe';
2import { Just } from 'folktale/maybe';
3import cn from 'classnames';
3import cn from 'classnames';
4import * as azimuth from 'azimuth-js';
4import * as azimuth from 'azimuth-js';
5−import * as kg from 'urbit-key-generation/dist/index';
5+import * as kg from 'urbit-key-generation/dist';
6import { Grid, CheckboxInput, Flex, ToggleInput } from 'indigo-react';
6import { Grid, CheckboxInput, Flex, ToggleInput } from 'indigo-react';
7import { FORM_ERROR } from 'final-form';
7import { FORM_ERROR } from 'final-form';
8
8