diff --git a/.prettierrc b/.prettierrc
new file mode 100644
index 0000000..8e51f09
--- /dev/null
+++ b/.prettierrc
@@ -0,0 +1,5 @@
+{
+ "singleQuote": true,
+ "semi": true,
+ "tabWidth": 2,
+}
diff --git a/gatsby-browser.js b/gatsby-browser.js
index d67f0fd..2f4bc55 100644
--- a/gatsby-browser.js
+++ b/gatsby-browser.js
@@ -3,7 +3,5 @@ import React from 'react';
import { NotificationProvider } from './src/context/AddItemNotificationProvider';
export const wrapRootElement = ({ element }) => (
-
- {element}
-
-);
\ No newline at end of file
+ {element}
+);
diff --git a/gatsby-config.js b/gatsby-config.js
index 868604b..6a111fb 100644
--- a/gatsby-config.js
+++ b/gatsby-config.js
@@ -1,20 +1,20 @@
module.exports = {
- siteMetadata: {
- title: `Gatsby Sydney Ecommerce Theme`,
- siteUrl: `https://jamm.matter.design`,
- },
- plugins: [
- {
- resolve: `gatsby-plugin-manifest`,
- options: {
- name: `Gatsby Sydney Ecommerce Theme`,
- short_name: `Sydney`,
- start_url: `/`,
- background_color: `#000000`,
- theme_color: `#ffffff`,
- display: `standalone`,
- icon: 'src/assets/favicon.png'
- },
+ siteMetadata: {
+ title: `Gatsby Sydney Ecommerce Theme`,
+ siteUrl: `https://jamm.matter.design`,
+ },
+ plugins: [
+ {
+ resolve: `gatsby-plugin-manifest`,
+ options: {
+ name: `Gatsby Sydney Ecommerce Theme`,
+ short_name: `Sydney`,
+ start_url: `/`,
+ background_color: `#000000`,
+ theme_color: `#ffffff`,
+ display: `standalone`,
+ icon: 'src/assets/favicon.png',
},
- ]
-}
\ No newline at end of file
+ },
+ ],
+};
diff --git a/gatsby-node.js b/gatsby-node.js
index 0db2093..1911584 100644
--- a/gatsby-node.js
+++ b/gatsby-node.js
@@ -1,14 +1,14 @@
// https://stackoverflow.com/questions/63124432/how-do-i-configure-mini-css-extract-plugin-in-gatsby
-exports.onCreateWebpackConfig = helper => {
- const { stage, actions, getConfig } = helper
- if (stage === "develop" || stage === 'build-javascript') {
- const config = getConfig()
- const miniCssExtractPlugin = config.plugins.find(
- plugin => plugin.constructor.name === "MiniCssExtractPlugin"
- )
- if (miniCssExtractPlugin) {
- miniCssExtractPlugin.options.ignoreOrder = true
- }
- actions.replaceWebpackConfig(config)
+exports.onCreateWebpackConfig = (helper) => {
+ const { stage, actions, getConfig } = helper;
+ if (stage === 'develop' || stage === 'build-javascript') {
+ const config = getConfig();
+ const miniCssExtractPlugin = config.plugins.find(
+ (plugin) => plugin.constructor.name === 'MiniCssExtractPlugin'
+ );
+ if (miniCssExtractPlugin) {
+ miniCssExtractPlugin.options.ignoreOrder = true;
}
- }
\ No newline at end of file
+ actions.replaceWebpackConfig(config);
+ }
+};
diff --git a/package-lock.json b/package-lock.json
index 5ba76b2..2070090 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -16,7 +16,8 @@
"react-slick": "^0.28.1"
},
"devDependencies": {
- "plop": "^3.0.5"
+ "plop": "^3.0.5",
+ "prettier": "^2.6.2"
}
},
"node_modules/@ampproject/remapping": {
@@ -218,14 +219,14 @@
}
},
"node_modules/@babel/helper-create-class-features-plugin": {
- "version": "7.17.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.1.tgz",
- "integrity": "sha512-JBdSr/LtyYIno/pNnJ75lBcqc3Z1XXujzPanHqjvvrhOA+DTceTFuJi8XjmWTZh4r3fsdfqaCMN0iZemdkxZHQ==",
+ "version": "7.18.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.0.tgz",
+ "integrity": "sha512-Kh8zTGR9de3J63e5nS0rQUdRs/kbtwoeQQ0sriS0lItjC96u8XXZN6lKpuyWd2coKSU13py/y+LTmThLuVX0Pg==",
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.16.7",
"@babel/helper-environment-visitor": "^7.16.7",
- "@babel/helper-function-name": "^7.16.7",
- "@babel/helper-member-expression-to-functions": "^7.16.7",
+ "@babel/helper-function-name": "^7.17.9",
+ "@babel/helper-member-expression-to-functions": "^7.17.7",
"@babel/helper-optimise-call-expression": "^7.16.7",
"@babel/helper-replace-supers": "^7.16.7",
"@babel/helper-split-export-declaration": "^7.16.7"
@@ -322,24 +323,12 @@
}
},
"node_modules/@babel/helper-function-name": {
- "version": "7.16.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz",
- "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==",
+ "version": "7.17.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz",
+ "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==",
"dependencies": {
- "@babel/helper-get-function-arity": "^7.16.7",
"@babel/template": "^7.16.7",
- "@babel/types": "^7.16.7"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-get-function-arity": {
- "version": "7.16.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz",
- "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==",
- "dependencies": {
- "@babel/types": "^7.16.7"
+ "@babel/types": "^7.17.0"
},
"engines": {
"node": ">=6.9.0"
@@ -357,11 +346,11 @@
}
},
"node_modules/@babel/helper-member-expression-to-functions": {
- "version": "7.16.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz",
- "integrity": "sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==",
+ "version": "7.17.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz",
+ "integrity": "sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==",
"dependencies": {
- "@babel/types": "^7.16.7"
+ "@babel/types": "^7.17.0"
},
"engines": {
"node": ">=6.9.0"
@@ -408,9 +397,9 @@
}
},
"node_modules/@babel/helper-plugin-utils": {
- "version": "7.16.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz",
- "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==",
+ "version": "7.17.12",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz",
+ "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==",
"engines": {
"node": ">=6.9.0"
}
@@ -1896,28 +1885,30 @@
"integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw=="
},
"node_modules/@eslint/eslintrc": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz",
- "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz",
+ "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==",
+ "peer": true,
"dependencies": {
"ajv": "^6.12.4",
- "debug": "^4.1.1",
- "espree": "^7.3.0",
- "globals": "^13.9.0",
- "ignore": "^4.0.6",
+ "debug": "^4.3.2",
+ "espree": "^9.3.2",
+ "globals": "^13.15.0",
+ "ignore": "^5.2.0",
"import-fresh": "^3.2.1",
- "js-yaml": "^3.13.1",
- "minimatch": "^3.0.4",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
"strip-json-comments": "^3.1.1"
},
"engines": {
- "node": "^10.12.0 || >=12.0.0"
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
}
},
"node_modules/@eslint/eslintrc/node_modules/debug": {
- "version": "4.3.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
- "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "peer": true,
"dependencies": {
"ms": "2.1.2"
},
@@ -1931,9 +1922,10 @@
}
},
"node_modules/@eslint/eslintrc/node_modules/globals": {
- "version": "13.12.1",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz",
- "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==",
+ "version": "13.15.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz",
+ "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==",
+ "peer": true,
"dependencies": {
"type-fest": "^0.20.2"
},
@@ -1944,18 +1936,11 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@eslint/eslintrc/node_modules/ignore": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
- "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
- "engines": {
- "node": ">= 4"
- }
- },
"node_modules/@eslint/eslintrc/node_modules/ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "peer": true
},
"node_modules/@gatsbyjs/potrace": {
"version": "2.2.0",
@@ -2284,11 +2269,12 @@
}
},
"node_modules/@humanwhocodes/config-array": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz",
- "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==",
+ "version": "0.9.5",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz",
+ "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==",
+ "peer": true,
"dependencies": {
- "@humanwhocodes/object-schema": "^1.2.0",
+ "@humanwhocodes/object-schema": "^1.2.1",
"debug": "^4.1.1",
"minimatch": "^3.0.4"
},
@@ -2297,9 +2283,10 @@
}
},
"node_modules/@humanwhocodes/config-array/node_modules/debug": {
- "version": "4.3.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
- "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "peer": true,
"dependencies": {
"ms": "2.1.2"
},
@@ -2315,7 +2302,8 @@
"node_modules/@humanwhocodes/config-array/node_modules/ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "peer": true
},
"node_modules/@humanwhocodes/object-schema": {
"version": "1.2.1",
@@ -3241,219 +3229,6 @@
"resolved": "https://registry.npmjs.org/@types/yoga-layout/-/yoga-layout-1.9.2.tgz",
"integrity": "sha512-S9q47ByT2pPvD65IvrWp7qppVMpk9WGMbVq9wbWZOHg6tnXSD4vyhao6nOSBwwfDdV2p3Kx9evA9vI+XWTfDvw=="
},
- "node_modules/@typescript-eslint/eslint-plugin": {
- "version": "4.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz",
- "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==",
- "dependencies": {
- "@typescript-eslint/experimental-utils": "4.33.0",
- "@typescript-eslint/scope-manager": "4.33.0",
- "debug": "^4.3.1",
- "functional-red-black-tree": "^1.0.1",
- "ignore": "^5.1.8",
- "regexpp": "^3.1.0",
- "semver": "^7.3.5",
- "tsutils": "^3.21.0"
- },
- "engines": {
- "node": "^10.12.0 || >=12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "@typescript-eslint/parser": "^4.0.0",
- "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/eslint-plugin/node_modules/debug": {
- "version": "4.3.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
- "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/eslint-plugin/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "node_modules/@typescript-eslint/experimental-utils": {
- "version": "4.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz",
- "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==",
- "dependencies": {
- "@types/json-schema": "^7.0.7",
- "@typescript-eslint/scope-manager": "4.33.0",
- "@typescript-eslint/types": "4.33.0",
- "@typescript-eslint/typescript-estree": "4.33.0",
- "eslint-scope": "^5.1.1",
- "eslint-utils": "^3.0.0"
- },
- "engines": {
- "node": "^10.12.0 || >=12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "*"
- }
- },
- "node_modules/@typescript-eslint/parser": {
- "version": "4.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz",
- "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==",
- "dependencies": {
- "@typescript-eslint/scope-manager": "4.33.0",
- "@typescript-eslint/types": "4.33.0",
- "@typescript-eslint/typescript-estree": "4.33.0",
- "debug": "^4.3.1"
- },
- "engines": {
- "node": "^10.12.0 || >=12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/parser/node_modules/debug": {
- "version": "4.3.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
- "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/parser/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "node_modules/@typescript-eslint/scope-manager": {
- "version": "4.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz",
- "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==",
- "dependencies": {
- "@typescript-eslint/types": "4.33.0",
- "@typescript-eslint/visitor-keys": "4.33.0"
- },
- "engines": {
- "node": "^8.10.0 || ^10.13.0 || >=11.10.1"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/types": {
- "version": "4.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz",
- "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==",
- "engines": {
- "node": "^8.10.0 || ^10.13.0 || >=11.10.1"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree": {
- "version": "4.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz",
- "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==",
- "dependencies": {
- "@typescript-eslint/types": "4.33.0",
- "@typescript-eslint/visitor-keys": "4.33.0",
- "debug": "^4.3.1",
- "globby": "^11.0.3",
- "is-glob": "^4.0.1",
- "semver": "^7.3.5",
- "tsutils": "^3.21.0"
- },
- "engines": {
- "node": "^10.12.0 || >=12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/typescript-estree/node_modules/debug": {
- "version": "4.3.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
- "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/typescript-estree/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "node_modules/@typescript-eslint/visitor-keys": {
- "version": "4.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz",
- "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==",
- "dependencies": {
- "@typescript-eslint/types": "4.33.0",
- "eslint-visitor-keys": "^2.0.0"
- },
- "engines": {
- "node": "^8.10.0 || ^10.13.0 || >=11.10.1"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
"node_modules/@vercel/webpack-asset-relocator-loader": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/@vercel/webpack-asset-relocator-loader/-/webpack-asset-relocator-loader-1.7.0.tgz",
@@ -3624,9 +3399,9 @@
}
},
"node_modules/acorn": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
- "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+ "version": "8.7.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz",
+ "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==",
"bin": {
"acorn": "bin/acorn"
},
@@ -3699,9 +3474,9 @@
}
},
"node_modules/ansi-colors": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
- "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
+ "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
"engines": {
"node": ">=6"
}
@@ -3840,12 +3615,10 @@
"integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA=="
},
"node_modules/argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
- "dependencies": {
- "sprintf-js": "~1.0.2"
- }
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "peer": true
},
"node_modules/aria-query": {
"version": "4.2.2",
@@ -4083,6 +3856,36 @@
"resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz",
"integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA=="
},
+ "node_modules/babel-eslint": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz",
+ "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==",
+ "deprecated": "babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.",
+ "peer": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/parser": "^7.7.0",
+ "@babel/traverse": "^7.7.0",
+ "@babel/types": "^7.7.0",
+ "eslint-visitor-keys": "^1.0.0",
+ "resolve": "^1.12.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "peerDependencies": {
+ "eslint": ">= 4.12.1"
+ }
+ },
+ "node_modules/babel-eslint/node_modules/eslint-visitor-keys": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+ "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+ "peer": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/babel-loader": {
"version": "8.2.3",
"resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.3.tgz",
@@ -6677,48 +6480,44 @@
}
},
"node_modules/eslint": {
- "version": "7.32.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz",
- "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==",
+ "version": "8.16.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.16.0.tgz",
+ "integrity": "sha512-MBndsoXY/PeVTDJeWsYj7kLZ5hQpJOfMYLsF6LicLHQWbRDG19lK5jOix4DPl8yY4SUFcE3txy86OzFLWT+yoA==",
+ "peer": true,
"dependencies": {
- "@babel/code-frame": "7.12.11",
- "@eslint/eslintrc": "^0.4.3",
- "@humanwhocodes/config-array": "^0.5.0",
+ "@eslint/eslintrc": "^1.3.0",
+ "@humanwhocodes/config-array": "^0.9.2",
"ajv": "^6.10.0",
"chalk": "^4.0.0",
"cross-spawn": "^7.0.2",
- "debug": "^4.0.1",
+ "debug": "^4.3.2",
"doctrine": "^3.0.0",
- "enquirer": "^2.3.5",
"escape-string-regexp": "^4.0.0",
- "eslint-scope": "^5.1.1",
- "eslint-utils": "^2.1.0",
- "eslint-visitor-keys": "^2.0.0",
- "espree": "^7.3.1",
+ "eslint-scope": "^7.1.1",
+ "eslint-utils": "^3.0.0",
+ "eslint-visitor-keys": "^3.3.0",
+ "espree": "^9.3.2",
"esquery": "^1.4.0",
"esutils": "^2.0.2",
"fast-deep-equal": "^3.1.3",
"file-entry-cache": "^6.0.1",
"functional-red-black-tree": "^1.0.1",
- "glob-parent": "^5.1.2",
- "globals": "^13.6.0",
- "ignore": "^4.0.6",
+ "glob-parent": "^6.0.1",
+ "globals": "^13.15.0",
+ "ignore": "^5.2.0",
"import-fresh": "^3.0.0",
"imurmurhash": "^0.1.4",
"is-glob": "^4.0.0",
- "js-yaml": "^3.13.1",
+ "js-yaml": "^4.1.0",
"json-stable-stringify-without-jsonify": "^1.0.1",
"levn": "^0.4.1",
"lodash.merge": "^4.6.2",
- "minimatch": "^3.0.4",
+ "minimatch": "^3.1.2",
"natural-compare": "^1.4.0",
"optionator": "^0.9.1",
- "progress": "^2.0.0",
- "regexpp": "^3.1.0",
- "semver": "^7.2.1",
- "strip-ansi": "^6.0.0",
+ "regexpp": "^3.2.0",
+ "strip-ansi": "^6.0.1",
"strip-json-comments": "^3.1.0",
- "table": "^6.0.9",
"text-table": "^0.2.0",
"v8-compile-cache": "^2.0.3"
},
@@ -6726,44 +6525,12 @@
"eslint": "bin/eslint.js"
},
"engines": {
- "node": "^10.12.0 || >=12.0.0"
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
},
"funding": {
"url": "https://opencollective.com/eslint"
}
},
- "node_modules/eslint-config-react-app": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-6.0.0.tgz",
- "integrity": "sha512-bpoAAC+YRfzq0dsTk+6v9aHm/uqnDwayNAXleMypGl6CpxI9oXXscVHo4fk3eJPIn+rsbtNetB4r/ZIidFIE8A==",
- "dependencies": {
- "confusing-browser-globals": "^1.0.10"
- },
- "engines": {
- "node": "^10.12.0 || >=12.0.0"
- },
- "peerDependencies": {
- "@typescript-eslint/eslint-plugin": "^4.0.0",
- "@typescript-eslint/parser": "^4.0.0",
- "babel-eslint": "^10.0.0",
- "eslint": "^7.5.0",
- "eslint-plugin-flowtype": "^5.2.0",
- "eslint-plugin-import": "^2.22.0",
- "eslint-plugin-jest": "^24.0.0",
- "eslint-plugin-jsx-a11y": "^6.3.1",
- "eslint-plugin-react": "^7.20.3",
- "eslint-plugin-react-hooks": "^4.0.8",
- "eslint-plugin-testing-library": "^3.9.0"
- },
- "peerDependenciesMeta": {
- "eslint-plugin-jest": {
- "optional": true
- },
- "eslint-plugin-testing-library": {
- "optional": true
- }
- }
- },
"node_modules/eslint-import-resolver-node": {
"version": "0.3.6",
"resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz",
@@ -6785,21 +6552,6 @@
"node": ">=4"
}
},
- "node_modules/eslint-plugin-flowtype": {
- "version": "5.10.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-5.10.0.tgz",
- "integrity": "sha512-vcz32f+7TP+kvTUyMXZmCnNujBQZDNmcqPImw8b9PZ+16w1Qdm6ryRuYZYVaG9xRqqmAPr2Cs9FAX5gN+x/bjw==",
- "dependencies": {
- "lodash": "^4.17.15",
- "string-natural-compare": "^3.0.1"
- },
- "engines": {
- "node": "^10.12.0 || >=12.0.0"
- },
- "peerDependencies": {
- "eslint": "^7.1.0"
- }
- },
"node_modules/eslint-plugin-graphql": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-graphql/-/eslint-plugin-graphql-4.0.0.tgz",
@@ -7074,18 +6826,11 @@
"url": "https://github.com/chalk/supports-color?sponsor=1"
}
},
- "node_modules/eslint/node_modules/@babel/code-frame": {
- "version": "7.12.11",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz",
- "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==",
- "dependencies": {
- "@babel/highlight": "^7.10.4"
- }
- },
"node_modules/eslint/node_modules/debug": {
"version": "4.3.3",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
"integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
+ "peer": true,
"dependencies": {
"ms": "2.1.2"
},
@@ -7098,32 +6843,45 @@
}
}
},
- "node_modules/eslint/node_modules/eslint-utils": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
- "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
+ "node_modules/eslint/node_modules/eslint-scope": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
+ "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
+ "peer": true,
"dependencies": {
- "eslint-visitor-keys": "^1.1.0"
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
},
"engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/mysticatea"
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
}
},
- "node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
- "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+ "node_modules/eslint/node_modules/eslint-visitor-keys": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
+ "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
+ "peer": true,
"engines": {
- "node": ">=4"
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/eslint/node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "peer": true,
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
}
},
"node_modules/eslint/node_modules/globals": {
- "version": "13.12.1",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz",
- "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==",
+ "version": "13.15.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz",
+ "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==",
+ "peer": true,
"dependencies": {
"type-fest": "^0.20.2"
},
@@ -7134,38 +6892,33 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/eslint/node_modules/ignore": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
- "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
- "engines": {
- "node": ">= 4"
- }
- },
"node_modules/eslint/node_modules/ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "peer": true
},
"node_modules/espree": {
- "version": "7.3.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
- "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==",
+ "version": "9.3.2",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz",
+ "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==",
+ "peer": true,
"dependencies": {
- "acorn": "^7.4.0",
- "acorn-jsx": "^5.3.1",
- "eslint-visitor-keys": "^1.3.0"
+ "acorn": "^8.7.1",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.3.0"
},
"engines": {
- "node": "^10.12.0 || >=12.0.0"
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
}
},
"node_modules/espree/node_modules/eslint-visitor-keys": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
- "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
+ "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
+ "peer": true,
"engines": {
- "node": ">=4"
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
}
},
"node_modules/esprima": {
@@ -8790,17 +8543,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/gatsby-plugin-manifest/node_modules/lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/gatsby-plugin-manifest/node_modules/mime": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz",
@@ -8812,20 +8554,6 @@
"node": ">=10.0.0"
}
},
- "node_modules/gatsby-plugin-manifest/node_modules/semver": {
- "version": "7.3.7",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
- "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/gatsby-plugin-manifest/node_modules/sharp": {
"version": "0.30.4",
"resolved": "https://registry.npmjs.org/sharp/-/sharp-0.30.4.tgz",
@@ -8848,11 +8576,6 @@
"url": "https://opencollective.com/libvips"
}
},
- "node_modules/gatsby-plugin-manifest/node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
- },
"node_modules/gatsby-plugin-page-creator": {
"version": "4.7.0",
"resolved": "https://registry.npmjs.org/gatsby-plugin-page-creator/-/gatsby-plugin-page-creator-4.7.0.tgz",
@@ -8992,41 +8715,706 @@
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
"engines": {
- "node": ">=6"
+ "node": ">=6"
+ }
+ },
+ "node_modules/gatsby-telemetry/node_modules/chalk": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
+ "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/gatsby-telemetry/node_modules/type-fest": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
+ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/gatsby-worker": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/gatsby-worker/-/gatsby-worker-1.7.0.tgz",
+ "integrity": "sha512-pqIO0/fclpHhqlJ47Bb+7sk7U8XcoOqsSOg2M30HYlqi4rQYHMq1/XGTV/6xWi9RbeZpkJ8rLF3aw1Qa3dyPjQ==",
+ "dependencies": {
+ "@babel/core": "^7.15.5",
+ "@babel/runtime": "^7.15.4"
+ },
+ "engines": {
+ "node": ">=14.15.0"
+ }
+ },
+ "node_modules/gatsby/node_modules/@eslint/eslintrc": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz",
+ "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==",
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.1.1",
+ "espree": "^7.3.0",
+ "globals": "^13.9.0",
+ "ignore": "^4.0.6",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^3.13.1",
+ "minimatch": "^3.0.4",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/gatsby/node_modules/@eslint/eslintrc/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/gatsby/node_modules/@eslint/eslintrc/node_modules/ignore": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/gatsby/node_modules/@humanwhocodes/config-array": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz",
+ "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==",
+ "dependencies": {
+ "@humanwhocodes/object-schema": "^1.2.0",
+ "debug": "^4.1.1",
+ "minimatch": "^3.0.4"
+ },
+ "engines": {
+ "node": ">=10.10.0"
+ }
+ },
+ "node_modules/gatsby/node_modules/@humanwhocodes/config-array/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/gatsby/node_modules/@typescript-eslint/eslint-plugin": {
+ "version": "4.33.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz",
+ "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==",
+ "dependencies": {
+ "@typescript-eslint/experimental-utils": "4.33.0",
+ "@typescript-eslint/scope-manager": "4.33.0",
+ "debug": "^4.3.1",
+ "functional-red-black-tree": "^1.0.1",
+ "ignore": "^5.1.8",
+ "regexpp": "^3.1.0",
+ "semver": "^7.3.5",
+ "tsutils": "^3.21.0"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/parser": "^4.0.0",
+ "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/gatsby/node_modules/@typescript-eslint/eslint-plugin/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/gatsby/node_modules/@typescript-eslint/experimental-utils": {
+ "version": "4.33.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz",
+ "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==",
+ "dependencies": {
+ "@types/json-schema": "^7.0.7",
+ "@typescript-eslint/scope-manager": "4.33.0",
+ "@typescript-eslint/types": "4.33.0",
+ "@typescript-eslint/typescript-estree": "4.33.0",
+ "eslint-scope": "^5.1.1",
+ "eslint-utils": "^3.0.0"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "*"
+ }
+ },
+ "node_modules/gatsby/node_modules/@typescript-eslint/parser": {
+ "version": "4.33.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz",
+ "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==",
+ "dependencies": {
+ "@typescript-eslint/scope-manager": "4.33.0",
+ "@typescript-eslint/types": "4.33.0",
+ "@typescript-eslint/typescript-estree": "4.33.0",
+ "debug": "^4.3.1"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/gatsby/node_modules/@typescript-eslint/parser/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/gatsby/node_modules/@typescript-eslint/scope-manager": {
+ "version": "4.33.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz",
+ "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==",
+ "dependencies": {
+ "@typescript-eslint/types": "4.33.0",
+ "@typescript-eslint/visitor-keys": "4.33.0"
+ },
+ "engines": {
+ "node": "^8.10.0 || ^10.13.0 || >=11.10.1"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/gatsby/node_modules/@typescript-eslint/types": {
+ "version": "4.33.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz",
+ "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==",
+ "engines": {
+ "node": "^8.10.0 || ^10.13.0 || >=11.10.1"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/gatsby/node_modules/@typescript-eslint/typescript-estree": {
+ "version": "4.33.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz",
+ "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==",
+ "dependencies": {
+ "@typescript-eslint/types": "4.33.0",
+ "@typescript-eslint/visitor-keys": "4.33.0",
+ "debug": "^4.3.1",
+ "globby": "^11.0.3",
+ "is-glob": "^4.0.1",
+ "semver": "^7.3.5",
+ "tsutils": "^3.21.0"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/gatsby/node_modules/@typescript-eslint/typescript-estree/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/gatsby/node_modules/@typescript-eslint/visitor-keys": {
+ "version": "4.33.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz",
+ "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==",
+ "dependencies": {
+ "@typescript-eslint/types": "4.33.0",
+ "eslint-visitor-keys": "^2.0.0"
+ },
+ "engines": {
+ "node": "^8.10.0 || ^10.13.0 || >=11.10.1"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/gatsby/node_modules/acorn": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/gatsby/node_modules/argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dependencies": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "node_modules/gatsby/node_modules/eslint": {
+ "version": "7.32.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz",
+ "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==",
+ "dependencies": {
+ "@babel/code-frame": "7.12.11",
+ "@eslint/eslintrc": "^0.4.3",
+ "@humanwhocodes/config-array": "^0.5.0",
+ "ajv": "^6.10.0",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.0.1",
+ "doctrine": "^3.0.0",
+ "enquirer": "^2.3.5",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^5.1.1",
+ "eslint-utils": "^2.1.0",
+ "eslint-visitor-keys": "^2.0.0",
+ "espree": "^7.3.1",
+ "esquery": "^1.4.0",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "functional-red-black-tree": "^1.0.1",
+ "glob-parent": "^5.1.2",
+ "globals": "^13.6.0",
+ "ignore": "^4.0.6",
+ "import-fresh": "^3.0.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "js-yaml": "^3.13.1",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.0.4",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.1",
+ "progress": "^2.0.0",
+ "regexpp": "^3.1.0",
+ "semver": "^7.2.1",
+ "strip-ansi": "^6.0.0",
+ "strip-json-comments": "^3.1.0",
+ "table": "^6.0.9",
+ "text-table": "^0.2.0",
+ "v8-compile-cache": "^2.0.3"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/gatsby/node_modules/eslint-config-react-app": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-6.0.0.tgz",
+ "integrity": "sha512-bpoAAC+YRfzq0dsTk+6v9aHm/uqnDwayNAXleMypGl6CpxI9oXXscVHo4fk3eJPIn+rsbtNetB4r/ZIidFIE8A==",
+ "dependencies": {
+ "confusing-browser-globals": "^1.0.10"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/eslint-plugin": "^4.0.0",
+ "@typescript-eslint/parser": "^4.0.0",
+ "babel-eslint": "^10.0.0",
+ "eslint": "^7.5.0",
+ "eslint-plugin-flowtype": "^5.2.0",
+ "eslint-plugin-import": "^2.22.0",
+ "eslint-plugin-jest": "^24.0.0",
+ "eslint-plugin-jsx-a11y": "^6.3.1",
+ "eslint-plugin-react": "^7.20.3",
+ "eslint-plugin-react-hooks": "^4.0.8",
+ "eslint-plugin-testing-library": "^3.9.0"
+ },
+ "peerDependenciesMeta": {
+ "eslint-plugin-jest": {
+ "optional": true
+ },
+ "eslint-plugin-testing-library": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/gatsby/node_modules/eslint-plugin-flowtype": {
+ "version": "5.10.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-5.10.0.tgz",
+ "integrity": "sha512-vcz32f+7TP+kvTUyMXZmCnNujBQZDNmcqPImw8b9PZ+16w1Qdm6ryRuYZYVaG9xRqqmAPr2Cs9FAX5gN+x/bjw==",
+ "dependencies": {
+ "lodash": "^4.17.15",
+ "string-natural-compare": "^3.0.1"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ },
+ "peerDependencies": {
+ "eslint": "^7.1.0"
+ }
+ },
+ "node_modules/gatsby/node_modules/eslint-plugin-jest": {
+ "version": "24.7.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-24.7.0.tgz",
+ "integrity": "sha512-wUxdF2bAZiYSKBclsUMrYHH6WxiBreNjyDxbRv345TIvPeoCEgPNEn3Sa+ZrSqsf1Dl9SqqSREXMHExlMMu1DA==",
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "@typescript-eslint/experimental-utils": "^4.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/eslint-plugin": ">= 4",
+ "eslint": ">=5"
+ },
+ "peerDependenciesMeta": {
+ "@typescript-eslint/eslint-plugin": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/gatsby/node_modules/eslint-plugin-testing-library": {
+ "version": "3.10.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-3.10.2.tgz",
+ "integrity": "sha512-WAmOCt7EbF1XM8XfbCKAEzAPnShkNSwcIsAD2jHdsMUT9mZJPjLCG7pMzbcC8kK366NOuGip8HKLDC+Xk4yIdA==",
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "@typescript-eslint/experimental-utils": "^3.10.1"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0",
+ "npm": ">=6"
+ },
+ "peerDependencies": {
+ "eslint": "^5 || ^6 || ^7"
+ }
+ },
+ "node_modules/gatsby/node_modules/eslint-plugin-testing-library/node_modules/@typescript-eslint/experimental-utils": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz",
+ "integrity": "sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw==",
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "@types/json-schema": "^7.0.3",
+ "@typescript-eslint/types": "3.10.1",
+ "@typescript-eslint/typescript-estree": "3.10.1",
+ "eslint-scope": "^5.0.0",
+ "eslint-utils": "^2.0.0"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "*"
+ }
+ },
+ "node_modules/gatsby/node_modules/eslint-plugin-testing-library/node_modules/@typescript-eslint/types": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-3.10.1.tgz",
+ "integrity": "sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ==",
+ "optional": true,
+ "peer": true,
+ "engines": {
+ "node": "^8.10.0 || ^10.13.0 || >=11.10.1"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/gatsby/node_modules/eslint-plugin-testing-library/node_modules/@typescript-eslint/typescript-estree": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz",
+ "integrity": "sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w==",
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "@typescript-eslint/types": "3.10.1",
+ "@typescript-eslint/visitor-keys": "3.10.1",
+ "debug": "^4.1.1",
+ "glob": "^7.1.6",
+ "is-glob": "^4.0.1",
+ "lodash": "^4.17.15",
+ "semver": "^7.3.2",
+ "tsutils": "^3.17.1"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/gatsby/node_modules/eslint-plugin-testing-library/node_modules/@typescript-eslint/visitor-keys": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz",
+ "integrity": "sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ==",
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "eslint-visitor-keys": "^1.1.0"
+ },
+ "engines": {
+ "node": "^8.10.0 || ^10.13.0 || >=11.10.1"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/gatsby/node_modules/eslint-plugin-testing-library/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/gatsby/node_modules/eslint-plugin-testing-library/node_modules/eslint-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
+ "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "eslint-visitor-keys": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ }
+ },
+ "node_modules/gatsby/node_modules/eslint-plugin-testing-library/node_modules/eslint-visitor-keys": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+ "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+ "optional": true,
+ "peer": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/gatsby/node_modules/eslint/node_modules/@babel/code-frame": {
+ "version": "7.12.11",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz",
+ "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==",
+ "dependencies": {
+ "@babel/highlight": "^7.10.4"
+ }
+ },
+ "node_modules/gatsby/node_modules/eslint/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/gatsby/node_modules/eslint/node_modules/eslint-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
+ "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
+ "dependencies": {
+ "eslint-visitor-keys": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ }
+ },
+ "node_modules/gatsby/node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+ "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/gatsby/node_modules/eslint/node_modules/ignore": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/gatsby/node_modules/espree": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
+ "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==",
+ "dependencies": {
+ "acorn": "^7.4.0",
+ "acorn-jsx": "^5.3.1",
+ "eslint-visitor-keys": "^1.3.0"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/gatsby/node_modules/espree/node_modules/eslint-visitor-keys": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+ "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+ "engines": {
+ "node": ">=4"
}
},
- "node_modules/gatsby-telemetry/node_modules/chalk": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
- "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
+ "node_modules/gatsby/node_modules/globals": {
+ "version": "13.15.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz",
+ "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==",
"dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
+ "type-fest": "^0.20.2"
},
"engines": {
"node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/gatsby-telemetry/node_modules/type-fest": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
- "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/gatsby-worker": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/gatsby-worker/-/gatsby-worker-1.7.0.tgz",
- "integrity": "sha512-pqIO0/fclpHhqlJ47Bb+7sk7U8XcoOqsSOg2M30HYlqi4rQYHMq1/XGTV/6xWi9RbeZpkJ8rLF3aw1Qa3dyPjQ==",
+ "node_modules/gatsby/node_modules/js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
"dependencies": {
- "@babel/core": "^7.15.5",
- "@babel/runtime": "^7.15.4"
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
},
- "engines": {
- "node": ">=14.15.0"
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
}
},
+ "node_modules/gatsby/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
"node_modules/gauge": {
"version": "2.7.4",
"resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
@@ -10614,12 +11002,12 @@
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
},
"node_modules/js-yaml": {
- "version": "3.14.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "peer": true,
"dependencies": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
+ "argparse": "^2.0.1"
},
"bin": {
"js-yaml": "bin/js-yaml.js"
@@ -11501,9 +11889,9 @@
}
},
"node_modules/minimatch": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz",
- "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==",
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"dependencies": {
"brace-expansion": "^1.1.7"
},
@@ -13991,6 +14379,21 @@
"node": ">=4"
}
},
+ "node_modules/prettier": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz",
+ "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==",
+ "dev": true,
+ "bin": {
+ "prettier": "bin-prettier.js"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ },
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
+ }
+ },
"node_modules/pretty-error": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz",
@@ -15227,9 +15630,9 @@
}
},
"node_modules/semver": {
- "version": "7.3.5",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
- "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
+ "version": "7.3.7",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
+ "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
"dependencies": {
"lru-cache": "^6.0.0"
},
@@ -16442,9 +16845,9 @@
}
},
"node_modules/table/node_modules/ajv": {
- "version": "8.10.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz",
- "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==",
+ "version": "8.11.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz",
+ "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==",
"dependencies": {
"fast-deep-equal": "^3.1.1",
"json-schema-traverse": "^1.0.0",
@@ -16579,19 +16982,6 @@
}
}
},
- "node_modules/terser-webpack-plugin/node_modules/acorn": {
- "version": "8.7.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
- "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==",
- "optional": true,
- "peer": true,
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
"node_modules/terser-webpack-plugin/node_modules/commander": {
"version": "2.20.3",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
@@ -17553,17 +17943,6 @@
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz",
"integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw=="
},
- "node_modules/webpack/node_modules/acorn": {
- "version": "8.7.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
- "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==",
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
"node_modules/webpack/node_modules/acorn-import-assertions": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz",
@@ -18253,14 +18632,14 @@
}
},
"@babel/helper-create-class-features-plugin": {
- "version": "7.17.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.1.tgz",
- "integrity": "sha512-JBdSr/LtyYIno/pNnJ75lBcqc3Z1XXujzPanHqjvvrhOA+DTceTFuJi8XjmWTZh4r3fsdfqaCMN0iZemdkxZHQ==",
+ "version": "7.18.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.0.tgz",
+ "integrity": "sha512-Kh8zTGR9de3J63e5nS0rQUdRs/kbtwoeQQ0sriS0lItjC96u8XXZN6lKpuyWd2coKSU13py/y+LTmThLuVX0Pg==",
"requires": {
"@babel/helper-annotate-as-pure": "^7.16.7",
"@babel/helper-environment-visitor": "^7.16.7",
- "@babel/helper-function-name": "^7.16.7",
- "@babel/helper-member-expression-to-functions": "^7.16.7",
+ "@babel/helper-function-name": "^7.17.9",
+ "@babel/helper-member-expression-to-functions": "^7.17.7",
"@babel/helper-optimise-call-expression": "^7.16.7",
"@babel/helper-replace-supers": "^7.16.7",
"@babel/helper-split-export-declaration": "^7.16.7"
@@ -18327,21 +18706,12 @@
}
},
"@babel/helper-function-name": {
- "version": "7.16.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz",
- "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==",
+ "version": "7.17.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz",
+ "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==",
"requires": {
- "@babel/helper-get-function-arity": "^7.16.7",
"@babel/template": "^7.16.7",
- "@babel/types": "^7.16.7"
- }
- },
- "@babel/helper-get-function-arity": {
- "version": "7.16.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz",
- "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==",
- "requires": {
- "@babel/types": "^7.16.7"
+ "@babel/types": "^7.17.0"
}
},
"@babel/helper-hoist-variables": {
@@ -18353,11 +18723,11 @@
}
},
"@babel/helper-member-expression-to-functions": {
- "version": "7.16.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz",
- "integrity": "sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==",
+ "version": "7.17.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz",
+ "integrity": "sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==",
"requires": {
- "@babel/types": "^7.16.7"
+ "@babel/types": "^7.17.0"
}
},
"@babel/helper-module-imports": {
@@ -18392,9 +18762,9 @@
}
},
"@babel/helper-plugin-utils": {
- "version": "7.16.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz",
- "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA=="
+ "version": "7.17.12",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz",
+ "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA=="
},
"@babel/helper-remap-async-to-generator": {
"version": "7.16.8",
@@ -19387,46 +19757,45 @@
}
},
"@eslint/eslintrc": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz",
- "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz",
+ "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==",
+ "peer": true,
"requires": {
"ajv": "^6.12.4",
- "debug": "^4.1.1",
- "espree": "^7.3.0",
- "globals": "^13.9.0",
- "ignore": "^4.0.6",
+ "debug": "^4.3.2",
+ "espree": "^9.3.2",
+ "globals": "^13.15.0",
+ "ignore": "^5.2.0",
"import-fresh": "^3.2.1",
- "js-yaml": "^3.13.1",
- "minimatch": "^3.0.4",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
"strip-json-comments": "^3.1.1"
},
"dependencies": {
"debug": {
- "version": "4.3.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
- "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "peer": true,
"requires": {
"ms": "2.1.2"
}
},
"globals": {
- "version": "13.12.1",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz",
- "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==",
+ "version": "13.15.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz",
+ "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==",
+ "peer": true,
"requires": {
"type-fest": "^0.20.2"
}
},
- "ignore": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
- "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg=="
- },
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "peer": true
}
}
},
@@ -19727,19 +20096,21 @@
}
},
"@humanwhocodes/config-array": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz",
- "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==",
+ "version": "0.9.5",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz",
+ "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==",
+ "peer": true,
"requires": {
- "@humanwhocodes/object-schema": "^1.2.0",
+ "@humanwhocodes/object-schema": "^1.2.1",
"debug": "^4.1.1",
"minimatch": "^3.0.4"
},
"dependencies": {
"debug": {
- "version": "4.3.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
- "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "peer": true,
"requires": {
"ms": "2.1.2"
}
@@ -19747,7 +20118,8 @@
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "peer": true
}
}
},
@@ -20505,127 +20877,6 @@
"resolved": "https://registry.npmjs.org/@types/yoga-layout/-/yoga-layout-1.9.2.tgz",
"integrity": "sha512-S9q47ByT2pPvD65IvrWp7qppVMpk9WGMbVq9wbWZOHg6tnXSD4vyhao6nOSBwwfDdV2p3Kx9evA9vI+XWTfDvw=="
},
- "@typescript-eslint/eslint-plugin": {
- "version": "4.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz",
- "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==",
- "requires": {
- "@typescript-eslint/experimental-utils": "4.33.0",
- "@typescript-eslint/scope-manager": "4.33.0",
- "debug": "^4.3.1",
- "functional-red-black-tree": "^1.0.1",
- "ignore": "^5.1.8",
- "regexpp": "^3.1.0",
- "semver": "^7.3.5",
- "tsutils": "^3.21.0"
- },
- "dependencies": {
- "debug": {
- "version": "4.3.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
- "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
- "requires": {
- "ms": "2.1.2"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- }
- }
- },
- "@typescript-eslint/experimental-utils": {
- "version": "4.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz",
- "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==",
- "requires": {
- "@types/json-schema": "^7.0.7",
- "@typescript-eslint/scope-manager": "4.33.0",
- "@typescript-eslint/types": "4.33.0",
- "@typescript-eslint/typescript-estree": "4.33.0",
- "eslint-scope": "^5.1.1",
- "eslint-utils": "^3.0.0"
- }
- },
- "@typescript-eslint/parser": {
- "version": "4.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz",
- "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==",
- "requires": {
- "@typescript-eslint/scope-manager": "4.33.0",
- "@typescript-eslint/types": "4.33.0",
- "@typescript-eslint/typescript-estree": "4.33.0",
- "debug": "^4.3.1"
- },
- "dependencies": {
- "debug": {
- "version": "4.3.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
- "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
- "requires": {
- "ms": "2.1.2"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- }
- }
- },
- "@typescript-eslint/scope-manager": {
- "version": "4.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz",
- "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==",
- "requires": {
- "@typescript-eslint/types": "4.33.0",
- "@typescript-eslint/visitor-keys": "4.33.0"
- }
- },
- "@typescript-eslint/types": {
- "version": "4.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz",
- "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ=="
- },
- "@typescript-eslint/typescript-estree": {
- "version": "4.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz",
- "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==",
- "requires": {
- "@typescript-eslint/types": "4.33.0",
- "@typescript-eslint/visitor-keys": "4.33.0",
- "debug": "^4.3.1",
- "globby": "^11.0.3",
- "is-glob": "^4.0.1",
- "semver": "^7.3.5",
- "tsutils": "^3.21.0"
- },
- "dependencies": {
- "debug": {
- "version": "4.3.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
- "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
- "requires": {
- "ms": "2.1.2"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- }
- }
- },
- "@typescript-eslint/visitor-keys": {
- "version": "4.33.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz",
- "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==",
- "requires": {
- "@typescript-eslint/types": "4.33.0",
- "eslint-visitor-keys": "^2.0.0"
- }
- },
"@vercel/webpack-asset-relocator-loader": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/@vercel/webpack-asset-relocator-loader/-/webpack-asset-relocator-loader-1.7.0.tgz",
@@ -20790,9 +21041,9 @@
}
},
"acorn": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
- "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="
+ "version": "8.7.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz",
+ "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A=="
},
"acorn-jsx": {
"version": "5.3.2",
@@ -20845,9 +21096,9 @@
}
},
"ansi-colors": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
- "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA=="
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
+ "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw=="
},
"ansi-escapes": {
"version": "3.2.0",
@@ -20950,12 +21201,10 @@
"integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA=="
},
"argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
- "requires": {
- "sprintf-js": "~1.0.2"
- }
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "peer": true
},
"aria-query": {
"version": "4.2.2",
@@ -21119,6 +21368,28 @@
"resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz",
"integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA=="
},
+ "babel-eslint": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz",
+ "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==",
+ "peer": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/parser": "^7.7.0",
+ "@babel/traverse": "^7.7.0",
+ "@babel/types": "^7.7.0",
+ "eslint-visitor-keys": "^1.0.0",
+ "resolve": "^1.12.0"
+ },
+ "dependencies": {
+ "eslint-visitor-keys": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+ "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+ "peer": true
+ }
+ }
+ },
"babel-loader": {
"version": "8.2.3",
"resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.3.tgz",
@@ -23125,111 +23396,99 @@
"integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="
},
"eslint": {
- "version": "7.32.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz",
- "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==",
+ "version": "8.16.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.16.0.tgz",
+ "integrity": "sha512-MBndsoXY/PeVTDJeWsYj7kLZ5hQpJOfMYLsF6LicLHQWbRDG19lK5jOix4DPl8yY4SUFcE3txy86OzFLWT+yoA==",
+ "peer": true,
"requires": {
- "@babel/code-frame": "7.12.11",
- "@eslint/eslintrc": "^0.4.3",
- "@humanwhocodes/config-array": "^0.5.0",
+ "@eslint/eslintrc": "^1.3.0",
+ "@humanwhocodes/config-array": "^0.9.2",
"ajv": "^6.10.0",
"chalk": "^4.0.0",
"cross-spawn": "^7.0.2",
- "debug": "^4.0.1",
+ "debug": "^4.3.2",
"doctrine": "^3.0.0",
- "enquirer": "^2.3.5",
"escape-string-regexp": "^4.0.0",
- "eslint-scope": "^5.1.1",
- "eslint-utils": "^2.1.0",
- "eslint-visitor-keys": "^2.0.0",
- "espree": "^7.3.1",
+ "eslint-scope": "^7.1.1",
+ "eslint-utils": "^3.0.0",
+ "eslint-visitor-keys": "^3.3.0",
+ "espree": "^9.3.2",
"esquery": "^1.4.0",
"esutils": "^2.0.2",
"fast-deep-equal": "^3.1.3",
"file-entry-cache": "^6.0.1",
"functional-red-black-tree": "^1.0.1",
- "glob-parent": "^5.1.2",
- "globals": "^13.6.0",
- "ignore": "^4.0.6",
+ "glob-parent": "^6.0.1",
+ "globals": "^13.15.0",
+ "ignore": "^5.2.0",
"import-fresh": "^3.0.0",
"imurmurhash": "^0.1.4",
"is-glob": "^4.0.0",
- "js-yaml": "^3.13.1",
+ "js-yaml": "^4.1.0",
"json-stable-stringify-without-jsonify": "^1.0.1",
"levn": "^0.4.1",
"lodash.merge": "^4.6.2",
- "minimatch": "^3.0.4",
+ "minimatch": "^3.1.2",
"natural-compare": "^1.4.0",
"optionator": "^0.9.1",
- "progress": "^2.0.0",
- "regexpp": "^3.1.0",
- "semver": "^7.2.1",
- "strip-ansi": "^6.0.0",
+ "regexpp": "^3.2.0",
+ "strip-ansi": "^6.0.1",
"strip-json-comments": "^3.1.0",
- "table": "^6.0.9",
"text-table": "^0.2.0",
"v8-compile-cache": "^2.0.3"
},
"dependencies": {
- "@babel/code-frame": {
- "version": "7.12.11",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz",
- "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==",
- "requires": {
- "@babel/highlight": "^7.10.4"
- }
- },
"debug": {
"version": "4.3.3",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
"integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
+ "peer": true,
"requires": {
"ms": "2.1.2"
}
},
- "eslint-utils": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
- "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
+ "eslint-scope": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
+ "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
+ "peer": true,
"requires": {
- "eslint-visitor-keys": "^1.1.0"
- },
- "dependencies": {
- "eslint-visitor-keys": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
- "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ=="
- }
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
+ "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
+ "peer": true
+ },
+ "glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "peer": true,
+ "requires": {
+ "is-glob": "^4.0.3"
}
},
"globals": {
- "version": "13.12.1",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz",
- "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==",
+ "version": "13.15.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz",
+ "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==",
+ "peer": true,
"requires": {
"type-fest": "^0.20.2"
}
},
- "ignore": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
- "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg=="
- },
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "peer": true
}
}
},
- "eslint-config-react-app": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-6.0.0.tgz",
- "integrity": "sha512-bpoAAC+YRfzq0dsTk+6v9aHm/uqnDwayNAXleMypGl6CpxI9oXXscVHo4fk3eJPIn+rsbtNetB4r/ZIidFIE8A==",
- "requires": {
- "confusing-browser-globals": "^1.0.10"
- }
- },
"eslint-import-resolver-node": {
"version": "0.3.6",
"resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz",
@@ -23248,15 +23507,6 @@
"find-up": "^2.1.0"
}
},
- "eslint-plugin-flowtype": {
- "version": "5.10.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-5.10.0.tgz",
- "integrity": "sha512-vcz32f+7TP+kvTUyMXZmCnNujBQZDNmcqPImw8b9PZ+16w1Qdm6ryRuYZYVaG9xRqqmAPr2Cs9FAX5gN+x/bjw==",
- "requires": {
- "lodash": "^4.17.15",
- "string-natural-compare": "^3.0.1"
- }
- },
"eslint-plugin-graphql": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-graphql/-/eslint-plugin-graphql-4.0.0.tgz",
@@ -23454,19 +23704,21 @@
}
},
"espree": {
- "version": "7.3.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
- "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==",
+ "version": "9.3.2",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz",
+ "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==",
+ "peer": true,
"requires": {
- "acorn": "^7.4.0",
- "acorn-jsx": "^5.3.1",
- "eslint-visitor-keys": "^1.3.0"
+ "acorn": "^8.7.1",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.3.0"
},
"dependencies": {
"eslint-visitor-keys": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
- "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ=="
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
+ "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
+ "peer": true
}
}
},
@@ -24507,6 +24759,416 @@
"webpack-virtual-modules": "^0.3.2",
"xstate": "^4.26.0",
"yaml-loader": "^0.6.0"
+ },
+ "dependencies": {
+ "@eslint/eslintrc": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz",
+ "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==",
+ "requires": {
+ "ajv": "^6.12.4",
+ "debug": "^4.1.1",
+ "espree": "^7.3.0",
+ "globals": "^13.9.0",
+ "ignore": "^4.0.6",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^3.13.1",
+ "minimatch": "^3.0.4",
+ "strip-json-comments": "^3.1.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "ignore": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg=="
+ }
+ }
+ },
+ "@humanwhocodes/config-array": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz",
+ "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==",
+ "requires": {
+ "@humanwhocodes/object-schema": "^1.2.0",
+ "debug": "^4.1.1",
+ "minimatch": "^3.0.4"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ }
+ }
+ },
+ "@typescript-eslint/eslint-plugin": {
+ "version": "4.33.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz",
+ "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==",
+ "requires": {
+ "@typescript-eslint/experimental-utils": "4.33.0",
+ "@typescript-eslint/scope-manager": "4.33.0",
+ "debug": "^4.3.1",
+ "functional-red-black-tree": "^1.0.1",
+ "ignore": "^5.1.8",
+ "regexpp": "^3.1.0",
+ "semver": "^7.3.5",
+ "tsutils": "^3.21.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ }
+ }
+ },
+ "@typescript-eslint/experimental-utils": {
+ "version": "4.33.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz",
+ "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==",
+ "requires": {
+ "@types/json-schema": "^7.0.7",
+ "@typescript-eslint/scope-manager": "4.33.0",
+ "@typescript-eslint/types": "4.33.0",
+ "@typescript-eslint/typescript-estree": "4.33.0",
+ "eslint-scope": "^5.1.1",
+ "eslint-utils": "^3.0.0"
+ }
+ },
+ "@typescript-eslint/parser": {
+ "version": "4.33.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz",
+ "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==",
+ "requires": {
+ "@typescript-eslint/scope-manager": "4.33.0",
+ "@typescript-eslint/types": "4.33.0",
+ "@typescript-eslint/typescript-estree": "4.33.0",
+ "debug": "^4.3.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ }
+ }
+ },
+ "@typescript-eslint/scope-manager": {
+ "version": "4.33.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz",
+ "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==",
+ "requires": {
+ "@typescript-eslint/types": "4.33.0",
+ "@typescript-eslint/visitor-keys": "4.33.0"
+ }
+ },
+ "@typescript-eslint/types": {
+ "version": "4.33.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz",
+ "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ=="
+ },
+ "@typescript-eslint/typescript-estree": {
+ "version": "4.33.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz",
+ "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==",
+ "requires": {
+ "@typescript-eslint/types": "4.33.0",
+ "@typescript-eslint/visitor-keys": "4.33.0",
+ "debug": "^4.3.1",
+ "globby": "^11.0.3",
+ "is-glob": "^4.0.1",
+ "semver": "^7.3.5",
+ "tsutils": "^3.21.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ }
+ }
+ },
+ "@typescript-eslint/visitor-keys": {
+ "version": "4.33.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz",
+ "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==",
+ "requires": {
+ "@typescript-eslint/types": "4.33.0",
+ "eslint-visitor-keys": "^2.0.0"
+ }
+ },
+ "acorn": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "eslint": {
+ "version": "7.32.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz",
+ "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==",
+ "requires": {
+ "@babel/code-frame": "7.12.11",
+ "@eslint/eslintrc": "^0.4.3",
+ "@humanwhocodes/config-array": "^0.5.0",
+ "ajv": "^6.10.0",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.0.1",
+ "doctrine": "^3.0.0",
+ "enquirer": "^2.3.5",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^5.1.1",
+ "eslint-utils": "^2.1.0",
+ "eslint-visitor-keys": "^2.0.0",
+ "espree": "^7.3.1",
+ "esquery": "^1.4.0",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "functional-red-black-tree": "^1.0.1",
+ "glob-parent": "^5.1.2",
+ "globals": "^13.6.0",
+ "ignore": "^4.0.6",
+ "import-fresh": "^3.0.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "js-yaml": "^3.13.1",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.0.4",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.1",
+ "progress": "^2.0.0",
+ "regexpp": "^3.1.0",
+ "semver": "^7.2.1",
+ "strip-ansi": "^6.0.0",
+ "strip-json-comments": "^3.1.0",
+ "table": "^6.0.9",
+ "text-table": "^0.2.0",
+ "v8-compile-cache": "^2.0.3"
+ },
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.12.11",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz",
+ "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==",
+ "requires": {
+ "@babel/highlight": "^7.10.4"
+ }
+ },
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "eslint-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
+ "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
+ "requires": {
+ "eslint-visitor-keys": "^1.1.0"
+ },
+ "dependencies": {
+ "eslint-visitor-keys": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+ "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ=="
+ }
+ }
+ },
+ "ignore": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg=="
+ }
+ }
+ },
+ "eslint-config-react-app": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-6.0.0.tgz",
+ "integrity": "sha512-bpoAAC+YRfzq0dsTk+6v9aHm/uqnDwayNAXleMypGl6CpxI9oXXscVHo4fk3eJPIn+rsbtNetB4r/ZIidFIE8A==",
+ "requires": {
+ "confusing-browser-globals": "^1.0.10"
+ }
+ },
+ "eslint-plugin-flowtype": {
+ "version": "5.10.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-5.10.0.tgz",
+ "integrity": "sha512-vcz32f+7TP+kvTUyMXZmCnNujBQZDNmcqPImw8b9PZ+16w1Qdm6ryRuYZYVaG9xRqqmAPr2Cs9FAX5gN+x/bjw==",
+ "requires": {
+ "lodash": "^4.17.15",
+ "string-natural-compare": "^3.0.1"
+ }
+ },
+ "eslint-plugin-jest": {
+ "version": "24.7.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-24.7.0.tgz",
+ "integrity": "sha512-wUxdF2bAZiYSKBclsUMrYHH6WxiBreNjyDxbRv345TIvPeoCEgPNEn3Sa+ZrSqsf1Dl9SqqSREXMHExlMMu1DA==",
+ "optional": true,
+ "peer": true,
+ "requires": {
+ "@typescript-eslint/experimental-utils": "^4.0.1"
+ }
+ },
+ "eslint-plugin-testing-library": {
+ "version": "3.10.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-3.10.2.tgz",
+ "integrity": "sha512-WAmOCt7EbF1XM8XfbCKAEzAPnShkNSwcIsAD2jHdsMUT9mZJPjLCG7pMzbcC8kK366NOuGip8HKLDC+Xk4yIdA==",
+ "optional": true,
+ "peer": true,
+ "requires": {
+ "@typescript-eslint/experimental-utils": "^3.10.1"
+ },
+ "dependencies": {
+ "@typescript-eslint/experimental-utils": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz",
+ "integrity": "sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw==",
+ "optional": true,
+ "peer": true,
+ "requires": {
+ "@types/json-schema": "^7.0.3",
+ "@typescript-eslint/types": "3.10.1",
+ "@typescript-eslint/typescript-estree": "3.10.1",
+ "eslint-scope": "^5.0.0",
+ "eslint-utils": "^2.0.0"
+ }
+ },
+ "@typescript-eslint/types": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-3.10.1.tgz",
+ "integrity": "sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ==",
+ "optional": true,
+ "peer": true
+ },
+ "@typescript-eslint/typescript-estree": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz",
+ "integrity": "sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w==",
+ "optional": true,
+ "peer": true,
+ "requires": {
+ "@typescript-eslint/types": "3.10.1",
+ "@typescript-eslint/visitor-keys": "3.10.1",
+ "debug": "^4.1.1",
+ "glob": "^7.1.6",
+ "is-glob": "^4.0.1",
+ "lodash": "^4.17.15",
+ "semver": "^7.3.2",
+ "tsutils": "^3.17.1"
+ }
+ },
+ "@typescript-eslint/visitor-keys": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz",
+ "integrity": "sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ==",
+ "optional": true,
+ "peer": true,
+ "requires": {
+ "eslint-visitor-keys": "^1.1.0"
+ }
+ },
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "optional": true,
+ "peer": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "eslint-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
+ "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
+ "optional": true,
+ "peer": true,
+ "requires": {
+ "eslint-visitor-keys": "^1.1.0"
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+ "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+ "optional": true,
+ "peer": true
+ }
+ }
+ },
+ "espree": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
+ "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==",
+ "requires": {
+ "acorn": "^7.4.0",
+ "acorn-jsx": "^5.3.1",
+ "eslint-visitor-keys": "^1.3.0"
+ },
+ "dependencies": {
+ "eslint-visitor-keys": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+ "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ=="
+ }
+ }
+ },
+ "globals": {
+ "version": "13.15.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz",
+ "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==",
+ "requires": {
+ "type-fest": "^0.20.2"
+ }
+ },
+ "js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ }
}
},
"gatsby-cli": {
@@ -24743,27 +25405,11 @@
"resolved": "https://registry.npmjs.org/import-from/-/import-from-4.0.0.tgz",
"integrity": "sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ=="
},
- "lru-cache": {
- "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": "^4.0.0"
- }
- },
"mime": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz",
"integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A=="
},
- "semver": {
- "version": "7.3.7",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
- "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
- "requires": {
- "lru-cache": "^6.0.0"
- }
- },
"sharp": {
"version": "0.30.4",
"resolved": "https://registry.npmjs.org/sharp/-/sharp-0.30.4.tgz",
@@ -24778,11 +25424,6 @@
"tar-fs": "^2.1.1",
"tunnel-agent": "^0.6.0"
}
- },
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
}
}
},
@@ -26062,12 +26703,12 @@
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
},
"js-yaml": {
- "version": "3.14.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "peer": true,
"requires": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
+ "argparse": "^2.0.1"
}
},
"jsesc": {
@@ -26741,9 +27382,9 @@
"integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg=="
},
"minimatch": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz",
- "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==",
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"requires": {
"brace-expansion": "^1.1.7"
}
@@ -28523,6 +29164,12 @@
"resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
"integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc="
},
+ "prettier": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz",
+ "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==",
+ "dev": true
+ },
"pretty-error": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz",
@@ -29443,9 +30090,9 @@
}
},
"semver": {
- "version": "7.3.5",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
- "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
+ "version": "7.3.7",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
+ "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
"requires": {
"lru-cache": "^6.0.0"
},
@@ -30382,9 +31029,9 @@
},
"dependencies": {
"ajv": {
- "version": "8.10.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz",
- "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==",
+ "version": "8.11.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz",
+ "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==",
"requires": {
"fast-deep-equal": "^3.1.1",
"json-schema-traverse": "^1.0.0",
@@ -30469,13 +31116,6 @@
"terser": "^5.7.2"
},
"dependencies": {
- "acorn": {
- "version": "8.7.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
- "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==",
- "optional": true,
- "peer": true
- },
"commander": {
"version": "2.20.3",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
@@ -31144,11 +31784,6 @@
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz",
"integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw=="
},
- "acorn": {
- "version": "8.7.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
- "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ=="
- },
"acorn-import-assertions": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz",
diff --git a/package.json b/package.json
index a575b07..49d7181 100644
--- a/package.json
+++ b/package.json
@@ -13,6 +13,7 @@
"build": "gatsby build",
"serve": "gatsby serve",
"clean": "gatsby clean",
+ "format": "prettier --write \"{gatsby-*.js,src/**/*.js}\"",
"plop": "plop"
},
"dependencies": {
@@ -24,6 +25,7 @@
"react-slick": "^0.28.1"
},
"devDependencies": {
- "plop": "^3.0.5"
+ "plop": "^3.0.5",
+ "prettier": "^2.6.2"
}
}
diff --git a/src/components/Accordion/Accordion.js b/src/components/Accordion/Accordion.js
index 8816117..18da0df 100644
--- a/src/components/Accordion/Accordion.js
+++ b/src/components/Accordion/Accordion.js
@@ -3,27 +3,44 @@ import Icon from '../Icons/Icon';
import * as styles from './Accordion.module.css';
const Accordion = (props) => {
- const { title, type='caret', customStyle, children } = props;
-
+ const { title, type = 'caret', customStyle, children } = props;
+
const [open, setOpen] = useState(false);
- const combinedStyling = {...styles, ...customStyle}
+ const combinedStyling = { ...styles, ...customStyle };
- const icon = type === 'caret' ? : ;
+ const icon =
+ type === 'caret' ? (
+
+ ) : (
+
+ );
return (
-
setOpen(!open)}>
-
+ setOpen(!open)}
+ >
+
{title}
-
-
diff --git a/src/components/AccountLayout/AccountLayout.js b/src/components/AccountLayout/AccountLayout.js
index c849f50..409b26e 100644
--- a/src/components/AccountLayout/AccountLayout.js
+++ b/src/components/AccountLayout/AccountLayout.js
@@ -5,15 +5,13 @@ import Container from '../Container';
import * as styles from './AccountLayout.module.css';
-const AccountLayout = ({children}) => {
+const AccountLayout = ({ children }) => {
return (
-
-
- {children}
-
+
+
{children}
diff --git a/src/components/AccountNav/AccountNav.js b/src/components/AccountNav/AccountNav.js
index 5e5f60e..3c42aa4 100644
--- a/src/components/AccountNav/AccountNav.js
+++ b/src/components/AccountNav/AccountNav.js
@@ -3,20 +3,49 @@ import React from 'react';
import * as styles from './AccountNav.module.css';
const AccountNav = (props) => {
-
const handleLogout = () => {
window.localStorage.removeItem('key');
navigate('/');
- }
+ };
return (
- Orders
- Addresses
- Settings
- Recently Viewed
- Logout
+
+ Orders
+
+
+ Addresses
+
+
+ Settings
+
+
+ Recently Viewed
+
+
+ Logout
+
);
diff --git a/src/components/ActionCard/ActionCard.js b/src/components/ActionCard/ActionCard.js
index 55c8354..49b2fb6 100644
--- a/src/components/ActionCard/ActionCard.js
+++ b/src/components/ActionCard/ActionCard.js
@@ -5,11 +5,15 @@ import * as styles from './ActionCard.module.css';
import Icon from '../Icons/Icon';
const ActionCard = (props) => {
- const { title, icon, subtitle, link, size} = props;
+ const { title, icon, subtitle, link, size } = props;
return (
-
navigate(link)}>
+
navigate(link)}
+ >
-
+
{title}
diff --git a/src/components/AddNotification/AddNotification.js b/src/components/AddNotification/AddNotification.js
index f915eb4..170fd51 100644
--- a/src/components/AddNotification/AddNotification.js
+++ b/src/components/AddNotification/AddNotification.js
@@ -1,5 +1,5 @@
import { Link, navigate } from 'gatsby';
-import React, {useContext} from 'react';
+import React, { useContext } from 'react';
import AddItemNotificationContext from '../../context/AddItemNotificationProvider';
@@ -9,10 +9,9 @@ import Icon from '../Icons/Icon';
import * as styles from './AddNotification.module.css';
const AddNotification = (props) => {
-
const sampleCartItem = {
image: '/products/pdp1.jpeg',
- alt: '',
+ alt: '',
name: 'Lambswool Crew Neck Jumper',
price: 220,
color: 'Anthracite Melange',
@@ -23,7 +22,11 @@ const AddNotification = (props) => {
const showNotif = ctxAddItemNotification.state?.open;
return (
-
+
@@ -41,10 +44,12 @@ const AddNotification = (props) => {
Size: {sampleCartItem.size}
-
+
view my bag (1)
-
navigate('/cart')} level={'primary'}>checkout
+
navigate('/cart')} level={'primary'}>
+ checkout
+
continue shopping
diff --git a/src/components/AddressCard/AddressCard.js b/src/components/AddressCard/AddressCard.js
index f9e4356..0fc275e 100644
--- a/src/components/AddressCard/AddressCard.js
+++ b/src/components/AddressCard/AddressCard.js
@@ -2,7 +2,16 @@ import React from 'react';
import * as styles from './AddressCard.module.css';
const AddressCard = (props) => {
- const {name, address, state, postal, country, company, showForm, showDeleteForm} = props;
+ const {
+ name,
+ address,
+ state,
+ postal,
+ country,
+ company,
+ showForm,
+ showDeleteForm,
+ } = props;
return (
@@ -12,8 +21,12 @@ const AddressCard = (props) => {
{`${state} ${postal}`}
{country}
- Edit
- Remove
+
+ Edit
+
+
+ Remove
+
);
diff --git a/src/components/AddressForm/AddressForm.js b/src/components/AddressForm/AddressForm.js
index 0caff18..31bd5ab 100644
--- a/src/components/AddressForm/AddressForm.js
+++ b/src/components/AddressForm/AddressForm.js
@@ -5,9 +5,8 @@ import Button from '../Button';
import FormInputField from '../FormInputField';
const AddressForm = (props) => {
-
const { closeForm } = props;
-
+
const initialState = {
name: '',
address: '',
@@ -29,74 +28,82 @@ const AddressForm = (props) => {
const [form, setForm] = useState(initialState);
const [errorForm, setErrorForm] = useState(errorState);
- const handleChange = (id ,e) => {
+ const handleChange = (id, e) => {
const tempForm = { ...form, [id]: e };
setForm(tempForm);
- }
+ };
const handleSubmit = (e) => {
e.preventDefault();
setErrorForm(errorState);
closeForm();
- }
+ };
return (
);
};
diff --git a/src/components/AdjustItem/AdjustItem.js b/src/components/AdjustItem/AdjustItem.js
index 2137102..e8f798e 100644
--- a/src/components/AdjustItem/AdjustItem.js
+++ b/src/components/AdjustItem/AdjustItem.js
@@ -1,30 +1,46 @@
-import React, {useState} from 'react';
+import React, { useState } from 'react';
import Icon from '../Icons/Icon';
import * as styles from './AdjustItem.module.css';
const AdjustItem = (props) => {
-
- const {isTransparent} = props;
+ const { isTransparent } = props;
const [qty, setQty] = useState(1);
const handleOnChange = (e) => {
const num = parseInt(e.target.value);
setQty(num);
- }
-
+ };
+
return (
-
-
{
- if(qty <= 1) return;
- setQty(qty-1);
- }}>
+
+
{
+ if (qty <= 1) return;
+ setQty(qty - 1);
+ }}
+ >
- handleOnChange(e)} type={'number'} value={qty}>
+ handleOnChange(e)}
+ type={'number'}
+ value={qty}
+ >
-
setQty(qty+1)} className={styles.iconContainer}>
+
setQty(qty + 1)}
+ className={styles.iconContainer}
+ >
diff --git a/src/components/Attribute/Attribute.js b/src/components/Attribute/Attribute.js
index 4892b3f..7abf71f 100644
--- a/src/components/Attribute/Attribute.js
+++ b/src/components/Attribute/Attribute.js
@@ -4,8 +4,7 @@ import Icon from '../Icons/Icon';
import * as styles from './Attribute.module.css';
const Attribute = (props) => {
-
- const {icon, title, subtitle} = props;
+ const { icon, title, subtitle } = props;
return (
diff --git a/src/components/AttributeGrid/AttributeGrid.js b/src/components/AttributeGrid/AttributeGrid.js
index 14317b9..0a6c5e9 100644
--- a/src/components/AttributeGrid/AttributeGrid.js
+++ b/src/components/AttributeGrid/AttributeGrid.js
@@ -7,9 +7,21 @@ import * as styles from './AttributeGrid.module.css';
const AttributeGrid = (props) => {
return (
);
};
diff --git a/src/components/Banner/Banner.js b/src/components/Banner/Banner.js
index fdfa03f..17201a3 100644
--- a/src/components/Banner/Banner.js
+++ b/src/components/Banner/Banner.js
@@ -2,27 +2,40 @@ import React from 'react';
import * as styles from './Banner.module.css';
const Banner = (props) => {
-
- const {maxWidth, name, subtitle, color, bgImage, height, bgColor='var(--standard-light-grey)', hideSubtitleOnMobile = true} = props;
+ const {
+ maxWidth,
+ name,
+ subtitle,
+ color,
+ bgImage,
+ height,
+ bgColor = 'var(--standard-light-grey)',
+ hideSubtitleOnMobile = true,
+ } = props;
const customStyling = {
backgroundColor: bgColor,
backgroundImage: bgImage !== undefined ? `url(${bgImage})` : 'none',
height: height,
color: color,
- }
+ };
return (
-
+
{name}
- { subtitle &&
-
- {subtitle}
- }
+ {subtitle && (
+
+ {subtitle}
+
+ )}
);
};
-export default Banner;
\ No newline at end of file
+export default Banner;
diff --git a/src/components/Blog/Blog.js b/src/components/Blog/Blog.js
index f65e46a..7789647 100644
--- a/src/components/Blog/Blog.js
+++ b/src/components/Blog/Blog.js
@@ -7,7 +7,7 @@ import Icon from '../Icons/Icon';
import * as styles from './Blog.module.css';
const Blog = (props) => {
- const {title, category, image, alt, children } = props;
+ const { title, category, image, alt, children } = props;
return (
{category}
@@ -15,9 +15,7 @@ const Blog = (props) => {
-
- {children}
-
+
{children}
Share with:
@@ -31,7 +29,9 @@ const Blog = (props) => {
-
navigate('/blog')} level={'secondary'} >back to blog
+
navigate('/blog')} level={'secondary'}>
+ back to blog
+
);
diff --git a/src/components/BlogPreview/BlogPreview.js b/src/components/BlogPreview/BlogPreview.js
index 7e50498..7f2191a 100644
--- a/src/components/BlogPreview/BlogPreview.js
+++ b/src/components/BlogPreview/BlogPreview.js
@@ -3,25 +3,26 @@ import { Link, navigate } from 'gatsby';
import * as styles from './BlogPreview.module.css';
const BlogPreview = (props) => {
- const {image, altImage, title, link, category, showExcerpt, excerpt} = props;
+ const { image, altImage, title, link, category, showExcerpt, excerpt } =
+ props;
- const handleClick = () => { navigate(link); };
+ const handleClick = () => {
+ navigate(link);
+ };
return (
-
-
{category}
-
{title}
- {showExcerpt &&
-
- {excerpt}
-
- }
+
+
{category}
+
+ {title}
+
+ {showExcerpt &&
{excerpt}
}
);
};
diff --git a/src/components/BlogPreviewGrid/BlogPreviewGrid.js b/src/components/BlogPreviewGrid/BlogPreviewGrid.js
index d46b5d4..4f55b32 100644
--- a/src/components/BlogPreviewGrid/BlogPreviewGrid.js
+++ b/src/components/BlogPreviewGrid/BlogPreviewGrid.js
@@ -7,21 +7,22 @@ const BlogPreviewGrid = (props) => {
const { data, hideReadMoreOnWeb, showExcerpt } = props;
return (
- {data && data.map((blog, index) => {
- return(
-
- )
- })}
+ {data &&
+ data.map((blog, index) => {
+ return (
+
+ );
+ })}
);
};
diff --git a/src/components/BoxOption/BoxOption.js b/src/components/BoxOption/BoxOption.js
index 7242b4f..18c278e 100644
--- a/src/components/BoxOption/BoxOption.js
+++ b/src/components/BoxOption/BoxOption.js
@@ -4,7 +4,11 @@ import * as styles from './BoxOption.module.css';
const BoxOption = (props) => {
const { data, setActive, isActive } = props;
return (
-
setActive(data)} role={'presentation'}>
+
setActive(data)}
+ role={'presentation'}
+ >
{data}
);
diff --git a/src/components/Brand/Brand.js b/src/components/Brand/Brand.js
index ec1a70f..da1aac0 100644
--- a/src/components/Brand/Brand.js
+++ b/src/components/Brand/Brand.js
@@ -4,17 +4,43 @@ import { navigate } from 'gatsby';
import * as styles from './Brand.module.css';
const Brand = (props) => {
-
return (
-
navigate('/')}>
+
navigate('/')}
+ >
{/*
SYDNEY */}
-
-
-
-
-
-
-
+
+
+
+
+
+
+
);
diff --git a/src/components/Breadcrumbs/BreadCrumbs.js b/src/components/Breadcrumbs/BreadCrumbs.js
index e9dee6a..b0c06e7 100644
--- a/src/components/Breadcrumbs/BreadCrumbs.js
+++ b/src/components/Breadcrumbs/BreadCrumbs.js
@@ -4,37 +4,40 @@ import * as styles from './BreadCrumbs.module.css';
import Icon from '../Icons/Icon';
const Breadcrumbs = ({ crumbs }) => {
- let crumbsOutput = crumbs;
- if (crumbsOutput && typeof crumbsOutput !== 'object') {
- if (crumbsOutput.indexOf('>') > -1) {
- crumbsOutput = crumbsOutput.split('>');
- } else {
- crumbsOutput = [crumbsOutput];
- }
+ let crumbsOutput = crumbs;
+ if (crumbsOutput && typeof crumbsOutput !== 'object') {
+ if (crumbsOutput.indexOf('>') > -1) {
+ crumbsOutput = crumbsOutput.split('>');
+ } else {
+ crumbsOutput = [crumbsOutput];
}
+ }
- return (
-
- {crumbsOutput && crumbsOutput.map((crumb, crumbIndex) => (
-
- {crumbIndex > 0 && (
-
-
-
- )}
- {typeof crumb === 'object' && 'link' in crumb && (
- {crumb.label.trim()}
- )}
- {typeof crumb === 'object' && !('link' in crumb) && (
- {crumb.label.trim()}
- )}
- {typeof crumb !== 'object' && (
- {crumb.trim()}
- )}
-
- ))}
-
- )
-}
+ return (
+
+ {crumbsOutput &&
+ crumbsOutput.map((crumb, crumbIndex) => (
+
+ {crumbIndex > 0 && (
+
+
+
+ )}
+ {typeof crumb === 'object' && 'link' in crumb && (
+
+ {crumb.label.trim()}
+
+ )}
+ {typeof crumb === 'object' && !('link' in crumb) && (
+ {crumb.label.trim()}
+ )}
+ {typeof crumb !== 'object' && (
+ {crumb.trim()}
+ )}
+
+ ))}
+
+ );
+};
-export default Breadcrumbs
\ No newline at end of file
+export default Breadcrumbs;
diff --git a/src/components/Button/Button.js b/src/components/Button/Button.js
index c108b02..683b91d 100644
--- a/src/components/Button/Button.js
+++ b/src/components/Button/Button.js
@@ -1,57 +1,82 @@
-import React from "react"
-import { Link } from "gatsby"
+import React from 'react';
+import { Link } from 'gatsby';
-import * as styles from './Button.module.css'
+import * as styles from './Button.module.css';
-const Button = ({ children, href, target, level, type, size, disabled, onClick, className, flat, link ,fullWidth, theme }) => {
- const classes = level ? [styles.button] : [styles.link];
+const Button = ({
+ children,
+ href,
+ target,
+ level,
+ type,
+ size,
+ disabled,
+ onClick,
+ className,
+ flat,
+ link,
+ fullWidth,
+ theme,
+}) => {
+ const classes = level ? [styles.button] : [styles.link];
- if (level in styles) {
- classes.push(styles[level])
- }
- if (size in styles) {
- classes.push(styles[size])
- }
- if (theme in styles) {
- classes.push(styles[theme])
- }
+ if (level in styles) {
+ classes.push(styles[level]);
+ }
+ if (size in styles) {
+ classes.push(styles[size]);
+ }
+ if (theme in styles) {
+ classes.push(styles[theme]);
+ }
- if (disabled) {
- classes.push(styles.disabled)
- }
- if (flat) {
- classes.push(styles.flat)
- }
- if (link) {
- classes.push(styles.link)
- }
- if (fullWidth) {
- classes.push(styles.fullWidth)
- }
- if (className) {
- classes.push(className)
- }
-
- const classOutput = classes.join(' ');
- return (
- <>
- {(href && target) && (
-
- {children}
-
- )}
- {(href && !target) && (
-
- {children}
-
- )}
- {!href && (
-
- {children}
-
- )}
- >
- )
-}
+ if (disabled) {
+ classes.push(styles.disabled);
+ }
+ if (flat) {
+ classes.push(styles.flat);
+ }
+ if (link) {
+ classes.push(styles.link);
+ }
+ if (fullWidth) {
+ classes.push(styles.fullWidth);
+ }
+ if (className) {
+ classes.push(className);
+ }
-export default Button
\ No newline at end of file
+ const classOutput = classes.join(' ');
+ return (
+ <>
+ {href && target && (
+
+ {children}
+
+ )}
+ {href && !target && (
+
+ {children}
+
+ )}
+ {!href && (
+
+ {children}
+
+ )}
+ >
+ );
+};
+
+export default Button;
diff --git a/src/components/CardController/CardController.js b/src/components/CardController/CardController.js
index 3baa2ae..199de83 100644
--- a/src/components/CardController/CardController.js
+++ b/src/components/CardController/CardController.js
@@ -1,4 +1,4 @@
-import React, {useState} from 'react';
+import React, { useState } from 'react';
import Container from '../Container';
import Checkbox from '../Checkbox';
@@ -8,60 +8,81 @@ import Drawer from '../Drawer';
import Icon from '../Icons/Icon';
const CardController = (props) => {
-
- const {filters, visible, closeFilter} = props;
+ const { filters, visible, closeFilter } = props;
const [category, setCategory] = useState();
const [filterState, setFilterState] = useState(filters);
const filterTick = (e, categoryIndex, labelIndex) => {
const filterStateCopy = [...filterState];
filterStateCopy[categoryIndex].items[labelIndex].value = e.target.checked;
- setFilterState(filterStateCopy);
-
- }
+ setFilterState(filterStateCopy);
+ };
const resetFilter = () => {
const filterStateCopy = [...filterState];
- for(let x = 0; x < filterStateCopy.length; x++) {
- for(let y = 0; y < filterStateCopy[x].items.length; y++) {
+ for (let x = 0; x < filterStateCopy.length; x++) {
+ for (let y = 0; y < filterStateCopy[x].items.length; y++) {
filterStateCopy[x].items[y].value = false;
}
}
setFilterState(filterStateCopy);
- }
+ };
return (
-
+
- {filterState && filterState.map((filter, categoryIndex) => {
- // if number of filter per category is less than 4 maintain single layout
- const colNum = filter.items.length >= 4 ? 2 : 1;
- return(
-
-
{filter.category}
-
- {filter.items && filter.items.map((item, itemIndex) =>
-
filterTick(e,categoryIndex,itemIndex)}
- label={item.name}
- value={item.value}
- id={item.name}
- name={item.name}
- isChecked={item.value}
- />
- )}
+ {filterState &&
+ filterState.map((filter, categoryIndex) => {
+ // if number of filter per category is less than 4 maintain single layout
+ const colNum = filter.items.length >= 4 ? 2 : 1;
+ return (
+
+
{filter.category}
+
+ {filter.items &&
+ filter.items.map((item, itemIndex) => (
+
+ filterTick(e, categoryIndex, itemIndex)
+ }
+ label={item.name}
+ value={item.value}
+ id={item.name}
+ name={item.name}
+ isChecked={item.value}
+ />
+ ))}
+
-
- )
- })}
-
+ );
+ })}
+
- view items
- close
+
+ view items
+
+
+ close
+
@@ -69,51 +90,81 @@ const CardController = (props) => {
Filters
- {category === undefined &&
+ {category === undefined && (
- {filterState?.map((filterItem, categoryIndex) => {
- return(
-
setCategory({...filterItem, categoryIndex: categoryIndex})}>
- {filterItem.category}
-
-
- )
- })}
-
- }
+ {filterState?.map((filterItem, categoryIndex) => {
+ return (
+
+ setCategory({
+ ...filterItem,
+ categoryIndex: categoryIndex,
+ })
+ }
+ >
+
+ {filterItem.category}
+
+
+
+ );
+ })}
+
+ )}
- {category !== undefined &&
+ {category !== undefined && (
-
setCategory(undefined)}>
+
setCategory(undefined)}
+ >
- {category.category}
+
+ {category.category}
+
{category.items.map((item, itemIndex) => {
- return(
+ return (
filterTick(e,category.categoryIndex,itemIndex)}
- label={item.name}
- value={item.value}
- id={item.name}
- name={item.name}
- isChecked={item.value}
- />
- )
+ key={itemIndex}
+ action={(e) =>
+ filterTick(e, category.categoryIndex, itemIndex)
+ }
+ label={item.name}
+ value={item.value}
+ id={item.name}
+ name={item.name}
+ isChecked={item.value}
+ />
+ );
})}
- }
+ )}
- {category === undefined &&
show results: 1234 }
- {category !== undefined &&
+ {category === undefined && (
+
+ show results: 1234
+
+ )}
+ {category !== undefined && (
-
Apply
-
resetFilter()}>
+
+ Apply
+
+
resetFilter()}
+ >
clear filters
- }
+ )}
diff --git a/src/components/CartItem/CartItem.js b/src/components/CartItem/CartItem.js
index d1e6724..d074903 100644
--- a/src/components/CartItem/CartItem.js
+++ b/src/components/CartItem/CartItem.js
@@ -10,13 +10,16 @@ import * as styles from './CartItem.module.css';
import { navigate } from 'gatsby';
const CartItem = (props) => {
-
const [showQuickView, setShowQuickView] = useState(false);
- const {image, alt, color, name, size, price} = props;
+ const { image, alt, color, name, size, price } = props;
return (
-
navigate('/product/sample')}>
+
navigate('/product/sample')}
+ >
@@ -25,12 +28,16 @@ const CartItem = (props) => {
Color: {color}
Size: {size}
-
setShowQuickView(true)}>
+
setShowQuickView(true)}
+ >
Edit
@@ -39,7 +46,7 @@ const CartItem = (props) => {
setShowQuickView(false)}>
- setShowQuickView(false)}/>
+ setShowQuickView(false)} />
);
diff --git a/src/components/Checkbox/Checkbox.js b/src/components/Checkbox/Checkbox.js
index c19a4a2..8265d99 100644
--- a/src/components/Checkbox/Checkbox.js
+++ b/src/components/Checkbox/Checkbox.js
@@ -2,25 +2,33 @@ import React from 'react';
import * as styles from './Checkbox.module.css';
const Checkbox = (props) => {
- const { value, label, id, name, action, isChecked, size='md' } = props;
+ const { value, label, id, name, action, isChecked, size = 'md' } = props;
return (
-
-
- action(e)}
- checked={isChecked}
- />
-
-
-
-
-
{label}
+
+
+ action(e)}
+ checked={isChecked}
+ />
+
+
+
- )
+
+ {label}
+
+
+ );
};
export default Checkbox;
diff --git a/src/components/Chip/Chip.js b/src/components/Chip/Chip.js
index b338aa9..62c4848 100644
--- a/src/components/Chip/Chip.js
+++ b/src/components/Chip/Chip.js
@@ -4,7 +4,7 @@ import * as styles from './Chip.module.css';
import Icon from '../Icons/Icon';
const Chip = (props) => {
- const {name, close} = props;
+ const { name, close } = props;
return (
{name}
diff --git a/src/components/Contact/Contact.js b/src/components/Contact/Contact.js
index c373ab0..2634adf 100644
--- a/src/components/Contact/Contact.js
+++ b/src/components/Contact/Contact.js
@@ -6,31 +6,33 @@ import FormInputField from '../FormInputField/FormInputField';
import * as styles from './Contact.module.css';
const Contact = (props) => {
-
const initialState = {
name: '',
phone: '',
email: '',
comment: '',
- }
+ };
const [contactForm, setContactForm] = useState(initialState);
- const handleChange = (id ,e) => {
+ const handleChange = (id, e) => {
const tempForm = { ...contactForm, [id]: e };
setContactForm(tempForm);
- }
+ };
const handleSubmit = (e) => {
e.preventDefault();
setContactForm(initialState);
- }
+ };
return (
Send Us A Message
-
Our Customer Service team are here for all enquiries Monday to Friday, 9am - 5pm AEDT (Australian Eastern Daylight Savings Time).
+
+ Our Customer Service team are here for all enquiries Monday to Friday,
+ 9am - 5pm AEDT (Australian Eastern Daylight Savings Time).
+
We look forward to hearing from you.
@@ -42,13 +44,16 @@ const Contact = (props) => {
Email
-
You can email our Customer Service team at customerservice@example.com or via the contact form below:
+
+ You can email our Customer Service team at customerservice@example.com
+ or via the contact form below:
+
diff --git a/src/components/Container/Container.js b/src/components/Container/Container.js
index ad7b4fc..05f80a9 100644
--- a/src/components/Container/Container.js
+++ b/src/components/Container/Container.js
@@ -1,17 +1,19 @@
-import React from 'react'
+import React from 'react';
-import * as styles from './Container.module.css'
+import * as styles from './Container.module.css';
const Container = ({ children, size, spacing, fullMobile }) => {
return (
-
+ `}
+ >
{children}
- )
-}
+ );
+};
-export default Container
+export default Container;
diff --git a/src/components/CurrencyFormatter/CurrencyFormatter.js b/src/components/CurrencyFormatter/CurrencyFormatter.js
index 89daee9..7a75383 100644
--- a/src/components/CurrencyFormatter/CurrencyFormatter.js
+++ b/src/components/CurrencyFormatter/CurrencyFormatter.js
@@ -1,29 +1,39 @@
-import React from "react"
-import { isNumeric } from "../../helpers/general";
+import React from 'react';
+import { isNumeric } from '../../helpers/general';
// import * as styles from './CurrencyFormatter.module.css';
-const CurrencyFormatter = ({ amount, currency = 'USD', appendZero = false, useDollar = false }) => {
-
- let displayAmount = (typeof amount !== 'number' && parseFloat(amount?.replace('$', ''))) || amount;
+const CurrencyFormatter = ({
+ amount,
+ currency = 'USD',
+ appendZero = false,
+ useDollar = false,
+}) => {
+ let displayAmount =
+ (typeof amount !== 'number' && parseFloat(amount?.replace('$', ''))) ||
+ amount;
/* Set language display */
const languageCode =
typeof window !== 'undefined'
? window.navigator.language || 'en-AU'
: 'en-AU';
-
+
/* Format and return */
// isolate currency
const formatObject = new Intl.NumberFormat(languageCode, {
style: 'currency',
- currency
+ currency,
});
let symbol = '$';
let formattedPrice = formatObject.format(displayAmount);
if ('formatToParts' in formatObject) {
const formattedPriceParts = formatObject.formatToParts(displayAmount);
- if(useDollar === false) symbol = formattedPriceParts[0].value;
- const currencyValue = formattedPriceParts.find(obj => obj.type === 'currency');
- const decimalValue = formattedPriceParts.find(obj => obj.type === 'fraction');
+ if (useDollar === false) symbol = formattedPriceParts[0].value;
+ const currencyValue = formattedPriceParts.find(
+ (obj) => obj.type === 'currency'
+ );
+ const decimalValue = formattedPriceParts.find(
+ (obj) => obj.type === 'fraction'
+ );
formattedPrice = formattedPrice.replace(currencyValue.value, '');
if (decimalValue && decimalValue.value === '00' && !appendZero) {
formattedPrice = formattedPrice.replace(`.${decimalValue.value}`, '');
@@ -33,13 +43,14 @@ const CurrencyFormatter = ({ amount, currency = 'USD', appendZero = false, useD
formattedPrice = amount;
}
- const priceComponent =
+ const priceComponent = (
<>
{symbol}
{formattedPrice}
- >;
-
- return isNumeric(amount) ? priceComponent : 'No price available'
+ >
+ );
+
+ return isNumeric(amount) ? priceComponent : 'No price available';
};
-
-export default CurrencyFormatter;
\ No newline at end of file
+
+export default CurrencyFormatter;
diff --git a/src/components/Drawer/Drawer.js b/src/components/Drawer/Drawer.js
index 8af5c32..ae1daa5 100644
--- a/src/components/Drawer/Drawer.js
+++ b/src/components/Drawer/Drawer.js
@@ -4,38 +4,59 @@ import React, { useEffect } from 'react';
import Icon from '../Icons/Icon';
import * as styles from './Drawer.module.css';
-const Drawer = ({children, visible, close, top = '0px', isReverse = false, hideCross = false}) => {
-
+const Drawer = ({
+ children,
+ visible,
+ close,
+ top = '0px',
+ isReverse = false,
+ hideCross = false,
+}) => {
useEffect(() => {
window.addEventListener('keydown', escapeHandler);
return () => window.removeEventListener('keydown', escapeHandler);
}, []);
const escapeHandler = (e) => {
- if(e?.keyCode === undefined) return;
- if(e.keyCode === 27) close();
- }
+ if (e?.keyCode === undefined) return;
+ if (e.keyCode === 27) close();
+ };
+
+ const showStyle =
+ isReverse === true ? styles.showReverse : styles.showContent;
+ const hideStyle =
+ isReverse === true ? styles.hideReverse : styles.hideContent;
- const showStyle = isReverse === true ? styles.showReverse : styles.showContent;
- const hideStyle = isReverse === true ? styles.hideReverse: styles.hideContent;
-
return (
-
-
+
-
-
diff --git a/src/components/Dropdown/Dropdown.js b/src/components/Dropdown/Dropdown.js
index 24d3c1d..01c435d 100644
--- a/src/components/Dropdown/Dropdown.js
+++ b/src/components/Dropdown/Dropdown.js
@@ -3,17 +3,21 @@ import Icon from '../Icons/Icon';
import * as styles from './Dropdown.module.css';
const Dropdown = (props) => {
-
- const {label, optionList} = props;
+ const { label, optionList } = props;
return (
{label}
- {optionList.map((option) =>
- )
- }
+ {optionList.map((option) => (
+
+ ))}
diff --git a/src/components/ExpandedMenu/ExpandedMenu.js b/src/components/ExpandedMenu/ExpandedMenu.js
index 0ddb119..19ee97a 100644
--- a/src/components/ExpandedMenu/ExpandedMenu.js
+++ b/src/components/ExpandedMenu/ExpandedMenu.js
@@ -4,30 +4,29 @@ import React from 'react';
import * as styles from './ExpandedMenu.module.css';
const ExpandedMenu = (props) => {
- const {menu} = props;
+ const { menu } = props;
- if(menu === null || menu === undefined) return
;
- return (
+ if (menu === null || menu === undefined) return
;
+ return (
{menu?.map((item, index) => {
- return(
+ return (
-
- {item.categoryLabel}
-
+
{item.categoryLabel}
{item.submenu.map((link, linkIndex) => {
- return(
-
-
- {link.menuLabel}
-
- );
+ return (
+
+
+ {link.menuLabel}
+
+
+ );
})}
- )
+ );
})}
diff --git a/src/components/FavoriteCard/FavoriteCard.js b/src/components/FavoriteCard/FavoriteCard.js
index 921f0d5..f4a3dcc 100644
--- a/src/components/FavoriteCard/FavoriteCard.js
+++ b/src/components/FavoriteCard/FavoriteCard.js
@@ -1,4 +1,4 @@
-import React, {useState} from 'react';
+import React, { useState } from 'react';
import Drawer from '../Drawer';
import QuickView from '../QuickView';
@@ -20,12 +20,19 @@ const FavoriteCard = (props) => {
- setShowQuickView(true)}>Edit
- Remove
+ setShowQuickView(true)}>
+ Edit
+
+
+ Remove
+
setShowQuickView(false)}>
- setShowQuickView(false)}/>
+ setShowQuickView(false)}
+ />
);
diff --git a/src/components/Footer/Footer.js b/src/components/Footer/Footer.js
index 7aba54d..6dcab2d 100644
--- a/src/components/Footer/Footer.js
+++ b/src/components/Footer/Footer.js
@@ -11,30 +11,33 @@ import Config from '../../config.json';
import * as styles from './Footer.module.css';
const Footer = (prop) => {
-
const [email, setEmail] = useState('');
const subscribeHandler = (e) => {
e.preventDefault();
setEmail('');
console.log('Subscribe this email: ', email);
- }
+ };
const handleSocialClick = (platform) => {
window.open(Config.social[platform]);
- }
+ };
const renderLinks = (linkCollection) => {
- return(
+ return (
- {linkCollection.links.map((link, index) => {
- return(
- {link.text}
- )
- })}
-
- )
- }
+ {linkCollection.links.map((link, index) => {
+ return (
+
+
+ {link.text}
+
+
+ );
+ })}
+
+ );
+ };
return (
@@ -42,80 +45,140 @@ const Footer = (prop) => {
{Config.footerLinks.map((linkCollection, indexLink) => {
- return(
-
- {/* for web version */}
-
- {linkCollection.subTitle}
- {renderLinks(linkCollection)}
-
- {/* for mobile version */}
-
-
+ return (
+
+ {/* for web version */}
+
+
+ {linkCollection.subTitle}
+
+ {renderLinks(linkCollection)}
+
+ {/* for mobile version */}
+
+
{renderLinks(linkCollection)}
+
-
- )
+ );
})}
Newsletter
-
Get 15% off your first purchase! Plus, be the first to know about sales, new product launches and exclusive offers!
-
-
-
-
-
-
-
-
-
-
- {Config.paymentOptions.amex &&
}
- {Config.paymentOptions.mastercard &&
}
- {Config.paymentOptions.visa &&
}
-
-
{new Date().getFullYear()} (c) . Built by Matter. Powered by JAMM.™
+
+
+
+
+
+
+
+
+ {Config.paymentOptions.amex && (
+
+ )}
+ {Config.paymentOptions.mastercard && (
+
+ )}
+ {Config.paymentOptions.visa && (
+
+ )}
+
+ {new Date().getFullYear()} (c) . Built by{' '}
+
+ Matter.
+ {' '}
+ Powered by{' '}
+
+ JAMM.™
+
+
-
+
+
);
diff --git a/src/components/FormInputField/FormInputField.js b/src/components/FormInputField/FormInputField.js
index 0e52b68..9991d08 100644
--- a/src/components/FormInputField/FormInputField.js
+++ b/src/components/FormInputField/FormInputField.js
@@ -4,42 +4,47 @@ import Icon from '../Icons/Icon';
import * as styles from './FormInputField.module.css';
const FormInputField = React.forwardRef((props, ref) => {
- const { id,
- type = 'text',
- labelName,
- value,
- pattern,
- min,
- max,
- handleChange,
- placeholder,
- disabled,
- note,
- error,
- required,
- icon } = props;
+ const {
+ id,
+ type = 'text',
+ labelName,
+ value,
+ pattern,
+ min,
+ max,
+ handleChange,
+ placeholder,
+ disabled,
+ note,
+ error,
+ required,
+ icon,
+ } = props;
return (
- {labelName !== undefined &&
-
- {labelName} {required === true ? * : ''}
- }
- {((type === 'text') || (type === 'input')) && (
+ {labelName !== undefined && (
+
+ {labelName} {required === true ? * : ''}
+
+ )}
+ {(type === 'text' || type === 'input') && (
handleChange(id, e.target.value)}
+ placeholder={placeholder}
+ className={`${styles.input} ${
+ icon ? styles.conditionalIconPadding : ''
+ } ${error && error ? styles.fieldRequired : ''}`}
+ onChange={(e) => handleChange(id, e.target.value)}
disabled={disabled}
ref={ref}
/>
)}
- {(type === 'number') && (
+ {type === 'number' && (
{
max={max}
value={value}
pattern={pattern}
- placeholder = {placeholder}
- className={`${styles.input} ${ icon ? styles.conditionalIconPadding : ''} ${error && error ? styles.fieldRequired : ''}`}
- onChange={e => handleChange(id, e.target.value)}
+ placeholder={placeholder}
+ className={`${styles.input} ${
+ icon ? styles.conditionalIconPadding : ''
+ } ${error && error ? styles.fieldRequired : ''}`}
+ onChange={(e) => handleChange(id, e.target.value)}
disabled={disabled}
ref={ref}
/>
)}
- {(type === 'password') && (
-
handleChange(id, e.target.value)}
+ className={`${styles.input} ${
+ icon ? styles.conditionalIconPadding : ''
+ } ${error && error ? styles.fieldRequired : ''}`}
+ onChange={(e) => handleChange(id, e.target.value)}
disabled={disabled}
required={required}
/>
)}
- {(type === 'email') && (
-
handleChange(id, e.target.value)}
+ placeholder={placeholder}
+ className={`${styles.input} ${
+ icon ? styles.conditionalIconPadding : ''
+ } ${error && error ? styles.fieldRequired : ''}`}
+ onChange={(e) => handleChange(id, e.target.value)}
disabled={disabled}
ref={ref}
/>
)}
- {(type === 'textarea') && (
+ {type === 'textarea' && (
handleChange(id, e.target.value)}
+ className={`${styles.textarea} ${
+ icon ? styles.conditionalIconPadding : ''
+ } ${error ? styles.fieldRequired : ''}`}
+ onChange={(e) => handleChange(id, e.target.value)}
disabled={disabled}
ref={ref}
- />
- )}
- {note && (
- {note}
- )}
- {error && (
- {error}
+ />
)}
+ {note && {note} }
+ {error && {error} }
{icon && (
-
+
)}
diff --git a/src/components/Gallery/Gallery.js b/src/components/Gallery/Gallery.js
index 89bc40f..87127db 100644
--- a/src/components/Gallery/Gallery.js
+++ b/src/components/Gallery/Gallery.js
@@ -5,33 +5,32 @@ import Slider from '../Slider';
import * as styles from './Gallery.module.css';
const Gallery = (props) => {
-
- const {images} = props;
+ const { images } = props;
const customSliderSettings = {
- slidesToShow: 1
- }
+ slidesToShow: 1,
+ };
const renderImages = () => {
return images?.map((imageObject, index) => {
- return(
+ return (
- )
- })
- }
+ );
+ });
+ };
return (
- {images?.map((imageObject, index) => {
- return(
-
-
-
- )
- })}
+ {images?.map((imageObject, index) => {
+ return (
+
+
+
+ );
+ })}
diff --git a/src/components/Header/Header.js b/src/components/Header/Header.js
index 3562392..507918b 100644
--- a/src/components/Header/Header.js
+++ b/src/components/Header/Header.js
@@ -1,7 +1,7 @@
import React, { useState, useEffect, createRef } from 'react';
import { Link, navigate } from 'gatsby';
-import { isAuth } from '../../helpers/general';
+import { isAuth } from '../../helpers/general';
import AddNotification from '../AddNotification';
import Brand from '../Brand';
@@ -16,23 +16,26 @@ import MobileNavigation from '../MobileNavigation';
import * as styles from './Header.module.css';
const Header = (prop) => {
-
const [showMiniCart, setShowMiniCart] = useState(false);
const [mobileMenu, setMobileMenu] = useState(false);
const [showMenu, setShowMenu] = useState(true);
-
+
const [menu, setMenu] = useState();
const [activeMenu, setActiveMenu] = useState();
const [showSearch, setShowSearch] = useState(false);
const [search, setSearch] = useState('');
-
+
const searchRef = createRef();
const bannerMessage = 'Free shipping worldwide';
- const searchSuggestions = ['Oversize sweaters', 'Lama Pajamas', 'Candles Cinnamon'];
+ const searchSuggestions = [
+ 'Oversize sweaters',
+ 'Lama Pajamas',
+ 'Candles Cinnamon',
+ ];
const handleHover = (navObject) => {
- if(navObject.category) {
+ if (navObject.category) {
setShowMenu(true);
setMenu(navObject.category);
setShowSearch(false);
@@ -40,18 +43,18 @@ const Header = (prop) => {
setMenu(undefined);
}
setActiveMenu(navObject.menuLabel);
- }
+ };
const handleSearch = (e) => {
e.preventDefault();
navigate(`/search?q=${search}`);
setShowSearch(false);
- }
+ };
// disable active menu when show menu is hidden
useEffect(() => {
- if(showMenu === false) setActiveMenu(false);
- }, [showMenu])
+ if (showMenu === false) setActiveMenu(false);
+ }, [showMenu]);
// hide menu onscroll
useEffect(() => {
@@ -59,7 +62,7 @@ const Header = (prop) => {
setShowMenu(false);
setShowSearch(false);
setActiveMenu(undefined);
- }
+ };
window.removeEventListener('scroll', onScroll);
window.addEventListener('scroll', onScroll, { passive: true });
return () => window.removeEventListener('scroll', onScroll);
@@ -67,123 +70,172 @@ const Header = (prop) => {
//listen for show search and delay trigger of focus due to CSS visiblity property
useEffect(() => {
- if(showSearch === true){
+ if (showSearch === true) {
setTimeout(() => {
searchRef.current.focus();
- }, 250)
+ }, 250);
}
- // eslint-disable-next-line react-hooks/exhaustive-deps
- },[showSearch])
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, [showSearch]);
return (
-
+
{bannerMessage}
- {/* header container */}
-
-
- {setShowMenu(false)}}>
- {Config.headerLinks.map((navObject) =>
- handleHover(navObject)}
- className={`${styles.navLink} ${activeMenu === navObject.menuLabel ? styles.activeLink : ''}`}
- to={navObject.menuLink}>
- {navObject.menuLabel}
- )}
-
-
-
{
+ {/* header container */}
+
+
+ {
+ setShowMenu(false);
+ }}
+ >
+ {Config.headerLinks.map((navObject) => (
+ handleHover(navObject)}
+ className={`${styles.navLink} ${
+ activeMenu === navObject.menuLabel ? styles.activeLink : ''
+ }`}
+ to={navObject.menuLink}
+ >
+ {navObject.menuLabel}
+
+ ))}
+
+
+
{
setMobileMenu(!mobileMenu);
// setDepth(0);
- }} className={styles.burgerIcon}>
-
-
-
-
- {
- setShowSearch(!showSearch);
- }}>
-
-
-
-
- {
+ }}
+ className={styles.burgerIcon}
+ >
+
+
+
+
+
{
+ setShowSearch(!showSearch);
+ }}
+ >
+
+
+
+
+
+
+
+
+
{
setShowMiniCart(true);
setMobileMenu(false);
- }}>
-
-
- 1
-
-
-
-
-
-
- {/* search container */}
-
-
What are you looking for?
-
handleSearch(e)}>
- setSearch(e)}
- />
-
-
- {searchSuggestions.map((suggestion, index) =>
-
{
- setShowSearch(false);
- navigate(`/search?q=${suggestion}`)
- }} key={index} className={styles.suggestion}>
- {suggestion}
-
)}
+ }}
+ >
+
+
+ 1
-
{
- e.stopPropagation();
- setShowSearch(false);
- }} className={styles.backdrop}>
+
+
-
+
- {/* menu container */}
+ {/* search container */}
setShowMenu(false)}
- onMouseEnter={() => setShowMenu(true)}
- className={`${styles.menuContainer} ${showMenu === true ? styles.show : ''}`}>
-
-
-
+ className={`${styles.searchContainer} ${
+ showSearch === true ? styles.show : styles.hide
+ }`}
+ >
+
What are you looking for?
+
handleSearch(e)}>
+ setSearch(e)}
+ />
+
+
+ {searchSuggestions.map((suggestion, index) => (
+
{
+ setShowSearch(false);
+ navigate(`/search?q=${suggestion}`);
+ }}
+ key={index}
+ className={styles.suggestion}
+ >
+ {suggestion}
+
+ ))}
+
+
{
+ e.stopPropagation();
+ setShowSearch(false);
+ }}
+ className={styles.backdrop}
+ >
+
- {/* minicart container */}
-
setShowMiniCart(false)}>
-
-
+ {/* menu container */}
+
setShowMenu(false)}
+ onMouseEnter={() => setShowMenu(true)}
+ className={`${styles.menuContainer} ${
+ showMenu === true ? styles.show : ''
+ }`}
+ >
+
+
+
+
- {/* mobile menu */}
-
- setMobileMenu(false)}
- >
- setMobileMenu(false)} />
-
-
+ {/* minicart container */}
+
setShowMiniCart(false)}>
+
+
+
+ {/* mobile menu */}
+
+ setMobileMenu(false)}
+ >
+ setMobileMenu(false)} />
+
+
);
};
diff --git a/src/components/Hero/Hero.js b/src/components/Hero/Hero.js
index 622efa6..9bbab2c 100644
--- a/src/components/Hero/Hero.js
+++ b/src/components/Hero/Hero.js
@@ -4,23 +4,38 @@ import Button from '../Button';
import { Link } from 'gatsby';
const Hero = (props) => {
- const {title, subtitle, ctaText, ctaAction, image, maxWidth, ctaStyle, ctaLink, ctaTo, header} = props;
+ const {
+ title,
+ subtitle,
+ ctaText,
+ ctaAction,
+ image,
+ maxWidth,
+ ctaStyle,
+ ctaLink,
+ ctaTo,
+ header,
+ } = props;
return (
-
-
- {header &&
-
{header}
- }
+
+
+ {header && {header} }
{title &&
{title} }
{subtitle && {subtitle} }
- {ctaText &&
+ {ctaText && (
+
{ctaText}
- }
- {ctaLink &&
- {ctaLink}
- }
+
+ )}
+ {ctaLink && (
+
+ {ctaLink}
+
+ )}
);
diff --git a/src/components/Highlight/Highlight.js b/src/components/Highlight/Highlight.js
index 9a42a9b..760359d 100644
--- a/src/components/Highlight/Highlight.js
+++ b/src/components/Highlight/Highlight.js
@@ -3,8 +3,16 @@ import React from 'react';
import * as styles from './Highlight.module.css';
const Highlight = (props) => {
-
- const {image, altImage, miniImage, miniImageAlt, title, description, textLink, link} = props;
+ const {
+ image,
+ altImage,
+ miniImage,
+ miniImageAlt,
+ title,
+ description,
+ textLink,
+ link,
+ } = props;
return (
@@ -13,7 +21,11 @@ const Highlight = (props) => {
{title}
{description}
{textLink}
-
+
);
diff --git a/src/components/Icons/Arrow.js b/src/components/Icons/Arrow.js
index a023fce..2541b6f 100644
--- a/src/components/Icons/Arrow.js
+++ b/src/components/Icons/Arrow.js
@@ -1,15 +1,15 @@
-import React from 'react'
+import React from 'react';
const Arrow = () => (
-
-)
+);
-export default Arrow
\ No newline at end of file
+export default Arrow;
diff --git a/src/components/Icons/Bag.js b/src/components/Icons/Bag.js
index 2478368..ba9ff39 100644
--- a/src/components/Icons/Bag.js
+++ b/src/components/Icons/Bag.js
@@ -1,7 +1,7 @@
-import React from 'react'
+import React from 'react';
const Bag = () => (
-
(
fill="currentColor"
/>
-)
+);
-export default Bag
\ No newline at end of file
+export default Bag;
diff --git a/src/components/Icons/BagPlus.js b/src/components/Icons/BagPlus.js
index 36fd7f6..6ae43d4 100644
--- a/src/components/Icons/BagPlus.js
+++ b/src/components/Icons/BagPlus.js
@@ -1,18 +1,18 @@
-import React from 'react'
+import React from 'react';
const BagPlus = () => (
-
-
-
-)
+
+
+
+);
-export default BagPlus
\ No newline at end of file
+export default BagPlus;
diff --git a/src/components/Icons/Burger.js b/src/components/Icons/Burger.js
index 5a9e167..d374763 100644
--- a/src/components/Icons/Burger.js
+++ b/src/components/Icons/Burger.js
@@ -1,7 +1,7 @@
-import React from 'react'
+import React from 'react';
const Burger = () => (
-
(
>
-)
+);
-export default Burger
\ No newline at end of file
+export default Burger;
diff --git a/src/components/Icons/Caret.js b/src/components/Icons/Caret.js
index 30efc9a..8f3d9d6 100644
--- a/src/components/Icons/Caret.js
+++ b/src/components/Icons/Caret.js
@@ -1,15 +1,15 @@
-import React from 'react'
+import React from 'react';
const Caret = () => (
-
-)
+);
-export default Caret
\ No newline at end of file
+export default Caret;
diff --git a/src/components/Icons/Check.js b/src/components/Icons/Check.js
index d48b74c..4adf1e4 100644
--- a/src/components/Icons/Check.js
+++ b/src/components/Icons/Check.js
@@ -1,4 +1,4 @@
-import React from 'react'
+import React from 'react';
const Check = () => (
(
>
-)
+);
-export default Check
\ No newline at end of file
+export default Check;
diff --git a/src/components/Icons/CreditCard.js b/src/components/Icons/CreditCard.js
index 5a1b941..b4be5c3 100644
--- a/src/components/Icons/CreditCard.js
+++ b/src/components/Icons/CreditCard.js
@@ -1,7 +1,7 @@
-import React from 'react'
+import React from 'react';
const CreditCard = () => (
-
(
fill="#000"
/>
-)
+);
-export default CreditCard
\ No newline at end of file
+export default CreditCard;
diff --git a/src/components/Icons/Cross.js b/src/components/Icons/Cross.js
index d69b3b4..b4d934d 100644
--- a/src/components/Icons/Cross.js
+++ b/src/components/Icons/Cross.js
@@ -1,15 +1,15 @@
-import React from 'react'
+import React from 'react';
const Cross = () => (
-
-)
+);
-export default Cross
\ No newline at end of file
+export default Cross;
diff --git a/src/components/Icons/Cycle.js b/src/components/Icons/Cycle.js
index 842f5f7..a30da77 100644
--- a/src/components/Icons/Cycle.js
+++ b/src/components/Icons/Cycle.js
@@ -1,7 +1,7 @@
-import React from 'react'
+import React from 'react';
const Cycle = () => (
-
(
strokeWidth={0.4}
/>
-)
+);
-export default Cycle
\ No newline at end of file
+export default Cycle;
diff --git a/src/components/Icons/Delivery.js b/src/components/Icons/Delivery.js
index ad6eb50..68f3246 100644
--- a/src/components/Icons/Delivery.js
+++ b/src/components/Icons/Delivery.js
@@ -1,12 +1,12 @@
-import React from 'react'
+import React from 'react';
const Delivery = () => (
-
(
strokeWidth={2}
/>
+);
-)
-
-export default Delivery
\ No newline at end of file
+export default Delivery;
diff --git a/src/components/Icons/Facebook.js b/src/components/Icons/Facebook.js
index 94e980e..de289a6 100644
--- a/src/components/Icons/Facebook.js
+++ b/src/components/Icons/Facebook.js
@@ -1,18 +1,18 @@
-import React from 'react'
+import React from 'react';
const Facebook = () => (
-
-)
+);
-export default Facebook
\ No newline at end of file
+export default Facebook;
diff --git a/src/components/Icons/FacebookInverse.js b/src/components/Icons/FacebookInverse.js
index 45f1662..c6f59f5 100644
--- a/src/components/Icons/FacebookInverse.js
+++ b/src/components/Icons/FacebookInverse.js
@@ -1,4 +1,4 @@
-import React from 'react'
+import React from 'react';
const FacebookInverse = () => (
(
height={32}
fill="none"
xmlns="http://www.w3.org/2000/svg"
- viewBox='0 0 32 32'
+ viewBox="0 0 32 32"
>
(
strokeWidth={2}
/>
-)
+);
-export default FacebookInverse
\ No newline at end of file
+export default FacebookInverse;
diff --git a/src/components/Icons/Filter.js b/src/components/Icons/Filter.js
index 251fb0a..da8d030 100644
--- a/src/components/Icons/Filter.js
+++ b/src/components/Icons/Filter.js
@@ -1,7 +1,7 @@
-import React from 'react'
+import React from 'react';
const Filter = () => (
-
(
>
-)
+);
-export default Filter
\ No newline at end of file
+export default Filter;
diff --git a/src/components/Icons/Heart.js b/src/components/Icons/Heart.js
index da95eb8..ca53598 100644
--- a/src/components/Icons/Heart.js
+++ b/src/components/Icons/Heart.js
@@ -1,20 +1,20 @@
-import React from 'react'
+import React from 'react';
const Heart = () => (
-
-)
+);
-export default Heart
\ No newline at end of file
+export default Heart;
diff --git a/src/components/Icons/HeartFill.js b/src/components/Icons/HeartFill.js
index 5d8d830..72f890c 100644
--- a/src/components/Icons/HeartFill.js
+++ b/src/components/Icons/HeartFill.js
@@ -1,7 +1,7 @@
-import React from 'react'
+import React from 'react';
const HeartFill = () => (
-
(
fill="currentColor"
/>
-)
+);
-export default HeartFill
\ No newline at end of file
+export default HeartFill;
diff --git a/src/components/Icons/Icon.js b/src/components/Icons/Icon.js
index 8e2f46b..53f1d75 100644
--- a/src/components/Icons/Icon.js
+++ b/src/components/Icons/Icon.js
@@ -1,4 +1,4 @@
-import React from 'react'
+import React from 'react';
// Alphabetical order please
import Arrow from './Arrow';
@@ -33,64 +33,64 @@ import Youtube from './Youtube';
function Icon(props) {
switch (props.symbol) {
case 'arrow':
- return
;
+ return
;
case 'bag':
- return
;
+ return
;
case 'bagPlus':
- return
;
+ return
;
case 'burger':
- return
;
+ return
;
case 'caret':
- return
;
+ return
;
case 'check':
- return
;
+ return
;
case 'creditcard':
- return
;
+ return
;
case 'cross':
- return
;
+ return
;
case 'cycle':
- return
;
+ return
;
case 'delivery':
- return
;
+ return
;
case 'facebook':
- return
;
+ return
;
case 'facebookinverse':
- return
;
+ return
;
case 'filter':
- return
;
+ return
;
case 'heart':
- return
+ return
;
case 'heartFill':
- return
;
+ return
;
case 'instagram':
- return
+ return
;
case 'list':
- return
;
+ return
;
case 'logout':
- return
;
+ return
;
case 'minus':
- return
;
+ return
;
case 'phone':
- return
;
+ return
;
case 'pinterestinverse':
- return
;
+ return
;
case 'plus':
- return
;
+ return
;
case 'question':
- return
;
+ return
;
case 'search':
- return
+ return
;
case 'twitter':
- return
;
+ return
;
case 'twitterinverse':
- return
;
+ return
;
case 'user':
- return
;
+ return
;
case 'youtube':
- return
;
+ return
;
default:
- return
Unknown icon: {props.symbol}
+ return
Unknown icon: {props.symbol} ;
}
}
-export default Icon
+export default Icon;
diff --git a/src/components/Icons/Instagram.js b/src/components/Icons/Instagram.js
index 4444316..6f33e0f 100644
--- a/src/components/Icons/Instagram.js
+++ b/src/components/Icons/Instagram.js
@@ -1,12 +1,12 @@
-import React from 'react'
+import React from 'react';
const Instagram = () => (
-
(
fill="currentColor"
/>
-)
+);
-export default Instagram
\ No newline at end of file
+export default Instagram;
diff --git a/src/components/Icons/List.js b/src/components/Icons/List.js
index 60231ac..040f0a5 100644
--- a/src/components/Icons/List.js
+++ b/src/components/Icons/List.js
@@ -1,12 +1,12 @@
-import React from 'react'
+import React from 'react';
const List = () => (
-
(
strokeWidth={2}
/>
-)
+);
-export default List
\ No newline at end of file
+export default List;
diff --git a/src/components/Icons/Logout.js b/src/components/Icons/Logout.js
index 1774226..0b2ddf9 100644
--- a/src/components/Icons/Logout.js
+++ b/src/components/Icons/Logout.js
@@ -1,15 +1,18 @@
-import React from 'react'
+import React from 'react';
const Logout = () => (
-
-
+
-)
+);
-export default Logout
\ No newline at end of file
+export default Logout;
diff --git a/src/components/Icons/Minus.js b/src/components/Icons/Minus.js
index ff2dc89..5655ed0 100644
--- a/src/components/Icons/Minus.js
+++ b/src/components/Icons/Minus.js
@@ -1,7 +1,7 @@
-import React from 'react'
+import React from 'react';
const Minus = () => (
-
(
>
-)
+);
-export default Minus
\ No newline at end of file
+export default Minus;
diff --git a/src/components/Icons/Phone.js b/src/components/Icons/Phone.js
index 4b2e6df..cd04029 100644
--- a/src/components/Icons/Phone.js
+++ b/src/components/Icons/Phone.js
@@ -1,18 +1,18 @@
-import React from 'react'
+import React from 'react';
const Phone = () => (
-
-)
+);
-export default Phone
\ No newline at end of file
+export default Phone;
diff --git a/src/components/Icons/PinterestInverse.js b/src/components/Icons/PinterestInverse.js
index ca09373..6831133 100644
--- a/src/components/Icons/PinterestInverse.js
+++ b/src/components/Icons/PinterestInverse.js
@@ -1,12 +1,12 @@
-import React from 'react'
+import React from 'react';
const PinterestInverse = () => (
-
(
strokeWidth={2}
/>
-)
+);
-export default PinterestInverse
\ No newline at end of file
+export default PinterestInverse;
diff --git a/src/components/Icons/Plus.js b/src/components/Icons/Plus.js
index 12cd52f..1c38da7 100644
--- a/src/components/Icons/Plus.js
+++ b/src/components/Icons/Plus.js
@@ -1,7 +1,7 @@
-import React from 'react'
+import React from 'react';
const Plus = () => (
-
(
>
-)
+);
-export default Plus
\ No newline at end of file
+export default Plus;
diff --git a/src/components/Icons/Question.js b/src/components/Icons/Question.js
index 412fe2c..f2e1a30 100644
--- a/src/components/Icons/Question.js
+++ b/src/components/Icons/Question.js
@@ -1,12 +1,12 @@
-import React from 'react'
+import React from 'react';
const Question = () => (
-
(
fill="currentColor"
/>
-)
+);
-export default Question
\ No newline at end of file
+export default Question;
diff --git a/src/components/Icons/Search.js b/src/components/Icons/Search.js
index 6d492c4..7510d34 100644
--- a/src/components/Icons/Search.js
+++ b/src/components/Icons/Search.js
@@ -1,7 +1,7 @@
-import React from 'react'
+import React from 'react';
const Search = () => (
-
(
stroke="currentColor"
/>
-)
+);
-export default Search
\ No newline at end of file
+export default Search;
diff --git a/src/components/Icons/Twitter.js b/src/components/Icons/Twitter.js
index e3ac0c7..1033529 100644
--- a/src/components/Icons/Twitter.js
+++ b/src/components/Icons/Twitter.js
@@ -1,7 +1,7 @@
-import React from 'react'
+import React from 'react';
const Twitter = () => (
-
(
fill="currentColor"
/>
-)
+);
-export default Twitter
\ No newline at end of file
+export default Twitter;
diff --git a/src/components/Icons/TwitterInverse.js b/src/components/Icons/TwitterInverse.js
index 66c4e51..7f0f310 100644
--- a/src/components/Icons/TwitterInverse.js
+++ b/src/components/Icons/TwitterInverse.js
@@ -1,18 +1,18 @@
-import React from 'react'
+import React from 'react';
const TwitterInverse = () => (
-
-)
+);
-export default TwitterInverse
\ No newline at end of file
+export default TwitterInverse;
diff --git a/src/components/Icons/User.js b/src/components/Icons/User.js
index 488ee62..d2e8852 100644
--- a/src/components/Icons/User.js
+++ b/src/components/Icons/User.js
@@ -1,7 +1,7 @@
-import React from 'react'
+import React from 'react';
const User = () => (
-
(
fill="currentColor"
/>
-)
+);
-export default User
\ No newline at end of file
+export default User;
diff --git a/src/components/Icons/Youtube.js b/src/components/Icons/Youtube.js
index adbb9ab..8cf6220 100644
--- a/src/components/Icons/Youtube.js
+++ b/src/components/Icons/Youtube.js
@@ -1,12 +1,12 @@
-import React from 'react'
+import React from 'react';
const Youtube = () => (
-
(
fill="currentColor"
/>
-)
+);
-export default Youtube
\ No newline at end of file
+export default Youtube;
diff --git a/src/components/Layout/Layout.js b/src/components/Layout/Layout.js
index f8842af..c9c8468 100644
--- a/src/components/Layout/Layout.js
+++ b/src/components/Layout/Layout.js
@@ -1,35 +1,47 @@
- import React from "react"
- import Helmet from "react-helmet"
- import PropTypes from "prop-types"
-
- import Header from "../Header"
- import Footer from "../Footer"
- import * as styles from './Layout.module.css'
+import React from 'react';
+import Helmet from 'react-helmet';
+import PropTypes from 'prop-types';
- // CSS not modular here to provide global styles
- import "./Globals.css"
-
- const Layout = ({props, children, disablePaddingBottom = false}) => {
- return (
- <>
-
- {/* Add any sitewide scripts here */}
-
-
-
+import Header from '../Header';
+import Footer from '../Footer';
+import * as styles from './Layout.module.css';
-
-
- {children}
-
-
- >
- )
- }
-
- Layout.propTypes = {
- children: PropTypes.node.isRequired,
- }
-
- export default Layout
-
\ No newline at end of file
+// CSS not modular here to provide global styles
+import './Globals.css';
+
+const Layout = ({ props, children, disablePaddingBottom = false }) => {
+ return (
+ <>
+
+ {/* Add any sitewide scripts here */}
+
+
+
+
+
+
+ {children}
+
+
+ >
+ );
+};
+
+Layout.propTypes = {
+ children: PropTypes.node.isRequired,
+};
+
+export default Layout;
diff --git a/src/components/LayoutOption/LayoutOption.js b/src/components/LayoutOption/LayoutOption.js
index 256dbea..c18efc8 100644
--- a/src/components/LayoutOption/LayoutOption.js
+++ b/src/components/LayoutOption/LayoutOption.js
@@ -7,12 +7,21 @@ import * as styles from './LayoutOption.module.css';
const LayoutOption = (props) => {
return (
-
navigate('/shopV2')} role={'presentation'}>
-
-
-
navigate('/shop')} role={'presentation'} style={{transform: 'rotate(-90deg)'}}>
-
-
+
navigate('/shopV2')}
+ role={'presentation'}
+ >
+
+
+
navigate('/shop')}
+ role={'presentation'}
+ style={{ transform: 'rotate(-90deg)' }}
+ >
+
+
);
};
diff --git a/src/components/MiniCart/MiniCart.js b/src/components/MiniCart/MiniCart.js
index 239029f..f1c1ceb 100644
--- a/src/components/MiniCart/MiniCart.js
+++ b/src/components/MiniCart/MiniCart.js
@@ -8,10 +8,9 @@ import MiniCartItem from '../MiniCartItem';
import * as styles from './MiniCart.module.css';
const MiniCart = (props) => {
-
const sampleCartItem = {
image: '/products/pdp1.jpeg',
- alt: '',
+ alt: '',
name: 'Lambswool Crew Neck Jumper',
price: 220,
color: 'Anthracite Melange',
@@ -24,7 +23,7 @@ const MiniCart = (props) => {
My Bag
-
+
@@ -34,13 +33,17 @@ const MiniCart = (props) => {
-
Taxes and shipping will be calculated at checkout
-
navigate('/cart')} level={'primary'} fullWidth>checkout
+
+ Taxes and shipping will be calculated at checkout
+
+
navigate('/cart')} level={'primary'} fullWidth>
+ checkout
+
continue shopping
-
-
+
+
);
};
diff --git a/src/components/MiniCartItem/MiniCartItem.js b/src/components/MiniCartItem/MiniCartItem.js
index bcc39ee..59f3184 100644
--- a/src/components/MiniCartItem/MiniCartItem.js
+++ b/src/components/MiniCartItem/MiniCartItem.js
@@ -8,28 +8,26 @@ import RemoveItem from '../RemoveItem';
import * as styles from './MiniCartItem.module.css';
const MiniCartItem = (props) => {
- const {
- image,
- alt,
- name,
- price,
- color,
- size,
- } = props;
+ const { image, alt, name, price, color, size } = props;
return (
-
navigate('/product/sample')}>
+
navigate('/product/sample')}
+ >
{name}
-
+
Color: {color}
-
Size:
+
+ Size:
{size}
diff --git a/src/components/MobileNavigation/MobileNavigation.js b/src/components/MobileNavigation/MobileNavigation.js
index 7a9c5b7..821ee48 100644
--- a/src/components/MobileNavigation/MobileNavigation.js
+++ b/src/components/MobileNavigation/MobileNavigation.js
@@ -12,8 +12,7 @@ import { isAuth } from '../../helpers/general';
import * as styles from './MobileNavigation.module.css';
const MobileNavigation = (props) => {
-
- const {close} = props;
+ const { close } = props;
const [subMenu, setSubMenu] = useState();
const [category, setCategory] = useState();
@@ -23,136 +22,162 @@ const MobileNavigation = (props) => {
window.localStorage.removeItem('key');
navigate('/');
close();
- }
+ };
return (
- {depth === 0 &&
- isAuth() === false &&
-
- Sign Up
- Login
-
- }
-
- {depth === 0 &&
- isAuth() === true &&
-
setDepth(-1)}>
- Welcome, John
-
-
}
-
- {depth === -1 &&
- isAuth() === true &&
-
setDepth(0)}
- role={'presentation'}>
-
+ {depth === 0 && isAuth() === false && (
+
+ Sign Up
+ Login
+
+ )}
+
+ {depth === 0 && isAuth() === true && (
+
setDepth(-1)}
+ >
+ Welcome, John
-
my account
-
- }
-
- {depth === 1 &&
-
setDepth(0)}
- role={'presentation'}>
+ )}
+
+ {depth === -1 && isAuth() === true && (
+
setDepth(0)}
+ role={'presentation'}
+ >
+
+
+
+
my account
+
+ )}
+
+ {depth === 1 && (
+
setDepth(0)}
+ role={'presentation'}
+ >
{category.menuLabel}
- }
+ )}
- {depth === 2 &&
-
setDepth(1)}
- role={'presentation'}>
+ {depth === 2 && (
+
setDepth(1)}
+ role={'presentation'}
+ >
{subMenu.categoryLabel}
- }
+ )}
- {/* dynamic portion */}
- { depth === 0 &&
-
- {Config.headerLinks.map((navObject) => {
- const hasSubmenu = navObject.category?.length !== undefined ? true : false;
- return(
-
{
- if(hasSubmenu) {
- setDepth(1);
- setCategory(navObject);
- }
- }}
- >
- {navObject.menuLabel}
- { hasSubmenu &&
}
-
- )})}
-
-
-
- Favorites (0)
-
+ {/* dynamic portion */}
+ {depth === 0 && (
+
+ {Config.headerLinks.map((navObject) => {
+ const hasSubmenu =
+ navObject.category?.length !== undefined ? true : false;
+ return (
+
{
+ if (hasSubmenu) {
+ setDepth(1);
+ setCategory(navObject);
+ }
+ }}
+ >
+ {navObject.menuLabel}
+ {hasSubmenu &&
}
+
+ );
+ })}
+
+
+
+ Favorites (0)
+
+
-
- }
+ )}
- {depth === 1 &&
+ {depth === 1 &&
category.category.map((menuItem) => {
- return(
-
{
- setDepth(2)
- setSubMenu(menuItem)
- }} className={`${styles.mobileLink}`}>
+ return (
+
{
+ setDepth(2);
+ setSubMenu(menuItem);
+ }}
+ className={`${styles.mobileLink}`}
+ >
{menuItem.categoryLabel}
- )
- })
- }
-
- {depth === 2 &&
- subMenu.submenu.map((menuItem) => {
- return(
-
- {menuItem.menuLabel}
-
- )
- })
- }
-
- {depth === -1 &&
- <>
-
- Orders
- Addresses
- Settings
- Recently Viewed
-
-
-
-
- Sign out
-
+ );
+ })}
+
+ {depth === 2 &&
+ subMenu.submenu.map((menuItem) => {
+ return (
+
+ {menuItem.menuLabel}
+
+ );
+ })}
+
+ {depth === -1 && (
+ <>
+
+
+ Orders
+
+
+ Addresses
+
+
+ Settings
+
+
+ Recently Viewed
+
+
+
+ >
+ )}
diff --git a/src/components/Modal/Modal.js b/src/components/Modal/Modal.js
index 7c1c161..c21240a 100644
--- a/src/components/Modal/Modal.js
+++ b/src/components/Modal/Modal.js
@@ -1,19 +1,24 @@
import React, { useEffect } from 'react';
import * as styles from './Modal.module.css';
-const Modal = ({children, visible, close}) => {
-
+const Modal = ({ children, visible, close }) => {
useEffect(() => {
window.addEventListener('keydown', close);
return () => window.removeEventListener('keydown', close);
}, [close]);
return (
-
-
- {children}
-
-
close()} className={styles.backdrop}>
+
+
{children}
+
close()}
+ className={styles.backdrop}
+ >
);
};
diff --git a/src/components/OrderItem/OrderItem.js b/src/components/OrderItem/OrderItem.js
index 0780db1..369212f 100644
--- a/src/components/OrderItem/OrderItem.js
+++ b/src/components/OrderItem/OrderItem.js
@@ -6,25 +6,36 @@ import Icon from '../Icons/Icon';
import * as styles from './OrderItem.module.css';
const OrderItem = (props) => {
- const {headerStyling, order} = props;
+ const { headerStyling, order } = props;
const [collapsed, setCollapsed] = useState(false);
let computedTotal = 0;
- for(let x = 0; x < order.items.length; x++) {
- computedTotal = computedTotal + (order.items[x].price * order.items[x].quantity);
+ for (let x = 0; x < order.items.length; x++) {
+ computedTotal =
+ computedTotal + order.items[x].price * order.items[x].quantity;
}
const pad = (str, max) => {
str = str.toString();
- return str.length < max ? pad("0" + str, max) : str;
- }
+ return str.length < max ? pad('0' + str, max) : str;
+ };
return (
-
-
setCollapsed(!collapsed)}>
+
+
setCollapsed(!collapsed)}
+ >
Order #{pad(order.id, 5)}
- {`${order.items.length} products totaling `}
+ {`${order.items.length} products totaling `}
@@ -38,61 +49,94 @@ const OrderItem = (props) => {
Status
{order.status}
-
-
+
Ship to
- {order.shippingAddress?.name}
- {order.shippingAddress?.address}
- {`${order.shippingAddress?.state} ${order.shippingAddress?.postal}`}
- {order.shippingAddress?.country}
+
+ {order.shippingAddress?.name}
+
+
+ {order.shippingAddress?.address}
+
+ {`${order.shippingAddress?.state} ${order.shippingAddress?.postal}`}
+
+ {order.shippingAddress?.country}
+
Bill to
{order.billingAddress?.name}
- {order.billingAddress?.address}
- {`${order.billingAddress?.state} ${order.billingAddress?.postal}`}
- {order.billingAddress?.country}
+
+ {order.billingAddress?.address}
+
+ {`${order.billingAddress?.state} ${order.billingAddress?.postal}`}
+
+ {order.billingAddress?.country}
+
{order.items.map((item, index) => {
- return(
+ return (
-
navigate('/product/sample')} className={styles.imageContainer}>
+
navigate('/product/sample')}
+ className={styles.imageContainer}
+ >
{item.name}
-
Qty: {item.quantity}
+
+ Qty: {item.quantity}
+
-
+
-
+
- )
+ );
})}
Subtotal:
-
+
+
+
GST:
-
+
+
+
Grand Total
-
+
+
diff --git a/src/components/OrderSummary/OrderSummary.js b/src/components/OrderSummary/OrderSummary.js
index 2cea705..bcb29f6 100644
--- a/src/components/OrderSummary/OrderSummary.js
+++ b/src/components/OrderSummary/OrderSummary.js
@@ -8,54 +8,67 @@ import CurrencyFormatter from '../CurrencyFormatter';
import * as styles from './OrderSummary.module.css';
const OrderSummary = (props) => {
-
const [coupon, setCoupon] = useState('');
const [giftCard, setGiftCard] = useState('');
return (
-
-
-
order summary
-
-
-
Subtotal
-
+
+
+
order summary
+
+
+ Subtotal
+
+
+
+
+
+ Shipping
+ ---
+
+
+ Tax
+
+
+
+
-
-
Shipping
-
---
+
+ Coupon Code
+ setCoupon(coupon)}
+ id={'couponInput'}
+ icon={'arrow'}
+ />
+ Gift Card
+ setGiftCard(giftCard)}
+ id={'couponInput'}
+ icon={'arrow'}
+ />
-
-
- Coupon Code
- setCoupon(coupon)}
- id={'couponInput'}
- icon={'arrow'}/>
- Gift Card
- setGiftCard(giftCard)}
- id={'couponInput'}
- icon={'arrow'}/>
-
-
- Total:
-
-
-
-
-
navigate('/orderConfirm')} fullWidth level={'primary'}>checkout
-
-
CONTINUE SHOPPING
+
+
navigate('/orderConfirm')}
+ fullWidth
+ level={'primary'}
+ >
+ checkout
+
+
+ CONTINUE SHOPPING
+
-
);
};
diff --git a/src/components/Policy/Policy.js b/src/components/Policy/Policy.js
index 07387f3..00d0a9d 100644
--- a/src/components/Policy/Policy.js
+++ b/src/components/Policy/Policy.js
@@ -6,28 +6,99 @@ const Policy = (props) => {
1. Lorem Ipsum
-
Delaware limited liability company (The Sydney) collects personal information that you voluntarily provide when applying or registering for an account with The Upside or making a purchase on The Upside website; www.theupside.com (the Website).
-
This Privacy Policy (Privacy Policy) outlines how your information is collected, used and disclosed when you access or use our Services as defined in our Terms. This information is collected, used and disclosed in accordance with the Privacy Act 1988 (Cth) (Privacy Act).
-
This Privacy Policy is incorporated by reference into our Terms. Any capitalized terms not defined in this Policy are defined in the Terms. You agree to comply with all Terms when accessing or using our Services, including this Privacy Policy.
+
+ Delaware limited liability company (The Sydney) collects personal
+ information that you voluntarily provide when applying or registering
+ for an account with The Upside or making a purchase on The Upside
+ website; www.theupside.com (the Website).
+
+
+ This Privacy Policy (Privacy Policy) outlines how your information is
+ collected, used and disclosed when you access or use our Services as
+ defined in our Terms. This information is collected, used and
+ disclosed in accordance with the Privacy Act 1988 (Cth) (Privacy Act).{' '}
+
+
+ This Privacy Policy is incorporated by reference into our Terms. Any
+ capitalized terms not defined in this Policy are defined in the Terms.
+ You agree to comply with all Terms when accessing or using our
+ Services, including this Privacy Policy.
+
2. Lorem Ipsum
-
Our Services, including but not limited to the registration of an account with us or placing of an order, is not intended to be used by children under the age of 13. When a visitor indicates an age under 13, the registration process for The Upside website cannot be completed, and no personally identifying information is collected in conjunction with that attempted submission except that we retain e-mail addresses of such persons (and record of access attempts) for purposes of denying registration. Otherwise, we do not knowingly collect personally identifiable information from visitors under the age of 13.
-
If you are under 18, any use of our Services must be with the involvement of a parent or guardian. By accessing or using our Website, you warrant and represent to us that you are over the age of 18 years and you have the right, authority and legal capacity to enter into a legally binding agreement and to abide by this Privacy Policy.
-
The Upside collects, uses and discloses information regarding users aged 13-18 in the same manner as it does for adults.
+
+ Our Services, including but not limited to the registration of an
+ account with us or placing of an order, is not intended to be used by
+ children under the age of 13. When a visitor indicates an age under
+ 13, the registration process for The Upside website cannot be
+ completed, and no personally identifying information is collected in
+ conjunction with that attempted submission except that we retain
+ e-mail addresses of such persons (and record of access attempts) for
+ purposes of denying registration. Otherwise, we do not knowingly
+ collect personally identifiable information from visitors under the
+ age of 13.
+
+
+ If you are under 18, any use of our Services must be with the
+ involvement of a parent or guardian. By accessing or using our
+ Website, you warrant and represent to us that you are over the age of
+ 18 years and you have the right, authority and legal capacity to enter
+ into a legally binding agreement and to abide by this Privacy Policy.{' '}
+
+
+ The Upside collects, uses and discloses information regarding users
+ aged 13-18 in the same manner as it does for adults.{' '}
+
3. Lorem Ipsum
-
You must only use our Services in accordance with this Privacy Policy and any applicable law or regulations. You agree to refrain from undertaking any prohibited acts as set out in this Clause 3. You must not (or attempt to):
-
(a) interfere with or disrupt the use of Services or the website, in any manner including but not limited to the servicers or networks that host the website;
+
+ You must only use our Services in accordance with this Privacy Policy
+ and any applicable law or regulations. You agree to refrain from
+ undertaking any prohibited acts as set out in this Clause 3. You must
+ not (or attempt to):{' '}
+
+
+ (a) interfere with or disrupt the use of Services or the website, in
+ any manner including but not limited to the servicers or networks that
+ host the website;{' '}
+
(b) stalk, harass, threaten, intimidate or harm another;
-
(c) pretend to be anyone, or any entity, you are not, you will not impersonate or misrepresent yourself as another person (including celebrities), entity, a The Upside employee, or a civic or government leader, or otherwise misrepresent your affiliation with a person or entity. The Upside reserves the right to reject or block any user which could be deemed to be an impersonation or misrepresentation of your identity, or a misappropriation of another person's name or identity;
-
(d) engage in any copyright infringement or other intellectual property infringement, or disclose any trade secret or confidential information in violation of a confidentiality, employment, or non-disclosure agreement or otherwise;
-
(e) use, distribute, reproduce or commercialize any content from the Website or The Upside service except as permitted by this Policy, by law, and with prior written agreement from The Upside;
-
(f) transmit any unsolicited advertising, promotional material or other forms of solicitation in connection with your use of the Service without the prior written agreement of The Upside;
-
(g) forge any TCP-IP packet header or any part of the header information or otherwise putting Information in a header designed to mislead recipients as to the origin of any content transmitted through the Website ("spoofing";);
+
+ (c) pretend to be anyone, or any entity, you are not, you will not
+ impersonate or misrepresent yourself as another person (including
+ celebrities), entity, a The Upside employee, or a civic or government
+ leader, or otherwise misrepresent your affiliation with a person or
+ entity. The Upside reserves the right to reject or block any user
+ which could be deemed to be an impersonation or misrepresentation of
+ your identity, or a misappropriation of another person's name or
+ identity;{' '}
+
+
+ (d) engage in any copyright infringement or other intellectual
+ property infringement, or disclose any trade secret or confidential
+ information in violation of a confidentiality, employment, or
+ non-disclosure agreement or otherwise;{' '}
+
+
+ (e) use, distribute, reproduce or commercialize any content from the
+ Website or The Upside service except as permitted by this Policy, by
+ law, and with prior written agreement from The Upside;{' '}
+
+
+ (f) transmit any unsolicited advertising, promotional material or
+ other forms of solicitation in connection with your use of the Service
+ without the prior written agreement of The Upside;{' '}
+
+
+ (g) forge any TCP-IP packet header or any part of the header
+ information or otherwise putting Information in a header designed to
+ mislead recipients as to the origin of any content transmitted through
+ the Website ("spoofing";);
+
);
diff --git a/src/components/ProductCard/ProductCard.js b/src/components/ProductCard/ProductCard.js
index 85308ea..8887cdc 100644
--- a/src/components/ProductCard/ProductCard.js
+++ b/src/components/ProductCard/ProductCard.js
@@ -6,35 +6,58 @@ import Icon from '../Icons/Icon';
import CurrencyFormatter from '../CurrencyFormatter';
const ProductCard = (props) => {
-
const [isWishlist, setIsWishlist] = useState(false);
- const { image, imageAlt, name, price, originalPrice, meta, showQuickView, height=580} = props;
-
+ const {
+ image,
+ imageAlt,
+ name,
+ price,
+ originalPrice,
+ meta,
+ showQuickView,
+ height = 580,
+ } = props;
+
const handleRouteToProduct = () => {
navigate('/product/sample');
- }
+ };
const handleQuickView = (e) => {
e.stopPropagation();
showQuickView();
- }
+ };
const handleFavorite = (e) => {
e.stopPropagation();
setIsWishlist(!isWishlist);
-
- }
+ };
return (
-
handleRouteToProduct()} role={'presentation'}>
-
-
handleQuickView(e)}>
+
handleRouteToProduct()}
+ role={'presentation'}
+ >
+
+
handleQuickView(e)}
+ >
-
handleFavorite(e)}>
+
handleFavorite(e)}
+ >
-
@@ -42,12 +65,16 @@ const ProductCard = (props) => {
{name}
-
+
- {originalPrice &&
-
- }
+ {originalPrice && (
+
+
+
+ )}
{meta}
diff --git a/src/components/ProductCardGrid/ProductCardGrid.js b/src/components/ProductCardGrid/ProductCardGrid.js
index 0f805b7..3ee3ebc 100644
--- a/src/components/ProductCardGrid/ProductCardGrid.js
+++ b/src/components/ProductCardGrid/ProductCardGrid.js
@@ -7,48 +7,50 @@ import QuickView from '../QuickView';
import Slider from '../Slider';
const ProductCardGrid = (props) => {
-
const [showQuickView, setShowQuickView] = useState(false);
- const {height, columns = 3, data, spacing, showSlider = false} = props;
+ const { height, columns = 3, data, spacing, showSlider = false } = props;
const columnCount = {
- gridTemplateColumns: `repeat(${columns}, 1fr)`
- }
+ gridTemplateColumns: `repeat(${columns}, 1fr)`,
+ };
const renderCards = () => {
- return(
- data.map((product, index) => {
- return(
-
setShowQuickView(true)}
- />);
- })
- )
- }
+ return data.map((product, index) => {
+ return (
+ setShowQuickView(true)}
+ />
+ );
+ });
+ };
return (
-
+
{data && renderCards()}
- {showSlider === true &&
-
-
- {data && renderCards()}
-
-
}
+ {showSlider === true && (
+
+ {data && renderCards()}
+
+ )}
setShowQuickView(false)}>
- setShowQuickView(false)}/>
+ setShowQuickView(false)} />
);
diff --git a/src/components/ProductCollection/ProductCollection.js b/src/components/ProductCollection/ProductCollection.js
index 89ead62..612a293 100644
--- a/src/components/ProductCollection/ProductCollection.js
+++ b/src/components/ProductCollection/ProductCollection.js
@@ -3,15 +3,14 @@ import React from 'react';
import * as styles from './ProductCollection.module.css';
const ProductCollection = (props) => {
-
- const {image, title, text, link} = props;
+ const { image, title, text, link } = props;
return (
navigate(link)}
- className={styles.root}
- style={{backgroundImage:`url(${image})`}}
+ onClick={() => navigate(link)}
+ className={styles.root}
+ style={{ backgroundImage: `url(${image})` }}
>
{title}
diff --git a/src/components/ProductCollectionGrid/ProductCollectionGrid.js b/src/components/ProductCollectionGrid/ProductCollectionGrid.js
index e774471..9d13288 100644
--- a/src/components/ProductCollectionGrid/ProductCollectionGrid.js
+++ b/src/components/ProductCollectionGrid/ProductCollectionGrid.js
@@ -6,10 +6,30 @@ import ProductCollection from '../ProductCollection';
const ProductCollectionGrid = (props) => {
return (
);
};
diff --git a/src/components/QuickView/QuickView.js b/src/components/QuickView/QuickView.js
index faec7cd..5f6af60 100644
--- a/src/components/QuickView/QuickView.js
+++ b/src/components/QuickView/QuickView.js
@@ -10,21 +10,21 @@ import AddItemNotificationContext from '../../context/AddItemNotificationProvide
import * as styles from './QuickView.module.css';
-
const QuickView = (props) => {
-
- const {close, buttonTitle = 'Add to Bag'} = props;
+ const { close, buttonTitle = 'Add to Bag' } = props;
const sampleProduct = generateMockProductData(1, 'sample')[0];
const ctxAddItemNotification = useContext(AddItemNotificationContext);
const showNotification = ctxAddItemNotification.showNotification;
- const [activeSwatch, setActiveSwatch] = useState(sampleProduct.colorOptions[0]);
+ const [activeSwatch, setActiveSwatch] = useState(
+ sampleProduct.colorOptions[0]
+ );
const [activeSize, setActiveSize] = useState(sampleProduct.sizeOptions[0]);
const handleAddToBag = () => {
close();
showNotification();
- }
+ };
return (
@@ -43,7 +43,7 @@ const QuickView = (props) => {
- {
-
-
handleAddToBag()} fullWidth level={'primary'}>{buttonTitle}
+
handleAddToBag()} fullWidth level={'primary'}>
+ {buttonTitle}
+
);
diff --git a/src/components/Quote/Quote.js b/src/components/Quote/Quote.js
index 249370a..396958c 100644
--- a/src/components/Quote/Quote.js
+++ b/src/components/Quote/Quote.js
@@ -2,9 +2,9 @@ import React from 'react';
import * as styles from './Quote.module.css';
const Quote = (props) => {
- const {bgColor, title, quote} = props;
+ const { bgColor, title, quote } = props;
return (
-
+
diff --git a/src/components/SizeList/SizeList.js b/src/components/SizeList/SizeList.js
index 4bb1e0c..7bf7c54 100644
--- a/src/components/SizeList/SizeList.js
+++ b/src/components/SizeList/SizeList.js
@@ -13,12 +13,14 @@ const SizeList = (props) => {
{sizeList?.map((sizeOption, index) => {
- return( )
+ />
+ );
})}
diff --git a/src/components/Slider/Slider.js b/src/components/Slider/Slider.js
index aa60279..d007d5e 100644
--- a/src/components/Slider/Slider.js
+++ b/src/components/Slider/Slider.js
@@ -1,14 +1,13 @@
import React from 'react';
import * as styles from './Slider.module.css';
-import Slick from "react-slick";
+import Slick from 'react-slick';
const Slider = (props) => {
-
const { children, settings, spacing } = props;
const customPaging = () => {
- return(
)
- }
+ return
;
+ };
const defaultSettings = {
dots: true,
@@ -18,14 +17,14 @@ const Slider = (props) => {
slidesToScroll: 1,
arrows: false,
dotsClass: `${styles.customDots}`,
- customPaging: customPaging
+ customPaging: customPaging,
};
return (
-
- {children}
-
+
+ {children}
+
);
};
diff --git a/src/components/Split/Split.js b/src/components/Split/Split.js
index 0970f6b..44795ca 100644
--- a/src/components/Split/Split.js
+++ b/src/components/Split/Split.js
@@ -7,7 +7,10 @@ const Split = (props) => {
const { image, alt, title, description, ctaText, cta, bgColor } = props;
return (
-
+
{title}
{description}
diff --git a/src/components/Swatch/Swatch.js b/src/components/Swatch/Swatch.js
index 197c032..96e838a 100644
--- a/src/components/Swatch/Swatch.js
+++ b/src/components/Swatch/Swatch.js
@@ -2,14 +2,17 @@ import React from 'react';
import * as styles from './Swatch.module.css';
const Swatch = (props) => {
- const {data, setActiveSwatch, isActive} = props;
+ const { data, setActiveSwatch, isActive } = props;
return (
-
setActiveSwatch(data)}
>
-
+
);
};
diff --git a/src/components/SwatchList/SwatchList.js b/src/components/SwatchList/SwatchList.js
index 6308bb6..cda9dd9 100644
--- a/src/components/SwatchList/SwatchList.js
+++ b/src/components/SwatchList/SwatchList.js
@@ -4,19 +4,20 @@ import Swatch from '../Swatch';
import * as styles from './SwatchList.module.css';
const SwatchList = (props) => {
-
- const {swatchList, activeSwatch, setActiveSwatch} = props;
+ const { swatchList, activeSwatch, setActiveSwatch } = props;
return (
Select Colour: {activeSwatch.title}
{swatchList?.map((colorChoice, index) => {
- return( )
+ return (
+
+ );
})}
diff --git a/src/components/ThemeLink/ThemeLink.js b/src/components/ThemeLink/ThemeLink.js
index 3032edb..edfb368 100644
--- a/src/components/ThemeLink/ThemeLink.js
+++ b/src/components/ThemeLink/ThemeLink.js
@@ -3,11 +3,17 @@ import { Link } from 'gatsby';
import * as styles from './ThemeLink.module.css';
-const ThemeLink = ({children, to, onClick, isActive, themeRef}) => {
-
+const ThemeLink = ({ children, to, onClick, isActive, themeRef }) => {
return (
-
-
{children}
+
+
+ {children}
+
);
};
diff --git a/src/components/Title/Title.js b/src/components/Title/Title.js
index e5ba58b..a74653d 100644
--- a/src/components/Title/Title.js
+++ b/src/components/Title/Title.js
@@ -3,21 +3,33 @@ import React from 'react';
import * as styles from './Title.module.css';
const Title = (props) => {
-
- const {name, subtitle, link, textLink, maxWidth, color='var(--standard-black)', hideSubtitleOnMobile = false, marginBottom = '32px'} = props;
+ const {
+ name,
+ subtitle,
+ link,
+ textLink,
+ maxWidth,
+ color = 'var(--standard-black)',
+ hideSubtitleOnMobile = false,
+ marginBottom = '32px',
+ } = props;
return (
-
-
{name}
- { subtitle &&
-
- {subtitle}
- }
- { link && textLink &&
-
{textLink}
- }
+
+
+ {name}
+
+ {subtitle && {subtitle} }
+ {link && textLink && (
+
+ {textLink}
+
+ )}
);
};
diff --git a/src/context/AddItemNotificationProvider.js b/src/context/AddItemNotificationProvider.js
index 1371a74..f243ff2 100644
--- a/src/context/AddItemNotificationProvider.js
+++ b/src/context/AddItemNotificationProvider.js
@@ -1,38 +1,42 @@
import React, { createContext, useState, useEffect } from 'react';
const defaultState = {
- open: false,
+ open: false,
};
export const NotificationContext = createContext(defaultState);
export const NotificationProvider = ({ children }) => {
const [state, setState] = useState(defaultState);
-
+
const showNotification = () => {
- setState({...state, open: true});
- }
+ setState({ ...state, open: true });
+ };
const closeNotification = () => {
- setState({...state, open: false});
- }
+ setState({ ...state, open: false });
+ };
useEffect(() => {
- if(state?.open === true) {
+ if (state?.open === true) {
setTimeout(() => {
- closeNotification()
- }, 2000)
+ closeNotification();
+ }, 2000);
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [state]);
return (
-
{children}
+ showNotification,
+ }}
+ >
+ {children}
+
);
};
-export default NotificationContext;
\ No newline at end of file
+export default NotificationContext;
diff --git a/src/helpers/general.js b/src/helpers/general.js
index 7650be5..403beb8 100644
--- a/src/helpers/general.js
+++ b/src/helpers/general.js
@@ -10,9 +10,11 @@
isNumeric(value)
*/
function isNumeric(str) {
- if (['string', 'number'].indexOf(typeof str) === -1) return false // we only process strings and numbers!
- return !isNaN(str) && // use type coercion to parse the _entirety_ of the string (`parseFloat` alone does not do this)...
- !isNaN(parseFloat(str)) // ...and ensure strings of whitespace fail
+ if (['string', 'number'].indexOf(typeof str) === -1) return false; // we only process strings and numbers!
+ return (
+ !isNaN(str) && // use type coercion to parse the _entirety_ of the string (`parseFloat` alone does not do this)...
+ !isNaN(parseFloat(str))
+ ); // ...and ensure strings of whitespace fail
}
/**
@@ -40,9 +42,9 @@ function validateEmail(email) {
validateStrongPassword(email)
*/
- function validateStrongPassword(password) {
- return /(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])/.test(password);
- }
+function validateStrongPassword(password) {
+ return /(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])/.test(password);
+}
/**
* Checks for empty string
@@ -53,10 +55,9 @@ function validateEmail(email) {
isEmpty(email)
*/
- function isEmpty(input) {
- if(input === '' || input === null || input === undefined)
- return true;
- }
+function isEmpty(input) {
+ if (input === '' || input === null || input === undefined) return true;
+}
/**
* Checks if user is authenticated
@@ -68,20 +69,14 @@ function validateEmail(email) {
isAuth()
*/
function isAuth() {
- const isBrowser = typeof window !== "undefined"
- if(isBrowser) {
+ const isBrowser = typeof window !== 'undefined';
+ if (isBrowser) {
const token = window.localStorage.getItem('key');
- if(token) return true;
+ if (token) return true;
else return false;
} else {
return true;
}
}
-export {
- isNumeric,
- validateEmail,
- validateStrongPassword,
- isEmpty,
- isAuth,
-};
+export { isNumeric, validateEmail, validateStrongPassword, isEmpty, isAuth };
diff --git a/src/helpers/mock.js b/src/helpers/mock.js
index 9e94db6..0167562 100644
--- a/src/helpers/mock.js
+++ b/src/helpers/mock.js
@@ -4,18 +4,13 @@ import blogJson from './blog.json';
*/
function generateMockProductData(count, tag) {
-
- const products = productJson;
- const filtered = products.filter((item) => item.tags.includes(tag));
- return filtered.slice(0,count);
+ const products = productJson;
+ const filtered = products.filter((item) => item.tags.includes(tag));
+ return filtered.slice(0, count);
}
function generateMockBlogData(count) {
- return blogJson.slice(0, count);
+ return blogJson.slice(0, count);
}
-
-export {
- generateMockProductData,
- generateMockBlogData,
-};
-
\ No newline at end of file
+
+export { generateMockProductData, generateMockBlogData };
diff --git a/src/pages/404.js b/src/pages/404.js
index 4b9cbca..e4e8302 100644
--- a/src/pages/404.js
+++ b/src/pages/404.js
@@ -1,43 +1,47 @@
-import React, { useState } from "react"
-import { navigate } from "gatsby"
+import React, { useState } from 'react';
+import { navigate } from 'gatsby';
import * as styles from './404.module.css';
-import Button from "../components/Button";
-import Container from "../components/Container";
-import FormInputField from "../components/FormInputField/FormInputField";
+import Button from '../components/Button';
+import Container from '../components/Container';
+import FormInputField from '../components/FormInputField/FormInputField';
import Layout from '../components/Layout';
const NotFoundPage = () => {
-
const [search, setSearch] = useState('');
-
+
const handleSubmit = (e) => {
e.preventDefault();
navigate(`/search?q=${search}`);
- }
+ };
return (
-
-
404 Error
-
Page not found
-
Uh oh, looks like the page you are looking for has moved or no longer exists.
-
handleSubmit(e)}>
-
- setSearch(e)}
- type={'text'}
- />
- search
-
-
-
+
+
404 Error
+
Page not found
+
+ Uh oh, looks like the page you are looking for has moved or no
+ longer exists.
+
+
handleSubmit(e)}>
+
+ setSearch(e)}
+ type={'text'}
+ />
+
+ search
+
+
+
+
- )
-}
+ );
+};
-export default NotFoundPage
+export default NotFoundPage;
diff --git a/src/pages/about.js b/src/pages/about.js
index 19d75f6..627f462 100644
--- a/src/pages/about.js
+++ b/src/pages/about.js
@@ -3,46 +3,62 @@ import React, { useRef } from 'react';
import Container from '../components/Container';
import Hero from '../components/Hero';
import ThemeLink from '../components/ThemeLink';
-import Layout from "../components/Layout/Layout";
+import Layout from '../components/Layout/Layout';
import * as styles from './about.module.css';
const AboutPage = (props) => {
-
let historyRef = useRef();
let valuesRef = useRef();
let sustainabilityRef = useRef();
const handleScroll = (elementReference) => {
- if(elementReference) {
+ if (elementReference) {
window.scrollTo({
- behavior: "smooth",
- top: (elementReference.current.offsetTop - 280),
+ behavior: 'smooth',
+ top: elementReference.current.offsetTop - 280,
});
}
- }
+ };
return (
{/* Hero Container */}
-
- handleScroll(historyRef)} to={'#history'}>History
- handleScroll(valuesRef)} to={'#values'}>Values
- handleScroll(sustainabilityRef)} to={'#sustainability'}>Sustainability
+ handleScroll(historyRef)} to={'#history'}>
+ History
+
+ handleScroll(valuesRef)} to={'#values'}>
+ Values
+
+ handleScroll(sustainabilityRef)}
+ to={'#sustainability'}
+ >
+ Sustainability
+
-
Founded in 1860, Sydney is an innovative British brand with a contemporary edge. We make timeless everyday luxury clothing.
+
+ Founded in 1860, Sydney is an innovative British brand with a
+ contemporary edge. We make timeless everyday luxury clothing.
+
-
We created some of the world's first T-shirts and spent decades perfecting the feel of the cotton. Today we are the only brand that makes T-shirts in its own factory in the UK. And we do this in the same factory we have occupied since 1937.
+
+ We created some of the world's first T-shirts and spent decades
+ perfecting the feel of the cotton. Today we are the only brand
+ that makes T-shirts in its own factory in the UK. And we do this
+ in the same factory we have occupied since 1937.
+
@@ -54,7 +70,18 @@ const AboutPage = (props) => {
Our Values
-
Sunspel produced some of the world's earliest T-shirts. In the late 1800s the business made luxury tunics and undershirts from lightweight Sea Island cotton for export to the Far East and other warm climates. While these garments initially had silk buttoned plackets, these were removed in the early 1900s and replaced with simple bound necks to reduce manufacturing costs - creating the T-shirt. We've supplied the world as the T-shirt has evolved from underwear to outerwear, from symbol of youthful rebellion to everyday wardrobe staple, and we've spent decades refining its every last aspect.
+
+ Sunspel produced some of the world's earliest T-shirts. In the
+ late 1800s the business made luxury tunics and undershirts from
+ lightweight Sea Island cotton for export to the Far East and
+ other warm climates. While these garments initially had silk
+ buttoned plackets, these were removed in the early 1900s and
+ replaced with simple bound necks to reduce manufacturing costs -
+ creating the T-shirt. We've supplied the world as the T-shirt
+ has evolved from underwear to outerwear, from symbol of youthful
+ rebellion to everyday wardrobe staple, and we've spent decades
+ refining its every last aspect.
+
Be an ecowear
Sophisticated and not mass-produced
@@ -64,17 +91,35 @@ const AboutPage = (props) => {
Sustainability
-
Our founder, Thomas Hill, had both an eye for quality and a desire to innovate. As well as using the finest fibres such as Sea Island cotton, cashmere and silk, he invented his own fabrics. Sunspel continues this commitment to innovation today and our unique fabrics include: Q100 Sea Island cotton, Q82 Supima cotton, Q75 warp knit mesh cotton and Q14 warp knit cellular cotton. The technology behind these fabrics remains unchanged today and all Sunspel products use the finest cottons, wools and fibres.
-
Made in Long Eaton, England and crafted from our luxurious long staple Supima cotton for unparalleled softness, comfort and durability, the Sunspel T-shirt has a classic fit and only the most essential details.
-
With over 100 years spent perfecting fabric, fit and style, the Sunspel Classic T-shirt is recognised as the finest in the world.
+
+ Our founder, Thomas Hill, had both an eye for quality and a
+ desire to innovate. As well as using the finest fibres such as
+ Sea Island cotton, cashmere and silk, he invented his own
+ fabrics. Sunspel continues this commitment to innovation today
+ and our unique fabrics include: Q100 Sea Island cotton, Q82
+ Supima cotton, Q75 warp knit mesh cotton and Q14 warp knit
+ cellular cotton. The technology behind these fabrics remains
+ unchanged today and all Sunspel products use the finest cottons,
+ wools and fibres.
+
+
+ Made in Long Eaton, England and crafted from our luxurious long
+ staple Supima cotton for unparalleled softness, comfort and
+ durability, the Sunspel T-shirt has a classic fit and only the
+ most essential details.{' '}
+
+
+ With over 100 years spent perfecting fabric, fit and style, the
+ Sunspel Classic T-shirt is recognised as the finest in the
+ world.
+
-
+
-
);
diff --git a/src/pages/account/address.js b/src/pages/account/address.js
index 86d620c..458cfd3 100644
--- a/src/pages/account/address.js
+++ b/src/pages/account/address.js
@@ -7,7 +7,7 @@ import AddressCard from '../../components/AddressCard';
import AddressForm from '../../components/AddressForm';
import Breadcrumbs from '../../components/Breadcrumbs';
import Icon from '../../components/Icons/Icon';
-import Layout from "../../components/Layout/Layout";
+import Layout from '../../components/Layout/Layout';
import Modal from '../../components/Modal';
import { isAuth } from '../../helpers/general';
@@ -21,7 +21,7 @@ const AddressPage = (props) => {
postal: '2000',
country: 'Australia',
company: '',
- }
+ };
const address2 = {
name: 'John Doe',
@@ -30,49 +30,68 @@ const AddressPage = (props) => {
postal: '2000',
country: 'Australia',
company: 'Matter Design',
- }
-
+ };
+
const [addressList] = useState([address1, address2]);
const [showForm, setShowForm] = useState(false);
const [showDelete, setShowDelete] = useState(false);
- if(isAuth() === false) {
+ if (isAuth() === false) {
navigate('/login');
}
return (
-
+
Addresses
-
- {showForm === false &&
-
- {addressList.map((address) => {
- return(
setShowForm(true)}
- showDeleteForm={() => setShowDelete(true)}
- {...address}
- />)
- })}
- setShowForm(true)}>
-
-
new address
+
+ {showForm === false && (
+
+ {addressList.map((address) => {
+ return (
+
setShowForm(true)}
+ showDeleteForm={() => setShowDelete(true)}
+ {...address}
+ />
+ );
+ })}
+ setShowForm(true)}
+ >
+
+ new address
+
-
}
+ )}
- {showForm === true &&
+ {showForm === true && (
setShowForm(false)} />
- }
-
+ )}
setShowDelete(false)}>
Delete Address?
-
Are you sure you want to delete this address? You cannot undo this action once you press 'Delete'
+
+ Are you sure you want to delete this address? You cannot undo this
+ action once you press 'Delete'
+
- setShowDelete(false)} level={'primary'}>Delete
- setShowDelete(false)} level={'secondary'}>Cancel
+ setShowDelete(false)} level={'primary'}>
+ Delete
+
+ setShowDelete(false)} level={'secondary'}>
+ Cancel
+
diff --git a/src/pages/account/favorites.js b/src/pages/account/favorites.js
index 932ee91..6fc315e 100644
--- a/src/pages/account/favorites.js
+++ b/src/pages/account/favorites.js
@@ -1,4 +1,4 @@
-import React, {useState} from 'react';
+import React, { useState } from 'react';
import { navigate } from 'gatsby';
import * as styles from './favorites.module.css';
@@ -6,35 +6,34 @@ import Button from '../../components/Button';
import Breadcrumbs from '../../components/Breadcrumbs';
import Container from '../../components/Container';
import FavoriteCard from '../../components/FavoriteCard/FavoriteCard';
-import Layout from "../../components/Layout/Layout";
+import Layout from '../../components/Layout/Layout';
import Modal from '../../components/Modal';
import { isAuth } from '../../helpers/general';
const FavoritesPage = (props) => {
-
const sampleFavorite1 = {
color: 'Anthracite Melange',
size: 'XS',
- img: "/products/shirt1.jpg",
+ img: '/products/shirt1.jpg',
alt: 'favorite 1',
};
const sampleFavorite2 = {
color: 'Purple Pale',
size: 'XS',
- img: "/products/shirt2.jpg",
+ img: '/products/shirt2.jpg',
alt: 'favorite 2',
};
const sampleFavorite3 = {
color: 'Moss Green',
size: 'S',
- img: "/products/shirt3.jpg",
+ img: '/products/shirt3.jpg',
alt: 'favorite 3',
};
- if(isAuth() === false) {
+ if (isAuth() === false) {
navigate('/login');
}
@@ -44,23 +43,47 @@ const FavoritesPage = (props) => {
-
+
Favorites
- setShowDelete(true)} {...sampleFavorite1} />
- setShowDelete(true)} {...sampleFavorite2} />
- setShowDelete(true)} {...sampleFavorite3} />
- setShowDelete(true)} {...sampleFavorite2} />
+ setShowDelete(true)}
+ {...sampleFavorite1}
+ />
+ setShowDelete(true)}
+ {...sampleFavorite2}
+ />
+ setShowDelete(true)}
+ {...sampleFavorite3}
+ />
+ setShowDelete(true)}
+ {...sampleFavorite2}
+ />
setShowDelete(false)}>
Remove from Favorites?
-
Are you sure you want to remove this from your favorites? You cannot undo this action once you press 'Delete'
+
+ Are you sure you want to remove this from your favorites? You cannot
+ undo this action once you press 'Delete'
+
- setShowDelete(false)} level={'primary'}>Delete
- setShowDelete(false)} level={'secondary'}>Cancel
+ setShowDelete(false)} level={'primary'}>
+ Delete
+
+ setShowDelete(false)} level={'secondary'}>
+ Cancel
+
diff --git a/src/pages/account/index.js b/src/pages/account/index.js
index 87efbc8..329d68d 100644
--- a/src/pages/account/index.js
+++ b/src/pages/account/index.js
@@ -1,14 +1,12 @@
-import React, {useEffect} from 'react';
+import React, { useEffect } from 'react';
import { navigate } from 'gatsby';
const OrderIndexPage = (props) => {
useEffect(() => {
navigate('/account/orders/');
- }, [])
-
- return (
-
- );
+ }, []);
+
+ return ;
};
export default OrderIndexPage;
diff --git a/src/pages/account/orders.js b/src/pages/account/orders.js
index 17346f6..4803856 100644
--- a/src/pages/account/orders.js
+++ b/src/pages/account/orders.js
@@ -3,14 +3,13 @@ import * as styles from './orders.module.css';
import AccountLayout from '../../components/AccountLayout/AccountLayout';
import Breadcrumbs from '../../components/Breadcrumbs';
-import Layout from "../../components/Layout/Layout";
+import Layout from '../../components/Layout/Layout';
import OrderItem from '../../components/OrderItem/OrderItem';
import { isAuth } from '../../helpers/general';
import { navigate } from 'gatsby';
const OrderPage = (props) => {
-
- if(isAuth() === false) {
+ if (isAuth() === false) {
navigate('/login');
}
@@ -19,19 +18,22 @@ const OrderPage = (props) => {
orderPlaced: 'Oct 12, 2021',
lastUpdate: 'Oct 12, 2021',
status: 'pending',
- items: [{
- image: '/products/shirt1.jpg',
- alt: 'order 1 product 1',
- name: 'Lambswool Crew Neck Jumper',
- quantity: '2',
- price: '100',
- }, {
- image: '/products/shirt2.jpg',
- alt: 'order 1 product 2',
- name: 'Lambswool Crew Neck Jumper',
- quantity: '1',
- price: '300',
- }],
+ items: [
+ {
+ image: '/products/shirt1.jpg',
+ alt: 'order 1 product 1',
+ name: 'Lambswool Crew Neck Jumper',
+ quantity: '2',
+ price: '100',
+ },
+ {
+ image: '/products/shirt2.jpg',
+ alt: 'order 1 product 2',
+ name: 'Lambswool Crew Neck Jumper',
+ quantity: '1',
+ price: '300',
+ },
+ ],
shippingAddress: {
name: 'John Doe',
address: '1 Steam Mill Lane, Haymerket',
@@ -53,13 +55,15 @@ const OrderPage = (props) => {
orderPlaced: 'Oct 11, 2021',
lastUpdate: 'Oct 11, 2021',
status: 'pending',
- items: [{
- image: '/products/shirt1.jpg',
- alt: 'order 1 product 1',
- name: 'Lambswool Crew Neck Jumper',
- quantity: '2',
- price: '100',
- }],
+ items: [
+ {
+ image: '/products/shirt1.jpg',
+ alt: 'order 1 product 1',
+ name: 'Lambswool Crew Neck Jumper',
+ quantity: '2',
+ price: '100',
+ },
+ ],
shippingAddress: {
name: 'John Doe',
address: '1 Steam Mill Lane, Haymerket',
@@ -79,7 +83,13 @@ const OrderPage = (props) => {
return (
-
+
Orders
Order #
@@ -88,8 +98,8 @@ const OrderPage = (props) => {
Status
-
-
+
+
);
diff --git a/src/pages/account/settings.js b/src/pages/account/settings.js
index 8a0f415..9b5fd56 100644
--- a/src/pages/account/settings.js
+++ b/src/pages/account/settings.js
@@ -6,13 +6,16 @@ import AccountLayout from '../../components/AccountLayout';
import Button from '../../components/Button';
import Breadcrumbs from '../../components/Breadcrumbs';
import FormInputField from '../../components/FormInputField';
-import Layout from "../../components/Layout/Layout";
+import Layout from '../../components/Layout/Layout';
- import { validateEmail, validateStrongPassword, isAuth } from '../../helpers/general';
+import {
+ validateEmail,
+ validateStrongPassword,
+ isAuth,
+} from '../../helpers/general';
const SettingsPage = (props) => {
-
- if(isAuth() === false) {
+ if (isAuth() === false) {
navigate('/login');
}
@@ -22,7 +25,7 @@ const SettingsPage = (props) => {
email: '',
password: '',
confirmPassword: '',
- }
+ };
const errorState = {
firstName: '',
@@ -30,103 +33,112 @@ const SettingsPage = (props) => {
email: '',
password: '',
confirmPassword: '',
- }
+ };
const [updateForm, setUpdateForm] = useState(initialState);
const [error, setError] = useState(errorState);
- const handleChange = (id ,e) => {
+ const handleChange = (id, e) => {
const tempForm = { ...updateForm, [id]: e };
setUpdateForm(tempForm);
- }
+ };
const handleSubmit = (e) => {
e.preventDefault();
let validForm = true;
- const tempError = {...errorState};
+ const tempError = { ...errorState };
- if(updateForm.email !== '') {
- if(validateEmail(updateForm.email) !== true) {
+ if (updateForm.email !== '') {
+ if (validateEmail(updateForm.email) !== true) {
validForm = false;
- tempError.email = 'Please use a valid email address, such as user@example.com.';
- }
+ tempError.email =
+ 'Please use a valid email address, such as user@example.com.';
+ }
}
- if(updateForm.password !== '') {
- if(validateStrongPassword(updateForm.password) === false) {
+ if (updateForm.password !== '') {
+ if (validateStrongPassword(updateForm.password) === false) {
validForm = false;
- tempError.password = 'Password must have at least 8 characters, 1 lowercase, 1 uppercase and 1 numeric character.'
+ tempError.password =
+ 'Password must have at least 8 characters, 1 lowercase, 1 uppercase and 1 numeric character.';
}
- if(updateForm.password !== updateForm.confirmPassword) {
+ if (updateForm.password !== updateForm.confirmPassword) {
validForm = false;
- tempError.confirmPassword = 'Confirm password not the same.'
+ tempError.confirmPassword = 'Confirm password not the same.';
}
}
-
- if(validForm === true) {
+
+ if (validForm === true) {
//success
setError(errorState);
setUpdateForm(initialState);
} else {
setError(tempError);
}
- }
+ };
return (
-
+
Settings
-
handleSubmit(e)} noValidate>
-
- handleChange(id, e)}
- type={'input'}
- labelName={'First Name'}
-
- />
- handleChange(id, e)}
- type={'input'}
- labelName={'Last Name'}
- />
- handleChange(id, e)}
- type={'email'}
- labelName={'Email'}
- error={error.email}
- />
-
-
-
Change Password
-
-
handleChange(id, e)}
- type={'password'}
- labelName={'New Password'}
- error={error.password}
- />
- handleChange(id, e)}
- type={'password'}
- labelName={'Confirm Password'}
- error={error.confirmPassword}
- />
- update
+ handleSubmit(e)} noValidate>
+
+ handleChange(id, e)}
+ type={'input'}
+ labelName={'First Name'}
+ />
+ handleChange(id, e)}
+ type={'input'}
+ labelName={'Last Name'}
+ />
+ handleChange(id, e)}
+ type={'email'}
+ labelName={'Email'}
+ error={error.email}
+ />
+
+
+
Change Password
+
+ handleChange(id, e)}
+ type={'password'}
+ labelName={'New Password'}
+ error={error.password}
+ />
+ handleChange(id, e)}
+ type={'password'}
+ labelName={'Confirm Password'}
+ error={error.confirmPassword}
+ />
+
+ update
+
+
-
diff --git a/src/pages/account/viewed.js b/src/pages/account/viewed.js
index 43e9ad8..2a63dda 100644
--- a/src/pages/account/viewed.js
+++ b/src/pages/account/viewed.js
@@ -4,28 +4,39 @@ import * as styles from './viewed.module.css';
import AccountLayout from '../../components/AccountLayout';
import Breadcrumbs from '../../components/Breadcrumbs';
-import Layout from "../../components/Layout/Layout";
+import Layout from '../../components/Layout/Layout';
import ProductCardGrid from '../../components/ProductCardGrid';
import { isAuth } from '../../helpers/general';
-import { generateMockProductData } from "../../helpers/mock";
+import { generateMockProductData } from '../../helpers/mock';
const RecentlyViewedPage = (props) => {
- const recentlyViewed = generateMockProductData(3, 'shirt');
+ const recentlyViewed = generateMockProductData(3, 'shirt');
- if(isAuth() === false) {
- navigate('/login');
- }
+ if (isAuth() === false) {
+ navigate('/login');
+ }
return (
-
+
-
Recently Viewed
-
+
Recently Viewed
+
diff --git a/src/pages/accountSuccess.js b/src/pages/accountSuccess.js
index f6b5e74..4b827bc 100644
--- a/src/pages/accountSuccess.js
+++ b/src/pages/accountSuccess.js
@@ -2,34 +2,35 @@ import React from 'react';
import * as styles from './accountSuccess.module.css';
import ActionCard from '../components/ActionCard';
-import Container from "../components/Container";
-import Layout from "../components/Layout/Layout";
+import Container from '../components/Container';
+import Layout from '../components/Layout/Layout';
const AccountSuccessPage = (props) => {
return (
-
-
Account Created
-
We've sent you a confirmation link to active your account. Please check your email and verify it.
-
+
+
Account Created
+
+ We've sent you a confirmation link to active your account. Please
+ check your email and verify it.
+
+
-
);
diff --git a/src/pages/blog/index.js b/src/pages/blog/index.js
index ed4978e..76c4137 100644
--- a/src/pages/blog/index.js
+++ b/src/pages/blog/index.js
@@ -2,46 +2,68 @@ import React from 'react';
import { navigate } from 'gatsby';
import BlogPreviewGrid from '../../components/BlogPreviewGrid';
-import Button from '../../components/Button';
import Container from '../../components/Container';
import Hero from '../../components/Hero';
-import Layout from "../../components/Layout/Layout";
+import Layout from '../../components/Layout/Layout';
import ThemeLink from '../../components/ThemeLink';
-import { generateMockBlogData } from '../../helpers/mock'
+import { generateMockBlogData } from '../../helpers/mock';
import * as styles from './index.module.css';
const BlogPage = (props) => {
-
const blogData = generateMockBlogData(6);
return (
-
- navigate('/blog/sample')} to={'/blog/sample'}>All Posts
- navigate('/blog/sample')} to={'/blog/sample'}>Design
- navigate('/blog/sample')} to={'/blog/sample'}>Collaboration
- navigate('/blog/sample')} to={'/blog/sample'}>Interview
- navigate('/blog/sample')} to={'/blog/sample'}>News
+ navigate('/blog/sample')}
+ to={'/blog/sample'}
+ >
+ All Posts
+
+ navigate('/blog/sample')}
+ to={'/blog/sample'}
+ >
+ Design
+
+ navigate('/blog/sample')}
+ to={'/blog/sample'}
+ >
+ Collaboration
+
+ navigate('/blog/sample')}
+ to={'/blog/sample'}
+ >
+ Interview
+
+ navigate('/blog/sample')}
+ to={'/blog/sample'}
+ >
+ News
+
{/* Blog Grid */}
-
+
-
);
diff --git a/src/pages/blog/sample.js b/src/pages/blog/sample.js
index 1ffb613..5d68088 100644
--- a/src/pages/blog/sample.js
+++ b/src/pages/blog/sample.js
@@ -3,8 +3,7 @@ import * as styles from './sample.module.css';
import Blog from '../../components/Blog';
import Container from '../../components/Container';
-import Layout from "../../components/Layout/Layout";
-
+import Layout from '../../components/Layout/Layout';
const SamplePage = (props) => {
return (
@@ -12,24 +11,45 @@ const SamplePage = (props) => {
-
+
- London-based floral designer Flora Fricker champions seasonal British flowers and UK producers in her beautiful and sustainable creations. This season, we worked with Flora to style Sunspel stores for Christmas, for which she produced eye-catching sustainably sourced wreaths.
+ London-based floral designer Flora Fricker champions seasonal
+ British flowers and UK producers in her beautiful and
+ sustainable creations. This season, we worked with Flora to
+ style Sunspel stores for Christmas, for which she produced
+ eye-catching sustainably sourced wreaths.
- Delaware limited liability company (The Sydney) collects personal information that you voluntarily provide when applying or registering for an account with The Upside or making a purchase on The Upside website; www.theupside.com (the Website).
+ Delaware limited liability company (The Sydney) collects
+ personal information that you voluntarily provide when
+ applying or registering for an account with The Upside or
+ making a purchase on The Upside website; www.theupside.com
+ (the Website).
- This Privacy Policy (Privacy Policy) outlines how your information is collected, used and disclosed when you access or use our Services as defined in our Terms. This information is collected, used and disclosed in accordance with the Privacy Act 1988 (Cth) (Privacy Act).
+ This Privacy Policy (Privacy Policy) outlines how your
+ information is collected, used and disclosed when you access
+ or use our Services as defined in our Terms. This information
+ is collected, used and disclosed in accordance with the
+ Privacy Act 1988 (Cth) (Privacy Act).
- This Privacy Policy is incorporated by reference into our Terms. Any capitalized terms not defined in this Policy are defined in the Terms. You agree to comply with all Terms when accessing or using our Services, including this Privacy Policy.
+ This Privacy Policy is incorporated by reference into our
+ Terms. Any capitalized terms not defined in this Policy are
+ defined in the Terms. You agree to comply with all Terms when
+ accessing or using our Services, including this Privacy
+ Policy.
-
+
@@ -37,9 +57,31 @@ const SamplePage = (props) => {
2. Lorem ipsum
-
Our Services, including but not limited to the registration of an account with us or placing of an order, is not intended to be used by children under the age of 13. When a visitor indicates an age under 13, the registration process for The Upside website cannot be completed, and no personally identifying information is collected in conjunction with that attempted submission except that we retain e-mail addresses of such persons (and record of access attempts) for purposes of denying registration. Otherwise, we do not knowingly collect personally identifiable information from visitors under the age of 13.
-
If you are under 18, any use of our Services must be with the involvement of a parent or guardian. By accessing or using our Website, you warrant and represent to us that you are over the age of 18 years and you have the right, authority and legal capacity to enter into a legally binding agreement and to abide by this Privacy Policy.
-
The Upside collects, uses and discloses information regarding users aged 13-18 in the same manner as it does for adults.
+
+ Our Services, including but not limited to the registration of
+ an account with us or placing of an order, is not intended to
+ be used by children under the age of 13. When a visitor
+ indicates an age under 13, the registration process for The
+ Upside website cannot be completed, and no personally
+ identifying information is collected in conjunction with that
+ attempted submission except that we retain e-mail addresses of
+ such persons (and record of access attempts) for purposes of
+ denying registration. Otherwise, we do not knowingly collect
+ personally identifiable information from visitors under the
+ age of 13.
+
+
+ If you are under 18, any use of our Services must be with the
+ involvement of a parent or guardian. By accessing or using our
+ Website, you warrant and represent to us that you are over the
+ age of 18 years and you have the right, authority and legal
+ capacity to enter into a legally binding agreement and to
+ abide by this Privacy Policy.
+
+
+ The Upside collects, uses and discloses information regarding
+ users aged 13-18 in the same manner as it does for adults.
+
diff --git a/src/pages/cart.js b/src/pages/cart.js
index 01261a9..ee28837 100644
--- a/src/pages/cart.js
+++ b/src/pages/cart.js
@@ -11,10 +11,9 @@ import OrderSummary from '../components/OrderSummary';
import * as styles from './cart.module.css';
const CartPage = (props) => {
-
const sampleCartItem = {
image: '/products/pdp1.jpeg',
- alt: '',
+ alt: '',
name: 'Lambswool Crew Neck Jumper',
price: 220,
color: 'Anthracite Melange',
@@ -25,28 +24,30 @@ const CartPage = (props) => {
-
-
-
-
- Continue Shopping
-
-
-
-
-
Login
+
+
+
+
+
+ Continue Shopping
+
+
+
+
+
+ Login
+
-
-
-
My Bag
-
diff --git a/src/pages/faq.js b/src/pages/faq.js
index 7390492..8dbfb48 100644
--- a/src/pages/faq.js
+++ b/src/pages/faq.js
@@ -1,7 +1,7 @@
import React from 'react';
import * as styles from './faq.module.css';
-import Layout from "../components/Layout/Layout";
+import Layout from '../components/Layout/Layout';
import Banner from '../components/Banner';
import Container from '../components/Container';
@@ -9,7 +9,7 @@ const FaqPage = (props) => {
return (
-
{
Your Orders
Deliveries
-
To review the status of your order please visit the "My Orders" section of your Sunspel Account. You should receive an email notification when your package is dispatched. Please check your email inbox and your junk filter.
-
We dispatch all orders within 24 hours of being placed. During our sale periods it can get very busy in our factory, orders may take a little longer to be dispatched so please add five working days just in case.
-
If there’s something you want to know about your order, please get in touch with us at customerservice@example.com or call us on +44 (0)115 111 1111.
+
+ To review the status of your order please visit the "My Orders"
+ section of your Sunspel Account. You should receive an email
+ notification when your package is dispatched. Please check your
+ email inbox and your junk filter.
+
+
+ We dispatch all orders within 24 hours of being placed. During
+ our sale periods it can get very busy in our factory, orders may
+ take a little longer to be dispatched so please add five working
+ days just in case.
+
+
+ If there’s something you want to know about your order, please
+ get in touch with us at customerservice@example.com or call us
+ on +44 (0)115 111 1111.
+
Returns & Exchanges
-
To review the status of your order please visit the "My Orders" section of your Sunspel Account. You should receive an email notification when your package is dispatched. Please check your email inbox and your junk filter.
-
We dispatch all orders within 24 hours of being placed. During our sale periods it can get very busy in our factory, orders may take a little longer to be dispatched so please add five working days just in case.
+
+ To review the status of your order please visit the "My Orders"
+ section of your Sunspel Account. You should receive an email
+ notification when your package is dispatched. Please check your
+ email inbox and your junk filter.
+
+
+ We dispatch all orders within 24 hours of being placed. During
+ our sale periods it can get very busy in our factory, orders may
+ take a little longer to be dispatched so please add five working
+ days just in case.
+
@@ -36,19 +60,54 @@ const FaqPage = (props) => {
Payment
Shipping Rates
-
To review the status of your order please visit the "My Orders" section of your Sunspel Account. You should receive an email notification when your package is dispatched. Please check your email inbox and your junk filter.
-
We dispatch all orders within 24 hours of being placed. During our sale periods it can get very busy in our factory, orders may take a little longer to be dispatched so please add five working days just in case.
-
If there’s something you want to know about your order, please get in touch with us at customerservice@example.com call us on +44 (0)115 111 1111.
+
+ To review the status of your order please visit the "My Orders"
+ section of your Sunspel Account. You should receive an email
+ notification when your package is dispatched. Please check your
+ email inbox and your junk filter.
+
+
+ We dispatch all orders within 24 hours of being placed. During
+ our sale periods it can get very busy in our factory, orders may
+ take a little longer to be dispatched so please add five working
+ days just in case.
+
+
+ If there’s something you want to know about your order, please
+ get in touch with us at customerservice@example.com call us on
+ +44 (0)115 111 1111.
+
Currency
-
Our website automatically selects the currency that matches your delivery location. You can change this manually in the top left hand corner of the page.
-
For deliveries to the UK, we will bill you in Pounds Sterling (£), to the European Union in Euros (€), to the US in Dollars ($), and to the Rest of World in Pounds Sterling (£).
-
Standard rate VAT is included in all orders to the UK and Europe. Orders to the Rest of the World do not include VAT. Where applicable, you will be responsible for any local country import duty.
+
+ Our website automatically selects the currency that matches your
+ delivery location. You can change this manually in the top left
+ hand corner of the page.
+
+
+ For deliveries to the UK, we will bill you in Pounds Sterling
+ (£), to the European Union in Euros (€), to the US in Dollars
+ ($), and to the Rest of World in Pounds Sterling (£).
+
+
+ Standard rate VAT is included in all orders to the UK and
+ Europe. Orders to the Rest of the World do not include VAT.
+ Where applicable, you will be responsible for any local country
+ import duty.
+
Suspect Fraud?
-
Given our high levels of security, it’s very unlikely fraudulent use of your card will take place on our website. But if a fraudulent transaction does take place, first contact your credit or debit card company so they can protect your card and reimburse you. Then let us know at customerservice@example.com and we will work with your card company to minimise any further inconvenience to you.
+
+ Given our high levels of security, it’s very unlikely fraudulent
+ use of your card will take place on our website. But if a
+ fraudulent transaction does take place, first contact your
+ credit or debit card company so they can protect your card and
+ reimburse you. Then let us know at customerservice@example.com
+ and we will work with your card company to minimise any further
+ inconvenience to you.
+
diff --git a/src/pages/forgot.js b/src/pages/forgot.js
index 8ebbc00..a712a6c 100644
--- a/src/pages/forgot.js
+++ b/src/pages/forgot.js
@@ -2,36 +2,40 @@ import React, { useState } from 'react';
import { validateEmail } from '../helpers/general';
import * as styles from './forgot.module.css';
-import Layout from "../components/Layout/Layout";
+import Layout from '../components/Layout/Layout';
import FormInputField from '../components/FormInputField/FormInputField';
import Button from '../components/Button';
import AttributeGrid from '../components/AttributeGrid';
const ForgotPage = (props) => {
-
const [email, setEmail] = useState('');
const [error, setError] = useState('');
-
const handleSubmit = (e) => {
e.preventDefault();
- if(validateEmail(email) !== true) {
+ if (validateEmail(email) !== true) {
setError('Not a valid email address');
return;
- }
+ }
setEmail('');
setError('');
- }
+ };
return (
Reset Password
- Fill in your email below to request a new password. An email will be sent to the address below containing a link to verify your email address.
+ Fill in your email below to request a new password. An email will be
+ sent to the address below containing a link to verify your email
+ address.
-
handleSubmit(e)}>
- handleSubmit(e)}
+ >
+ setEmail(e)}
@@ -40,13 +44,14 @@ const ForgotPage = (props) => {
error={error}
/>
- reset password
+
+ reset password
+
-
);
diff --git a/src/pages/how-to-use.js b/src/pages/how-to-use.js
index 3cc1143..9ad84d6 100644
--- a/src/pages/how-to-use.js
+++ b/src/pages/how-to-use.js
@@ -1,111 +1,170 @@
import React, { useRef } from 'react';
import * as styles from './about.module.css';
-import Layout from "../components/Layout/Layout";
+import Layout from '../components/Layout/Layout';
import ThemeLink from '../components/ThemeLink';
import Container from '../components/Container';
import Button from '../components/Button';
const HowToUsePage = (props) => {
-
let builtRef = useRef();
let toolsRef = useRef();
const handleScroll = (elementReference) => {
- if(elementReference) {
+ if (elementReference) {
window.scrollTo({
- behavior: "smooth",
- top: (elementReference.current.offsetTop - 280),
+ behavior: 'smooth',
+ top: elementReference.current.offsetTop - 280,
});
}
- }
+ };
return (
- handleScroll(builtRef)} to={'#builtby'}>Who built this theme
- handleScroll(toolsRef)} to={'#tools'}>Compatible technologies
+ handleScroll(builtRef)} to={'#builtby'}>
+ Who built this theme
+
+ handleScroll(toolsRef)} to={'#tools'}>
+ Compatible technologies
+
-
+
Built By Matter.
-
This theme is proudly brought to you by the team at Matter Design & Digital (Matter.).
-
The Sydney theme is built for Netlify as an ecommerce theme suitable for JAMStack archtitecture. This theme is free to use through Netlify’s GitHub account, and can be used with any ecommerce platform that support a headless architecture.
-
Matter. has pre-built connections to microservices available through its JAMM.™ solution. JAMM.™ is a system built to run a headless architecture. JAMM.™ can connect micro-services, orchestrate data and publish websites to an edge network for lighting fast performce. JAMM.™ creates a server-side rendered website that is fast, stable and scalable for high traffic events.
-
Read more about JAMM.™
-
+
+ This theme is proudly brought to you by the team at{' '}
+
+ Matter Design & Digital
+ {' '}
+ (Matter.).
+
+
+ The Sydney theme is built for Netlify as an ecommerce theme
+ suitable for JAMStack archtitecture. This theme is free to use
+ through Netlify’s GitHub account, and can be used with any
+ ecommerce platform that support a headless architecture.
+
+
+ Matter. has pre-built connections to microservices available
+ through its JAMM.™ solution. JAMM.™ is a system built to run a
+ headless architecture. JAMM.™ can connect micro-services,
+ orchestrate data and publish websites to an edge network for
+ lighting fast performce. JAMM.™ creates a server-side rendered
+ website that is fast, stable and scalable for high traffic
+ events.
+
+
+ Read more about JAMM.™
+
+
Best of Breed Tools
-
Headless architecture enables Composable Commerce. What this means is that you can ‘compose’ a suite of best of breed tools together to create an agile ecommerce system. This approach is the opposite end of the spectrum from a traditional ‘Monolithic’ architecture where all the functionality and data comes from one source.
-
Why go with Composable Commerce? History has shown, technology innovation comes from new specialised solutions that find better ways to do things. By creating an architecture that taps into this innovation, you are getting a system that is innovating faster than monolithic solutions giving you a competitive advantage.
-
Matter. has been innovating since 2003, and we have aligned with companies that do it best. The following technologies are either currently available or are on our roadmap for JAMM.™.
+
+ Headless architecture enables Composable Commerce. What this
+ means is that you can ‘compose’ a suite of best of breed tools
+ together to create an agile ecommerce system. This approach is
+ the opposite end of the spectrum from a traditional ‘Monolithic’
+ architecture where all the functionality and data comes from one
+ source.
+
+
+ Why go with Composable Commerce? History has shown, technology
+ innovation comes from new specialised solutions that find better
+ ways to do things. By creating an architecture that taps into
+ this innovation, you are getting a system that is innovating
+ faster than monolithic solutions giving you a competitive
+ advantage.
+
+
+ Matter. has been innovating since 2003, and we have aligned with
+ companies that do it best. The following technologies are either
+ currently available or are on our roadmap for JAMM.™.
+
Ecommerce:
- BigCommerce
- VTEX (roadmap)
- Commercetools (roadmap)
+ BigCommerce
+ VTEX (roadmap)
+ Commercetools (roadmap)
Content Management Systems (CMS):
- Contentful
- WordPress
- Sanity
- Builder.io
+ Contentful
+ WordPress
+ Sanity
+ Builder.io
Advanced Search:
- Algolia
- Searchspring (roadmap)
- XO (roadmap)
- Syte (roadmap)
+ Algolia
+ Searchspring (roadmap)
+ XO (roadmap)
+ Syte (roadmap)
Product Information Management (PIM):
Marketing Automation:
- Klaviyo
- Ortto
- Dot Digital
- Omnisend
+ Klaviyo
+ Ortto
+ Dot Digital
+ Omnisend
Customer Support:
- Gorgias
- Zendesk
+ Gorgias
+ Zendesk
Reviews and User Generated Content:
- Yotpo
- Trustpilot
- Reviews.io
+ Yotpo
+ Trustpilot
+ Reviews.io
-
+
Physical Locations:
- Localisr.io
+ Localisr.io
-
Our team are fanatical about site speed and the agility of a composable commerce approach. If you need help to setup a Headless architecture, we’d love to hear from you.
-
-
Contact the team at Matter.
-
+
+ Our team are fanatical about site speed and the agility of a
+ composable commerce approach. If you need help to setup a
+ Headless architecture, we’d love to hear from you.
+
+
+
+
+ Contact the team at Matter.
+
+
-
+
diff --git a/src/pages/index.js b/src/pages/index.js
index dfd6fe8..f7ee1c3 100644
--- a/src/pages/index.js
+++ b/src/pages/index.js
@@ -1,129 +1,147 @@
-import * as React from "react"
+import * as React from 'react';
import AttributeGrid from '../components/AttributeGrid';
-import Container from "../components/Container";
+import Container from '../components/Container';
import Hero from '../components/Hero';
import BlogPreviewGrid from '../components/BlogPreviewGrid';
import Highlight from '../components/Highlight';
-import Layout from "../components/Layout/Layout";
+import Layout from '../components/Layout/Layout';
import ProductCollectionGrid from '../components/ProductCollectionGrid';
import ProductCardGrid from '../components/ProductCardGrid';
import Quote from '../components/Quote';
import Title from '../components/Title';
-import { generateMockBlogData, generateMockProductData } from "../helpers/mock";
+import { generateMockBlogData, generateMockProductData } from '../helpers/mock';
import * as styles from './index.module.css';
-import { Link, navigate } from "gatsby";
+import { Link, navigate } from 'gatsby';
const IndexPage = () => {
-
const newArrivals = generateMockProductData(3, 'shirt');
const blogData = generateMockBlogData(3);
const goToShop = () => {
navigate('/shop');
- }
+ };
return (
-
-
- {/* Hero Container */}
-
-
- {/* Message Container */}
-
-
This is a demonstration of the Sydney theme for verse by matter design.
-
wear by sunspel and scotch&soda
-
-
- {/* Collection Container */}
-
-
- {/* New Arrivals */}
-
-
- {/* Highlight */}
-
-
-
-
+
+ {/* Hero Container */}
+
+
+ {/* Message Container */}
+
+
+ This is a demonstration of the Sydney theme for verse by{' '}
+ matter design.
+
+
+ wear by sunspel and{' '}
+ scotch&soda
+
+
+
+ {/* Collection Container */}
+
+
+ {/* New Arrivals */}
+
+
+ {/* Highlight */}
+
+
+
+
+
+
+ {/* Promotion */}
+
+
+
+ WOMAN
+ MAN
-
- {/* Promotion */}
-
-
- {/* Quote */}
-
+
+ {/* Quote */}
+
+
+ {/* Blog Grid */}
+
+
+
+
+
+
+
+ {/* Promotion */}
+
+
+
- {/* Blog Grid */}
-
-
-
-
-
-
-
- {/* Promotion */}
-
-
-
-
- {/* Social Media */}
-
-
-
+ {/* Social Media */}
+
+
+
+ );
+};
-export default IndexPage
+export default IndexPage;
diff --git a/src/pages/login.js b/src/pages/login.js
index 4fde9eb..258c48e 100644
--- a/src/pages/login.js
+++ b/src/pages/login.js
@@ -4,81 +4,91 @@ import { validateEmail, isEmpty } from '../helpers/general';
import * as styles from './login.module.css';
import AttributeGrid from '../components/AttributeGrid/AttributeGrid';
-import Layout from "../components/Layout/Layout";
+import Layout from '../components/Layout/Layout';
import FormInputField from '../components/FormInputField/FormInputField';
import Button from '../components/Button';
const LoginPage = (props) => {
-
const initialState = {
email: '',
password: '',
- }
+ };
const errorState = {
email: '',
password: '',
- }
+ };
const [loginForm, setLoginForm] = useState(initialState);
const [errorForm, setErrorForm] = useState(errorState);
const [errorMessage, setErrorMessage] = useState('');
-
- const handleChange = (id ,e) => {
+
+ const handleChange = (id, e) => {
const tempForm = { ...loginForm, [id]: e };
setLoginForm(tempForm);
- }
+ };
const handleSubmit = (e) => {
e.preventDefault();
let validForm = true;
- const tempError = {...errorForm};
-
- if(validateEmail(loginForm.email) !== true) {
- tempError.email = 'Please use a valid email address, such as user@example.com.';
+ const tempError = { ...errorForm };
+
+ if (validateEmail(loginForm.email) !== true) {
+ tempError.email =
+ 'Please use a valid email address, such as user@example.com.';
validForm = false;
} else {
tempError.email = '';
}
- if(isEmpty(loginForm.password) === true) {
+ if (isEmpty(loginForm.password) === true) {
tempError.password = 'Field required';
validForm = false;
} else {
tempError.password = '';
}
- if(validForm === true) {
+ if (validForm === true) {
setErrorForm(errorState);
//mock login
- if(loginForm.email !== 'error@example.com') {
+ if (loginForm.email !== 'error@example.com') {
navigate('/account');
window.localStorage.setItem('key', 'sampleToken');
} else {
window.scrollTo(0, 0);
- setErrorMessage('There is no such account associated with this email address');
+ setErrorMessage(
+ 'There is no such account associated with this email address'
+ );
}
} else {
setErrorMessage('');
setErrorForm(tempError);
}
- }
+ };
return (
-
- {errorMessage}
-
+
+ {errorMessage}
+
-
-
Login
-
Please enter your e-mail and password
-
handleSubmit(e)}>
-
+ Please enter your e-mail and password
+
+ handleSubmit(e)}
+ >
+ handleChange(id, e)}
@@ -87,7 +97,7 @@ const LoginPage = (props) => {
error={errorForm.email}
/>
- handleChange(id, e)}
@@ -95,14 +105,25 @@ const LoginPage = (props) => {
labelName={'Password'}
error={errorForm.password}
/>
-
- Forgot Password
-
-
- LOG IN
- New Customer?
- navigate('/signup')} fullWidth level={'secondary'}>create an account
-
+
+
+ Forgot Password
+
+
+
+
+ LOG IN
+
+ New Customer?
+ navigate('/signup')}
+ fullWidth
+ level={'secondary'}
+ >
+ create an account
+
+
diff --git a/src/pages/orderConfirm.js b/src/pages/orderConfirm.js
index 90b01e1..912ce9a 100644
--- a/src/pages/orderConfirm.js
+++ b/src/pages/orderConfirm.js
@@ -2,49 +2,50 @@ import React from 'react';
import * as styles from './accountSuccess.module.css';
import ActionCard from '../components/ActionCard';
-import Container from "../components/Container";
-import Layout from "../components/Layout/Layout";
+import Container from '../components/Container';
+import Layout from '../components/Layout/Layout';
const OrderConfirmPage = (props) => {
return (
-
-
Thank You!
-
We are now processing your order. If you have any concerns feel free to email us at customerservice@example.com
-
-
-
-
-
-
-
-
-
-
+
+
Thank You!
+
+ We are now processing your order. If you have any concerns feel free
+ to email us at customerservice@example.com
+
+
-
);
diff --git a/src/pages/product/sample.js b/src/pages/product/sample.js
index ef9c288..ffbfd58 100644
--- a/src/pages/product/sample.js
+++ b/src/pages/product/sample.js
@@ -1,4 +1,4 @@
-import React, {useState, useContext} from 'react';
+import React, { useState, useContext } from 'react';
import * as styles from './sample.module.css';
import Accordion from '../../components/Accordion';
@@ -11,7 +11,7 @@ import Gallery from '../../components/Gallery';
import SizeList from '../../components/SizeList';
import Split from '../../components/Split';
import SwatchList from '../../components/SwatchList';
-import Layout from "../../components/Layout/Layout";
+import Layout from '../../components/Layout/Layout';
import { generateMockProductData } from '../../helpers/mock';
import Icon from '../../components/Icons/Icon';
@@ -21,13 +21,14 @@ import { navigate } from 'gatsby';
import AddItemNotificationContext from '../../context/AddItemNotificationProvider';
const ProductPage = (props) => {
-
const ctxAddItemNotification = useContext(AddItemNotificationContext);
const showNotification = ctxAddItemNotification.showNotification;
const sampleProduct = generateMockProductData(1, 'sample')[0];
const [qty, setQty] = useState(0);
const [isWishlist, setIsWishlist] = useState(false);
- const [activeSwatch, setActiveSwatch] = useState(sampleProduct.colorOptions[0]);
+ const [activeSwatch, setActiveSwatch] = useState(
+ sampleProduct.colorOptions[0]
+ );
const [activeSize, setActiveSize] = useState(sampleProduct.sizeOptions[0]);
const suggestions = generateMockProductData(4, 'woman');
@@ -35,7 +36,14 @@ const ProductPage = (props) => {
-
+
@@ -49,7 +57,7 @@ const ProductPage = (props) => {
- {
-
{
- showNotification()} fullWidth level={'primary'}>Add to Bag
+ showNotification()}
+ fullWidth
+ level={'primary'}
+ >
+ Add to Bag
+
-
setIsWishlist(!isWishlist)}>
+
setIsWishlist(!isWishlist)}
+ >
-
@@ -85,37 +105,56 @@ const ProductPage = (props) => {
{sampleProduct.description}
-
- Product code: {sampleProduct.productCode}
-
+
Product code: {sampleProduct.productCode}
-
+
-
- {sampleProduct.description}
+
+
+ {sampleProduct.description}
+
-
- {sampleProduct.description}
+
+
+ {sampleProduct.description}
+
- {sampleProduct.description}
+
+ {sampleProduct.description}
+
-
-
+
-
navigate('/blog')}
bgColor={'var(--standard-light-grey)'}
diff --git a/src/pages/search.js b/src/pages/search.js
index ec7f2cc..29c2010 100644
--- a/src/pages/search.js
+++ b/src/pages/search.js
@@ -1,35 +1,45 @@
-import React from "react"
-import { parse } from "query-string";
+import React from 'react';
+import { parse } from 'query-string';
import Breadcrumbs from '../components/Breadcrumbs';
-import Layout from "../components/Layout/Layout";
+import Layout from '../components/Layout/Layout';
import Container from '../components/Container/Container';
-import ProductCardGrid from "../components/ProductCardGrid";
+import ProductCardGrid from '../components/ProductCardGrid';
-import { generateMockProductData } from "../helpers/mock";
+import { generateMockProductData } from '../helpers/mock';
import * as styles from './search.module.css';
const SearchPage = (props) => {
- const params = parse(props.location.search);
- const searchQuery = params.q ? params.q : '';
+ const params = parse(props.location.search);
+ const searchQuery = params.q ? params.q : '';
+
+ const sampleData = generateMockProductData(3, 'woman');
- const sampleData = generateMockProductData(3, 'woman');
-
return (
-
-
-
-
-
Search results for '{searchQuery}'
- 3 results
-
-
-
-
+
+
+
+
+
Search results for '{searchQuery}'
+ 3 results
+
+
+
+
- )
-}
+ );
+};
-export default SearchPage
+export default SearchPage;
diff --git a/src/pages/shop.js b/src/pages/shop.js
index 24d005f..e67a42f 100644
--- a/src/pages/shop.js
+++ b/src/pages/shop.js
@@ -7,7 +7,7 @@ import CardController from '../components/CardController';
import Container from '../components/Container';
import Chip from '../components/Chip';
import Icon from '../components/Icons/Icon';
-import Layout from "../components/Layout";
+import Layout from '../components/Layout';
import LayoutOption from '../components/LayoutOption';
import ProductCardGrid from '../components/ProductCardGrid';
import { generateMockProductData } from '../helpers/mock';
@@ -15,7 +15,6 @@ import Button from '../components/Button';
import Config from '../config.json';
const ShopPage = (props) => {
-
const [showFilter, setShowFilter] = useState(false);
const data = generateMockProductData(6, 'woman');
@@ -25,41 +24,55 @@ const ShopPage = (props) => {
}, []);
const escapeHandler = (e) => {
- if(e?.keyCode === undefined) return;
- if(e.keyCode === 27) setShowFilter(false);
- }
-
+ if (e?.keyCode === undefined) return;
+ if (e.keyCode === 27) setShowFilter(false);
+ };
+
return (
-
+
+ name={`Woman's Sweaters`}
+ subtitle={
+ 'Look to our women’s sweaters for modern takes on one-and-done dressing. From midis in bold prints to dramatic floor-sweeping styles and easy all-in-ones, our edit covers every mood.'
+ }
+ />
476 items
-
setShowFilter(!showFilter)}>
+
setShowFilter(!showFilter)}
+ >
Filters
-
-
setShowFilter(false)}
- visible={showFilter}
- filters={Config.filters}
+ setShowFilter(false)}
+ visible={showFilter}
+ filters={Config.filters}
/>
@@ -71,7 +84,9 @@ const ShopPage = (props) => {
6 of 456
- LOAD MORE
+
+ LOAD MORE
+
diff --git a/src/pages/shopV2.js b/src/pages/shopV2.js
index 99eff32..4e686b0 100644
--- a/src/pages/shopV2.js
+++ b/src/pages/shopV2.js
@@ -1,4 +1,4 @@
-import React, {useState} from 'react';
+import React, { useState } from 'react';
import * as styles from './shopV2.module.css';
import Accordion from '../components/Accordion';
@@ -6,7 +6,7 @@ import Banner from '../components/Banner';
import Breadcrumbs from '../components/Breadcrumbs';
import Checkbox from '../components/Checkbox';
import Container from '../components/Container';
-import Layout from "../components/Layout/Layout";
+import Layout from '../components/Layout/Layout';
import LayoutOption from '../components/LayoutOption';
import ProductCardGrid from '../components/ProductCardGrid';
import Button from '../components/Button';
@@ -19,46 +19,54 @@ const ShopV2Page = (props) => {
const filters = Config.filters;
const [filterState, setFilterState] = useState(filters);
-
+
const filterTick = (e, categoryIndex, labelIndex) => {
const filterStateCopy = [...filterState];
filterStateCopy[categoryIndex].items[labelIndex].value = !e.target.value;
setFilterState(filterStateCopy);
- }
+ };
return (
-
+
{filterState.map((category, categoryIndex) => {
- return(
-
-
- {category.items.map((item, itemIndex) => {
- return(
-
- filterTick(e,categoryIndex,itemIndex)}
- label={item.name}
- value={item.value}
- id={item.name}
- name={item.name}
- />
-
)
- })}
-
-
)
+ return (
+
+
+ {category.items.map((item, itemIndex) => {
+ return (
+
+
+ filterTick(e, categoryIndex, itemIndex)
+ }
+ label={item.name}
+ value={item.value}
+ id={item.name}
+ name={item.name}
+ />
+
+ );
+ })}
+
+
+ );
})}
@@ -69,9 +77,11 @@ const ShopV2Page = (props) => {
- 6 of 456
- LOAD MORE
-
+ 6 of 456
+
+ LOAD MORE
+
+
diff --git a/src/pages/signup.js b/src/pages/signup.js
index c975df4..850ba23 100644
--- a/src/pages/signup.js
+++ b/src/pages/signup.js
@@ -1,63 +1,68 @@
import React, { useState } from 'react';
import { navigate } from 'gatsby';
-import { validateEmail, validateStrongPassword, isEmpty } from '../helpers/general';
+import {
+ validateEmail,
+ validateStrongPassword,
+ isEmpty,
+} from '../helpers/general';
import * as styles from './signup.module.css';
import AttributeGrid from '../components/AttributeGrid/AttributeGrid';
-import Layout from "../components/Layout/Layout";
+import Layout from '../components/Layout/Layout';
import FormInputField from '../components/FormInputField/FormInputField';
import Button from '../components/Button';
const SignupPage = (props) => {
-
const initialState = {
firstName: '',
lastName: '',
email: '',
password: '',
- }
+ };
const errorState = {
firstName: '',
lastName: '',
email: '',
password: '',
- }
+ };
const [signupForm, setSignupForm] = useState(initialState);
const [errorForm, setErrorForm] = useState(errorState);
-
- const handleChange = (id ,e) => {
+
+ const handleChange = (id, e) => {
const tempForm = { ...signupForm, [id]: e };
setSignupForm(tempForm);
- }
+ };
const handleSubmit = (e) => {
e.preventDefault();
let validForm = true;
- const tempError = {...errorState};
+ const tempError = { ...errorState };
- if(isEmpty(signupForm.firstName) === true) {
+ if (isEmpty(signupForm.firstName) === true) {
tempError.firstName = 'Field required';
validForm = false;
- }
+ }
- if(isEmpty(signupForm.lastName) === true) {
+ if (isEmpty(signupForm.lastName) === true) {
tempError.lastName = 'Field required';
validForm = false;
- }
-
- if(validateEmail(signupForm.email) !== true) {
- tempError.email = 'Please use a valid email address, such as user@example.com.';
+ }
+
+ if (validateEmail(signupForm.email) !== true) {
+ tempError.email =
+ 'Please use a valid email address, such as user@example.com.';
validForm = false;
- }
+ }
- if(validateStrongPassword(signupForm.password) !== true) {
- tempError.password = 'Password must have at least 8 characters, 1 lowercase, 1 uppercase and 1 numeric character.';
+ if (validateStrongPassword(signupForm.password) !== true) {
+ tempError.password =
+ 'Password must have at least 8 characters, 1 lowercase, 1 uppercase and 1 numeric character.';
validForm = false;
}
- if(validForm === true) {
+ if (validForm === true) {
setErrorForm(errorState);
navigate('/accountSuccess');
window.localStorage.setItem('key', 'sampleToken');
@@ -65,17 +70,22 @@ const SignupPage = (props) => {
} else {
setErrorForm(tempError);
}
- }
+ };
return (
Create Account
- Please enter your the information below:
- handleSubmit(e)}>
-
-
+ Please enter your the information below:
+
+ handleSubmit(e)}
+ >
+ handleChange(id, e)}
@@ -84,7 +94,7 @@ const SignupPage = (props) => {
error={errorForm.firstName}
/>
- handleChange(id, e)}
@@ -93,7 +103,7 @@ const SignupPage = (props) => {
error={errorForm.lastName}
/>
- handleChange(id, e)}
@@ -102,7 +112,7 @@ const SignupPage = (props) => {
error={errorForm.email}
/>
- handleChange(id, e)}
@@ -111,10 +121,19 @@ const SignupPage = (props) => {
error={errorForm.password}
/>
- create account
- Have an account?
- navigate('/login')} fullWidth level={'secondary'}>log in
-
+
+ create account
+
+ Have an account?
+ navigate('/login')}
+ fullWidth
+ level={'secondary'}
+ >
+ log in
+
+
diff --git a/src/pages/styling.js b/src/pages/styling.js
index f41e49b..a057d85 100644
--- a/src/pages/styling.js
+++ b/src/pages/styling.js
@@ -1,63 +1,78 @@
-import * as React from "react"
+import * as React from 'react';
import Button from '../components/Button';
import Container from '../components/Container';
-import Layout from "../components/Layout/Layout";
+import Layout from '../components/Layout/Layout';
import * as styles from './styling.module.css';
const StylingPage = () => {
return (
-
-
+
+
-
Styling Guide
-
-
Heading 1
-
Heading 2
-
Heading 3
-
Heading 4
-
Quote
+
Styling Guide
+
+
Heading 1
+
Heading 2
+
Heading 3
+
Heading 4
+
Quote
+
+
+
Body 1
+
Body 2
+
Body 3
+
Body 4
+
Button
+
+
Branding Guide
+
+
+ Black
+ #000000
-
-
Body 1
-
Body 2
-
Body 3
-
Body 4
-
Button
+
+ Gold
+ #B59F66
-
Branding Guide
-
-
- Black
- #000000
-
-
- Gold
- #B59F66
-
-
- Tarmak
- #545250
-
-
- Milk
- #FCFAF6
-
-
+
+ Tarmak
+ #545250
-
Buttons
-
-
Enabled - Primary
-
Hovered - Primary
-
Disabled - Primary
-
Enabled - Secondary
-
Hovered - Secondary
-
Disabled - Secondary
+
+ Milk
+ #FCFAF6
-
+
Buttons
+
+ Enabled - Primary
+ Hovered - Primary
+
+ Disabled - Primary
+
+ Enabled - Secondary
+ Hovered - Secondary
+
+ Disabled - Secondary
+
+
+
+
- )
-}
+ );
+};
-export default StylingPage
+export default StylingPage;
diff --git a/src/pages/support.js b/src/pages/support.js
index 94d9a32..07f5685 100644
--- a/src/pages/support.js
+++ b/src/pages/support.js
@@ -4,28 +4,27 @@ import * as styles from './support.module.css';
import Banner from '../components/Banner';
import Contact from '../components/Contact';
-import Layout from "../components/Layout/Layout";
+import Layout from '../components/Layout/Layout';
import ThemeLink from '../components/ThemeLink';
import Policy from '../components/Policy';
import Container from '../components/Container';
const SupportPage = (props) => {
-
const subpages = [
- {title: 'Shipping', key: 'shipping'},
- {title: 'Returns', key: 'returns'},
- {title: 'Payments & Security', key: 'payments'},
- {title: 'Terms & Conditions', key: 'terms'},
- {title: 'Contact Us', key: 'contact'},
- {title: 'Privacy Policy', key: 'policy'},
+ { title: 'Shipping', key: 'shipping' },
+ { title: 'Returns', key: 'returns' },
+ { title: 'Payments & Security', key: 'payments' },
+ { title: 'Terms & Conditions', key: 'terms' },
+ { title: 'Contact Us', key: 'contact' },
+ { title: 'Privacy Policy', key: 'policy' },
];
-
+
const [current, setCurrent] = useState(subpages[4]);
const renderElement = (key) => {
- let tempElement =
+ let tempElement =
;
- switch(key) {
+ switch (key) {
case 'contact':
tempElement =
;
break;
@@ -48,30 +47,29 @@ const SupportPage = (props) => {
break;
}
return tempElement;
- }
+ };
useEffect(() => {
- window.scrollTo(0, 0)
- }, [])
+ window.scrollTo(0, 0);
+ }, []);
useEffect(() => {
- if(props.location.hash !== '' && props.location.hash !== undefined) {
+ if (props.location.hash !== '' && props.location.hash !== undefined) {
const hash = props.location.hash.substring(1);
const tempCurrent = subpages.filter((detail) => detail.key === hash)[0];
- if(tempCurrent.key !== current.key) {
+ if (tempCurrent.key !== current.key) {
setCurrent(tempCurrent);
window.scrollTo(0, 475);
}
}
- // eslint-disable-next-line react-hooks/exhaustive-deps
+ // eslint-disable-next-line react-hooks/exhaustive-deps
}, [props.location]);
-
return (
-
{
{subpages.map((details, index) => {
- return(
- {
- navigate(`/support#${details.key}`);
-
- }}
- key={details.key}
- isActive = {current.key === details.key}
- to={`/support#${details.key}`} >
+ return (
+ {
+ navigate(`/support#${details.key}`);
+ }}
+ key={details.key}
+ isActive={current.key === details.key}
+ to={`/support#${details.key}`}
+ >
{details.title}
-
+
);
})}
-
+
-
- {subpages.map((details) => {
- return(
-
- {renderElement(details.key)}
-
- )
- })}
-
+
+ {subpages.map((details) => {
+ return (
+
+ {renderElement(details.key)}
+
+ );
+ })}
+
-
);
diff --git a/src/plop/plopfile.js b/src/plop/plopfile.js
index b03968b..809e92a 100644
--- a/src/plop/plopfile.js
+++ b/src/plop/plopfile.js
@@ -1,80 +1,79 @@
// eslint-disable-next-line no-undef
module.exports = (plop) => {
- plop.setGenerator('component', {
- description: 'Create a component',
- prompts: [
- {
- type: 'input',
- name: 'name',
- message: 'What is your component name?',
- },
- {
- type: 'input',
- name: 'description',
- message: 'Provide a short description for the component',
- },
- ],
- actions: [
- {
- type: 'add',
- path: './../components/{{pascalCase name}}/index.js',
- templateFile: 'base.index.hbs',
- },
- {
- type: 'add',
- path: './../components/{{pascalCase name}}/{{pascalCase name}}.js',
- templateFile: 'base.js.hbs',
- },
- {
- type: 'add',
- path: './../components/{{pascalCase name}}/{{pascalCase name}}.module.css',
- templateFile: 'base.module.css.hbs',
- },
- {
- type: 'add',
- path: './../components/{{pascalCase name}}/readme.md',
- templateFile: 'base.readme.hbs',
- },
- ],
- });
- plop.setGenerator('icon', {
- description: 'Adds an icon',
- prompts: [
- {
- type: 'input',
- name: 'name',
- message: 'What is your icon name?',
- },
- ],
- actions: [
- {
- type: 'add',
- path: './../components/Icons/{{pascalCase name}}.js',
- templateFile: 'base.icon.hbs',
- },
- ],
- });
- plop.setGenerator('page', {
- description: 'Create a page',
- prompts: [
- {
- type: 'input',
- name: 'name',
- message: 'What is your page name?',
- },
- ],
- actions: [
- {
- type: 'add',
- path: './../pages/{{camelCase name}}.js',
- templateFile: 'base.page.hbs',
- },
- {
- type: 'add',
- path: './../pages/{{camelCase name}}.module.css',
- templateFile: 'base.module.css.hbs',
- },
- ],
- });
- };
-
\ No newline at end of file
+ plop.setGenerator('component', {
+ description: 'Create a component',
+ prompts: [
+ {
+ type: 'input',
+ name: 'name',
+ message: 'What is your component name?',
+ },
+ {
+ type: 'input',
+ name: 'description',
+ message: 'Provide a short description for the component',
+ },
+ ],
+ actions: [
+ {
+ type: 'add',
+ path: './../components/{{pascalCase name}}/index.js',
+ templateFile: 'base.index.hbs',
+ },
+ {
+ type: 'add',
+ path: './../components/{{pascalCase name}}/{{pascalCase name}}.js',
+ templateFile: 'base.js.hbs',
+ },
+ {
+ type: 'add',
+ path: './../components/{{pascalCase name}}/{{pascalCase name}}.module.css',
+ templateFile: 'base.module.css.hbs',
+ },
+ {
+ type: 'add',
+ path: './../components/{{pascalCase name}}/readme.md',
+ templateFile: 'base.readme.hbs',
+ },
+ ],
+ });
+ plop.setGenerator('icon', {
+ description: 'Adds an icon',
+ prompts: [
+ {
+ type: 'input',
+ name: 'name',
+ message: 'What is your icon name?',
+ },
+ ],
+ actions: [
+ {
+ type: 'add',
+ path: './../components/Icons/{{pascalCase name}}.js',
+ templateFile: 'base.icon.hbs',
+ },
+ ],
+ });
+ plop.setGenerator('page', {
+ description: 'Create a page',
+ prompts: [
+ {
+ type: 'input',
+ name: 'name',
+ message: 'What is your page name?',
+ },
+ ],
+ actions: [
+ {
+ type: 'add',
+ path: './../pages/{{camelCase name}}.js',
+ templateFile: 'base.page.hbs',
+ },
+ {
+ type: 'add',
+ path: './../pages/{{camelCase name}}.module.css',
+ templateFile: 'base.module.css.hbs',
+ },
+ ],
+ });
+};