diff --git a/.gitignore b/.gitignore index 6a6c384ea..3b42cabb9 100644 --- a/.gitignore +++ b/.gitignore @@ -9,4 +9,5 @@ public .cache storybook-static public/storybook -.artifacts \ No newline at end of file +.artifacts +.vercel \ No newline at end of file diff --git a/api/file.tsx b/api/file.ts similarity index 100% rename from api/file.tsx rename to api/file.ts diff --git a/api/redeploy.tsx b/api/redeploy.ts similarity index 100% rename from api/redeploy.tsx rename to api/redeploy.ts diff --git a/content/pages/publish.json b/content/pages/publish.json index 41f9bdd96..fc2e15655 100644 --- a/content/pages/publish.json +++ b/content/pages/publish.json @@ -1,4 +1,94 @@ { "title": "Publish Data", - "description": "Highlight the important features of your data set to make it more discoverable and catch the interest of data consumers." + "description": "Highlight the important features of your data set to make it more discoverable and catch the interest of data consumers.", + "form": { + "title": "Publish", + "data": [ + { + "name": "name", + "label": "Title", + "placeholder": "e.g. Shapes of Desert Plants", + "help": "Enter a concise title.", + "required": true + }, + { + "name": "files", + "label": "Files", + "placeholder": "e.g. https://file.com/file.json", + "help": "Please provide a URL to your data set file.", + "type": "files", + "required": true + }, + { + "name": "description", + "label": "Description", + "help": "Add a thorough description with as much detail as possible.", + "type": "textarea", + "required": true + }, + { + "name": "price", + "label": "Price", + "help": "Set your price in Ocean Tokens.", + "type": "price", + "min": 1, + "required": true + }, + { + "name": "access", + "label": "Access Type", + "type": "select", + "options": ["Download", "Compute"], + "required": true + }, + { + "name": "author", + "label": "Author", + "placeholder": "e.g. Jelly McJellyfish", + "help": "Give proper attribution for your data set.", + "required": true + }, + { + "name": "copyrightHolder", + "label": "Copyright Holder", + "placeholder": "e.g. Marine Institute of Jellyfish" + }, + { + "name": "tags", + "label": "Tags", + "placeholder": "e.g. logistics, ai", + "help": "Separate tags with comma." + }, + { + "name": "license", + "label": "License", + "type": "select", + "options": [ + "Public Domain", + "PDDL: Public Domain Dedication and License", + "ODC-By: Attribution License", + "ODC-ODbL: Open Database License", + "CDLA-Sharing: Community Data License Agreement", + "CDLA-Permissive: Community Data License Agreement", + "CC0: Public Domain Dedication", + "CC BY: Attribution 4.0 International", + "CC BY-SA: Attribution-ShareAlike 4.0 International", + "CC BY-ND: Attribution-NoDerivatives 4.0 International", + "CC BY-NC: Attribution-NonCommercial 4.0 International", + "CC BY-NC-SA: Attribution-NonCommercial-ShareAlike 4.0 International", + "CC BY-NC-ND: Attribution-NonCommercial-NoDerivatives 4.0 International", + "No License Specified" + ], + "required": true + }, + { + "name": "termsAndConditions", + "label": "Terms & Conditions", + "type": "checkbox", + "options": ["I agree to these Terms and Conditions"], + "required": true + } + ], + "success": "Asset Created!" + } } diff --git a/package-lock.json b/package-lock.json index c5db4e2b8..c5b4f8ad0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -995,15 +995,6 @@ "@babel/helper-plugin-utils": "^7.10.4" } }, - "@babel/polyfill": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.10.4.tgz", - "integrity": "sha512-8BYcnVqQ5kMD2HXoHInBH7H1b/uP3KdnwCYXOqFnXqguOyuu443WXusbIUbWEfY3Z0Txk0M1uG/8YuAMhNl6zg==", - "requires": { - "core-js": "^2.6.5", - "regenerator-runtime": "^0.13.4" - } - }, "@babel/preset-env": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.10.4.tgz", @@ -1128,15 +1119,6 @@ "regenerator-runtime": "^0.13.4" } }, - "@babel/runtime-corejs2": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.10.4.tgz", - "integrity": "sha512-9sArmpZDQsnR1yyAcU51DxQrntWxt0LUKjPp3pIyo7kVLfaqKt8muppcT87QmFkXV5H50qXAF8JWOjk0jaXRYA==", - "requires": { - "core-js": "^2.6.5", - "regenerator-runtime": "^0.13.4" - } - }, "@babel/runtime-corejs3": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.10.4.tgz", @@ -3383,13 +3365,6 @@ "@jimp/utils": "^0.10.3", "bmp-js": "^0.1.0", "core-js": "^3.4.1" - }, - "dependencies": { - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" - } } }, "@jimp/core": { @@ -3411,11 +3386,6 @@ "tinycolor2": "^1.4.1" }, "dependencies": { - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" - }, "file-type": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/file-type/-/file-type-9.0.0.tgz", @@ -3439,13 +3409,6 @@ "@babel/runtime": "^7.7.2", "@jimp/core": "^0.10.3", "core-js": "^3.4.1" - }, - "dependencies": { - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" - } } }, "@jimp/gif": { @@ -3457,13 +3420,6 @@ "@jimp/utils": "^0.10.3", "core-js": "^3.4.1", "omggif": "^1.0.9" - }, - "dependencies": { - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" - } } }, "@jimp/jpeg": { @@ -3475,13 +3431,6 @@ "@jimp/utils": "^0.10.3", "core-js": "^3.4.1", "jpeg-js": "^0.3.4" - }, - "dependencies": { - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" - } } }, "@jimp/plugin-blit": { @@ -3492,13 +3441,6 @@ "@babel/runtime": "^7.7.2", "@jimp/utils": "^0.10.3", "core-js": "^3.4.1" - }, - "dependencies": { - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" - } } }, "@jimp/plugin-blur": { @@ -3509,13 +3451,6 @@ "@babel/runtime": "^7.7.2", "@jimp/utils": "^0.10.3", "core-js": "^3.4.1" - }, - "dependencies": { - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" - } } }, "@jimp/plugin-circle": { @@ -3526,13 +3461,6 @@ "@babel/runtime": "^7.7.2", "@jimp/utils": "^0.10.3", "core-js": "^3.4.1" - }, - "dependencies": { - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" - } } }, "@jimp/plugin-color": { @@ -3544,13 +3472,6 @@ "@jimp/utils": "^0.10.3", "core-js": "^3.4.1", "tinycolor2": "^1.4.1" - }, - "dependencies": { - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" - } } }, "@jimp/plugin-contain": { @@ -3561,13 +3482,6 @@ "@babel/runtime": "^7.7.2", "@jimp/utils": "^0.10.3", "core-js": "^3.4.1" - }, - "dependencies": { - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" - } } }, "@jimp/plugin-cover": { @@ -3578,13 +3492,6 @@ "@babel/runtime": "^7.7.2", "@jimp/utils": "^0.10.3", "core-js": "^3.4.1" - }, - "dependencies": { - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" - } } }, "@jimp/plugin-crop": { @@ -3595,13 +3502,6 @@ "@babel/runtime": "^7.7.2", "@jimp/utils": "^0.10.3", "core-js": "^3.4.1" - }, - "dependencies": { - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" - } } }, "@jimp/plugin-displace": { @@ -3612,13 +3512,6 @@ "@babel/runtime": "^7.7.2", "@jimp/utils": "^0.10.3", "core-js": "^3.4.1" - }, - "dependencies": { - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" - } } }, "@jimp/plugin-dither": { @@ -3629,13 +3522,6 @@ "@babel/runtime": "^7.7.2", "@jimp/utils": "^0.10.3", "core-js": "^3.4.1" - }, - "dependencies": { - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" - } } }, "@jimp/plugin-fisheye": { @@ -3646,13 +3532,6 @@ "@babel/runtime": "^7.7.2", "@jimp/utils": "^0.10.3", "core-js": "^3.4.1" - }, - "dependencies": { - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" - } } }, "@jimp/plugin-flip": { @@ -3663,13 +3542,6 @@ "@babel/runtime": "^7.7.2", "@jimp/utils": "^0.10.3", "core-js": "^3.4.1" - }, - "dependencies": { - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" - } } }, "@jimp/plugin-gaussian": { @@ -3680,13 +3552,6 @@ "@babel/runtime": "^7.7.2", "@jimp/utils": "^0.10.3", "core-js": "^3.4.1" - }, - "dependencies": { - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" - } } }, "@jimp/plugin-invert": { @@ -3697,13 +3562,6 @@ "@babel/runtime": "^7.7.2", "@jimp/utils": "^0.10.3", "core-js": "^3.4.1" - }, - "dependencies": { - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" - } } }, "@jimp/plugin-mask": { @@ -3714,13 +3572,6 @@ "@babel/runtime": "^7.7.2", "@jimp/utils": "^0.10.3", "core-js": "^3.4.1" - }, - "dependencies": { - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" - } } }, "@jimp/plugin-normalize": { @@ -3731,13 +3582,6 @@ "@babel/runtime": "^7.7.2", "@jimp/utils": "^0.10.3", "core-js": "^3.4.1" - }, - "dependencies": { - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" - } } }, "@jimp/plugin-print": { @@ -3749,13 +3593,6 @@ "@jimp/utils": "^0.10.3", "core-js": "^3.4.1", "load-bmfont": "^1.4.0" - }, - "dependencies": { - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" - } } }, "@jimp/plugin-resize": { @@ -3766,13 +3603,6 @@ "@babel/runtime": "^7.7.2", "@jimp/utils": "^0.10.3", "core-js": "^3.4.1" - }, - "dependencies": { - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" - } } }, "@jimp/plugin-rotate": { @@ -3783,13 +3613,6 @@ "@babel/runtime": "^7.7.2", "@jimp/utils": "^0.10.3", "core-js": "^3.4.1" - }, - "dependencies": { - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" - } } }, "@jimp/plugin-scale": { @@ -3800,13 +3623,6 @@ "@babel/runtime": "^7.7.2", "@jimp/utils": "^0.10.3", "core-js": "^3.4.1" - }, - "dependencies": { - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" - } } }, "@jimp/plugin-shadow": { @@ -3817,13 +3633,6 @@ "@babel/runtime": "^7.7.2", "@jimp/utils": "^0.10.3", "core-js": "^3.4.1" - }, - "dependencies": { - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" - } } }, "@jimp/plugin-threshold": { @@ -3834,13 +3643,6 @@ "@babel/runtime": "^7.7.2", "@jimp/utils": "^0.10.3", "core-js": "^3.4.1" - }, - "dependencies": { - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" - } } }, "@jimp/plugins": { @@ -3872,13 +3674,6 @@ "@jimp/plugin-threshold": "^0.10.3", "core-js": "^3.4.1", "timm": "^1.6.1" - }, - "dependencies": { - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" - } } }, "@jimp/png": { @@ -3890,13 +3685,6 @@ "@jimp/utils": "^0.10.3", "core-js": "^3.4.1", "pngjs": "^3.3.3" - }, - "dependencies": { - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" - } } }, "@jimp/tiff": { @@ -3907,13 +3695,6 @@ "@babel/runtime": "^7.7.2", "core-js": "^3.4.1", "utif": "^2.0.1" - }, - "dependencies": { - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" - } } }, "@jimp/types": { @@ -3929,13 +3710,6 @@ "@jimp/tiff": "^0.10.3", "core-js": "^3.4.1", "timm": "^1.6.1" - }, - "dependencies": { - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" - } } }, "@jimp/utils": { @@ -3946,13 +3720,6 @@ "@babel/runtime": "^7.7.2", "core-js": "^3.4.1", "regenerator-runtime": "^0.13.3" - }, - "dependencies": { - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" - } } }, "@loadable/component": { @@ -4169,9 +3936,9 @@ } }, "@now/node": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@now/node/-/node-1.7.1.tgz", - "integrity": "sha512-+srVKopsVTPDR3u9eOjJryZroLTrPp8XEOuIDGBdfFcJuS7qpAomctSbfyA7WNyjC0ExtUxELqBg5sAedG5+2g==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@now/node/-/node-1.7.2.tgz", + "integrity": "sha512-jFYA1L/vrpVUTiHc3YoHW+S9GYYnl+TI6Ej+03a88QWq2bt4WuEhJk1GEfM8tC68rd2V8xgKGBIPKaVK2retAQ==", "requires": { "@types/node": "*", "ts-node": "8.9.1", @@ -4346,17 +4113,17 @@ } }, "@storybook/addon-actions": { - "version": "6.0.0-beta.45", - "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-6.0.0-beta.45.tgz", - "integrity": "sha512-0TIoKlzzocvZbM7ZWujGGREiwnlGKvjkAAC5L0m3tr4AnxRr+P96Ui0TW0FHiUsw4NuqROBrVssN3tZxN78B2w==", + "version": "6.0.0-rc.3", + "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-6.0.0-rc.3.tgz", + "integrity": "sha512-EGX1CzLARZGMbZmfN0CaNssJjrRSofuWVw9m5AMeww6u9OaxUbmGunn+4rP31cTu455MQtsysmJstSFt2t+mdg==", "dev": true, "requires": { - "@storybook/addons": "6.0.0-beta.45", - "@storybook/api": "6.0.0-beta.45", - "@storybook/client-api": "6.0.0-beta.45", - "@storybook/components": "6.0.0-beta.45", - "@storybook/core-events": "6.0.0-beta.45", - "@storybook/theming": "6.0.0-beta.45", + "@storybook/addons": "6.0.0-rc.3", + "@storybook/api": "6.0.0-rc.3", + "@storybook/client-api": "6.0.0-rc.3", + "@storybook/components": "6.0.0-rc.3", + "@storybook/core-events": "6.0.0-rc.3", + "@storybook/theming": "6.0.0-rc.3", "core-js": "^3.0.1", "fast-deep-equal": "^3.1.1", "global": "^4.3.2", @@ -4369,26 +4136,18 @@ "ts-dedent": "^1.1.1", "util-deprecate": "^1.0.2", "uuid": "^8.0.0" - }, - "dependencies": { - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==", - "dev": true - } } }, "@storybook/addon-storyshots": { - "version": "6.0.0-beta.45", - "resolved": "https://registry.npmjs.org/@storybook/addon-storyshots/-/addon-storyshots-6.0.0-beta.45.tgz", - "integrity": "sha512-Cgh7KaScAzmPhoDlMo4V+L2lwrltfCzZj/OCX6ZcVqmu8rS/hKczEoMuEnEWiYVAeZ3KjJu7l2yPwG4ws05LMg==", + "version": "6.0.0-rc.3", + "resolved": "https://registry.npmjs.org/@storybook/addon-storyshots/-/addon-storyshots-6.0.0-rc.3.tgz", + "integrity": "sha512-WbYk8tkoX5cTbBartkd6jTAL7wBCcgFO4T6D5t4n3KqYBjZh8whWhvYCr60l33+t5xQUrQGmQQMDvTGEHBPQ1Q==", "dev": true, "requires": { "@jest/transform": "^26.0.0", - "@storybook/addons": "6.0.0-beta.45", - "@storybook/client-api": "6.0.0-beta.45", - "@storybook/core": "6.0.0-beta.45", + "@storybook/addons": "6.0.0-rc.3", + "@storybook/client-api": "6.0.0-rc.3", + "@storybook/core": "6.0.0-rc.3", "@types/glob": "^7.1.1", "@types/jest": "^25.1.1", "@types/jest-specific-snapshot": "^0.5.3", @@ -4413,12 +4172,6 @@ "pretty-format": "^25.2.1" } }, - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==", - "dev": true - }, "find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -4514,44 +4267,36 @@ } }, "@storybook/addons": { - "version": "6.0.0-beta.45", - "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-6.0.0-beta.45.tgz", - "integrity": "sha512-xVdAuwti4RUaW6FRHp/mkDvo65YbDxN8usWR1iasui7iZcQUvzc5ITFu5KrItcyAw4q1pMsOmS012WIILNy/eQ==", + "version": "6.0.0-rc.3", + "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-6.0.0-rc.3.tgz", + "integrity": "sha512-oFGS1mNnNsfNPTvv3IAZSMTzztR4vfbn2CXcWnnA7yPEbo8WsNPql3A8PoumY2HZtZjZEEpCODJtW09Q1bP6Cw==", "dev": true, "requires": { - "@storybook/api": "6.0.0-beta.45", - "@storybook/channels": "6.0.0-beta.45", - "@storybook/client-logger": "6.0.0-beta.45", - "@storybook/core-events": "6.0.0-beta.45", - "@storybook/router": "6.0.0-beta.45", - "@storybook/theming": "6.0.0-beta.45", + "@storybook/api": "6.0.0-rc.3", + "@storybook/channels": "6.0.0-rc.3", + "@storybook/client-logger": "6.0.0-rc.3", + "@storybook/core-events": "6.0.0-rc.3", + "@storybook/router": "6.0.0-rc.3", + "@storybook/theming": "6.0.0-rc.3", "core-js": "^3.0.1", "global": "^4.3.2", "regenerator-runtime": "^0.13.3" - }, - "dependencies": { - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==", - "dev": true - } } }, "@storybook/api": { - "version": "6.0.0-beta.45", - "resolved": "https://registry.npmjs.org/@storybook/api/-/api-6.0.0-beta.45.tgz", - "integrity": "sha512-TJpX+6nK3NiT1ZZw92CotKM4uyfWhDHBYuDxI3yWMgURsE/4aLrgtxShkgS94WjyjtNBr14vzyKH28KyAlWcAQ==", + "version": "6.0.0-rc.3", + "resolved": "https://registry.npmjs.org/@storybook/api/-/api-6.0.0-rc.3.tgz", + "integrity": "sha512-N+DADwbaevSE7C4/bjxtsFzNZ7/jAgRZa0vfiq8Lxwbmj2cYpPn9p8SkPA75TZco6XM/LX6QXl5ghg2zs8f/UQ==", "dev": true, "requires": { "@reach/router": "^1.3.3", - "@storybook/channels": "6.0.0-beta.45", - "@storybook/client-logger": "6.0.0-beta.45", - "@storybook/core-events": "6.0.0-beta.45", + "@storybook/channels": "6.0.0-rc.3", + "@storybook/client-logger": "6.0.0-rc.3", + "@storybook/core-events": "6.0.0-rc.3", "@storybook/csf": "0.0.1", - "@storybook/router": "6.0.0-beta.45", + "@storybook/router": "6.0.0-rc.3", "@storybook/semver": "^7.3.2", - "@storybook/theming": "6.0.0-beta.45", + "@storybook/theming": "6.0.0-rc.3", "@types/reach__router": "^1.3.5", "core-js": "^3.0.1", "fast-deep-equal": "^3.1.1", @@ -4576,12 +4321,6 @@ "find-up": "^4.1.0" } }, - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==", - "dev": true - }, "find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -4634,57 +4373,42 @@ } }, "@storybook/channel-postmessage": { - "version": "6.0.0-beta.45", - "resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-6.0.0-beta.45.tgz", - "integrity": "sha512-1iI8LC9iqu2M2LXDeMcvigXrkgkp6yqGn1PriraqJ34hiwx3js5BVCrfc0JHO2TAPvlJsuEiQFwEarFCTqUIdg==", + "version": "6.0.0-rc.3", + "resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-6.0.0-rc.3.tgz", + "integrity": "sha512-y/FyknuOYh8f5UgFlVkzWko9JcTlOUTapFPMtV7w52rZMkv0TJVVzn2Az3aDMKNhbyXhMVHP+Cbflj2qxLSyVQ==", "dev": true, "requires": { - "@storybook/channels": "6.0.0-beta.45", - "@storybook/client-logger": "6.0.0-beta.45", - "@storybook/core-events": "6.0.0-beta.45", + "@storybook/channels": "6.0.0-rc.3", + "@storybook/client-logger": "6.0.0-rc.3", + "@storybook/core-events": "6.0.0-rc.3", "core-js": "^3.0.1", "global": "^4.3.2", + "qs": "^6.6.0", "telejson": "^4.0.0" - }, - "dependencies": { - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==", - "dev": true - } } }, "@storybook/channels": { - "version": "6.0.0-beta.45", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-6.0.0-beta.45.tgz", - "integrity": "sha512-J0LSKlAVZAj1bIKUGAAMXBCdofHae4YuntDykhmQvOou8o08vVMc4qECNMT8SW3YruW84miU5j0GX4rucHjw8A==", + "version": "6.0.0-rc.3", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-6.0.0-rc.3.tgz", + "integrity": "sha512-kJjdP/Wp1rEOr+Fn9eQyzHml2V7va3wnpgWXYqPZXn/xrUKJg5UeOqvImVQUDfuwSWINZfHsG/yV11pXpWhMKg==", "dev": true, "requires": { "core-js": "^3.0.1", "ts-dedent": "^1.1.1", "util-deprecate": "^1.0.2" - }, - "dependencies": { - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==", - "dev": true - } } }, "@storybook/client-api": { - "version": "6.0.0-beta.45", - "resolved": "https://registry.npmjs.org/@storybook/client-api/-/client-api-6.0.0-beta.45.tgz", - "integrity": "sha512-N8ZOdBEBp3nmAKncwYopMhmk82XwQF4QlKAAktkc3GSJ8q/s0zV1QNJ9K43KOKO4rW3vt4Ys3KeZDaxSNpEnHQ==", + "version": "6.0.0-rc.3", + "resolved": "https://registry.npmjs.org/@storybook/client-api/-/client-api-6.0.0-rc.3.tgz", + "integrity": "sha512-juf1IuE/8zAsF+GPidBvofE2mX9jq3mM+wtI9wEl+NmSS7Dj5Eb/Mu94n2UQLG2K/VpLUiFvHsW8GdR1+/HBzA==", "dev": true, "requires": { - "@storybook/addons": "6.0.0-beta.45", - "@storybook/channel-postmessage": "6.0.0-beta.45", - "@storybook/channels": "6.0.0-beta.45", - "@storybook/client-logger": "6.0.0-beta.45", - "@storybook/core-events": "6.0.0-beta.45", + "@storybook/addons": "6.0.0-rc.3", + "@storybook/channel-postmessage": "6.0.0-rc.3", + "@storybook/channels": "6.0.0-rc.3", + "@storybook/client-logger": "6.0.0-rc.3", + "@storybook/core-events": "6.0.0-rc.3", "@storybook/csf": "0.0.1", "@types/qs": "^6.9.0", "@types/webpack-env": "^1.15.2", @@ -4697,43 +4421,27 @@ "store2": "^2.7.1", "ts-dedent": "^1.1.1", "util-deprecate": "^1.0.2" - }, - "dependencies": { - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==", - "dev": true - } } }, "@storybook/client-logger": { - "version": "6.0.0-beta.45", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-6.0.0-beta.45.tgz", - "integrity": "sha512-7SnsTdhyW4czloSAJJT6cP/xwBxn8ySjpfCgOi0YiaRsuns+h9O5DlF2Q5Ssso04fMB/K6gwXHUvQWEJvLnZ7Q==", + "version": "6.0.0-rc.3", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-6.0.0-rc.3.tgz", + "integrity": "sha512-wMXEoY6tc7Yx6s/E7jTR8y82Zcc3vgzfmIW/7/UgOvUlsIPTXoV5uChmwWExQ64VlVX36yE/Mctygxr7HwzPkw==", "dev": true, "requires": { "core-js": "^3.0.1", "global": "^4.3.2" - }, - "dependencies": { - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==", - "dev": true - } } }, "@storybook/components": { - "version": "6.0.0-beta.45", - "resolved": "https://registry.npmjs.org/@storybook/components/-/components-6.0.0-beta.45.tgz", - "integrity": "sha512-tnYaAxOWp5Ioank1pSPhKY0Up8Fm5dS8rkX+zS0526lW3PAbQnjMRQVYYvzIhXlClt9BaXMcKwpk79NWskJJjw==", + "version": "6.0.0-rc.3", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-6.0.0-rc.3.tgz", + "integrity": "sha512-gXslr3rt+xt08c3ncVBSgG4A4IursP7D9IYrCjiDgNP15//gEdDOq/ciJa3MHNiHQ0rYzS4q5ATcO+zRmuN8LA==", "dev": true, "requires": { - "@storybook/client-logger": "6.0.0-beta.45", + "@storybook/client-logger": "6.0.0-rc.3", "@storybook/csf": "0.0.1", - "@storybook/theming": "6.0.0-beta.45", + "@storybook/theming": "6.0.0-rc.3", "@types/overlayscrollbars": "^1.9.0", "@types/react-color": "^3.0.1", "@types/react-syntax-highlighter": "11.0.4", @@ -4753,20 +4461,12 @@ "react-syntax-highlighter": "^12.2.1", "react-textarea-autosize": "^8.1.1", "ts-dedent": "^1.1.1" - }, - "dependencies": { - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==", - "dev": true - } } }, "@storybook/core": { - "version": "6.0.0-beta.45", - "resolved": "https://registry.npmjs.org/@storybook/core/-/core-6.0.0-beta.45.tgz", - "integrity": "sha512-oLV5ERd3StVqVKdfjB5oaG1bzpakMIDmm2N7/Mp6USHdNaZFgOqtgEBtLeKyQcWSRK6B9Qdx7w+Ad+Fmdw2mRw==", + "version": "6.0.0-rc.3", + "resolved": "https://registry.npmjs.org/@storybook/core/-/core-6.0.0-rc.3.tgz", + "integrity": "sha512-sgjfL5umUP1duz71tv1GEk/2gKeZOQ5foKeZpjq4NEydWQu4VccHBqizc2KnGZXValERKiG+URbyDvFNz4MIhQ==", "dev": true, "requires": { "@babel/plugin-proposal-class-properties": "^7.8.3", @@ -4789,20 +4489,20 @@ "@babel/preset-env": "^7.9.6", "@babel/preset-react": "^7.8.3", "@babel/preset-typescript": "^7.9.0", - "@storybook/addons": "6.0.0-beta.45", - "@storybook/api": "6.0.0-beta.45", - "@storybook/channel-postmessage": "6.0.0-beta.45", - "@storybook/channels": "6.0.0-beta.45", - "@storybook/client-api": "6.0.0-beta.45", - "@storybook/client-logger": "6.0.0-beta.45", - "@storybook/components": "6.0.0-beta.45", - "@storybook/core-events": "6.0.0-beta.45", + "@storybook/addons": "6.0.0-rc.3", + "@storybook/api": "6.0.0-rc.3", + "@storybook/channel-postmessage": "6.0.0-rc.3", + "@storybook/channels": "6.0.0-rc.3", + "@storybook/client-api": "6.0.0-rc.3", + "@storybook/client-logger": "6.0.0-rc.3", + "@storybook/components": "6.0.0-rc.3", + "@storybook/core-events": "6.0.0-rc.3", "@storybook/csf": "0.0.1", - "@storybook/node-logger": "6.0.0-beta.45", - "@storybook/router": "6.0.0-beta.45", + "@storybook/node-logger": "6.0.0-rc.3", + "@storybook/router": "6.0.0-rc.3", "@storybook/semver": "^7.3.2", - "@storybook/theming": "6.0.0-beta.45", - "@storybook/ui": "6.0.0-beta.45", + "@storybook/theming": "6.0.0-rc.3", + "@storybook/ui": "6.0.0-rc.3", "@types/glob-base": "^0.3.0", "@types/micromatch": "^4.0.1", "@types/node-fetch": "^2.5.4", @@ -4921,12 +4621,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==", - "dev": true - }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -5113,20 +4807,12 @@ } }, "@storybook/core-events": { - "version": "6.0.0-beta.45", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-6.0.0-beta.45.tgz", - "integrity": "sha512-hawfCXHmCGYO0qWfrNuyfJQYIv0e8NlEvXthPdJRYfKvB4ILaEjoYFbp05s4gwUR2Ho0fZcKTzuCiNBQNtVg+w==", + "version": "6.0.0-rc.3", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-6.0.0-rc.3.tgz", + "integrity": "sha512-J9KUnV/p2zvt0Cg1z4x6dTvqTJKjydNarAgwcNBnh3caIAIPETzO6CV9ns4TidFXyV2400sk+u6ZyCwOUc/hsQ==", "dev": true, "requires": { "core-js": "^3.0.1" - }, - "dependencies": { - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==", - "dev": true - } } }, "@storybook/csf": { @@ -5139,9 +4825,9 @@ } }, "@storybook/node-logger": { - "version": "6.0.0-beta.45", - "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-6.0.0-beta.45.tgz", - "integrity": "sha512-oBAINMALnEfphDLBKzm0CleNnX+ZuQ/AvC77D2l/o94wjvH79lNGK8XICDBtJC+XTJUWSZhV84dcybUFpuS4GQ==", + "version": "6.0.0-rc.3", + "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-6.0.0-rc.3.tgz", + "integrity": "sha512-E0ak1Gh33fudGd6Ew/mogjrrgxSRjRGDkzhG4draoDdwB0uu008RInLgpQjj+3i2OnlHNLQWAyqwidSf8l2msw==", "dev": true, "requires": { "@types/npmlog": "^4.1.2", @@ -5186,12 +4872,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==", - "dev": true - }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -5210,16 +4890,16 @@ } }, "@storybook/react": { - "version": "6.0.0-beta.45", - "resolved": "https://registry.npmjs.org/@storybook/react/-/react-6.0.0-beta.45.tgz", - "integrity": "sha512-1JFawZyPOzvaGYZ9irji8w7QbJJxHa16in9MyoxxxcOaX9Ew2XSCx4JDXkftJnqkJ8HHoM2SL8PX+LvYcpXBBw==", + "version": "6.0.0-rc.3", + "resolved": "https://registry.npmjs.org/@storybook/react/-/react-6.0.0-rc.3.tgz", + "integrity": "sha512-q5Jmq/QpUfVFE3G7FoBGJeBcIv2R5SO5xDJCg271piEKvFTcCmjwLi2IOCndnLn+gBuADcv2reCEk318yiFj2Q==", "dev": true, "requires": { "@babel/preset-flow": "^7.0.0", "@babel/preset-react": "^7.0.0", - "@storybook/addons": "6.0.0-beta.45", - "@storybook/core": "6.0.0-beta.45", - "@storybook/node-logger": "6.0.0-beta.45", + "@storybook/addons": "6.0.0-rc.3", + "@storybook/core": "6.0.0-rc.3", + "@storybook/node-logger": "6.0.0-rc.3", "@storybook/semver": "^7.3.2", "@svgr/webpack": "^5.4.0", "@types/webpack-env": "^1.15.2", @@ -5231,7 +4911,7 @@ "lodash": "^4.17.15", "prop-types": "^15.7.2", "react-dev-utils": "^10.0.0", - "react-docgen-typescript-plugin": "^0.5.0", + "react-docgen-typescript-plugin": "^0.5.1", "regenerator-runtime": "^0.13.3", "ts-dedent": "^1.1.1", "webpack": "^4.43.0" @@ -5247,12 +4927,6 @@ "find-up": "^4.1.0" } }, - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==", - "dev": true - }, "find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -5305,9 +4979,9 @@ } }, "@storybook/router": { - "version": "6.0.0-beta.45", - "resolved": "https://registry.npmjs.org/@storybook/router/-/router-6.0.0-beta.45.tgz", - "integrity": "sha512-ykcSWa0elIwx60o7/VZr+VGIPWEd13DgvHrNUn/vxZjHyTpF9fFEHML0AkIWF+Ew/2eR8/J+TmFvBrP5B+57Yg==", + "version": "6.0.0-rc.3", + "resolved": "https://registry.npmjs.org/@storybook/router/-/router-6.0.0-rc.3.tgz", + "integrity": "sha512-FOpWJCPbiO5RDzjNqjUTZd+DoLslQj3GY+hHzk5Rarrqh9NfzDZ8x7AAs0CVEWbSY89wQeeeulTVA7mMkC/vRQ==", "dev": true, "requires": { "@reach/router": "^1.3.3", @@ -5316,26 +4990,18 @@ "global": "^4.3.2", "memoizerific": "^1.11.3", "qs": "^6.6.0" - }, - "dependencies": { - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==", - "dev": true - } } }, "@storybook/theming": { - "version": "6.0.0-beta.45", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.0.0-beta.45.tgz", - "integrity": "sha512-Z1jetqgpkWRmQzQH+DMEs0+2OAfBm+mSVZeXxtDnwoVLF0RxjUL6GhxtX//quxmcQkjxE4yTYkvQuD/+ob/yCw==", + "version": "6.0.0-rc.3", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.0.0-rc.3.tgz", + "integrity": "sha512-QBx50lLv5TtO0+CCSuFY5qjk0GzqhDm8DUukFVUpjfjsANtDVXog8DbAChsUZI+yAI7WtjaS6OA44Mf1/rWejQ==", "dev": true, "requires": { "@emotion/core": "^10.0.20", "@emotion/is-prop-valid": "^0.8.6", "@emotion/styled": "^10.0.17", - "@storybook/client-logger": "6.0.0-beta.45", + "@storybook/client-logger": "6.0.0-rc.3", "core-js": "^3.0.1", "deep-object-diff": "^1.1.0", "emotion-theming": "^10.0.19", @@ -5361,12 +5027,6 @@ "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==", "dev": true }, - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==", - "dev": true - }, "resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -5376,21 +5036,21 @@ } }, "@storybook/ui": { - "version": "6.0.0-beta.45", - "resolved": "https://registry.npmjs.org/@storybook/ui/-/ui-6.0.0-beta.45.tgz", - "integrity": "sha512-17WGSkHnlDEkJT1oswaWrdKBJD1LDiNT9S7u/CxXlFhnMOYuizJ1lWMm4z7I3dxaICfIg1qkyxF9KgUADuxmgw==", + "version": "6.0.0-rc.3", + "resolved": "https://registry.npmjs.org/@storybook/ui/-/ui-6.0.0-rc.3.tgz", + "integrity": "sha512-OSDn4WIPeA72X2m790bufrp1xsNBqhOCcwhn5+xIM9lsg0rkkVk7Vxk6lTkHUOSwVRjYrN6HCdL2gK59+cvxLQ==", "dev": true, "requires": { "@emotion/core": "^10.0.20", - "@storybook/addons": "6.0.0-beta.45", - "@storybook/api": "6.0.0-beta.45", - "@storybook/channels": "6.0.0-beta.45", - "@storybook/client-logger": "6.0.0-beta.45", - "@storybook/components": "6.0.0-beta.45", - "@storybook/core-events": "6.0.0-beta.45", - "@storybook/router": "6.0.0-beta.45", + "@storybook/addons": "6.0.0-rc.3", + "@storybook/api": "6.0.0-rc.3", + "@storybook/channels": "6.0.0-rc.3", + "@storybook/client-logger": "6.0.0-rc.3", + "@storybook/components": "6.0.0-rc.3", + "@storybook/core-events": "6.0.0-rc.3", + "@storybook/router": "6.0.0-rc.3", "@storybook/semver": "^7.3.2", - "@storybook/theming": "6.0.0-beta.45", + "@storybook/theming": "6.0.0-rc.3", "@types/markdown-to-jsx": "^6.11.0", "@types/rfdc": "^1.1.0", "copy-to-clipboard": "^3.0.8", @@ -5425,12 +5085,6 @@ "find-up": "^4.1.0" } }, - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==", - "dev": true - }, "find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -5758,9 +5412,9 @@ } }, "@testing-library/react": { - "version": "10.4.4", - "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-10.4.4.tgz", - "integrity": "sha512-SKDQ2jBdg9UQQYQragkvXOzNp4hnCdOvXyZ52rg+OXiiumVxkAutdvvRzBF4PrbvMQ27Z6gx0GVo2YQ1Mcip8g==", + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-10.4.5.tgz", + "integrity": "sha512-M5A0W4VphBiEm4vgnq7vHC+/e4Bp/3iIOAWap1FtIiA+Zom6BtXpY3RSTOqc8bZsCcu9gFBZ/lxaiMW6uJddWg==", "dev": true, "requires": { "@babel/runtime": "^7.10.3", @@ -5784,6 +5438,18 @@ "tippy.js": "^6.2.0" } }, + "@toruslabs/eccrypto": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@toruslabs/eccrypto/-/eccrypto-1.1.3.tgz", + "integrity": "sha512-hoLACz9Z6RP/ZH41Ba0iImJpl1f4Zx7pi/d3R7UIrOyt4IOgnWrlkzh2IqQYw4ouae4WZQYSZlyeYv81EWkoxQ==", + "requires": { + "acorn": "^7.3.1", + "elliptic": "^6.5.3", + "es6-promise": "^4.2.8", + "nan": "^2.14.1", + "secp256k1": "^3.8.0" + } + }, "@toruslabs/fetch-node-details": { "version": "2.2.6", "resolved": "https://registry.npmjs.org/@toruslabs/fetch-node-details/-/fetch-node-details-2.2.6.tgz", @@ -5840,12 +5506,12 @@ } }, "@toruslabs/torus.js": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@toruslabs/torus.js/-/torus.js-2.1.9.tgz", - "integrity": "sha512-onFqseyRwIwbpWCZ8MrdMcRsP0UNv0Qr12tGOOCKgnkgD0nCsnkKKd3o56POB2iUU+o60gfCbkEJt252H1Y1Ng==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@toruslabs/torus.js/-/torus.js-2.2.2.tgz", + "integrity": "sha512-Ta5I82fe1tBScrtGmLaGDcYrh9t6tdUBswvAmrUWa3XABps7Lrg/uMeYuqWCOa7u7b6nRQkMF2ODoZ1ElHHq7w==", "requires": { + "@toruslabs/eccrypto": "^1.1.3", "bn.js": "^5.1.2", - "eccrypto": "^1.1.3", "elliptic": "^6.5.3", "json-stable-stringify": "^1.0.1", "loglevel": "^1.6.8", @@ -6072,9 +5738,9 @@ "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=" }, "@types/loadable__component": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/@types/loadable__component/-/loadable__component-5.10.0.tgz", - "integrity": "sha512-AaDP1VxV3p7CdPOtOTl3ALgQ6ES4AxJKO9UGj9vJonq/w2yERxwdzFiWNQFh9fEDXEzjxujBlM2RmSJtHV1/pA==", + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/@types/loadable__component/-/loadable__component-5.13.0.tgz", + "integrity": "sha512-t44mJuu2DR2oP6RGXHuznAsK3eQYzwTcX76enlcwu1Uz9634VyTYNDLCl0WwTcAfCoro3142li+KKGqOMTznbw==", "dev": true, "requires": { "@types/react": "*" @@ -6125,9 +5791,9 @@ } }, "@types/node": { - "version": "14.0.19", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.19.tgz", - "integrity": "sha512-yf3BP/NIXF37BjrK5klu//asUWitOEoUP5xE1mhSUjazotwJ/eJDgEmMQNlOeWOVv72j24QQ+3bqXHE++CFGag==" + "version": "14.0.22", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.22.tgz", + "integrity": "sha512-emeGcJvdiZ4Z3ohbmw93E/64jRzUHAItSHt8nF7M4TGgQTiWqFVGB8KNpLGFmUHmHLvjvBgFwVlqNcq+VuGv9g==" }, "@types/node-fetch": { "version": "2.5.7", @@ -6213,9 +5879,9 @@ } }, "@types/react": { - "version": "16.9.41", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.41.tgz", - "integrity": "sha512-6cFei7F7L4wwuM+IND/Q2cV1koQUvJ8iSV+Gwn0c3kvABZ691g7sp3hfEQHOUBJtccl1gPi+EyNjMIl9nGA0ug==", + "version": "16.9.43", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.43.tgz", + "integrity": "sha512-PxshAFcnJqIWYpJbLPriClH53Z2WlJcVZE+NP2etUtWQs2s7yIMj3/LDKZT/5CHJ/F62iyjVCDu2H3jHEXIxSg==", "requires": { "@types/prop-types": "*", "csstype": "^2.2.0" @@ -6251,16 +5917,6 @@ "@types/react": "*" } }, - "@types/react-jsonschema-form": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@types/react-jsonschema-form/-/react-jsonschema-form-1.7.3.tgz", - "integrity": "sha512-YiUCSnTA84e8g3zQobA+Iheh3+i3pb7TiIIXT4oEHwenhyrHVB5vPSIi/QeURy6PwVP1LfSCGOAHFRDpE/hAtQ==", - "dev": true, - "requires": { - "@types/json-schema": "*", - "@types/react": "*" - } - }, "@types/react-paginate": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/@types/react-paginate/-/react-paginate-6.2.1.tgz", @@ -6439,6 +6095,12 @@ "resolved": "https://registry.npmjs.org/@types/yoga-layout/-/yoga-layout-1.9.2.tgz", "integrity": "sha512-S9q47ByT2pPvD65IvrWp7qppVMpk9WGMbVq9wbWZOHg6tnXSD4vyhao6nOSBwwfDdV2p3Kx9evA9vI+XWTfDvw==" }, + "@types/yup": { + "version": "0.29.3", + "resolved": "https://registry.npmjs.org/@types/yup/-/yup-0.29.3.tgz", + "integrity": "sha512-XxZFKnxzTfm+DR8MMBA35UUXfUPmjPpi8HJ90VZg7q/LIbtiOhVGJ26gNnATcflcpnIyf2Qm9A+oEhswaqoDpA==", + "dev": true + }, "@typescript-eslint/eslint-plugin": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.6.0.tgz", @@ -6812,9 +6474,9 @@ } }, "acorn": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz", - "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==" + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.3.1.tgz", + "integrity": "sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA==" }, "acorn-dynamic-import": { "version": "4.0.0", @@ -7489,12 +7151,12 @@ "integrity": "sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==" }, "autoprefixer": { - "version": "9.8.4", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.4.tgz", - "integrity": "sha512-84aYfXlpUe45lvmS+HoAWKCkirI/sw4JK0/bTeeqgHYco3dcsOn0NqdejISjptsYwNji/21dnkDri9PsYKk89A==", + "version": "9.8.5", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.5.tgz", + "integrity": "sha512-C2p5KkumJlsTHoNv9w31NrBRgXhf6eCMteJuHZi2xhkgC+5Vm40MEtCKPhc0qdgAOhox0YPy1SQHTAky05UoKg==", "requires": { "browserslist": "^4.12.0", - "caniuse-lite": "^1.0.30001087", + "caniuse-lite": "^1.0.30001097", "colorette": "^1.2.0", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", @@ -7502,6 +7164,11 @@ "postcss-value-parser": "^4.1.0" }, "dependencies": { + "caniuse-lite": { + "version": "1.0.30001099", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001099.tgz", + "integrity": "sha512-sdS9A+sQTk7wKoeuZBN/YMAHVztUfVnjDi4/UV3sDE8xoh7YR12hKW+pIdB3oqKGwr9XaFL2ovfzt9w8eUI5CA==" + }, "postcss-value-parser": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", @@ -8105,9 +7772,9 @@ } }, "babel-plugin-remove-graphql-queries": { - "version": "2.9.12", - "resolved": "https://registry.npmjs.org/babel-plugin-remove-graphql-queries/-/babel-plugin-remove-graphql-queries-2.9.12.tgz", - "integrity": "sha512-CJjsW331GuuU+h3SpKcrtMfzq3+Ypq6Oth8UQCBO3SP2gJw0EUGPVpmQwEXIT94sotUfVLWCasGQK7rRaeYb1A==" + "version": "2.9.13", + "resolved": "https://registry.npmjs.org/babel-plugin-remove-graphql-queries/-/babel-plugin-remove-graphql-queries-2.9.13.tgz", + "integrity": "sha512-UpxqC9Wt2O+kYbCP4KnAyZrMO29bwEvilWzomOqB5bwAJpXeZ2NwvRoWBKGJSzSyOCOoyz7xPSZ/OJM3kO5Xyw==" }, "babel-plugin-require-context-hook": { "version": "1.0.0", @@ -8228,9 +7895,9 @@ } }, "babel-preset-gatsby": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/babel-preset-gatsby/-/babel-preset-gatsby-0.5.1.tgz", - "integrity": "sha512-YTq1U4QusTEo1LQXk893PVm6CNpIaqFjpvU/4azR9AyWqoMuABc96nXHJ1KtKnLnEWFjRdfNA5XeCOrG9y7AFA==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-preset-gatsby/-/babel-preset-gatsby-0.5.2.tgz", + "integrity": "sha512-0pHaIm0Aqy6b+OpywL5Fu5vpAFzjHqGFx3YKhbb//2s6qC7/tplwWs5MmQ8ZrfHlxUIw/+c+CWUERfgihWRaBQ==", "requires": { "@babel/plugin-proposal-class-properties": "^7.10.1", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.1", @@ -8244,7 +7911,8 @@ "babel-plugin-dynamic-import-node": "^2.3.3", "babel-plugin-macros": "^2.8.0", "babel-plugin-transform-react-remove-prop-types": "^0.4.24", - "gatsby-core-utils": "^1.3.11" + "gatsby-core-utils": "^1.3.12", + "gatsby-legacy-polyfills": "^0.0.2" } }, "babel-preset-jest": { @@ -8559,6 +8227,11 @@ "regenerator-runtime": "^0.11.0" }, "dependencies": { + "core-js": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", + "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==" + }, "regenerator-runtime": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", @@ -9541,9 +9214,9 @@ "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" }, "cacache": { - "version": "15.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.0.4.tgz", - "integrity": "sha512-YlnKQqTbD/6iyoJvEY3KJftjrdBYroCbxxYXzhOzsFLWlp6KX4BOlEf4mTx0cMUfVaTS3ENL2QtDWeRYoGLkkw==", + "version": "15.0.5", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.0.5.tgz", + "integrity": "sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A==", "dev": true, "requires": { "@npmcli/move-file": "^1.0.1", @@ -9551,7 +9224,7 @@ "fs-minipass": "^2.0.0", "glob": "^7.1.4", "infer-owner": "^1.0.4", - "lru-cache": "^5.1.1", + "lru-cache": "^6.0.0", "minipass": "^3.1.1", "minipass-collect": "^1.0.2", "minipass-flush": "^1.0.5", @@ -10701,9 +10374,9 @@ } }, "core-js": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", - "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==" + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", + "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" }, "core-js-compat": { "version": "3.6.5", @@ -11792,9 +11465,9 @@ } }, "devcert": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/devcert/-/devcert-1.1.1.tgz", - "integrity": "sha512-4C1y6ZP9PFE1CK/Pgks4Qf1WA4rzJOtR2RJ7mkDfiQRixDNrtCkZiWvwSKb0AN830Dp4cgb+VLLi8eVWv7cC6A==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/devcert/-/devcert-1.1.2.tgz", + "integrity": "sha512-B72N5Z2Lzu11dsPvg/KD9IwQCyNg6JgsNcHw7zJ+QQN9/rusMpc0tSSOYLczmty5D7vOs94IHITPQ0uei5D3cw==", "requires": { "@types/configstore": "^2.1.1", "@types/debug": "^0.0.30", @@ -12287,55 +11960,6 @@ "safer-buffer": "^2.1.0" } }, - "eccrypto": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/eccrypto/-/eccrypto-1.1.3.tgz", - "integrity": "sha512-Xtyj039Xp2NDZwoe9IcD7pT1EwM4DILdxPCN2H7Rk1wgJNtTkFpk+cpX1QpuHTMaIhkatOBlGGKzGw/DUCDdqg==", - "requires": { - "acorn": "7.1.0", - "elliptic": "6.5.1", - "es6-promise": "4.2.8", - "nan": "2.14.0", - "secp256k1": "3.7.1" - }, - "dependencies": { - "elliptic": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.1.tgz", - "integrity": "sha512-xvJINNLbTeWQjrl6X+7eQCrIy/YPv5XCpKW6kB5mKvtnGILoLDcySuwomfdzt0BMdLNVnuRNTuzKNHj0bva1Cg==", - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - } - }, - "nan": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==" - }, - "secp256k1": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.7.1.tgz", - "integrity": "sha512-1cf8sbnRreXrQFdH6qsg2H71Xw91fCCS9Yp021GnUNJzWJS/py96fS4lHbnTnouLp08Xj6jBoBB6V78Tdbdu5g==", - "optional": true, - "requires": { - "bindings": "^1.5.0", - "bip66": "^1.1.5", - "bn.js": "^4.11.8", - "create-hash": "^1.2.0", - "drbg.js": "^1.0.1", - "elliptic": "^6.4.1", - "nan": "^2.14.0", - "safe-buffer": "^5.1.2" - } - } - } - }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -15136,6 +14760,11 @@ } } }, + "fn-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fn-name/-/fn-name-3.0.0.tgz", + "integrity": "sha512-eNMNr5exLoavuAMhIUVsOKF79SWd/zG104ef6sxBTSw+cZc6BXdQXDvYcGvp0VbxVVSp1XDUNoz7mg1xMtSznA==" + }, "follow-redirects": { "version": "1.5.10", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", @@ -15204,6 +14833,42 @@ "integrity": "sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=", "dev": true }, + "formik": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/formik/-/formik-2.1.4.tgz", + "integrity": "sha512-oKz8S+yQBzuQVSEoxkqqJrKQS5XJASWGVn6mrs+oTWrBoHgByVwwI1qHiVc9GKDpZBU9vAxXYAKz2BvujlwunA==", + "requires": { + "deepmerge": "^2.1.1", + "hoist-non-react-statics": "^3.3.0", + "lodash": "^4.17.14", + "lodash-es": "^4.17.14", + "react-fast-compare": "^2.0.1", + "scheduler": "^0.18.0", + "tiny-warning": "^1.0.2", + "tslib": "^1.10.0" + }, + "dependencies": { + "deepmerge": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", + "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==" + }, + "react-fast-compare": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz", + "integrity": "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==" + }, + "scheduler": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.18.0.tgz", + "integrity": "sha512-agTSHR1Nbfi6ulI0kYNK0203joW2Y5W4po4l+v03tOoiJKpTBbxpNhWDvqc/4IcOw+KLmSiQLTasZ4cab2/UWQ==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + } + } + }, "forwarded": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", @@ -15363,14 +15028,13 @@ "dev": true }, "gatsby": { - "version": "2.23.22", - "resolved": "https://registry.npmjs.org/gatsby/-/gatsby-2.23.22.tgz", - "integrity": "sha512-3kQUOeYZDle17tgvBD8DHIv2jjjKISV6c/+adRPxIBtcsA/zc+otrLXDD8PL77jd2xiE8X7/lMq2O4LsvOx+qQ==", + "version": "2.24.2", + "resolved": "https://registry.npmjs.org/gatsby/-/gatsby-2.24.2.tgz", + "integrity": "sha512-2zhCJZBPRJiUGbFRnCogMY3liBoFdb3+cCmIpp5b4BzGUEm+t+QZPSW34xkV5IE1WNywuIMtpZF6G8xTbuepbA==", "requires": { "@babel/code-frame": "^7.10.3", "@babel/core": "^7.10.3", "@babel/parser": "^7.10.3", - "@babel/polyfill": "^7.8.7", "@babel/runtime": "^7.10.3", "@babel/traverse": "^7.10.3", "@hapi/joi": "^15.1.1", @@ -15389,8 +15053,8 @@ "babel-loader": "^8.1.0", "babel-plugin-add-module-exports": "^0.3.3", "babel-plugin-dynamic-import-node": "^2.3.3", - "babel-plugin-remove-graphql-queries": "^2.9.12", - "babel-preset-gatsby": "^0.5.1", + "babel-plugin-remove-graphql-queries": "^2.9.13", + "babel-preset-gatsby": "^0.5.2", "better-opn": "1.0.0", "better-queue": "^3.8.10", "bluebird": "^3.7.2", @@ -15403,7 +15067,7 @@ "compression": "^1.7.4", "convert-hrtime": "^3.0.0", "copyfiles": "^2.3.0", - "core-js": "^2.6.11", + "core-js": "^3.6.5", "cors": "^2.8.5", "css-loader": "^1.0.1", "date-fns": "^2.14.0", @@ -15428,14 +15092,15 @@ "file-loader": "^1.1.11", "fs-exists-cached": "1.0.0", "fs-extra": "^8.1.0", - "gatsby-cli": "^2.12.59", - "gatsby-core-utils": "^1.3.11", - "gatsby-graphiql-explorer": "^0.4.10", - "gatsby-link": "^2.4.11", - "gatsby-plugin-page-creator": "^2.3.16", - "gatsby-plugin-typescript": "^2.4.13", - "gatsby-react-router-scroll": "^3.0.10", - "gatsby-telemetry": "^1.3.18", + "gatsby-cli": "^2.12.60", + "gatsby-core-utils": "^1.3.12", + "gatsby-graphiql-explorer": "^0.4.11", + "gatsby-legacy-polyfills": "^0.0.2", + "gatsby-link": "^2.4.12", + "gatsby-plugin-page-creator": "^2.3.17", + "gatsby-plugin-typescript": "^2.4.14", + "gatsby-react-router-scroll": "^3.0.11", + "gatsby-telemetry": "^1.3.19", "glob": "^7.1.6", "got": "8.3.2", "graphql": "^14.6.0", @@ -15620,6 +15285,21 @@ "ssri": "^6.0.1", "unique-filename": "^1.1.1", "y18n": "^4.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "requires": { + "yallist": "^3.0.2" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + } } }, "cacheable-request": { @@ -15842,12 +15522,11 @@ } }, "gatsby-cli": { - "version": "2.12.59", - "resolved": "https://registry.npmjs.org/gatsby-cli/-/gatsby-cli-2.12.59.tgz", - "integrity": "sha512-iQPFgBbZG1dLGtdNqB/gsnlwWu44rli/4J2VzYU3zwPguC9Zo3KMQxnrbIRY6CB1ryWQl+m/FZxO4umkEk8IUg==", + "version": "2.12.60", + "resolved": "https://registry.npmjs.org/gatsby-cli/-/gatsby-cli-2.12.60.tgz", + "integrity": "sha512-hc1pGn6m4Itc+HwIi4+s/esCInZzZit61guatNKzIJez0BTSDFv2EKtTUMuK5O64H/ofX0xfoHeYukOMA0MeIw==", "requires": { "@babel/code-frame": "^7.10.3", - "@babel/runtime": "^7.10.3", "@hapi/joi": "^15.1.1", "@types/common-tags": "^1.8.0", "better-opn": "^1.0.0", @@ -15860,9 +15539,9 @@ "execa": "^3.4.0", "fs-exists-cached": "^1.0.0", "fs-extra": "^8.1.0", - "gatsby-core-utils": "^1.3.11", - "gatsby-recipes": "^0.1.50", - "gatsby-telemetry": "^1.3.18", + "gatsby-core-utils": "^1.3.12", + "gatsby-recipes": "^0.1.51", + "gatsby-telemetry": "^1.3.19", "hosted-git-info": "^3.0.4", "ink": "^2.7.1", "ink-spinner": "^3.1.0", @@ -15976,11 +15655,11 @@ } }, "hosted-git-info": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.4.tgz", - "integrity": "sha512-4oT62d2jwSDBbLLFLZE+1vPuQ1h8p9wjrJ8Mqx5TjsyWmBMV5B13eJqn8pvluqubLf3cJPTfiYCIwNwDNmzScQ==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.5.tgz", + "integrity": "sha512-i4dpK6xj9BIpVOTboXIlKG9+8HMKggcrMX7WA24xZtKwX0TPelq/rbaS5rCKeNX8sJXZJGdSxpnEGtta+wismQ==", "requires": { - "lru-cache": "^5.1.1" + "lru-cache": "^6.0.0" } }, "http-cache-semantics": { @@ -16473,9 +16152,9 @@ } }, "gatsby-core-utils": { - "version": "1.3.11", - "resolved": "https://registry.npmjs.org/gatsby-core-utils/-/gatsby-core-utils-1.3.11.tgz", - "integrity": "sha512-eaplfOveXLl1RCWja7QIke560jUKLprvCXZ446YgQ8vAYB0fXVz3u6AOf7XUmEV9F9PIkNjmfevd1oUPy9qISw==", + "version": "1.3.12", + "resolved": "https://registry.npmjs.org/gatsby-core-utils/-/gatsby-core-utils-1.3.12.tgz", + "integrity": "sha512-58pysrsfe2abWl7TOqeyHgyXSm9UIjYZ7UclGTvczWDYnxl8L/0kPSaFOX+bMmNBZmAB0YEtJZ3gHhM978OvqQ==", "requires": { "ci-info": "2.0.0", "configstore": "^5.0.1", @@ -16498,27 +16177,35 @@ } }, "gatsby-graphiql-explorer": { - "version": "0.4.10", - "resolved": "https://registry.npmjs.org/gatsby-graphiql-explorer/-/gatsby-graphiql-explorer-0.4.10.tgz", - "integrity": "sha512-02jGVKxDRLDLbaSeL83RjjyQPyPZyQ1XYdwhhZxpmKKFVzW4VCPZdYQtF/DBE+cm3lqCUg1jOx+A0wubFx03Xw==", + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/gatsby-graphiql-explorer/-/gatsby-graphiql-explorer-0.4.11.tgz", + "integrity": "sha512-lyedZl36sdXQxqts2/nIZ/sAJjThN17WnAzUtzimTlyE7sNUTLM1bPe9zvd1FqUFddYvtQdKvzpOiqGyDkfRzA==", "requires": { "@babel/runtime": "^7.10.3" } }, "gatsby-image": { - "version": "2.4.12", - "resolved": "https://registry.npmjs.org/gatsby-image/-/gatsby-image-2.4.12.tgz", - "integrity": "sha512-MpWUjOhnVcbbY+8bqCLCgfyuEZIcb4kC6+OU0hGu+jMsywgOzzfXMB/8lHB1qF2Y9rhFvgRQXSyA2pwP+SjF1g==", + "version": "2.4.13", + "resolved": "https://registry.npmjs.org/gatsby-image/-/gatsby-image-2.4.13.tgz", + "integrity": "sha512-j9FIH+EUY6oWQdcNr5Xb87VGsdT/dztqB0wKkMqboIIqPoK/Zdzvd2cUbLIYVOI9zOSsFNDoVsHqe/M0bfu4HA==", "requires": { "@babel/runtime": "^7.10.3", "object-fit-images": "^3.2.4", "prop-types": "^15.7.2" } }, + "gatsby-legacy-polyfills": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/gatsby-legacy-polyfills/-/gatsby-legacy-polyfills-0.0.2.tgz", + "integrity": "sha512-i8LLwvtupC92AjQMivLDKDCgN51sV6FLbtoNn0CRQJdLJY31P06k+5qKcjdprGLdPjCjkCsYLTYi08pdvqAuPw==", + "requires": { + "core-js-compat": "^3.6.5" + } + }, "gatsby-link": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/gatsby-link/-/gatsby-link-2.4.11.tgz", - "integrity": "sha512-HyiDbrFtTe0JkFdSM76kA3rqiJ4h3qq/DxtvCLhFNGt5OWBpilVHmpSABVohjjMQYGV7gwA6ftkn9ue7uXVIFw==", + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/gatsby-link/-/gatsby-link-2.4.12.tgz", + "integrity": "sha512-FUSkQLzIeP4NhJkImgUds728CvcskyR3pK+FwBDfojbEP4Q7p416a1TnSMcfVZ63vSTpHfQGaSKFT/SdURNdjw==", "requires": { "@babel/runtime": "^7.10.3", "@types/reach__router": "^1.3.3", @@ -16526,71 +16213,71 @@ } }, "gatsby-page-utils": { - "version": "0.2.16", - "resolved": "https://registry.npmjs.org/gatsby-page-utils/-/gatsby-page-utils-0.2.16.tgz", - "integrity": "sha512-9z+M8AS2YmSf5iw0AA+WuNeIgFpswbHRlV3K0BCfEIV7AZUKIW1oa7f7oWT3GRnN3r0Km/GfEgKQzQs81jX26g==", + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/gatsby-page-utils/-/gatsby-page-utils-0.2.17.tgz", + "integrity": "sha512-Ery8ePfJiFwY5LcOhePIPmie7B/V2Yf5QREmo8sULx3mr00gWrqNwmIgaNYVIAxH87Fdy50CUScxeqQc4Hsl0g==", "requires": { "@babel/runtime": "^7.10.3", "bluebird": "^3.7.2", "chokidar": "3.4.0", "fs-exists-cached": "^1.0.0", - "gatsby-core-utils": "^1.3.11", + "gatsby-core-utils": "^1.3.12", "glob": "^7.1.6", "lodash": "^4.17.15", "micromatch": "^3.1.10" } }, "gatsby-plugin-manifest": { - "version": "2.4.17", - "resolved": "https://registry.npmjs.org/gatsby-plugin-manifest/-/gatsby-plugin-manifest-2.4.17.tgz", - "integrity": "sha512-WKzYDIrXPIXrXISEHcz/up5dnwDzfejlTtfIKpi/yqHPaWUX07Qpw5f9BmWz3nayJmx1Yp3/5ysJgekhQKqAGA==", + "version": "2.4.18", + "resolved": "https://registry.npmjs.org/gatsby-plugin-manifest/-/gatsby-plugin-manifest-2.4.18.tgz", + "integrity": "sha512-8nsCHLTCAqTg49pft3JaIqAsKlUMC1QA4/gm/Dxxm+kXj/LgfD/ZXjzh9EaBwtnlrWvuuz+Pr/WDEk1d2BMmdQ==", "requires": { "@babel/runtime": "^7.10.3", - "gatsby-core-utils": "^1.3.11", + "gatsby-core-utils": "^1.3.12", "semver": "^5.7.1", "sharp": "^0.25.1" } }, "gatsby-plugin-page-creator": { - "version": "2.3.16", - "resolved": "https://registry.npmjs.org/gatsby-plugin-page-creator/-/gatsby-plugin-page-creator-2.3.16.tgz", - "integrity": "sha512-3HK0K+9yotRypNSeM/d2PlhW3YnFrQQ7MKF79sGSEM5x++9RiXYB1YbjibNw5rsM0SI/YCQqAAJi86kNU0B3SQ==", + "version": "2.3.17", + "resolved": "https://registry.npmjs.org/gatsby-plugin-page-creator/-/gatsby-plugin-page-creator-2.3.17.tgz", + "integrity": "sha512-mIIotda+tR59tb3gk5qW3CUVSsdA608hchuX/+bKUCyuqyqZKjPffOdGUgy92Aa+mmIKgJTiGDUnIJoVsHSdtg==", "requires": { "@babel/runtime": "^7.10.3", "bluebird": "^3.7.2", "fs-exists-cached": "^1.0.0", - "gatsby-page-utils": "^0.2.16", + "gatsby-page-utils": "^0.2.17", "glob": "^7.1.6", "lodash": "^4.17.15", "micromatch": "^3.1.10" } }, "gatsby-plugin-react-helmet": { - "version": "3.3.9", - "resolved": "https://registry.npmjs.org/gatsby-plugin-react-helmet/-/gatsby-plugin-react-helmet-3.3.9.tgz", - "integrity": "sha512-V/QJUEsiYNaf95bs8ueHDp6Xk3UonPhs9yi+GURGimZomnT/9ST75Tk7pwZwZmRKQNKC8feklUzLNa3pDqHjUw==", + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/gatsby-plugin-react-helmet/-/gatsby-plugin-react-helmet-3.3.10.tgz", + "integrity": "sha512-AcXYwmS3r298JWs6iQ3OLNxIe8L8i5a2iSdLr/SDMpHqumYm7q/vB9kCX0et5wM7DIuZ7aPXDrdi5yDCAvU5lg==", "requires": { "@babel/runtime": "^7.10.3" } }, "gatsby-plugin-remove-trailing-slashes": { - "version": "2.3.10", - "resolved": "https://registry.npmjs.org/gatsby-plugin-remove-trailing-slashes/-/gatsby-plugin-remove-trailing-slashes-2.3.10.tgz", - "integrity": "sha512-rVfWgfigBr9K35uewGPducTjeHq/gThgoZE3ys3CI2xTF+xySkaiLRNZ9mKUbR72rytMU0PoUAjf7okd6uAAvQ==", + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/gatsby-plugin-remove-trailing-slashes/-/gatsby-plugin-remove-trailing-slashes-2.3.11.tgz", + "integrity": "sha512-wYlfSDhUWqAapdyO4bClQIYZFIwHZmBUDdoNTmly+DU4Cw+yN1Q/jQSsT81jYyBHGvlOmnnfYPWyzQwMl0hUXA==", "requires": { "@babel/runtime": "^7.10.3" } }, "gatsby-plugin-sharp": { - "version": "2.6.18", - "resolved": "https://registry.npmjs.org/gatsby-plugin-sharp/-/gatsby-plugin-sharp-2.6.18.tgz", - "integrity": "sha512-DeSPCdwxCsBeJcPxbNtptvn0ta3y/3ABkZm00EtEOeasIjPWDqLDDXi39Q+xGOJVcxsWPs5zinQurJMTV62b8w==", + "version": "2.6.19", + "resolved": "https://registry.npmjs.org/gatsby-plugin-sharp/-/gatsby-plugin-sharp-2.6.19.tgz", + "integrity": "sha512-0SVP2xk8Ml+hml30+oBP/SRm/ztGV6sDOlOUoEHuv6SssxkDcKc9aSScn0qB1HsKGDYDm1gcmDmw48Bq4U78rA==", "requires": { "@babel/runtime": "^7.10.3", "async": "^2.6.3", "bluebird": "^3.7.2", "fs-extra": "^8.1.0", - "gatsby-core-utils": "^1.3.11", + "gatsby-core-utils": "^1.3.12", "got": "^8.3.2", "imagemin": "^6.1.0", "imagemin-mozjpeg": "^8.0.0", @@ -16735,9 +16422,9 @@ "integrity": "sha512-54REIMe79qFBAwpcnWHBkvEE9CKoEVkefF9rDXai0k642r91SZ4UeWFuAmsegPG+sPVub7tHfHu/2LVXK1I9kg==" }, "gatsby-plugin-typescript": { - "version": "2.4.13", - "resolved": "https://registry.npmjs.org/gatsby-plugin-typescript/-/gatsby-plugin-typescript-2.4.13.tgz", - "integrity": "sha512-lyuaMt1AA8P29pYQGviMWKhYznAkyvmRWyGQLoMnNkmv5v6uNY+rqdMv/TjkSs2ng/Aic7jxsoCkIFNsIXp/KQ==", + "version": "2.4.14", + "resolved": "https://registry.npmjs.org/gatsby-plugin-typescript/-/gatsby-plugin-typescript-2.4.14.tgz", + "integrity": "sha512-8lMEK+F+xQZ+SGUuj4GMuWk2vy6x5PBVPRLO3eKNEGpX9o+vJcyQxTtu9Nd1GToLjr1K1r0ak0hERwGNzaJLow==", "requires": { "@babel/core": "^7.10.3", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.1", @@ -16745,7 +16432,7 @@ "@babel/plugin-proposal-optional-chaining": "^7.10.3", "@babel/preset-typescript": "^7.10.1", "@babel/runtime": "^7.10.3", - "babel-plugin-remove-graphql-queries": "^2.9.12" + "babel-plugin-remove-graphql-queries": "^2.9.13" } }, "gatsby-plugin-webpack-size": { @@ -16757,17 +16444,17 @@ } }, "gatsby-react-router-scroll": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/gatsby-react-router-scroll/-/gatsby-react-router-scroll-3.0.10.tgz", - "integrity": "sha512-Y+hHnrHbvKYh8+r6SFD4X0JLyYyoO+CCLGYvzLSF8lxBQLsSUeqm2ad9HHBeUktzs7DxIX+Ub9Nr7YCsFfQS+Q==", + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/gatsby-react-router-scroll/-/gatsby-react-router-scroll-3.0.11.tgz", + "integrity": "sha512-5eok4FySl0YeegwThOxmlyEiS37SOUB7ekfVkdxnPcEFNhLF5oSx/BnmhmuivUTwKDBJwW6wFXWB9qPZ8OessA==", "requires": { "@babel/runtime": "^7.10.3" } }, "gatsby-recipes": { - "version": "0.1.50", - "resolved": "https://registry.npmjs.org/gatsby-recipes/-/gatsby-recipes-0.1.50.tgz", - "integrity": "sha512-z+a3a1g+zxZ1skYzLdhHJBQt02nfL+VIpGTXqryrvofA9V5cfZJ2INkgj6nebcB3atQjZxA33xq5GOwmOQi93Q==", + "version": "0.1.51", + "resolved": "https://registry.npmjs.org/gatsby-recipes/-/gatsby-recipes-0.1.51.tgz", + "integrity": "sha512-SBbf5DEOEjJOKtJaXEokAuA1uR36MFbDixnbL8+npaAHQ70+9ExOziDW643yztb/X8JA0sq5y7SDxRwAE9acqA==", "requires": { "@babel/core": "^7.10.3", "@babel/generator": "^7.10.3", @@ -16792,8 +16479,8 @@ "express": "^4.17.1", "express-graphql": "^0.9.0", "fs-extra": "^8.1.0", - "gatsby-core-utils": "^1.3.11", - "gatsby-telemetry": "^1.3.18", + "gatsby-core-utils": "^1.3.12", + "gatsby-telemetry": "^1.3.19", "glob": "^7.1.6", "graphql": "^14.6.0", "graphql-compose": "^6.3.8", @@ -16832,11 +16519,6 @@ "xstate": "^4.11.0" }, "dependencies": { - "acorn": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.3.1.tgz", - "integrity": "sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA==" - }, "ansi-regex": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", @@ -17018,9 +16700,9 @@ } }, "gatsby-source-filesystem": { - "version": "2.3.18", - "resolved": "https://registry.npmjs.org/gatsby-source-filesystem/-/gatsby-source-filesystem-2.3.18.tgz", - "integrity": "sha512-HcPhm8yIYrpSVCVOiCzE8dGOKfv78Dvw8p86COE/EbvqRyXQ7x2N+v5dZSluSejtoXck0vISa2kJCGPTGzcsbw==", + "version": "2.3.19", + "resolved": "https://registry.npmjs.org/gatsby-source-filesystem/-/gatsby-source-filesystem-2.3.19.tgz", + "integrity": "sha512-vFNm1Qx7nHJVtnvA1tsQYNYdr7co8hI8rrt7OwIExW19ouryqSNtzSs7T2MHQNyeXLuIajEA2xOh4Q1OgC+9UA==", "requires": { "@babel/runtime": "^7.10.3", "better-queue": "^3.8.10", @@ -17028,7 +16710,7 @@ "chokidar": "3.4.0", "file-type": "^12.4.2", "fs-extra": "^8.1.0", - "gatsby-core-utils": "^1.3.11", + "gatsby-core-utils": "^1.3.12", "got": "^9.6.0", "md5-file": "^3.2.3", "mime": "^2.4.6", @@ -17062,9 +16744,9 @@ } }, "gatsby-source-graphql": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/gatsby-source-graphql/-/gatsby-source-graphql-2.6.1.tgz", - "integrity": "sha512-OvxyXODzwD92VWWRAeFzDNxRnIfQ4pm2KVU5ZRCqGD119KfqVPUX7Roo3E9ANnYnd5CpDmDFVecifl6rGjN8cg==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/gatsby-source-graphql/-/gatsby-source-graphql-2.6.2.tgz", + "integrity": "sha512-FLTIhLWp/+mKodeYFsHL4K/2dHsOMRRpi3xK2d3UwRqq10fs/6cCr/6J/is+znkzqy5ceoPVaK3MFOzVPQRVmA==", "requires": { "@babel/runtime": "^7.10.3", "@graphql-tools/links": "v6.0.9", @@ -17104,9 +16786,9 @@ } }, "gatsby-telemetry": { - "version": "1.3.18", - "resolved": "https://registry.npmjs.org/gatsby-telemetry/-/gatsby-telemetry-1.3.18.tgz", - "integrity": "sha512-GQmqz5s1DRYUHiv4P4Wdb+zUBGN01tJoAzEWxSnd4BW8Jc/pXd2gQWBcaCB26Bg37WRov88UKimBp5c1mq0iOQ==", + "version": "1.3.19", + "resolved": "https://registry.npmjs.org/gatsby-telemetry/-/gatsby-telemetry-1.3.19.tgz", + "integrity": "sha512-pou+2FFmeZ+5hC3FNA8Nu50kLXViulWInWggdu3wi6OkeNTaIkHArCYuTH8hi71w2sv3/XZ1YKQZd7SMRUugLw==", "requires": { "@babel/code-frame": "^7.10.3", "@babel/runtime": "^7.10.3", @@ -17114,7 +16796,7 @@ "configstore": "^5.0.1", "envinfo": "^7.5.1", "fs-extra": "^8.1.0", - "gatsby-core-utils": "^1.3.11", + "gatsby-core-utils": "^1.3.12", "git-up": "4.0.1", "is-docker": "2.0.0", "lodash": "^4.17.15", @@ -17140,22 +16822,22 @@ } }, "gatsby-transformer-json": { - "version": "2.4.10", - "resolved": "https://registry.npmjs.org/gatsby-transformer-json/-/gatsby-transformer-json-2.4.10.tgz", - "integrity": "sha512-K03GerPcIhG6NgzxDpgA1v86xfA4K1sfPi2YnZG1L9sZAAsbrTaioiGhK0jWy4P00XweASPJQzgiHXGlvbEfeg==", + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/gatsby-transformer-json/-/gatsby-transformer-json-2.4.11.tgz", + "integrity": "sha512-eOZHf/azsIqz7pqYyPBdwk2jqiviaFZwuRQWYxfRpvyohPdSMAgrKgLreJaORfjt0+i3saRBXmkIFDq4Q0iJTA==", "requires": { "@babel/runtime": "^7.10.3", "bluebird": "^3.7.2" } }, "gatsby-transformer-remark": { - "version": "2.8.23", - "resolved": "https://registry.npmjs.org/gatsby-transformer-remark/-/gatsby-transformer-remark-2.8.23.tgz", - "integrity": "sha512-WkTHBDqpshmYtwEtCc9491cg8sGqsT/jmBh2KjqZRzap7v1PrC5DWMfdafbkli3UcvS0DEytB/ZtFDFtcRdr5g==", + "version": "2.8.25", + "resolved": "https://registry.npmjs.org/gatsby-transformer-remark/-/gatsby-transformer-remark-2.8.25.tgz", + "integrity": "sha512-RTO741t6eG4lw0WWmZRjN55SLBx225fJr+t+QkqUNTbBdTxRuUfHyAK6gRzVDtIC9Jtr1fQZxK0Hx2M6nj72RQ==", "requires": { "@babel/runtime": "^7.10.3", "bluebird": "^3.7.2", - "gatsby-core-utils": "^1.3.11", + "gatsby-core-utils": "^1.3.12", "gray-matter": "^4.0.2", "hast-util-raw": "^4.0.0", "hast-util-to-html": "^4.0.1", @@ -17415,9 +17097,9 @@ } }, "gatsby-transformer-sharp": { - "version": "2.5.10", - "resolved": "https://registry.npmjs.org/gatsby-transformer-sharp/-/gatsby-transformer-sharp-2.5.10.tgz", - "integrity": "sha512-TXOhY4R5TrwtdHYmdqCZ45+PsVIiAUlcckxaNep1Ww/YLZsuaWm6JM8O9Wfy9MUGERmPYQpKfRJv3jCs8vSXYA==", + "version": "2.5.11", + "resolved": "https://registry.npmjs.org/gatsby-transformer-sharp/-/gatsby-transformer-sharp-2.5.11.tgz", + "integrity": "sha512-YPfZqJhJoQxQ0d/PUnAChPMm3RLcFSS6m0RgJl8Mh/Q8k15oZIDK82oBX2dCvKcfGKCq5ReT1gmwZJKXxt/vTw==", "requires": { "@babel/runtime": "^7.10.3", "bluebird": "^3.7.2", @@ -17805,9 +17487,9 @@ "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" }, "graphql": { - "version": "14.6.0", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-14.6.0.tgz", - "integrity": "sha512-VKzfvHEKybTKjQVpTFrA5yUq2S9ihcZvfJAtsDBBCuV6wauPu1xl/f9ehgVf0FcEJJs4vz6ysb/ZMkGigQZseg==", + "version": "14.7.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-14.7.0.tgz", + "integrity": "sha512-l0xWZpoPKpppFzMfvVyFmp9vLN7w/ZZJPefUicMCepfJeQ8sMcztloGYY9DfjVPo6tIUDzU5Hw3MUbIjj9AVVA==", "requires": { "iterall": "^1.2.2" } @@ -23573,13 +23255,6 @@ "@jimp/types": "^0.10.3", "core-js": "^3.4.1", "regenerator-runtime": "^0.13.3" - }, - "dependencies": { - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" - } } }, "jpeg-js": { @@ -23938,14 +23613,6 @@ "core-js": "^3.0.4", "dotenv": "^8.0.0", "dotenv-expand": "^5.1.0" - }, - "dependencies": { - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==", - "dev": true - } } }, "level-codec": { @@ -24203,9 +23870,14 @@ } }, "lodash": { + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" + }, + "lodash-es": { "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.15.tgz", + "integrity": "sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ==" }, "lodash.camelcase": { "version": "4.3.0", @@ -24640,11 +24312,18 @@ } }, "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "requires": { - "yallist": "^3.0.2" + "yallist": "^4.0.0" + }, + "dependencies": { + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } } }, "ltgt": { @@ -25595,9 +25274,9 @@ "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" }, "neo-async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", - "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==" + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, "next-tick": { "version": "1.0.0", @@ -27768,6 +27447,11 @@ "signal-exit": "^3.0.2" } }, + "property-expr": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-2.0.2.tgz", + "integrity": "sha512-bc/5ggaYZxNkFKj374aLbEDqVADdYaLcFo8XBkishUWbaAdjlphaBFns9TvRA2pUseVL/wMFmui9X3IdNDU37g==" + }, "property-information": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.5.0.tgz", @@ -28039,9 +27723,9 @@ } }, "react-datepicker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/react-datepicker/-/react-datepicker-3.0.0.tgz", - "integrity": "sha512-Yrxan1tERAiWS0EzitpiaiXOIz0APTUtV75uWbaS+jSaKoGCR6wUN2FDwr1ACGlnEoGhR9QQ2Vq3odnWtgJsOA==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/react-datepicker/-/react-datepicker-3.1.3.tgz", + "integrity": "sha512-4KbdWWAxa/AZJIDhQZwiBpZE9hCYZ4/gTVstdo9WEpFCsfh69xHklB/FZrR95mgkIU7ecU36V2eCuGgIO+ci0A==", "requires": { "classnames": "^2.2.6", "date-fns": "^2.0.1", @@ -28571,21 +28255,6 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, - "react-jsonschema-form": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/react-jsonschema-form/-/react-jsonschema-form-1.8.1.tgz", - "integrity": "sha512-aaDloxNAcGXOOOcdKOxxqEEn5oDlPUZgWcs8unXXB9vjBRgCF8rCm/wVSv1u2G5ih0j/BX6Ewd/WjI2g00lPdg==", - "requires": { - "@babel/runtime-corejs2": "^7.4.5", - "ajv": "^6.7.0", - "core-js": "^2.5.7", - "lodash": "^4.17.15", - "prop-types": "^15.5.8", - "react-is": "^16.8.4", - "react-lifecycles-compat": "^3.0.4", - "shortid": "^2.2.14" - } - }, "react-lifecycles-compat": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", @@ -29093,9 +28762,9 @@ } }, "registry-auth-token": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.1.1.tgz", - "integrity": "sha512-9bKS7nTl9+/A1s7tnPeGrUpRcVY+LUh7bfFgzpndALdPfXQBfQV77rQVtqgUV3ti4vc/Ik81Ex8UJDWDQ12zQA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.0.tgz", + "integrity": "sha512-P+lWzPrsgfN+UEpDS3U8AQKg/UjZX6mQSJueZj3EK+vNESoqBSpBUD3gmu4sF9lOsjXWjF11dQKUqemf3veq1w==", "requires": { "rc": "^1.2.8" } @@ -32051,9 +31720,9 @@ "integrity": "sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw==" }, "subscriptions-transport-ws": { - "version": "0.9.16", - "resolved": "https://registry.npmjs.org/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.16.tgz", - "integrity": "sha512-pQdoU7nC+EpStXnCfh/+ho0zE0Z+ma+i7xvj7bkXKb1dvYHSZxgRPaU6spRP+Bjzow67c/rRDoix5RT0uU9omw==", + "version": "0.9.17", + "resolved": "https://registry.npmjs.org/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.17.tgz", + "integrity": "sha512-hNHi2N80PBz4T0V0QhnnsMGvG3XDFDS9mS6BhZ3R12T6EBywC8d/uJscsga0cVO4DKtXCkCRrWm2sOYrbOdhEA==", "requires": { "backo2": "^1.0.2", "eventemitter3": "^3.1.0", @@ -32286,6 +31955,11 @@ "has-symbols": "^1.0.1" } }, + "synchronous-promise": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.13.tgz", + "integrity": "sha512-R9N6uDkVsghHePKh1TEqbnLddO2IY25OcsksyFp/qBe7XYd0PVbKEWxhcdMhpLzE1I6skj5l4aEZ3CRxcbArlA==" + }, "table": { "version": "5.4.6", "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", @@ -32368,9 +32042,9 @@ } }, "tar-stream": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.2.tgz", - "integrity": "sha512-UaF6FoJ32WqALZGOIAApXx+OdxhekNMChu6axLJR85zMMjXKWFGjbIRe+J6P4UnRGg9rAwWvbTT0oI7hD/Un7Q==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.3.tgz", + "integrity": "sha512-Z9yri56Dih8IaK8gncVPx4Wqt86NDmQTSh49XLZgjWpGZL9GK9HKParS2scqHCC4w6X9Gh2jwaU45V47XTKwVA==", "requires": { "bl": "^4.0.1", "end-of-stream": "^1.4.1", @@ -32563,9 +32237,9 @@ } }, "p-limit": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.0.1.tgz", - "integrity": "sha512-mw/p92EyOzl2MhauKodw54Rx5ZK4624rNfgNaBguFZkHzyUG9WsDzFF5/yQVEJinbJDdP4jEfMN+uBquiGnaLg==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.0.2.tgz", + "integrity": "sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -32732,6 +32406,11 @@ "dev": true, "optional": true }, + "tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" + }, "tinycolor2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.1.tgz", @@ -32855,6 +32534,11 @@ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" }, + "toposort": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", + "integrity": "sha1-riF2gXXRVZ1IvvNUILL0li8JwzA=" + }, "tough-cookie": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", @@ -34596,6 +34280,14 @@ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "requires": { + "yallist": "^3.0.2" + } + }, "mkdirp": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", @@ -35718,6 +35410,20 @@ "@types/yoga-layout": "1.9.2" } }, + "yup": { + "version": "0.29.1", + "resolved": "https://registry.npmjs.org/yup/-/yup-0.29.1.tgz", + "integrity": "sha512-U7mPIbgfQWI6M3hZCJdGFrr+U0laG28FxMAKIgNvgl7OtyYuUoc4uy9qCWYHZjh49b8T7Ug8NNDdiMIEytcXrQ==", + "requires": { + "@babel/runtime": "^7.9.6", + "fn-name": "~3.0.0", + "lodash": "^4.17.15", + "lodash-es": "^4.17.11", + "property-expr": "^2.0.2", + "synchronous-promise": "^2.0.10", + "toposort": "^2.0.2" + } + }, "yurnalist": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/yurnalist/-/yurnalist-1.1.2.tgz", diff --git a/package.json b/package.json index 6ac556b1d..5141ee3bc 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ }, "dependencies": { "@loadable/component": "^5.13.1", - "@now/node": "^1.7.1", + "@now/node": "^1.7.2", "@oceanprotocol/art": "^3.0.0", "@oceanprotocol/react": "0.0.11", "@oceanprotocol/squid": "^2.2.0", @@ -34,31 +34,31 @@ "dotenv": "^8.2.0", "ethereum-blockies": "github:MyEtherWallet/blockies", "filesize": "^6.1.0", - "gatsby": "^2.23.22", - "gatsby-image": "^2.4.12", - "gatsby-plugin-manifest": "^2.4.17", - "gatsby-plugin-react-helmet": "^3.3.9", - "gatsby-plugin-remove-trailing-slashes": "^2.3.10", - "gatsby-plugin-sharp": "^2.6.18", + "formik": "^2.1.4", + "gatsby": "^2.24.2", + "gatsby-image": "^2.4.13", + "gatsby-plugin-manifest": "^2.4.18", + "gatsby-plugin-react-helmet": "^3.3.10", + "gatsby-plugin-remove-trailing-slashes": "^2.3.11", + "gatsby-plugin-sharp": "^2.6.19", "gatsby-plugin-svgr": "^2.0.2", "gatsby-plugin-webpack-size": "^1.0.0", - "gatsby-source-filesystem": "^2.3.18", - "gatsby-source-graphql": "^2.6.1", - "gatsby-transformer-json": "^2.4.10", - "gatsby-transformer-remark": "^2.8.23", - "gatsby-transformer-sharp": "^2.5.10", + "gatsby-source-filesystem": "^2.3.19", + "gatsby-source-graphql": "^2.6.2", + "gatsby-transformer-json": "^2.4.11", + "gatsby-transformer-remark": "^2.8.25", + "gatsby-transformer-sharp": "^2.5.11", "intersection-observer": "^0.11.0", "is-url-superb": "^4.0.0", "numeral": "^2.0.6", "query-string": "^6.13.1", "react": "^16.13.1", "react-data-table-component": "^6.9.6", - "react-datepicker": "^3.0.0", + "react-datepicker": "^3.1.3", "react-dom": "^16.13.1", "react-dotdotdot": "^1.3.1", "react-dropzone": "^11.0.1", "react-helmet": "^6.1.0", - "react-jsonschema-form": "^1.8.1", "react-markdown": "^4.3.1", "react-paginate": "^6.3.2", "react-rating": "^2.0.5", @@ -68,28 +68,29 @@ "react-toastify": "^6.0.8", "shortid": "^2.2.15", "slugify": "^1.4.4", - "web3connect": "^1.0.0-beta.33" + "web3connect": "^1.0.0-beta.33", + "yup": "^0.29.1" }, "devDependencies": { "@babel/core": "^7.10.3", "@babel/preset-typescript": "^7.10.1", - "@storybook/addon-actions": "^6.0.0-beta.45", - "@storybook/addon-storyshots": "^6.0.0-beta.45", - "@storybook/react": "^6.0.0-beta.45", + "@storybook/addon-actions": "^6.0.0-rc.3", + "@storybook/addon-storyshots": "^6.0.0-rc.3", + "@storybook/react": "^6.0.0-rc.3", "@svgr/webpack": "^5.4.0", "@testing-library/jest-dom": "^5.11.0", - "@testing-library/react": "^10.4.4", + "@testing-library/react": "^10.4.5", "@types/jest": "^26.0.4", - "@types/loadable__component": "^5.10.0", - "@types/node": "^14.0.19", + "@types/loadable__component": "^5.13.0", + "@types/node": "^14.0.22", "@types/numeral": "^0.0.28", - "@types/react": "^16.9.41", + "@types/react": "^16.9.43", "@types/react-datepicker": "^3.0.2", "@types/react-helmet": "^6.0.0", - "@types/react-jsonschema-form": "^1.7.3", "@types/react-paginate": "^6.2.1", "@types/react-tabs": "^2.3.2", "@types/shortid": "0.0.29", + "@types/yup": "^0.29.3", "@typescript-eslint/eslint-plugin": "^3.6.0", "@typescript-eslint/parser": "^3.6.0", "babel-loader": "^8.1.0", diff --git a/src/@types/Form.d.ts b/src/@types/Form.d.ts new file mode 100644 index 000000000..4a88b4128 --- /dev/null +++ b/src/@types/Form.d.ts @@ -0,0 +1,18 @@ +export interface FormFieldProps { + label: string + name: string + type?: string + options?: string[] + required?: boolean + help?: string + placeholder?: string + pattern?: string + min?: string +} + +export interface FormContent { + title: string + description?: string + success: string + data: FormFieldProps[] +} diff --git a/src/@types/MetaData.d.ts b/src/@types/MetaData.d.ts index d6782d21a..b3fdd91a8 100644 --- a/src/@types/MetaData.d.ts +++ b/src/@types/MetaData.d.ts @@ -1,25 +1,36 @@ -import { MetaData, AdditionalInformation } from '@oceanprotocol/squid' +import { File, MetaData, AdditionalInformation } from '@oceanprotocol/squid' import { ServiceMetadata } from '@oceanprotocol/squid/dist/node/ddo/Service' -export interface Sample { - name: string - url: string -} - export declare type AccessType = 'Download' | 'Compute' export interface AdditionalInformationMarket extends AdditionalInformation { description: string - links?: Sample[] // redefine existing key, cause not specific enough in Squid + links?: File[] // redefine existing key, cause not specific enough in Squid termsAndConditions: boolean dateRange?: [string, string] - access: AccessType + access: AccessType | string } export interface MetaDataMarket extends MetaData { additionalInformation: AdditionalInformationMarket } +export interface MetaDataPublishForm { + // ---- required fields ---- + name: string + description: string + files: string | File[] + author: string + license: string + price: string + access: string + termsAndConditions: boolean + // ---- optional fields ---- + copyrightHolder?: string + tags?: string + links?: string | File[] +} + export interface ServiceMetaDataMarket extends ServiceMetadata { attributes: MetaDataMarket } diff --git a/src/components/Layout.tsx b/src/components/Layout.tsx index b7b54e29c..99871a894 100644 --- a/src/components/Layout.tsx +++ b/src/components/Layout.tsx @@ -1,5 +1,4 @@ import React, { ReactNode, ReactElement } from 'react' -import { Helmet } from 'react-helmet' import Header from './organisms/Header' import Footer from './organisms/Footer' import PageHeader from './molecules/PageHeader' @@ -24,12 +23,6 @@ export default function Layout({ }: LayoutProps): ReactElement { return (
- - - - - -
diff --git a/src/components/atoms/Alert.stories.tsx b/src/components/atoms/Alert.stories.tsx index a97b92228..98705b7c6 100644 --- a/src/components/atoms/Alert.stories.tsx +++ b/src/components/atoms/Alert.stories.tsx @@ -1,6 +1,6 @@ import React from 'react' import { Center } from '../../../.storybook/helpers' -import { Alert } from './Alert' +import Alert from './Alert' export default { title: 'Atoms/Alert', diff --git a/src/components/atoms/Alert.tsx b/src/components/atoms/Alert.tsx index 5b25e571c..c1b7b0a14 100644 --- a/src/components/atoms/Alert.tsx +++ b/src/components/atoms/Alert.tsx @@ -1,7 +1,7 @@ import React, { ReactElement } from 'react' import styles from './Alert.module.css' -export function Alert({ +export default function Alert({ title, text, state diff --git a/src/components/atoms/Button.module.css b/src/components/atoms/Button.module.css index 24c6ffff9..c84caabd6 100644 --- a/src/components/atoms/Button.module.css +++ b/src/components/atoms/Button.module.css @@ -46,7 +46,7 @@ .button:disabled { cursor: not-allowed; pointer-events: none; - opacity: 0.5; + background: var(--brand-grey-lighter); } .primary, diff --git a/src/components/atoms/Checkbox.module.css b/src/components/atoms/Checkbox.module.css deleted file mode 100644 index da4962a0d..000000000 --- a/src/components/atoms/Checkbox.module.css +++ /dev/null @@ -1,3 +0,0 @@ -.label { - cursor: pointer; -} diff --git a/src/components/atoms/Checkbox.stories.tsx b/src/components/atoms/Checkbox.stories.tsx deleted file mode 100644 index 085145444..000000000 --- a/src/components/atoms/Checkbox.stories.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import React from 'react' -import Checkbox from './Checkbox' -import { Center } from '../../../.storybook/helpers' - -export default { - title: 'Atoms/Checkbox', - decorators: [(storyFn: any) =>
{storyFn()}
] -} - -export const Checked = () => ( - null} - label="Example checkbox" - /> -) - -export const Unchecked = () => ( - null} - label="Example checkbox" - /> -) diff --git a/src/components/atoms/Checkbox.tsx b/src/components/atoms/Checkbox.tsx deleted file mode 100644 index a5e17ce89..000000000 --- a/src/components/atoms/Checkbox.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import React from 'react' -import styles from './Checkbox.module.css' - -interface CheckboxProps { - name: string - checked: boolean - onChange?: (evt: React.ChangeEvent) => void - label: string -} - -const Checkbox: React.FC = ({ - name, - checked, - onChange, - label -}) => { - return ( - - ) -} - -export default Checkbox diff --git a/src/components/atoms/File.tsx b/src/components/atoms/File.tsx index 627e98539..f4e3f1c72 100644 --- a/src/components/atoms/File.tsx +++ b/src/components/atoms/File.tsx @@ -1,10 +1,10 @@ -import React from 'react' +import React, { ReactElement } from 'react' import { File as FileMetaData } from '@oceanprotocol/squid' import filesize from 'filesize' import cleanupContentType from '../../utils/cleanupContentType' import styles from './File.module.css' -export default function File({ file }: { file: FileMetaData }) { +export default function File({ file }: { file: FileMetaData }): ReactElement { if (!file) return null return ( diff --git a/src/components/atoms/FormWidgets/DateRangeWidget.module.css b/src/components/atoms/FormWidgets/DateRangeWidget.module.css deleted file mode 100644 index 8d769504c..000000000 --- a/src/components/atoms/FormWidgets/DateRangeWidget.module.css +++ /dev/null @@ -1,22 +0,0 @@ -.dateRange { - display: flex; -} - -.separator { - margin: 0 var(--spacer); - height: inherit; - display: flex; - align-items: center; - justify-content: center; - font-size: var(--font-size-base); -} - -.checkbox { - composes: checkbox from '../../molecules/Form/FieldTemplate.module.css'; - margin-top: calc(var(--spacer) / 8); -} - -.label { - composes: label from '../../molecules/Form/FieldTemplate.module.css'; - font-size: var(--font-size-small); -} diff --git a/src/components/atoms/FormWidgets/DateRangeWidget.stories.tsx b/src/components/atoms/FormWidgets/DateRangeWidget.stories.tsx deleted file mode 100644 index c4b9d511c..000000000 --- a/src/components/atoms/FormWidgets/DateRangeWidget.stories.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import React from 'react' -import { Center } from '../../../../.storybook/helpers' -import DateRangeWidget from './DateRangeWidget' -import { PublishFormSchema } from '../../../models/PublishForm' - -export default { - title: 'Atoms/DateRangeWidget', - decorators: [(storyFn: () => React.FC) =>
{storyFn()}
] -} - -export const DateRange = () => ( - { - /* */ - }} - onFocus={() => { - /* */ - }} - onChange={() => { - /* */ - }} - options={{}} - required={false} - /> -) diff --git a/src/components/atoms/FormWidgets/DateRangeWidget.tsx b/src/components/atoms/FormWidgets/DateRangeWidget.tsx deleted file mode 100644 index 9be3234d1..000000000 --- a/src/components/atoms/FormWidgets/DateRangeWidget.tsx +++ /dev/null @@ -1,87 +0,0 @@ -import React, { useEffect, useState } from 'react' -import { WidgetProps } from 'react-jsonschema-form' -import loadable from '@loadable/component' -import styles from './DateRangeWidget.module.css' -import { toStringNoMS } from '../../../utils' - -// lazy load this module, it's huge -const LazyDatePicker = loadable(() => import('react-datepicker')) - -export function getWidgetValue( - date1: Date, - date2: Date, - range: boolean -): string { - let [initial, final] = [toStringNoMS(date1), toStringNoMS(date2)] - - if (!range) { - final = initial - } - - return JSON.stringify([initial, final]) -} - -export default function DateRangeWidget(props: WidgetProps) { - const { onChange } = props - const [startDate, setStartDate] = useState(new Date()) - const [endDate, setEndDate] = useState(new Date()) - const [range, setRange] = useState(false) - - useEffect(() => { - // If the range checkbox is clicked we update the value of the picker - onChange(getWidgetValue(startDate, endDate, range)) - }, [range]) - - return ( - <> -
- {range ? ( - <> - { - setStartDate(date) - onChange(getWidgetValue(date, endDate, range)) - }} - startDate={startDate} - selectsStart - endDate={endDate} - /> -
–
- { - setEndDate(date) - onChange(getWidgetValue(startDate, date, range)) - }} - minDate={startDate} - startDate={startDate} - endDate={endDate} - /> - - ) : ( - { - setStartDate(date) - onChange(getWidgetValue(date, date, range)) - }} - startDate={startDate} - /> - )} -
-
- setRange(ev.target.checked)} - checked={range} - /> - -
- - ) -} diff --git a/src/components/atoms/FormWidgets/TermsWidget.module.css b/src/components/atoms/FormWidgets/TermsWidget.module.css deleted file mode 100644 index d677df623..000000000 --- a/src/components/atoms/FormWidgets/TermsWidget.module.css +++ /dev/null @@ -1,31 +0,0 @@ -.terms { - padding: calc(var(--spacer) / 2); - border: 1px solid var(--brand-grey-light); - background-color: var(--brand-grey-lighter); - border-radius: var(--border-radius); - margin-bottom: calc(var(--spacer) / 2); - font-size: var(--font-size-small); - - max-height: 250px; - /* smooth overflow scrolling for pre-iOS 13 */ - overflow: auto; - -webkit-overflow-scrolling: touch; -} - -.terms h1 { - font-size: var(--font-size-base); - margin-bottom: calc(var(--spacer) / 2); -} - -.terms h2 { - font-size: var(--font-size-small); -} - -.label { - composes: label from '../../molecules/Form/FieldTemplate.module.css'; - margin-bottom: 0; -} - -.req { - composes: req from '../../molecules/Form/FieldTemplate.module.css'; -} diff --git a/src/components/atoms/FormWidgets/TermsWidget.tsx b/src/components/atoms/FormWidgets/TermsWidget.tsx deleted file mode 100644 index cb6383aa4..000000000 --- a/src/components/atoms/FormWidgets/TermsWidget.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import React from 'react' -import { WidgetProps } from 'react-jsonschema-form' -import styles from './TermsWidget.module.css' - -export default function TermsWidget(props: WidgetProps) { - const { - id, - value, - disabled, - readonly, - label, - autofocus, - onBlur, - onFocus, - onChange, - required - // DescriptionField - } = props - - return ( - <> - {/* */} - - - ) -} diff --git a/src/components/atoms/Input/InputElement.module.css b/src/components/atoms/Input/InputElement.module.css index 87a7cbd2f..d468b5dc9 100644 --- a/src/components/atoms/Input/InputElement.module.css +++ b/src/components/atoms/Input/InputElement.module.css @@ -69,34 +69,10 @@ .radioGroup { margin-top: calc(var(--spacer) / 2); - margin-bottom: -2%; -} - -@media screen and (min-width: 40rem) { - .radioGroup { - display: flex; - flex-wrap: wrap; - justify-content: space-between; - } } .radioWrap { position: relative; - padding: calc(var(--spacer) / 2); - text-align: center; - display: flex; - align-items: center; - margin-bottom: 2%; -} - -@media screen and (min-width: 40rem) { - .radioWrap { - flex: 0 0 49%; - } -} - -.radio:checked + label { - border-color: var(--brand-pink); } .radioLabel { @@ -104,19 +80,8 @@ padding: 0; font-weight: var(--font-weight-bold); font-size: var(--font-size-small); - line-height: 1.2; - border: 1px solid var(--brand-grey-lighter); - border-radius: 0.2rem; - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; color: var(--brand-grey); - text-align: left; - padding-left: 2.5rem; - display: flex; - align-items: center; + padding-left: 0.5rem; } /* Size modifiers */ diff --git a/src/components/atoms/Input/InputElement.tsx b/src/components/atoms/Input/InputElement.tsx index 7ef547ef9..45981c322 100644 --- a/src/components/atoms/Input/InputElement.tsx +++ b/src/components/atoms/Input/InputElement.tsx @@ -1,9 +1,10 @@ -import React from 'react' +import React, { ReactElement } from 'react' import slugify from '@sindresorhus/slugify' import styles from './InputElement.module.css' import { InputProps } from '.' +import FilesInput from '../../molecules/FilesInput' -export default function InputElement(props: InputProps) { +export default function InputElement(props: InputProps): ReactElement { const { type, options, rows, name } = props switch (type) { @@ -52,6 +53,8 @@ export default function InputElement(props: InputProps) { ))}
) + case 'files': + return default: return ( input { - @media screen and (min-width: $break-point--small) { - width: 75%; + + .inputGroup input { + border-bottom-left-radius: var(--border-radius); border-top-right-radius: 0; border-bottom-right-radius: 0; } -} -.inputGroup > button { - width: 100%; - position: absolute; - left: 0; - bottom: -120%; - @media screen and (min-width: $break-point--small) { - position: relative; - bottom: auto; - width: 25%; - height: 100%; + .inputGroup button { + border-top-right-radius: var(--border-radius); border-top-left-radius: 0; border-bottom-left-radius: 0; - box-shadow: none; + margin-top: 0; + margin-left: -1px; + width: fit-content; + min-width: 20%; } } diff --git a/src/components/atoms/Input/InputGroup.tsx b/src/components/atoms/Input/InputGroup.tsx index e525b28b5..07034f068 100644 --- a/src/components/atoms/Input/InputGroup.tsx +++ b/src/components/atoms/Input/InputGroup.tsx @@ -1,7 +1,7 @@ -import React from 'react' +import React, { ReactElement, ReactNode } from 'react' import styles from './InputGroup.module.css' -const InputGroup = ({ children }: { children: any }) => ( +const InputGroup = ({ children }: { children: ReactNode }): ReactElement => (
{children}
) diff --git a/src/components/atoms/Input/index.module.css b/src/components/atoms/Input/index.module.css index 5dac7fa67..a7e4c5b1f 100644 --- a/src/components/atoms/Input/index.module.css +++ b/src/components/atoms/Input/index.module.css @@ -1,3 +1,17 @@ .field { margin-bottom: var(--spacer); + position: relative; +} + +.field .field { + margin-bottom: calc(var(--spacer) / 2); +} + +.error { + font-size: var(--font-size-small); + color: var(--brand-alert-red); + position: absolute; + text-align: right; + right: 0; + top: 0; } diff --git a/src/components/atoms/Input/index.tsx b/src/components/atoms/Input/index.tsx index bd0ed7384..5c461bb01 100644 --- a/src/components/atoms/Input/index.tsx +++ b/src/components/atoms/Input/index.tsx @@ -3,6 +3,7 @@ import InputElement from './InputElement' import Help from './Help' import Label from './Label' import styles from './index.module.css' +import { ErrorMessage } from 'formik' export interface InputProps { name: string @@ -35,15 +36,8 @@ export interface InputProps { } } -export default function Input(props: InputProps) { - const { - required, - name, - label, - help, - additionalComponent, - field - } = props as Partial +export default function Input(props: Partial): ReactElement { + const { required, name, label, help, additionalComponent, field } = props return (
@@ -52,6 +46,12 @@ export default function Input(props: InputProps) { + {field && ( +
+ +
+ )} + {help && {help}} {additionalComponent && additionalComponent}
diff --git a/src/components/atoms/Loader.stories.tsx b/src/components/atoms/Loader.stories.tsx index 0022b64fc..eef84e4d3 100644 --- a/src/components/atoms/Loader.stories.tsx +++ b/src/components/atoms/Loader.stories.tsx @@ -12,7 +12,3 @@ export const Normal = () => export const WithMessage = () => ( ) - -export const WithMessageHorizontal = () => ( - -) diff --git a/src/components/atoms/Table/ActionsCell.tsx b/src/components/atoms/Table/ActionsCell.tsx index 1f8d6ba4b..c91318358 100644 --- a/src/components/atoms/Table/ActionsCell.tsx +++ b/src/components/atoms/Table/ActionsCell.tsx @@ -1,4 +1,4 @@ -import React from 'react' +import React, { ReactElement } from 'react' import Eye from '../../../images/eye.svg' import Button from '../Button' import Tooltip from '../Tooltip' @@ -10,7 +10,7 @@ export declare type ActionsCellProps = { export default function ActionsCell({ handleOnClickViewJobDetails -}: ActionsCellProps) { +}: ActionsCellProps): ReactElement { return ( <> {handleOnClickViewJobDetails && ( diff --git a/src/components/molecules/AssetTeaser.stories.tsx b/src/components/molecules/AssetTeaser.stories.tsx index fc562b70d..956f60059 100644 --- a/src/components/molecules/AssetTeaser.stories.tsx +++ b/src/components/molecules/AssetTeaser.stories.tsx @@ -7,4 +7,9 @@ export default { title: 'Molecules/Asset Teaser' } -export const Default = () => +export const Default = () => ( + +) diff --git a/src/components/molecules/Form/FileField/Info.module.css b/src/components/molecules/FilesInput/Info.module.css similarity index 82% rename from src/components/molecules/Form/FileField/Info.module.css rename to src/components/molecules/FilesInput/Info.module.css index 02504842a..5546ba117 100644 --- a/src/components/molecules/Form/FileField/Info.module.css +++ b/src/components/molecules/FilesInput/Info.module.css @@ -1,8 +1,9 @@ .info { border-radius: var(--border-radius); padding: calc(var(--spacer) / 2); - border: 1px solid var(--brand-grey-light); - background-color: var(--brand-grey-lighter); + border: 1px solid var(--brand-grey-lighter); + background-color: var(--brand-grey-dimmed); + position: relative; } .url { @@ -34,6 +35,6 @@ right: 0; font-size: var(--font-size-h3); cursor: pointer; - color: var(--color-secondary); + color: var(--brand-grey); background-color: transparent; } diff --git a/src/components/molecules/FilesInput/Info.tsx b/src/components/molecules/FilesInput/Info.tsx new file mode 100644 index 000000000..53ee5c162 --- /dev/null +++ b/src/components/molecules/FilesInput/Info.tsx @@ -0,0 +1,27 @@ +import React, { ReactElement } from 'react' +import { File } from '@oceanprotocol/squid' +import { prettySize } from '../../../utils' +import cleanupContentType from '../../../utils/cleanupContentType' +import styles from './Info.module.css' + +export default function FileInfo({ + file, + removeItem +}: { + file: File + removeItem(): void +}): ReactElement { + return ( +
+

{file.url}

+
    +
  • URL confirmed
  • + {file.contentLength &&
  • {prettySize(+file.contentLength)}
  • } + {file.contentType &&
  • {cleanupContentType(file.contentType)}
  • } +
+ +
+ ) +} diff --git a/src/components/molecules/FilesInput/Input.module.css b/src/components/molecules/FilesInput/Input.module.css new file mode 100644 index 000000000..1b82548a2 --- /dev/null +++ b/src/components/molecules/FilesInput/Input.module.css @@ -0,0 +1,3 @@ +.input { + composes: input from '../../atoms/Input/InputElement.module.css'; +} diff --git a/src/components/molecules/FilesInput/Input.tsx b/src/components/molecules/FilesInput/Input.tsx new file mode 100644 index 000000000..e0363ad8e --- /dev/null +++ b/src/components/molecules/FilesInput/Input.tsx @@ -0,0 +1,38 @@ +import React, { ReactElement } from 'react' +import isUrl from 'is-url-superb' +import Button from '../../atoms/Button' +import { useField } from 'formik' +import Loader from '../../atoms/Loader' +import InputElement from '../../atoms/Input/InputElement' +import { InputProps } from '../../atoms/Input' +import styles from './Input.module.css' +import InputGroup from '../../atoms/Input/InputGroup' + +export default function FileInput({ + handleButtonClick, + isLoading, + ...props +}: { + handleButtonClick(e: React.SyntheticEvent, data: string): void + isLoading: boolean +}): ReactElement { + const [field, meta] = useField(props as InputProps) + + return ( + + + + + + ) +} diff --git a/src/components/molecules/FilesInput/index.module.css b/src/components/molecules/FilesInput/index.module.css new file mode 100644 index 000000000..e69de29bb diff --git a/src/components/molecules/FilesInput/index.tsx b/src/components/molecules/FilesInput/index.tsx new file mode 100644 index 000000000..c6be8fb6a --- /dev/null +++ b/src/components/molecules/FilesInput/index.tsx @@ -0,0 +1,51 @@ +import React, { ReactElement, useState } from 'react' +import { useField } from 'formik' +import { toast } from 'react-toastify' +import FileInfo from './Info' +import FileInput from './Input' +import { getFileInfo } from '../../../utils' +import { InputProps } from '../../atoms/Input' + +interface Values { + url: string +} + +export default function FilesInput(props: InputProps): ReactElement { + const [field, meta, helpers] = useField(props) + const [isLoading, setIsLoading] = useState(false) + + async function handleButtonClick(e: React.SyntheticEvent, url: string) { + // File example 'https://oceanprotocol.com/tech-whitepaper.pdf' + e.preventDefault() + + try { + setIsLoading(true) + const newFileInfo = await getFileInfo(url) + newFileInfo && helpers.setValue([newFileInfo]) + } catch (error) { + toast.error('Could not fetch file info. Please check url and try again') + console.error(error.message) + } finally { + setIsLoading(false) + } + } + + function removeItem() { + helpers.setValue(undefined) + } + + return ( + <> + {typeof field.value === 'object' ? ( + + ) : ( + + )} + + ) +} diff --git a/src/components/molecules/Form/FieldTemplate.module.css b/src/components/molecules/Form/FieldTemplate.module.css deleted file mode 100644 index b72b202ae..000000000 --- a/src/components/molecules/Form/FieldTemplate.module.css +++ /dev/null @@ -1,140 +0,0 @@ -.row { - margin-bottom: var(--spacer); -} - -.input, -.row input:not([type='radio']):not([type='checkbox']), -.row select, -.row textarea { - font-size: var(--font-size-base); - font-family: var(--font-family-base); - font-weight: var(--font-weight-bold); - /* font-weight: var(--font-weight-bold); */ - color: var(--brand-grey-dark); - border: 2px solid var(--brand-pink); - box-shadow: none; - width: 100%; - background: var(--brand-white); - padding: calc(var(--spacer) / 3); - margin: 0; - border-radius: var(--border-radius); - transition: 0.2s ease-out; - min-height: 43px; - appearance: none; -} - -.input:focus, -.row input:focus:not([type='radio']):not([type='checkbox']), -.row select:focus, -.row textarea:focus { - box-shadow: none; - outline: 0; - border-color: var(--brand-pink); -} - -.input::placeholder, -.row input::placeholder, -.row textarea::placeholder { - font-family: var(--font-family-base); - font-size: var(--font-size-base); - color: var(--color-secondary); - font-weight: var(--font-weight-base); - opacity: 0.7; -} - -.input[readonly], -.input[disabled], -.row input[readonly], -.row input[disabled] { - background-color: var(--brand-grey-light); - cursor: not-allowed; - pointer-events: none; -} - -.row textarea { - min-height: 5rem; - display: block; -} - -.row select { - padding-right: 3rem; - - /* custom arrow */ - background-image: linear-gradient( - 45deg, - transparent 50%, - var(--brand-pink) 50% - ), - linear-gradient(135deg, var(--brand-pink) 50%, transparent 50%), - linear-gradient(to right, var(--brand-pink) 0px, var(--brand-white) 2px); - background-position: calc(100% - 18px) calc(1rem + 5px), - calc(100% - 13px) calc(1rem + 5px), 100% 0; - background-size: 5px 5px, 5px 5px, 2.5rem 4rem; - background-repeat: no-repeat; - cursor: pointer; -} - -.checkbox label, -.radio label, -.row input[type='radio'] + span, -.row input[type='checkbox'] + span { - display: inline-block; - font-weight: var(--font-weight-base); - margin-bottom: calc(var(--spacer) / 4); -} - -.row :global(.field-radio-group) { - border: 2px solid var(--brand-pink); - padding: calc(var(--spacer) / 3); - border-radius: var(--border-radius); -} - -.labelHolder { - display: flex; - justify-content: space-between; -} - -.label { - display: block; - font-size: var(--font-size-small); - font-weight: var(--font-weight-bold); - margin-bottom: calc(var(--spacer) / 8); - color: var(--color-secondary); -} - -.req:after { - content: '*'; - padding-left: calc(var(--spacer) / 8); - color: var(--color-primary); -} - -.help { - font-size: var(--font-size-small); - color: var(--color-secondary); - margin-top: 0.25rem; - font-style: italic; -} - -.errors { - padding-top: calc(var(--spacer) / 8); - font-size: var(--font-size-mini); - color: var(--color-primary); - text-transform: capitalize; -} - -.error input:not([type='radio']):not([type='checkbox']), -.error select, -.error textarea { - border-color: var(--color-primary); -} - -/* Size Modifiers */ -.large, -.large::placeholder, -.large + button { - font-size: var(--font-size-large); -} - -.large { - padding: calc(var(--spacer) / 2); -} diff --git a/src/components/molecules/Form/FieldTemplate.tsx b/src/components/molecules/Form/FieldTemplate.tsx deleted file mode 100644 index 7ec00c71e..000000000 --- a/src/components/molecules/Form/FieldTemplate.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import React from 'react' -import { FieldTemplateProps } from 'react-jsonschema-form' -import styles from './FieldTemplate.module.css' - -const noLabelFields = ['root', 'root_termsAndConditions', 'root_files_0'] - -// Ref: https://react-jsonschema-form.readthedocs.io/en/latest/advanced-customization/#field-template -export const FieldTemplate = ({ - id, - label, - rawHelp, - required, - rawErrors, - children -}: FieldTemplateProps) => { - const noLabel = id !== noLabelFields.filter((f) => id === f)[0] - return ( -
0 - ? `${styles.row} ${styles.error}` - : `${styles.row}` - } - > -
- {noLabel && ( - - )} -
- {children} - - {rawErrors && {rawErrors}} - {rawHelp &&
{rawHelp}
} -
- ) -} diff --git a/src/components/molecules/Form/FileField/Info.tsx b/src/components/molecules/Form/FileField/Info.tsx deleted file mode 100644 index 5f63bee1f..000000000 --- a/src/components/molecules/Form/FileField/Info.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import React from 'react' -import { File } from '@oceanprotocol/squid' -import { prettySize } from '../../../../utils' -import cleanupContentType from '../../../../utils/cleanupContentType' -import styles from './Info.module.css' - -const FileInfo = ({ info, removeItem }: { info: File; removeItem(): void }) => ( -
-

{info.url}

-
    -
  • URL confirmed
  • - {info.contentLength &&
  • {prettySize(+info.contentLength)}
  • } - {info.contentType &&
  • {cleanupContentType(info.contentType)}
  • } -
- -
-) - -export default FileInfo diff --git a/src/components/molecules/Form/FileField/Input.tsx b/src/components/molecules/Form/FileField/Input.tsx deleted file mode 100644 index db7d76bc5..000000000 --- a/src/components/molecules/Form/FileField/Input.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import React, { ReactElement, ReactNode } from 'react' -import isUrl from 'is-url-superb' -import Loader from '../../../atoms/Loader' -import Button from '../../../atoms/Button' -import styles from './index.module.css' - -const FileInput = ({ - formData, - handleButtonClick, - isLoading, - children, - i -}: { - children: ReactNode - i: number - formData: string[] - handleButtonClick(e: React.SyntheticEvent, data: string): void - isLoading: boolean -}): ReactElement => ( - <> - {children} - {formData[i] && ( - - )} - -) - -export default FileInput diff --git a/src/components/molecules/Form/FileField/index.module.css b/src/components/molecules/Form/FileField/index.module.css deleted file mode 100644 index 6143ccc08..000000000 --- a/src/components/molecules/Form/FileField/index.module.css +++ /dev/null @@ -1,16 +0,0 @@ -.arrayField { - position: relative; -} - -.arrayField > section { - margin-bottom: 0; -} - -.addButton { - margin-top: calc(var(--spacer) / 4); -} - -.error { - border-color: var(--color-primary); - text-transform: capitalize; -} diff --git a/src/components/molecules/Form/FileField/index.tsx b/src/components/molecules/Form/FileField/index.tsx deleted file mode 100644 index bccf8eb0f..000000000 --- a/src/components/molecules/Form/FileField/index.tsx +++ /dev/null @@ -1,63 +0,0 @@ -import React, { useState } from 'react' -import { ArrayFieldTemplateProps } from 'react-jsonschema-form' -import { File } from '@oceanprotocol/squid' -import { toast } from 'react-toastify' -import useStoredValue from '../../../../hooks/useStoredValue' -import { getFileInfo } from '../../../../utils' -import FileInfo from './Info' -import FileInput from './Input' -import styles from './index.module.css' - -const FILES_DATA_LOCAL_STORAGE_KEY = 'filesData' - -const FileField = ({ items, formData }: ArrayFieldTemplateProps) => { - const [isLoading, setIsLoading] = useState(false) - // in order to access fileInfo as an array of objects upon formSubmit we need to keep it in localStorage - const [fileInfo, setFileInfo] = useStoredValue( - FILES_DATA_LOCAL_STORAGE_KEY, - [] - ) - - const handleButtonClick = async (e: React.SyntheticEvent, url: string) => { - // File example 'https://oceanprotocol.com/tech-whitepaper.pdf' - e.preventDefault() - - try { - setIsLoading(true) - const newFileInfo = await getFileInfo(url) - newFileInfo && setFileInfo([newFileInfo]) - } catch (error) { - toast.error('Could not fetch file info. Please check url and try again') - console.error(error.message) - } finally { - setIsLoading(false) - } - } - - const removeItem = () => { - setFileInfo([]) - } - - return ( - <> - {items.map(({ children, key }, i) => ( -
- {fileInfo[i] ? ( - - ) : ( - - {children} - - )} -
- ))} - - ) -} - -export default FileField diff --git a/src/components/molecules/Form/ObjectFieldTemplate.tsx b/src/components/molecules/Form/ObjectFieldTemplate.tsx deleted file mode 100644 index a15ab0539..000000000 --- a/src/components/molecules/Form/ObjectFieldTemplate.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import React from 'react' -import { ObjectFieldTemplateProps } from 'react-jsonschema-form' - -// Template to render form -// https://react-jsonschema-form.readthedocs.io/en/latest/advanced-customization/#object-field-template -const ObjectFieldTemplate = (props: ObjectFieldTemplateProps) => ( - <> -

{props.title}

- {props.properties.map( - (element: { content: React.ReactElement }) => element.content - )} - -) - -export { ObjectFieldTemplate } diff --git a/src/components/molecules/Form/index.tsx b/src/components/molecules/Form/index.tsx deleted file mode 100644 index a8bfce50a..000000000 --- a/src/components/molecules/Form/index.tsx +++ /dev/null @@ -1,115 +0,0 @@ -import React from 'react' -import FormJsonSchema, { - UiSchema, - IChangeEvent, - ISubmitEvent, - ErrorSchema, - AjvError -} from 'react-jsonschema-form' -import { JSONSchema6 } from 'json-schema' -import Button from '../../atoms/Button' -import styles from './index.module.css' - -import { FieldTemplate } from './FieldTemplate' - -import { - customWidgets, - PublishFormDataInterface -} from '../../../models/PublishForm' -// Overwrite default input fields -/* -AltDateTimeWidget -AltDateWidget -CheckboxWidget -ColorWidget -DateTimeWidget -DateWidget -EmailWidget -FileWidget -HiddenWidget -RadioWidget -RangeWidget -SelectWidget -CheckboxesWidget -UpDownWidget -TextareaWidget -PasswordWidget -TextWidget -URLWidget -*/ - -// Example of Custom Error -// REF: react-jsonschema-form.readthedocs.io/en/latest/validation/#custom-error-messages -export const transformErrors = (errors: AjvError[]) => { - return errors.map((error: AjvError) => { - if (error.property === '.termsAndConditions') { - console.log('ERROR') - error.message = 'Required Field' - } - return error - }) -} - -const validate = (formData: PublishFormDataInterface, errors: any) => { - if (!formData.termsAndConditions) { - errors.termsAndConditions.addError('Required Field') - } - return errors -} - -export declare type FormProps = { - buttonDisabled?: boolean - children?: React.ReactNode - schema: JSONSchema6 - uiSchema: UiSchema - formData: PublishFormDataInterface - onChange: ( - e: IChangeEvent, - es?: ErrorSchema - ) => void - onSubmit: (e: ISubmitEvent) => void - onError: (e: AjvError) => void - showErrorList?: boolean -} - -export default function Form({ - children, - schema, - uiSchema, - formData, - onChange, - onSubmit, - onError, - showErrorList, - buttonDisabled -}: FormProps) { - return ( - ) => - onChange(event) - } - onSubmit={(event: ISubmitEvent) => - onSubmit(event) - } - FieldTemplate={FieldTemplate} - onError={onError} - widgets={customWidgets} - noHtml5Validate - showErrorList={showErrorList} - validate={validate} // REF: https://react-jsonschema-form.readthedocs.io/en/latest/validation/#custom-validation - // liveValidate - transformErrors={transformErrors} - > -
- -
- {children} -
- ) -} diff --git a/src/components/molecules/PublishForm/PublishForm.module.css b/src/components/molecules/PublishForm/PublishForm.module.css deleted file mode 100644 index 0cf2d6a1c..000000000 --- a/src/components/molecules/PublishForm/PublishForm.module.css +++ /dev/null @@ -1,9 +0,0 @@ -.error { - background-color: var(--red); -} -.success { - background-color: var(--green); -} -.info { - background-color: var(--yellow); -} diff --git a/src/components/molecules/PublishForm/PublishForm.tsx b/src/components/molecules/PublishForm/PublishForm.tsx deleted file mode 100644 index 2fc0daf1d..000000000 --- a/src/components/molecules/PublishForm/PublishForm.tsx +++ /dev/null @@ -1,203 +0,0 @@ -import React, { useEffect, useState } from 'react' -import { useNavigate } from '@reach/router' -import Form from '../../molecules/Form/index' -import { - PublishFormSchema, - PublishFormUiSchema, - publishFormData, - PublishFormDataInterface -} from '../../../models/PublishForm' -import useStoredValue from '../../../hooks/useStoredValue' -import { MetaDataMarket } from '../../../@types/MetaData' -import { File, MetaData } from '@oceanprotocol/squid' -import { isBrowser, toStringNoMS } from '../../../utils' -import { toast } from 'react-toastify' -import styles from './PublishForm.module.css' -import utils from 'web3-utils' -import AssetModel from '../../../models/Asset' -import { useWeb3, useOcean } from '@oceanprotocol/react' -import { - Service, - ServiceCompute -} from '@oceanprotocol/squid/dist/node/ddo/Service' - -const FILES_DATA_LOCAL_STORAGE_KEY = 'filesData' -const PUBLISH_FORM_LOCAL_STORAGE_KEY = 'publishForm' - -export function getFilesData() { - let localFileData: File[] = [] - if (isBrowser) { - const storedData = localStorage.getItem(FILES_DATA_LOCAL_STORAGE_KEY) - if (storedData) { - localFileData = localFileData.concat(JSON.parse(storedData) as File[]) - } - } - return localFileData -} - -export function clearFilesData() { - if (isBrowser) - localStorage.setItem(FILES_DATA_LOCAL_STORAGE_KEY, JSON.stringify([])) -} - -export function transformPublishFormToMetadata( - data: PublishFormDataInterface -): MetaDataMarket { - const currentTime = toStringNoMS(new Date()) - - const { - title, - price, - author, - license, - summary, - holder, - keywords, - termsAndConditions, - supportName, - supportEmail, - dateRange, - access - } = data - - const metadata: MetaDataMarket = { - main: { - ...AssetModel.main, - name: title, - price: utils.toWei(price.toString()), - author, - dateCreated: currentTime, - datePublished: currentTime, - files: getFilesData(), - license - }, - // ------- additional information ------- - additionalInformation: { - ...AssetModel.additionalInformation, - description: summary, - copyrightHolder: holder, - tags: keywords?.split(','), - termsAndConditions, - access: access || 'Download' - }, - // ------- curation ------- - curation: AssetModel.curation - } - - if (dateRange) { - const newDateRange = JSON.parse(dateRange) - if (newDateRange.length > 1) { - metadata.additionalInformation.dateRange = JSON.parse(dateRange) - } else if (newDateRange.length === 1) { - // eslint-disable-next-line prefer-destructuring - metadata.main.dateCreated = newDateRange[0] - } - } - - return metadata -} - -const PublishForm: React.FC = () => { - const [buttonDisabled, setButtonDisabled] = useState(false) - const { web3Connect } = useWeb3() - const { ocean, account } = useOcean() - const navigate = useNavigate() - const [data, updateData] = useStoredValue( - PUBLISH_FORM_LOCAL_STORAGE_KEY, - publishFormData - ) - - useEffect(() => { - setButtonDisabled(!ocean) - }, [ocean]) - - const handleChange = ({ - formData - }: { - formData: PublishFormDataInterface - }) => { - updateData(formData) - } - - const handleSubmit = async ({ - formData - }: { - formData: PublishFormDataInterface - }) => { - setButtonDisabled(true) - const submittingToast = toast.info('submitting asset', { - className: styles.info - }) - - if (ocean == null) { - await web3Connect.connect() - } - - if (ocean) { - const metadata = transformPublishFormToMetadata(formData) - - // if services array stays empty, the default access service - // will be created by squid-js - let services: Service[] = [] - - if (metadata.additionalInformation.access === 'Compute') { - const computeService: ServiceCompute = await ocean.compute.createComputeServiceAttributes( - account, - metadata.main.price, - // Note: a hack without consequences. - // Will make metadata.main.datePublished (automatically created by Aquarius) - // go out of sync with this service.main.datePublished. - toStringNoMS(new Date(Date.now())) - ) - services = [computeService] - } - try { - const asset = await ocean.assets.create( - (metadata as unknown) as MetaData, - account, - services - ) - - // Reset the form to initial values - - updateData(publishFormData) - clearFilesData() - - // User feedback and redirect - toast.success('asset created successfully', { - className: styles.success - }) - toast.dismiss(submittingToast) - navigate(`/asset/${asset.id}`) - } catch (e) { - console.log(e) - } finally { - setButtonDisabled(false) - } - - // Reset the form to initial values - - // User feedback and redirect - } - } - - const handleError = () => - toast.error('Please check form. There are some errors', { - className: styles.error - }) - - return ( -
- ) -} - -export default PublishForm diff --git a/src/components/molecules/SearchBar.module.css b/src/components/molecules/SearchBar.module.css index 8ee36fe6b..8ba370db4 100644 --- a/src/components/molecules/SearchBar.module.css +++ b/src/components/molecules/SearchBar.module.css @@ -2,52 +2,10 @@ margin-bottom: var(--spacer); } -.inputGroup > div { +.form > div > div { margin: 0; } -.inputGroup label { +.form label { display: none; } - -.inputGroup input { - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; -} - -.inputGroup button { - border-top-left-radius: 0; - border-top-right-radius: 0; - margin-top: -1px; - width: 100%; -} - -.inputGroup button:hover, -.inputGroup button:focus, -.inputGroup input:focus + button:hover, -.inputGroup input:focus + button:focus { - background: var(--brand-gradient); - transform: none; - box-shadow: none; -} - -@media screen and (min-width: 30rem) { - .inputGroup { - display: flex; - } - - .inputGroup input { - border-bottom-left-radius: var(--border-radius); - border-top-right-radius: 0; - border-bottom-right-radius: 0; - } - - .inputGroup button { - border-top-right-radius: var(--border-radius); - border-top-left-radius: 0; - border-bottom-left-radius: 0; - margin-top: 0; - margin-left: -1px; - width: auto; - } -} diff --git a/src/components/molecules/SearchBar.tsx b/src/components/molecules/SearchBar.tsx index 6cc109f9b..e706e306b 100644 --- a/src/components/molecules/SearchBar.tsx +++ b/src/components/molecules/SearchBar.tsx @@ -4,6 +4,7 @@ import styles from './SearchBar.module.css' import Loader from '../atoms/Loader' import Button from '../atoms/Button' import Input from '../atoms/Input' +import InputGroup from '../atoms/Input/InputGroup' export default function SearchBar({ placeholder, @@ -35,7 +36,7 @@ export default function SearchBar({ return ( -
+ ) => startSearch(e)}> {searchStarted ? : 'Search'} -
+ {filters &&
Type, Price
}
diff --git a/src/components/organisms/AssetActions/Compute.tsx b/src/components/organisms/AssetActions/Compute.tsx index 31c73ba89..3d8ad8aeb 100644 --- a/src/components/organisms/AssetActions/Compute.tsx +++ b/src/components/organisms/AssetActions/Compute.tsx @@ -15,7 +15,7 @@ import styles from './Compute.module.css' import Button from '../../atoms/Button' import Input from '../../atoms/Input' import { MetaDataMarket } from '../../../@types/MetaData' -import { Alert } from '../../atoms/Alert' +import Alert from '../../atoms/Alert' export default function Compute({ did, diff --git a/src/components/pages/Publish.tsx b/src/components/pages/Publish.tsx deleted file mode 100644 index ff71a4449..000000000 --- a/src/components/pages/Publish.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import React from 'react' -import PublishForm from '../molecules/PublishForm/PublishForm' -import styles from './Publish.module.css' -import Web3Feedback from '../molecules/Wallet/Feedback' - -const PublishPage: React.FC = () => { - return ( -
- - -
- ) -} -export default PublishPage diff --git a/src/components/molecules/Form/index.module.css b/src/components/pages/Publish/PublishForm.module.css similarity index 65% rename from src/components/molecules/Form/index.module.css rename to src/components/pages/Publish/PublishForm.module.css index 748018a87..0c3b33ffe 100644 --- a/src/components/molecules/Form/index.module.css +++ b/src/components/pages/Publish/PublishForm.module.css @@ -1,4 +1,3 @@ .form { composes: box from '../../atoms/Box.module.css'; - margin-bottom: var(--spacer); } diff --git a/src/components/pages/Publish/PublishForm.tsx b/src/components/pages/Publish/PublishForm.tsx new file mode 100644 index 000000000..279020bf1 --- /dev/null +++ b/src/components/pages/Publish/PublishForm.tsx @@ -0,0 +1,147 @@ +import React, { ReactElement } from 'react' +import * as Yup from 'yup' +import { toStringNoMS } from '../../../utils' +import { toast } from 'react-toastify' +import styles from './PublishForm.module.css' +import { useOcean } from '@oceanprotocol/react' +import { + Service, + ServiceCompute +} from '@oceanprotocol/squid/dist/node/ddo/Service' +import { Formik, Form as FormFormik, Field } from 'formik' +import Input from '../../atoms/Input' +import Button from '../../atoms/Button' +import { transformPublishFormToMetadata } from './utils' +import { FormContent, FormFieldProps } from '../../../@types/Form' +import { MetaDataPublishForm } from '../../../@types/MetaData' +import AssetModel from '../../../models/Asset' +import { File } from '@oceanprotocol/squid' + +const validationSchema = Yup.object().shape({ + // ---- required fields ---- + name: Yup.string().required('Required'), + author: Yup.string().required('Required'), + price: Yup.string().required('Required'), + files: Yup.array().required('Required').nullable(), + description: Yup.string().required('Required'), + license: Yup.string().required('Required'), + access: Yup.string().min(4).required('Required'), + termsAndConditions: Yup.boolean().required('Required'), + + // ---- optional fields ---- + copyrightHolder: Yup.string(), + tags: Yup.string(), + links: Yup.object() +}) + +const initialValues: MetaDataPublishForm = { + name: undefined, + author: undefined, + price: undefined, + files: undefined, + description: undefined, + license: undefined, + access: undefined, + termsAndConditions: undefined, + copyrightHolder: undefined, + tags: undefined, + links: undefined +} + +export default function PublishForm({ + content +}: { + content: FormContent +}): ReactElement { + const { ocean, account } = useOcean() + + async function handleSubmit(values: MetaDataPublishForm) { + const submittingToast = toast.info('submitting asset') + + console.log(` + Collected form values: + ---------------------- + ${values} + `) + + const metadata = transformPublishFormToMetadata(values) + + console.log(` + Transformed metadata values: + ---------------------- + ${metadata} + `) + + // if services array stays empty, the default access service + // will be created by squid-js + // let services: Service[] = [] + + // if (metadata.additionalInformation.access === 'Compute') { + // const computeService: ServiceCompute = await ocean.compute.createComputeServiceAttributes( + // account, + // metadata.main.price, + // // Note: a hack without consequences. + // // Will make metadata.main.datePublished (automatically created by Aquarius) + // // go out of sync with this service.main.datePublished. + // toStringNoMS(new Date(Date.now())) + // ) + // services = [computeService] + // } + + // try { + // const asset = await ocean.assets.create( + // (metadata as unknown) as MetaData, + // account, + // services + // ) + + // // TODO: Reset the form to initial values + + // // User feedback and redirect + // toast.success('asset created successfully', { + // className: styles.success + // }) + // toast.dismiss(submittingToast) + // // navigate(`/asset/${asset.id}`) + // } catch (e) { + // console.error(e.message) + // } + } + + return ( + { + await handleSubmit(values) + setSubmitting(false) + }} + > + {({ isSubmitting, isValid, status, setStatus }) => ( + status === 'empty' && setStatus(null)} + > + {content.data.map((field: FormFieldProps) => ( + + ))} + + + + )} + + ) +} diff --git a/src/components/pages/Publish.module.css b/src/components/pages/Publish/index.module.css similarity index 100% rename from src/components/pages/Publish.module.css rename to src/components/pages/Publish/index.module.css diff --git a/src/components/pages/Publish/index.tsx b/src/components/pages/Publish/index.tsx new file mode 100644 index 000000000..8ee336029 --- /dev/null +++ b/src/components/pages/Publish/index.tsx @@ -0,0 +1,22 @@ +import React, { ReactElement } from 'react' +import PublishForm from './PublishForm' +import styles from './index.module.css' +import Web3Feedback from '../../molecules/Wallet/Feedback' +import { FormContent } from '../../../@types/Form' + +export default function PublishPage({ + content +}: { + content: { form: FormContent } +}): ReactElement { + return ( +
+ + +
+ ) +} diff --git a/src/components/pages/Publish/utils.ts b/src/components/pages/Publish/utils.ts new file mode 100644 index 000000000..5c609cf71 --- /dev/null +++ b/src/components/pages/Publish/utils.ts @@ -0,0 +1,51 @@ +import { MetaDataMarket, MetaDataPublishForm } from '../../../@types/MetaData' +import { toStringNoMS } from '../../../utils' +import AssetModel from '../../../models/Asset' +import web3Utils from 'web3-utils' + +export function transformPublishFormToMetadata( + data: MetaDataPublishForm +): MetaDataMarket { + const currentTime = toStringNoMS(new Date()) + + const { + name, + price, + author, + license, + description, + copyrightHolder, + tags, + links, + termsAndConditions, + files, + access + } = data + + const metadata: MetaDataMarket = { + main: { + ...AssetModel.main, + name, + price: `${web3Utils.toWei(price.toString())}`, + author, + dateCreated: currentTime, + datePublished: currentTime, + files: typeof files !== 'string' && files, + license + }, + additionalInformation: { + ...AssetModel.additionalInformation, + description, + copyrightHolder, + tags: tags?.split(','), + // links: { + // url: links + // }, + termsAndConditions, + access: access || 'Download' + }, + curation: AssetModel.curation + } + + return metadata +} diff --git a/src/global/Styles.tsx b/src/global/Styles.tsx index 9440f6929..4f96c7b48 100644 --- a/src/global/Styles.tsx +++ b/src/global/Styles.tsx @@ -1,12 +1,19 @@ import React, { ReactElement, ReactNode } from 'react' +import { ToastContainer } from 'react-toastify' import '@oceanprotocol/typographies/css/ocean-typo.css' import '../global/styles.css' +import 'react-toastify/dist/ReactToastify.css' export default function Styles({ children }: { children: ReactNode }): ReactElement { - return <>{children} + return ( + <> + {children} + + + ) } diff --git a/src/global/_toast.css b/src/global/_toast.css new file mode 100644 index 000000000..bb6a895b8 --- /dev/null +++ b/src/global/_toast.css @@ -0,0 +1,30 @@ +div.Toastify__toast { + font-family: var(--font-family-base); + font-size: var(--font-size-small); + font-weight: var(--font-weight-bold); + border-radius: var(--border-radius); + box-shadow: 0 6px 15px 0 rgba(0, 0, 0, 0.05); + padding: calc(var(--spacer) / 2) var(--spacer); + background: var(--brand-white); + color: var(--brand-grey); +} + +div.Toastify__toast--error { + background: var(--brand-alert-red); + color: var(--brand-white); +} + +div.Toastify__toast--success { + background: var(--brand-alert-green); + color: var(--brand-white); +} + +div.Toastify__toast--info { + background: var(--brand-white); + color: var(--brand-grey); +} + +div.Toastify__toast--warning { + background: var(--brand-alert-yellow); + color: var(--brand-white); +} diff --git a/src/global/styles.css b/src/global/styles.css index fe3f60e9f..ae2a8acfc 100644 --- a/src/global/styles.css +++ b/src/global/styles.css @@ -133,3 +133,4 @@ fieldset { } @import '_code.css'; +@import '_toast.css'; diff --git a/src/models/Asset.ts b/src/models/Asset.ts index 608310fbc..2152993f5 100644 --- a/src/models/Asset.ts +++ b/src/models/Asset.ts @@ -15,12 +15,11 @@ const AssetModel: MetaDataMarket = { additionalInformation: { description: '', copyrightHolder: '', - tags: undefined, - // links: [], + tags: [], + links: [], // custom items termsAndConditions: false, - dateRange: undefined, access: 'Download' }, curation: { diff --git a/src/models/PublishForm.ts b/src/models/PublishForm.ts deleted file mode 100644 index 1a54c66e3..000000000 --- a/src/models/PublishForm.ts +++ /dev/null @@ -1,188 +0,0 @@ -import { UiSchema } from 'react-jsonschema-form' -import { JSONSchema6 } from 'json-schema' -import TermsWidget from '../components/atoms/FormWidgets/TermsWidget' -import DateRangeWidget from '../components/atoms/FormWidgets/DateRangeWidget' -import { ObjectFieldTemplate } from '../components/molecules/Form/ObjectFieldTemplate' -import { AccessType } from '../@types/MetaData' -import FileField from '../components/molecules/Form/FileField' - -export const customWidgets = { - TermsWidget, - DateRangeWidget -} - -export const PublishFormSchema: JSONSchema6 = { - type: 'object', - required: [ - 'title', - 'author', - 'license', - 'price', - 'files', - 'summary', - 'termsAndConditions', - 'access' - ], - definitions: { - files: { - type: 'object', - properties: { - name: { - type: 'string' - } - } - } - }, - properties: { - title: { - type: 'string', - title: 'Offer Title' - }, - summary: { - type: 'string', - title: 'Summary', - minLength: 24 - }, - files: { - type: 'array', - title: 'Data File URL', - items: { - type: 'string', - title: 'File URL', - format: 'uri' - } - }, - price: { - title: 'Price', - type: 'number', - minimum: 0 - }, - author: { - type: 'string', - title: 'Author' - }, - access: { - title: 'Access type', - type: 'string', - enum: ['Download', 'Compute'] - }, - license: { - title: 'License', - type: 'string', - enum: [ - 'Public Domain', - 'PDDL: Public Domain Dedication and License', - 'ODC-By: Attribution License', - 'ODC-ODbL: Open Database License', - 'CDLA-Sharing: Community Data License Agreement', - 'CDLA-Permissive: Community Data License Agreement', - 'CC0: Public Domain Dedication', - 'CC BY: Attribution 4.0 International', - 'CC BY-SA: Attribution-ShareAlike 4.0 International', - 'CC BY-ND: Attribution-NoDerivatives 4.0 International', - 'CC BY-NC: Attribution-NonCommercial 4.0 International', - 'CC BY-NC-SA: Attribution-NonCommercial-ShareAlike 4.0 International', - 'CC BY-NC-ND: Attribution-NonCommercial-NoDerivatives 4.0 International', - 'No License Specified' - ] - }, - dateRange: { - type: 'string', - title: 'Creation Date' - }, - holder: { - type: 'string', - title: 'Copyright Holder' - }, - keywords: { - type: 'string', - title: 'Keywords' - }, - termsAndConditions: { - type: 'boolean', - title: 'I agree to these Terms and Conditions' - } - } -} -// Widgets Ref https://react-jsonschema-form.readthedocs.io/en/latest/form-customization/#alternative-widgets -export const PublishFormUiSchema: UiSchema = { - 'ui:ObjectFieldTemplate': ObjectFieldTemplate, - category: { - 'ui:widget': 'radio' - }, - title: { - 'ui:placeholder': 'e.g. Shapes of Desert Plants', - 'ui:help': 'Enter a concise title.' - }, - summary: { - 'ui:placeholder': 'Max of 1000 characters', - 'ui:widget': 'textarea', - 'ui:help': 'Add a thorough description with as much detail as possible.' - }, - files: { - 'ui:ArrayFieldTemplate': FileField, - items: { - 'ui:placeholder': 'e.g. https://file.com/file.json', - 'ui:widget': 'uri', - classNames: 'input-file' - }, - 'ui:help': 'Please provide a URL to your data set file.' - }, - price: { - 'ui:help': 'Set your price in Ocean Tokens.' - }, - access: { - 'ui:widget': 'select', - 'ui:help': 'Access Type' - }, - author: { - 'ui:placeholder': 'e.g. Jelly McJellyfish', - 'ui:help': 'Give proper attribution for your data set.' - }, - license: { - 'ui:widget': 'select' - }, - dateRange: { - 'ui:widget': 'DateRangeWidget', - 'ui:help': - 'Select the date the asset was created, or was updated for the last time.' - }, - holder: { - 'ui:placeholder': 'e.g. Marine Institute of Jellyfish' - }, - keywords: { - 'ui:placeholder': 'shipment, logistics' - }, - termsAndConditions: { - 'ui:widget': 'TermsWidget' - } -} - -export interface PublishFormDataInterface { - // ---- required fields ---- - summary: string - termsAndConditions: boolean - author: string - license: string - files: string[] - price: number - title: string - access?: AccessType - // ---- optional fields ---- - dateRange?: string - holder?: string - keywords?: string -} -// Ref: https://github.com/oceanprotocol/OEPs/blob/master/8/v0.4/README.md#main-attributes -export const publishFormData: PublishFormDataInterface = { - author: '', - price: 0, - title: '', - files: [''], // should be empty string initially to display the expanded field - summary: '', - license: '', - termsAndConditions: false, - dateRange: undefined, - holder: undefined, - keywords: undefined -} diff --git a/src/pages/asset/index.tsx b/src/pages/asset/index.tsx index 0b5f0d02b..93185386a 100644 --- a/src/pages/asset/index.tsx +++ b/src/pages/asset/index.tsx @@ -6,7 +6,7 @@ import { PageProps } from 'gatsby' import { MetaDataMarket, ServiceMetaDataMarket } from '../../@types/MetaData' import { Aquarius, Logger } from '@oceanprotocol/squid' import { oceanConfig } from '../../../app.config' -import { Alert } from '../../components/atoms/Alert' +import Alert from '../../components/atoms/Alert' export default function AssetRoute(props: PageProps): ReactElement { const [metadata, setMetadata] = useState() diff --git a/src/pages/publish.tsx b/src/pages/publish.tsx index 0647d9d75..0ed58d5af 100644 --- a/src/pages/publish.tsx +++ b/src/pages/publish.tsx @@ -9,7 +9,7 @@ export default function PageGatsbyPublish(props: PageProps): ReactElement { return ( - + ) } @@ -22,6 +22,20 @@ export const contentQuery = graphql` childPagesJson { title description + form { + title + data { + name + placeholder + label + help + type + required + options + min + } + success + } } } } diff --git a/src/utils/index.ts b/src/utils/index.ts index c5db947df..a542bece9 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -8,7 +8,7 @@ export function updateQueryStringParameter( uri: string, key: string, newValue: string -) { +): string { const regex = new RegExp('([?&])' + key + '=.*?(&|$)', 'i') const separator = uri.indexOf('?') !== -1 ? '&' : '?' @@ -19,7 +19,11 @@ export function updateQueryStringParameter( } } -export function prettySize(bytes: number, separator = ' ', postFix = '') { +export function prettySize( + bytes: number, + separator = ' ', + postFix = '' +): string { if (bytes) { const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'] const i = Math.min( @@ -36,7 +40,7 @@ export function prettySize(bytes: number, separator = ' ', postFix = '') { // Boolean value that will be true if we are inside a browser, false otherwise export const isBrowser = typeof window !== 'undefined' -export function formatNumber(number: number, format?: string) { +export function formatNumber(number: number, format?: string): string { numeral.zeroFormat('0') const defaultFormat = '0,0.000' @@ -54,13 +58,9 @@ export async function getFileInfo(url: string): Promise { data: { url } }) - if (response.status > 299) { - throw new Error(response.statusText) - } - - if (!response.data.result) { - toast.error(response.data.message) - return { contentLength: undefined, contentType: '', url } + if (response.status > 299 || !response.data.result) { + toast.error('Could not connect to File API') + return } const { contentLength, contentType } = response.data.result @@ -72,7 +72,7 @@ export async function getFileInfo(url: string): Promise { } } -export function isDid(did: string | undefined) { +export function isDid(did: string | undefined): boolean { const didMatch = (did as string).match(/^did:op:([a-f0-9]{64})$/i) return !!didMatch } @@ -125,7 +125,7 @@ export function setProperty>( } } -export function formatBytes(a: number, b: number) { +export function formatBytes(a: number, b: number): string { if (a === 0) return '0 Bytes' const c = 1024 const d = b || 2 diff --git a/tests/unit/AssetModel.test.ts b/tests/unit/AssetModel.test.ts index 4a12d50be..54a0c3fee 100644 --- a/tests/unit/AssetModel.test.ts +++ b/tests/unit/AssetModel.test.ts @@ -8,7 +8,7 @@ describe('AssetModel', () => { name: 'Hello' }), additionalInformation: Object.assign(AssetModel.additionalInformation, { - supportName: 'Jelly McJellyfish' + description: 'Jelly McJellyfish' }), curation: Object.assign(AssetModel.curation, { numVotes: 100, @@ -18,6 +18,6 @@ describe('AssetModel', () => { expect(newMeta).toMatchObject(AssetModel) expect(newMeta.main.name).toBe('Hello') - expect(newMeta.additionalInformation.supportName).toBe('Jelly McJellyfish') + expect(newMeta.additionalInformation.description).toBe('Jelly McJellyfish') }) }) diff --git a/tests/unit/__fixtures__/ddo.ts b/tests/unit/__fixtures__/ddo.ts index e84457bd9..2c3e324cd 100644 --- a/tests/unit/__fixtures__/ddo.ts +++ b/tests/unit/__fixtures__/ddo.ts @@ -72,7 +72,6 @@ const ddo: Partial = { } ], termsAndConditions: true, - dateRange: ['2018-09-20T08:38:58', '2019-12-11T05:19:42'], access: 'Download' }, curation: { diff --git a/tests/unit/__fixtures__/testFormData.ts b/tests/unit/__fixtures__/testFormData.ts index 61c0b3bd0..64cd251c2 100644 --- a/tests/unit/__fixtures__/testFormData.ts +++ b/tests/unit/__fixtures__/testFormData.ts @@ -1,13 +1,15 @@ -import { PublishFormDataInterface } from '../../../src/models/PublishForm' +import { MetaDataPublishForm } from '../../../src/@types/MetaData' -const testFormData: PublishFormDataInterface = { +const testFormData: MetaDataPublishForm = { author: '', files: [], license: '', - price: 0, - title: '', - summary: 'summary', - termsAndConditions: true + price: '0', + name: '', + description: 'description', + termsAndConditions: true, + access: 'Download' + // links: [] } export default testFormData diff --git a/tests/unit/components/DateRange.test.tsx b/tests/unit/components/DateRange.test.tsx deleted file mode 100644 index 1aa1162aa..000000000 --- a/tests/unit/components/DateRange.test.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import React from 'react' -import { render, act } from '@testing-library/react' -import DateRangeWidget, { - getWidgetValue -} from '../../../src/components/atoms/FormWidgets/DateRangeWidget' -import { PublishFormSchema } from '../../../src/models/PublishForm' - -describe('Date Range Widget', () => { - it('renders without crashing', () => { - act(() => { - const { container } = render( - { - /* */ - }} - onFocus={() => { - /* */ - }} - onChange={() => { - /* */ - }} - options={{}} - required={false} - /> - ) - expect(container.firstChild).toBeInTheDocument() - }) - }) - - it('getWidgetValue returns a correctly encoded string', () => { - expect( - getWidgetValue( - new Date('2020-03-15T15:13:30.123Z'), - new Date('2020-03-18T15:13:30.456Z'), - false - ) - ).toEqual('["2020-03-15T15:13:30Z","2020-03-15T15:13:30Z"]') - - expect( - getWidgetValue( - new Date('2020-03-15T15:13:30.123Z'), - new Date('2020-03-18T18:13:30.456Z'), - true - ) - ).toEqual('["2020-03-15T15:13:30Z","2020-03-18T18:13:30Z"]') - }) -}) diff --git a/tests/unit/components/Layout.test.tsx b/tests/unit/components/Layout.test.tsx index 94589267b..1f59d3df0 100644 --- a/tests/unit/components/Layout.test.tsx +++ b/tests/unit/components/Layout.test.tsx @@ -12,7 +12,9 @@ describe('Layout', () => { testRender( - Hello + + Hello + ) }) diff --git a/tests/unit/components/PublishForm.test.tsx b/tests/unit/components/PublishForm.test.tsx index 9ea589d85..7e08352f5 100644 --- a/tests/unit/components/PublishForm.test.tsx +++ b/tests/unit/components/PublishForm.test.tsx @@ -1,78 +1,30 @@ import React from 'react' import { render } from '@testing-library/react' -import Form, { transformErrors } from '../../../src/components/molecules/Form' +import { transformPublishFormToMetadata } from '../../../src/components/pages/Publish/utils' import { - publishFormData, - PublishFormDataInterface, - PublishFormSchema, - PublishFormUiSchema -} from '../../../src/models/PublishForm' -import testFormData from '../__fixtures__/testFormData' -import { transformPublishFormToMetadata } from '../../../src/components/molecules/PublishForm/PublishForm' -import { MetaDataMarket } from '../../../src/@types/MetaData' + MetaDataMarket, + MetaDataPublishForm +} from '../../../src/@types/MetaData' +import PublishForm from '../../../src/components/pages/Publish/PublishForm' +import publishFormData from '../__fixtures__/testFormData' +import content from '../../../content/pages/publish.json' describe('PublishForm', () => { it('renders without crashing', async () => { - const { container } = render( -
null} - onSubmit={() => null} - onError={() => null} - > - Hello -
- ) + const { container } = render() expect(container.firstChild).toBeInTheDocument() }) - it('transformErrors() passes through data', () => { - const errorsMock = [ - { - message: 'Hello', - name: 'Hello', - params: 'Hello', - property: 'Hello', - stack: 'Hello' - } - ] - - const error = transformErrors(errorsMock) - expect(error[0].message).toBe('Hello') - }) - - it('transformErrors() transforms data', () => { - const errorsMock = [ - { - message: 'Hello', - name: 'Hello', - params: 'Hello', - property: '.termsAndConditions', - stack: 'Hello' - } - ] - - const error = transformErrors(errorsMock) - expect(error[0].message).not.toBe('Hello') - }) - it('Form data is correctly transformed to asset MetaData', () => { - const data: PublishFormDataInterface = publishFormData + const data: MetaDataPublishForm = publishFormData let metadata: MetaDataMarket = transformPublishFormToMetadata(data) expect(metadata.additionalInformation).toBeDefined() expect(metadata.main).toBeDefined() - data.price = 1.3 - data.dateRange = '["2020-03-05T15:17:31Z","2020-03-10T16:00:00Z"]' + data.price = '1.3' metadata = transformPublishFormToMetadata(data) expect(metadata.main.price).toBe('1300000000000000000') - expect(metadata.additionalInformation.dateRange).toEqual([ - '2020-03-05T15:17:31Z', - '2020-03-10T16:00:00Z' - ]) }) })