diff --git a/babel.config.js b/babel.config.js
new file mode 100644
index 000000000..cd5b145c6
--- /dev/null
+++ b/babel.config.js
@@ -0,0 +1,70 @@
+module.exports = function (api) {
+ const isProd = process.env.APPMODE === "production";
+ api.cache(!isProd);
+
+ const generateScopedName = isProd
+ ? "[hash:base64:6]"
+ : "self_service_[path][name]___[local]___[hash:base64:6]";
+ return {
+ presets: ["@babel/preset-env", "@babel/preset-react"],
+ plugins: [
+ [
+ "@babel/plugin-transform-runtime",
+ {
+ useESModules: true,
+ regenerator: false,
+ },
+ ],
+ [
+ "react-css-modules",
+ {
+ filetypes: {
+ ".scss": {
+ syntax: "postcss-scss",
+ },
+ },
+ generateScopedName,
+ },
+ ],
+ [
+ "inline-react-svg",
+ {
+ "svgo": {
+ "plugins": [
+ {
+ "cleanupIDs": false
+ }
+ ]
+ }
+ }
+ ],
+ ],
+ env: {
+ test: {
+ presets: [
+ [
+ "@babel/preset-env",
+ {
+ targets: "current node",
+ },
+ ],
+ ],
+ plugins: [
+ [
+ "module-resolver",
+ {
+ alias: {
+ styles: "./src/styles",
+ components: "./src/components",
+ hooks: "./src/hooks",
+ utils: "./src/utils",
+ constants: "./src/constants",
+ services: "./src/services",
+ },
+ },
+ ],
+ ],
+ },
+ },
+ };
+};
diff --git a/config/dev.js b/config/dev.js
new file mode 100644
index 000000000..99a848249
--- /dev/null
+++ b/config/dev.js
@@ -0,0 +1,38 @@
+module.exports = {
+ /**
+ * URL of Topcoder Community Website
+ */
+ TOPCODER_COMMUNITY_WEBSITE_URL: "https://topcoder-dev.com",
+ TERMS_URL:
+ "https://www.topcoder-dev.com/challenges/terms/detail/317cd8f9-d66c-4f2a-8774-63c612d99cd4",
+ PRIVACY_POLICY_URL: "https://www.topcoder-dev.com/policy",
+ SIGN_IN_URL: `https://accounts-auth0.topcoder-dev.com/?retUrl=https%3A%2F%2Fplatform.topcoder-dev.com%2Fself-service%2Fwizard®Source=selfService`,
+ SIGN_UP_URL: `https://accounts-auth0.topcoder-dev.com/?retUrl=https%3A%2F%2Fplatform.topcoder-dev.com%2Fself-service%2Fwizard®Source=selfService&mode=signUp`,
+ /**
+ * URL of Topcoder Connect Website
+ */
+ CONNECT_WEBSITE_URL: "https://connect.topcoder-dev.com",
+ VANILLA_EMBED_JS: "https://vanilla.topcoder-dev.com/js/embed.js",
+ VANILLA_EMBED_TYPE: "mfe",
+ VANILLA_FORUM_API: "https://vanilla.topcoder-dev.com/api/v2",
+ VANILLA_ACCESS_TOKEN: "va.JApNvUOx3549h20I6tnl1kOQDc75NDIp.0jG3dA.EE3gZgV",
+
+ API: {
+ V5: "https://api.topcoder-dev.com/v5",
+ V3: "https://api.topcoder-dev.com/v3",
+ },
+
+ STRIPE: {
+ API_KEY: "pk_test_rfcS49MHRVUKomQ9JgSH7Xqz",
+ API_VERSION: "2020-08-27",
+ CUSTOMER_TOKEN:
+ "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJyb2xlcyI6WyJUb3Bjb2RlciBVc2VyIl0sImlzcyI6Imh0dHBzOi8vYXBpLnRvcGNvZGVyLWRldi5jb20iLCJoYW5kbGUiOiJ0ZXN0MSIsImV4cCI6MjU2MzA3NjY4OSwidXNlcklkIjoiNDAwNTEzMzMiLCJpYXQiOjE0NjMwNzYwODksImVtYWlsIjoidGVzdEB0b3Bjb2Rlci5jb20iLCJqdGkiOiJiMzNiNzdjZC1iNTJlLTQwZmUtODM3ZS1iZWI4ZTBhZTZhNGEifQ.jl6Lp_friVNwEP8nfsfmL-vrQFzOFp2IfM_HC7AwGcg",
+ ADMIN_TOKEN:
+ "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJyb2xlcyI6WyJUb3Bjb2RlciBVc2VyIiwiYWRtaW5pc3RyYXRvciJdLCJpc3MiOiJodHRwczovL2FwaS50b3Bjb2Rlci1kZXYuY29tIiwiaGFuZGxlIjoidGVzdDEiLCJleHAiOjI1NjMwNzY2ODksInVzZXJJZCI6IjQwMDUxMzMzIiwiaWF0IjoxNDYzMDc2MDg5LCJlbWFpbCI6InRlc3RAdG9wY29kZXIuY29tIiwianRpIjoiYjMzYjc3Y2QtYjUyZS00MGZlLTgzN2UtYmViOGUwYWU2YTRhIn0.wKWUe0-SaiFVN-VR_-GwgFlvWaDkSbc8H55ktb9LAVw",
+ },
+ /**
+ * Expire time period of auto saved intake form: 24 hours
+ */
+ AUTO_SAVED_COOKIE_EXPIRED_IN: 24 * 60,
+ TIME_ZONE: "Europe/London",
+};
diff --git a/config/index.js b/config/index.js
new file mode 100644
index 000000000..4cbf464b5
--- /dev/null
+++ b/config/index.js
@@ -0,0 +1,14 @@
+/* global process */
+
+module.exports = (() => {
+ const env = process.env.APPENV || "dev";
+
+ console.info(`APPENV: "${env}"`);
+
+ // for security reason don't let to require any arbitrary file defined in process.env
+ if (["prod", "dev"].indexOf(env) < 0) {
+ return require("./dev");
+ }
+
+ return require("./" + env);
+})();
diff --git a/config/local.js b/config/local.js
new file mode 100644
index 000000000..7af0bba50
--- /dev/null
+++ b/config/local.js
@@ -0,0 +1,3 @@
+module.exports = {
+ COMMUNITY_ADMIN_URL: "",
+};
diff --git a/config/prod.js b/config/prod.js
new file mode 100644
index 000000000..ff5d082bc
--- /dev/null
+++ b/config/prod.js
@@ -0,0 +1,39 @@
+module.exports = {
+ /**
+ * URL of Topcoder Community Website
+ */
+ TOPCODER_COMMUNITY_WEBSITE_URL: "https://topcoder.com",
+ TERMS_URL:
+ "https://www.topcoder.com/challenges/terms/detail/564a981e-6840-4a5c-894e-d5ad22e9cd6f",
+ PRIVACY_POLICY_URL: "https://www.topcoder.com/policy",
+ SIGN_IN_URL: `https://accounts-auth0.topcoder.com/?retUrl=https%3A%2F%2Fplatform.topcoder.com%2Fself-service%2Fwizard®Source=selfService`,
+ SIGN_UP_URL: `https://accounts-auth0.topcoder.com/?retUrl=https%3A%2F%2Fplatform.topcoder.com%2Fself-service%2Fwizard®Source=selfService&mode=signUp`,
+
+ /**
+ * URL of Topcoder Connect Website
+ */
+ CONNECT_WEBSITE_URL: "https://connect.topcoder.com",
+ VANILLA_EMBED_JS: "https://discussions.topcoder.com/js/embed.js",
+ VANILLA_EMBED_TYPE: "standard",
+ VANILLA_FORUM_API: "https://vanilla.topcoder.com/api/v2",
+ VANILLA_ACCESS_TOKEN: "va.JApNvUOx3549h20I6tnl1kOQDc75NDIp.0jG3dA.EE3gZgV",
+
+ API: {
+ V5: "https://api.topcoder.com/v5",
+ V3: "https://api.topcoder.com/v3",
+ },
+
+ STRIPE: {
+ API_KEY: "pk_live_m3bCBVSfkfMOEp3unZFRsHXi",
+ API_VERSION: "2020-08-27",
+ CUSTOMER_TOKEN:
+ "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJyb2xlcyI6WyJUb3Bjb2RlciBVc2VyIl0sImlzcyI6Imh0dHBzOi8vYXBpLnRvcGNvZGVyLWRldi5jb20iLCJoYW5kbGUiOiJ0ZXN0MSIsImV4cCI6MjU2MzA3NjY4OSwidXNlcklkIjoiNDAwNTEzMzMiLCJpYXQiOjE0NjMwNzYwODksImVtYWlsIjoidGVzdEB0b3Bjb2Rlci5jb20iLCJqdGkiOiJiMzNiNzdjZC1iNTJlLTQwZmUtODM3ZS1iZWI4ZTBhZTZhNGEifQ.jl6Lp_friVNwEP8nfsfmL-vrQFzOFp2IfM_HC7AwGcg",
+ ADMIN_TOKEN:
+ "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJyb2xlcyI6WyJUb3Bjb2RlciBVc2VyIiwiYWRtaW5pc3RyYXRvciJdLCJpc3MiOiJodHRwczovL2FwaS50b3Bjb2Rlci1kZXYuY29tIiwiaGFuZGxlIjoidGVzdDEiLCJleHAiOjI1NjMwNzY2ODksInVzZXJJZCI6IjQwMDUxMzMzIiwiaWF0IjoxNDYzMDc2MDg5LCJlbWFpbCI6InRlc3RAdG9wY29kZXIuY29tIiwianRpIjoiYjMzYjc3Y2QtYjUyZS00MGZlLTgzN2UtYmViOGUwYWU2YTRhIn0.wKWUe0-SaiFVN-VR_-GwgFlvWaDkSbc8H55ktb9LAVw",
+ },
+ /**
+ * Expire time period of auto saved intake form: 24 hours
+ */
+ AUTO_SAVED_COOKIE_EXPIRED_IN: 24 * 60,
+ TIME_ZONE: "Europe/London",
+};
diff --git a/package.json b/package.json
index a4abcac26..c07ef512c 100644
--- a/package.json
+++ b/package.json
@@ -5,6 +5,7 @@
"scripts": {
"start": "sh start-ssl.sh",
"start:bsouza": "sh start-ssl-bsouza.sh",
+ "start:mfe": "cross-env webpack-dev-server --port 8519 --host 0.0.0.0",
"build": "react-scripts build",
"build:dev": "sh build-dev.sh",
"build:prod": "sh build-prod.sh",
@@ -17,32 +18,98 @@
"dependencies": {
"@datadog/browser-logs": "^4.5.0",
"@heroicons/react": "^1.0.6",
+ "@reach/router": "^1.3.4",
+ "apexcharts": "^3.35.3",
"axios": "^0.26.1",
"browser-cookies": "^1.2.0",
"classnames": "^2.3.1",
+ "crypto-js": "^4.1.1",
+ "lodash": "^4.17.21",
+ "moment": "^2.29.3",
+ "moment-timezone": "^0.5.34",
+ "prop-types": "^15.8.1",
+ "rc-checkbox": "^2.3.2",
"react": "^17.0.2",
+ "react-apexcharts": "^1.4.0",
"react-dom": "^17.0.2",
+ "react-elastic-carousel": "^0.11.5",
"react-gtm-module": "^2.0.11",
+ "react-redux": "^8.0.2",
+ "react-redux-toastr": "^7.6.8",
"react-responsive-modal": "^6.2.0",
"react-router-dom": "^6.2.1",
"react-scripts": "5.0.0",
+ "react-select": "^5.3.2",
+ "react-spinners": "^0.13.1",
"react-toastify": "^8.2.0",
+ "react-tooltip": "^4.2.21",
+ "redux": "^4.2.0",
+ "redux-logger": "^3.0.6",
+ "redux-promise-middleware": "^6.1.2",
+ "redux-thunk": "^2.4.1",
"sass": "^1.49.8",
+ "styled-components": "^5.3.5",
"tc-auth-lib": "topcoder-platform/tc-auth-lib#1.0.3",
"typescript": "^4.4.2",
+ "uuid": "^8.3.2",
"web-vitals": "^2.1.0"
},
"devDependencies": {
+ "@babel/core": "^7.7.5",
+ "@babel/plugin-syntax-jsx": "^7.17.12",
+ "@babel/plugin-transform-runtime": "^7.8.3",
+ "@babel/preset-env": "^7.7.6",
+ "@babel/preset-react": "^7.7.4",
+ "@babel/preset-typescript": "^7.16.7",
+ "@babel/runtime": "^7.8.7",
+ "@stripe/react-stripe-js": "1.7.2",
+ "@stripe/stripe-js": "1.29.0",
"@testing-library/jest-dom": "^5.14.1",
"@testing-library/react": "^12.0.0",
"@testing-library/user-event": "^13.2.1",
"@types/axios": "^0.14.0",
"@types/jest": "^27.0.1",
+ "@types/lodash": "^4.14.182",
"@types/node": "^16.7.13",
+ "@types/reach__router": "^1.3.10",
"@types/react": "^17.0.20",
"@types/react-dom": "^17.0.9",
"@types/react-gtm-module": "^2.0.1",
- "@types/react-router-dom": "^5.3.3"
+ "@types/react-redux-toastr": "^7.6.2",
+ "@types/react-router-dom": "^5.3.3",
+ "@types/systemjs": "^6.1.0",
+ "autoprefixer": "^9.8.6",
+ "babel-eslint": "^11.0.0-beta.2",
+ "babel-jest": "^24.9.0",
+ "babel-plugin-inline-react-svg": "^1.1.2",
+ "babel-plugin-module-resolver": "^4.0.0",
+ "babel-plugin-react-css-modules": "^5.2.6",
+ "concurrently": "^5.0.1",
+ "config": "^3.3.6",
+ "cross-env": "^7.0.2",
+ "eslint": "^6.7.2",
+ "eslint-config-prettier": "^6.7.0",
+ "eslint-config-react-important-stuff": "^2.0.0",
+ "eslint-plugin-prettier": "^3.1.1",
+ "file-loader": "^6.2.0",
+ "identity-obj-proxy": "^3.0.0",
+ "jest": "^25.2.7",
+ "jest-cli": "^25.2.7",
+ "postcss-loader": "^4.0.4",
+ "postcss-scss": "^3.0.2",
+ "prettier": "^2.0.4",
+ "pretty-quick": "^2.0.1",
+ "resolve-url-loader": "^3.1.2",
+ "sass": "^1.48.0",
+ "sass-loader": "^10.0.5",
+ "single-spa-react": "^2.14.0",
+ "style-loader": "^2.0.0",
+ "systemjs-webpack-interop": "^2.1.2",
+ "webpack": "^4.41.2",
+ "webpack-cli": "^3.3.10",
+ "webpack-config-single-spa-react": "^1.0.3",
+ "webpack-dev-server": "^3.9.0",
+ "webpack-merge": "^4.2.2"
},
"eslintConfig": {
"extends": [
@@ -66,4 +133,4 @@
]
},
"types": "./types/index.d.ts"
-}
\ No newline at end of file
+}
diff --git a/src-ts/App.test.tsx b/src-ts/App.test.tsx
deleted file mode 100644
index 112d36d48..000000000
--- a/src-ts/App.test.tsx
+++ /dev/null
@@ -1,4 +0,0 @@
-describe(' ', () => {
-
- test('renders the body of the application', () => {})
-})
diff --git a/src-ts/header/Header.test.tsx b/src-ts/header/Header.test.tsx
deleted file mode 100644
index d1922dc20..000000000
--- a/src-ts/header/Header.test.tsx
+++ /dev/null
@@ -1,6 +0,0 @@
-import '@testing-library/jest-dom'
-
-describe('', () => {
-
- test('it should render the header', () => {})
-})
diff --git a/src-ts/header/logo/Logo.test.tsx b/src-ts/header/logo/Logo.test.tsx
deleted file mode 100644
index a212db06a..000000000
--- a/src-ts/header/logo/Logo.test.tsx
+++ /dev/null
@@ -1,11 +0,0 @@
-import '@testing-library/jest-dom'
-
-describe(' is on the home page', () => {
-
- test('it should only display the logo and should NOT be a link', () => { })
-})
-
-describe(' is NOT on the home page', () => {
-
- test('it should display the logo and have it be a link', () => { })
-})
diff --git a/src-ts/header/tool-selectors/ToolSelectors.test.tsx b/src-ts/header/tool-selectors/ToolSelectors.test.tsx
deleted file mode 100644
index 0a8b36550..000000000
--- a/src-ts/header/tool-selectors/ToolSelectors.test.tsx
+++ /dev/null
@@ -1,6 +0,0 @@
-import '@testing-library/jest-dom'
-
-describe(' ', () => {
-
- test('it should render the tool sections', () => { })
-})
diff --git a/src-ts/header/tool-selectors/tool-selectors-narrow/ToolSelectorsNarrow.test.tsx b/src-ts/header/tool-selectors/tool-selectors-narrow/ToolSelectorsNarrow.test.tsx
deleted file mode 100644
index f29765cf5..000000000
--- a/src-ts/header/tool-selectors/tool-selectors-narrow/ToolSelectorsNarrow.test.tsx
+++ /dev/null
@@ -1,11 +0,0 @@
-import '@testing-library/jest-dom'
-
-describe(' is closed', () => {
-
- test('it should render the tool-selectors-narrow-closed icon', () => { })
-})
-
-describe(' is open', () => {
-
- test('it should render the tool-selectors-narrow-open icon', () => { })
-})
diff --git a/src-ts/header/tool-selectors/tool-selectors-narrow/tool-selector-narrow/ToolSelectorNarrow.test.tsx b/src-ts/header/tool-selectors/tool-selectors-narrow/tool-selector-narrow/ToolSelectorNarrow.test.tsx
deleted file mode 100644
index a80e60ec4..000000000
--- a/src-ts/header/tool-selectors/tool-selectors-narrow/tool-selector-narrow/ToolSelectorNarrow.test.tsx
+++ /dev/null
@@ -1,6 +0,0 @@
-import '@testing-library/jest-dom'
-
-describe(' is NOT open', () => {
-
- test('it should render the tool-selector-narrow icon', () => { })
-})
diff --git a/src-ts/header/tool-selectors/tool-selectors-wide/ToolSelectorsWide.test.tsx b/src-ts/header/tool-selectors/tool-selectors-wide/ToolSelectorsWide.test.tsx
deleted file mode 100644
index c17488673..000000000
--- a/src-ts/header/tool-selectors/tool-selectors-wide/ToolSelectorsWide.test.tsx
+++ /dev/null
@@ -1,6 +0,0 @@
-import '@testing-library/jest-dom'
-
-describe(' ', () => {
-
- test('it should render the tool selectors in wide format', () => { })
-})
diff --git a/src-ts/header/tool-selectors/tool-selectors-wide/tool-selector-wide/ToolSelectorWide.test.tsx b/src-ts/header/tool-selectors/tool-selectors-wide/tool-selector-wide/ToolSelectorWide.test.tsx
deleted file mode 100644
index a3ec22da7..000000000
--- a/src-ts/header/tool-selectors/tool-selectors-wide/tool-selector-wide/ToolSelectorWide.test.tsx
+++ /dev/null
@@ -1,16 +0,0 @@
-import '@testing-library/jest-dom'
-
-describe(' ', () => {
-
- test('it should render the tools selector in wide format', () => { })
-})
-
-describe(' tool is the currently active tool', () => {
-
- test('it should render the tools selector active indicator', () => { })
-})
-
-describe(' tool is NOT the currently active tool', () => {
-
- test('it should NOT render the tools selector active indicator', () => { })
-})
diff --git a/src-ts/header/utility-selectors/UtilitySelector/ProfileSelector/ProfileSelector.test.tsx b/src-ts/header/utility-selectors/UtilitySelector/ProfileSelector/ProfileSelector.test.tsx
deleted file mode 100644
index ddf29e295..000000000
--- a/src-ts/header/utility-selectors/UtilitySelector/ProfileSelector/ProfileSelector.test.tsx
+++ /dev/null
@@ -1,29 +0,0 @@
-import '@testing-library/jest-dom'
-
-describe(' when the props have NOT been initialized', () => {
-
- test('it should NOT display the ProfileSelector', () => { })
-})
-
-describe(' when the props have been initialized', () => {
-
- test('it should display the ProfileSelector', () => { })
-})
-
-describe(' when the props have been initialized and there NOT is a profile', () => {
-
- test('it should display the login', () => { })
-
- test('it should display the signup', () => { })
-
- test('it should NOT display the Avatar', () => { })
-})
-
-describe(' when the props have been initialized and there is a profile', () => {
-
- test('it should NOT display the login', () => { })
-
- test('it should NOT display the signup', () => { })
-
- test('it should display the Avatar', () => { })
-})
diff --git a/src-ts/header/utility-selectors/UtilitySelector/ProfileSelector/profile-logged-in/ProfileLoggedIn.test.tsx b/src-ts/header/utility-selectors/UtilitySelector/ProfileSelector/profile-logged-in/ProfileLoggedIn.test.tsx
deleted file mode 100644
index ab432ac63..000000000
--- a/src-ts/header/utility-selectors/UtilitySelector/ProfileSelector/profile-logged-in/ProfileLoggedIn.test.tsx
+++ /dev/null
@@ -1,6 +0,0 @@
-import '@testing-library/jest-dom'
-
-describe(' ', () => {
-
- test('it should display the ProfileLoggedIn', () => { })
-})
diff --git a/src-ts/header/utility-selectors/UtilitySelector/ProfileSelector/profile-logged-in/profile-panel/ProfilePanel.test.tsx b/src-ts/header/utility-selectors/UtilitySelector/ProfileSelector/profile-logged-in/profile-panel/ProfilePanel.test.tsx
deleted file mode 100644
index fc87dd23a..000000000
--- a/src-ts/header/utility-selectors/UtilitySelector/ProfileSelector/profile-logged-in/profile-panel/ProfilePanel.test.tsx
+++ /dev/null
@@ -1,14 +0,0 @@
-import '@testing-library/jest-dom'
-
-describe(' ', () => {
-
- test('it should display the ProfilePanel', () => {
- /* const renderResult: RenderResult = render(
-
-
-
- )
- const ProfilePanelElement: HTMLElement | null = renderResult.container.querySelector('.profile-selector')
- expect(ProfilePanelElement).toBeNull() */
- })
-})
diff --git a/src-ts/header/utility-selectors/UtilitySelector/ProfileSelector/profile-not-logged-in/ProfileNotLoggedIn.test.tsx b/src-ts/header/utility-selectors/UtilitySelector/ProfileSelector/profile-not-logged-in/ProfileNotLoggedIn.test.tsx
deleted file mode 100644
index 1363fa83a..000000000
--- a/src-ts/header/utility-selectors/UtilitySelector/ProfileSelector/profile-not-logged-in/ProfileNotLoggedIn.test.tsx
+++ /dev/null
@@ -1,6 +0,0 @@
-import '@testing-library/jest-dom'
-
-describe(' ', () => {
-
- test('it should display the ProfileNotLoggedIn', () => {})
-})
diff --git a/src-ts/header/utility-selectors/UtilitySelectors.test.tsx b/src-ts/header/utility-selectors/UtilitySelectors.test.tsx
deleted file mode 100644
index fa74ea43b..000000000
--- a/src-ts/header/utility-selectors/UtilitySelectors.test.tsx
+++ /dev/null
@@ -1,6 +0,0 @@
-import '@testing-library/jest-dom'
-
-describe(' ', () => {
-
- test('it should display the utility selectors', () => { })
-})
diff --git a/src-ts/lib/avatar/Avatar.test.tsx b/src-ts/lib/avatar/Avatar.test.tsx
deleted file mode 100644
index aedefe45f..000000000
--- a/src-ts/lib/avatar/Avatar.test.tsx
+++ /dev/null
@@ -1,19 +0,0 @@
-import '@testing-library/jest-dom'
-
-describe(' and there is NOT a profile', () => {
-
- test('it should NOT display the Avatar', () => {})
-})
-
-describe(' and there is a profile', () => {
-
- test('if there is NO photoURL, firstname, or lastname, it should NOT display the Avatar', () => { })
-
- test('if there is a photoURL, it should display the Avatar', () => { })
-
- test('if there is a photoURL, it should NOT display the Avatar letters', () => { })
-
- test('if there is NOT a photoURL, it should display the Avatar Letters', () => { })
-
- test('if there is NOT an avatar URL, it should NOT display the Avatar', () => {})
-})
diff --git a/src-ts/lib/button/Button.test.tsx b/src-ts/lib/button/Button.test.tsx
deleted file mode 100644
index 0dae599ff..000000000
--- a/src-ts/lib/button/Button.test.tsx
+++ /dev/null
@@ -1,6 +0,0 @@
-import '@testing-library/jest-dom'
-
-describe(' ', () => {
-
- test('it should render the content', () => { })
-})
diff --git a/src-ts/lib/card/Card.test.tsx b/src-ts/lib/card/Card.test.tsx
deleted file mode 100644
index 2544dd797..000000000
--- a/src-ts/lib/card/Card.test.tsx
+++ /dev/null
@@ -1,6 +0,0 @@
-import '@testing-library/jest-dom'
-
-describe(' ', () => {
-
- test('it should render the content', () => { })
-})
diff --git a/src-ts/lib/content-layout/ContentLayout.test.tsx b/src-ts/lib/content-layout/ContentLayout.test.tsx
deleted file mode 100644
index f17aa4a27..000000000
--- a/src-ts/lib/content-layout/ContentLayout.test.tsx
+++ /dev/null
@@ -1,6 +0,0 @@
-import '@testing-library/jest-dom'
-
-describe(' ', () => {
-
- test('it should render the content', () => { })
-})
diff --git a/src-ts/lib/form/Form.test.tsx b/src-ts/lib/form/Form.test.tsx
deleted file mode 100644
index d76b7e9ce..000000000
--- a/src-ts/lib/form/Form.test.tsx
+++ /dev/null
@@ -1,6 +0,0 @@
-import '@testing-library/jest-dom'
-
-describe('
', () => {
-
- test('it should render the form', () => {})
-})
diff --git a/src-ts/lib/form/form-inputs/FormInputs.test.tsx b/src-ts/lib/form/form-inputs/FormInputs.test.tsx
deleted file mode 100644
index b96f3e912..000000000
--- a/src-ts/lib/form/form-inputs/FormInputs.test.tsx
+++ /dev/null
@@ -1,6 +0,0 @@
-import '@testing-library/jest-dom'
-
-describe(' ', () => {
-
- test('it should render the form inputs', () => {})
-})
diff --git a/src-ts/lib/form/form-inputs/form-input-row/FormInputRow.test.tsx b/src-ts/lib/form/form-inputs/form-input-row/FormInputRow.test.tsx
deleted file mode 100644
index 145faf8be..000000000
--- a/src-ts/lib/form/form-inputs/form-input-row/FormInputRow.test.tsx
+++ /dev/null
@@ -1,6 +0,0 @@
-import '@testing-library/jest-dom'
-
-describe(' ', () => {
-
- test('it should render the form input row', () => {})
-})
diff --git a/src-ts/lib/form/form-inputs/form-input/input-text/InputText.test.tsx b/src-ts/lib/form/form-inputs/form-input/input-text/InputText.test.tsx
deleted file mode 100644
index 0d1a3f313..000000000
--- a/src-ts/lib/form/form-inputs/form-input/input-text/InputText.test.tsx
+++ /dev/null
@@ -1,6 +0,0 @@
-import '@testing-library/jest-dom'
-
-describe(' ', () => {
-
- test('it should display the InputText', () => { })
-})
diff --git a/src-ts/lib/form/form-inputs/form-input/input-textarea/InputTextarea.test.tsx b/src-ts/lib/form/form-inputs/form-input/input-textarea/InputTextarea.test.tsx
deleted file mode 100644
index 463dc62c9..000000000
--- a/src-ts/lib/form/form-inputs/form-input/input-textarea/InputTextarea.test.tsx
+++ /dev/null
@@ -1,6 +0,0 @@
-import '@testing-library/jest-dom'
-
-describe(' ', () => {
-
- test('it should display the InputTextarea', () => { })
-})
diff --git a/src-ts/lib/form/form-inputs/form-input/input-wrapper/InputWrapper.test.tsx b/src-ts/lib/form/form-inputs/form-input/input-wrapper/InputWrapper.test.tsx
deleted file mode 100644
index 4e83ff68c..000000000
--- a/src-ts/lib/form/form-inputs/form-input/input-wrapper/InputWrapper.test.tsx
+++ /dev/null
@@ -1,6 +0,0 @@
-import '@testing-library/jest-dom'
-
-describe(' ', () => {
-
- test('it should display the Input', () => {})
-})
diff --git a/src-ts/lib/functions/analytics-functions/analytics.functions.test.ts b/src-ts/lib/functions/analytics-functions/analytics.functions.test.ts
deleted file mode 100644
index b6d88521d..000000000
--- a/src-ts/lib/functions/analytics-functions/analytics.functions.test.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-import '@testing-library/jest-dom'
-
-describe('Analytics Functions', () => {
-
- test('analytics', () => { })
-})
diff --git a/src-ts/lib/functions/component-visible-functions/component-visible.functions.test.tsx b/src-ts/lib/functions/component-visible-functions/component-visible.functions.test.tsx
deleted file mode 100644
index d3d793905..000000000
--- a/src-ts/lib/functions/component-visible-functions/component-visible.functions.test.tsx
+++ /dev/null
@@ -1,6 +0,0 @@
-import '@testing-library/jest-dom'
-
-describe('component visible functions', () => {
-
- test('it should determine if components are visible', () => { })
-})
diff --git a/src-ts/lib/profile-provider/profile-functions/profile.functions.test.ts b/src-ts/lib/profile-provider/profile-functions/profile.functions.test.ts
deleted file mode 100644
index c77886f77..000000000
--- a/src-ts/lib/profile-provider/profile-functions/profile.functions.test.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-import '@testing-library/jest-dom'
-
-describe('Profile Functions', () => {
-
- test('TODO', () => {
-
- })
-})
diff --git a/src-ts/tools/design-lib/DesignLib.test.tsx b/src-ts/tools/design-lib/DesignLib.test.tsx
deleted file mode 100644
index ca15dd2c1..000000000
--- a/src-ts/tools/design-lib/DesignLib.test.tsx
+++ /dev/null
@@ -1,6 +0,0 @@
-import '@testing-library/jest-dom'
-
-describe(' ', () => {
-
- test('it should render the title prop', () => {})
-})
diff --git a/src-ts/tools/design-lib/buttons/Buttons.test.tsx b/src-ts/tools/design-lib/buttons/Buttons.test.tsx
deleted file mode 100644
index 163766efd..000000000
--- a/src-ts/tools/design-lib/buttons/Buttons.test.tsx
+++ /dev/null
@@ -1,6 +0,0 @@
-import '@testing-library/jest-dom'
-
-describe(' ', () => {
-
- test('it should render the buttons page', () => { })
-})
diff --git a/src-ts/tools/design-lib/fonts/Fonts.test.tsx b/src-ts/tools/design-lib/fonts/Fonts.test.tsx
deleted file mode 100644
index 40f9dd29f..000000000
--- a/src-ts/tools/design-lib/fonts/Fonts.test.tsx
+++ /dev/null
@@ -1,6 +0,0 @@
-import '@testing-library/jest-dom'
-
-describe(' ', () => {
-
- test('it should render the fonts page', () => {})
-})
diff --git a/src-ts/tools/design-lib/home/Home.test.tsx b/src-ts/tools/design-lib/home/Home.test.tsx
deleted file mode 100644
index 0d4b92ecc..000000000
--- a/src-ts/tools/design-lib/home/Home.test.tsx
+++ /dev/null
@@ -1,6 +0,0 @@
-import '@testing-library/jest-dom'
-
-describe(' ', () => {
-
- test('it should render the Home page', () => {})
-})
diff --git a/src-ts/tools/work/Work.test.tsx b/src-ts/tools/work/Work.test.tsx
deleted file mode 100644
index a59199cd5..000000000
--- a/src-ts/tools/work/Work.test.tsx
+++ /dev/null
@@ -1,6 +0,0 @@
-import '@testing-library/jest-dom'
-
-describe(' ', () => {
-
- test('it should render the work page', () => {})
-})
diff --git a/src-ts/tools/work/dashboard/Dashboard.test.tsx b/src-ts/tools/work/dashboard/Dashboard.test.tsx
deleted file mode 100644
index c5f110bee..000000000
--- a/src-ts/tools/work/dashboard/Dashboard.test.tsx
+++ /dev/null
@@ -1,6 +0,0 @@
-import '@testing-library/jest-dom'
-
-describe(' ', () => {
-
- test('it should render the Dashboard', () => {})
-})
diff --git a/src-ts/tools/work/work-intake/WorkIntake.test.tsx b/src-ts/tools/work/work-intake/WorkIntake.test.tsx
deleted file mode 100644
index 51fc99bf9..000000000
--- a/src-ts/tools/work/work-intake/WorkIntake.test.tsx
+++ /dev/null
@@ -1,6 +0,0 @@
-import '@testing-library/jest-dom'
-
-describe(' ', () => {
-
- test('it should render the work intake form', () => {})
-})
diff --git a/src-ts/utils/home/Home.test.tsx b/src-ts/utils/home/Home.test.tsx
deleted file mode 100644
index 251d988cb..000000000
--- a/src-ts/utils/home/Home.test.tsx
+++ /dev/null
@@ -1,6 +0,0 @@
-import '@testing-library/jest-dom'
-
-describe(' ', () => {
-
- test('it should render the Home page', () => { })
-})
diff --git a/src-ts/utils/settings/Settings.test.tsx b/src-ts/utils/settings/Settings.test.tsx
deleted file mode 100644
index 8b45b1ea1..000000000
--- a/src-ts/utils/settings/Settings.test.tsx
+++ /dev/null
@@ -1,6 +0,0 @@
-import '@testing-library/jest-dom'
-
-describe(' ', () => {
-
- test('it should render the Settings page', () => {})
-})
diff --git a/src-ts/utils/settings/password-reset/PasswordReset.test.tsx b/src-ts/utils/settings/password-reset/PasswordReset.test.tsx
deleted file mode 100644
index 1a6db034a..000000000
--- a/src-ts/utils/settings/password-reset/PasswordReset.test.tsx
+++ /dev/null
@@ -1,6 +0,0 @@
-import '@testing-library/jest-dom'
-
-describe(' ', () => {
-
- test('it should render the Password Reset form', () => {})
-})
diff --git a/src-ts/utils/settings/profile-update/ProfileUpdate.test.tsx b/src-ts/utils/settings/profile-update/ProfileUpdate.test.tsx
deleted file mode 100644
index 616edc983..000000000
--- a/src-ts/utils/settings/profile-update/ProfileUpdate.test.tsx
+++ /dev/null
@@ -1,6 +0,0 @@
-import '@testing-library/jest-dom'
-
-describe(' ', () => {
-
- test('it should render the Profile Update form', () => {})
-})
diff --git a/src/App.jsx b/src/App.jsx
new file mode 100644
index 000000000..42fa826a2
--- /dev/null
+++ b/src/App.jsx
@@ -0,0 +1,81 @@
+import { Redirect, Router } from "@reach/router";
+import {
+ getAuthUserTokens,
+ disableNavigationForRoute,
+} from "@topcoder/mfe-header";
+import React, { useLayoutEffect, useState } from "react";
+import { UNDER_MAINTENANCE, GA_ID } from "./constants";
+import IntakeForm from "./IntakeForm";
+import Home from "./routes/Home";
+import WorkItems from "./routes/WorkItems";
+import Layout from "components/Layout";
+import TagManager from "react-gtm-module";
+import { ScrollToTop } from "./ScrollToTop";
+
+import "react-responsive-modal/styles.css";
+
+import styles from "./styles/main.module.scss";
+import UnderMaintenance from "./routes/UnderMaintenance";
+
+import { EnvironmentConfig, logInitialize } from "../src-ts";
+
+logInitialize(EnvironmentConfig);
+
+if (process.env.APPMODE === "production") {
+ TagManager.initialize({
+ gtmId: GA_ID,
+ });
+}
+
+const App = () => {
+ const [isLoggedIn, setIsLoggedIn] = useState(null);
+
+ useLayoutEffect(() => {
+ const checkIsLoggedIn = async () => {
+ const { tokenV3 } = await getAuthUserTokens();
+ setIsLoggedIn(!!tokenV3);
+ };
+ disableNavigationForRoute("/self-service/*");
+ checkIsLoggedIn();
+ document.documentElement.style.setProperty("--navbarHeight", "80px");
+ return () => {
+ // --navbarHeight must be set to its default value,
+ // removeProperty won't work
+ document.documentElement.style.setProperty("--navbarHeight", "60px");
+ };
+ }, []);
+
+ if (isLoggedIn == null) {
+ return null;
+ }
+
+ if (UNDER_MAINTENANCE) {
+ return (
+
+
+
+ );
+ }
+
+ return (
+
+
+
+
+ {isLoggedIn && (
+ <>
+
+
+ >
+ )}
+
+
+
+
+ );
+};
+
+export default App;
diff --git a/src/IntakeForm.jsx b/src/IntakeForm.jsx
new file mode 100644
index 000000000..048fea9a8
--- /dev/null
+++ b/src/IntakeForm.jsx
@@ -0,0 +1,223 @@
+import { navigate, Router, Redirect } from "@reach/router";
+import { getAuthUserTokens } from "@topcoder/mfe-header";
+import LoadingSpinner from "components/LoadingSpinner";
+import _ from "lodash";
+import React, { useEffect, useState } from "react";
+import { useDispatch } from "react-redux";
+import { decodeToken } from "tc-auth-lib";
+import { autoSaveInitErrored, triggerAutoSave } from "./actions/autoSave";
+import { getChallenge } from "./actions/challenge";
+import { saveForm } from "./actions/form";
+import { setProgressItem } from "./actions/progress";
+import {
+ cacheChallengeId,
+ loadChallengeId,
+ loadSavedFormCookie,
+ setCookie,
+} from "./autoSaveBeforeLogin";
+import { MAX_COMPLETED_STEP } from "./constants";
+import { INTAKE_FORM_ROUTES as DATA_EXPLORATION_INTAKE_FORM_ROUTES } from "./constants/products/DataExploration";
+import { INTAKE_FORM_ROUTES as FIND_ME_DATA_INTAKE_FORM_ROUTES } from "./constants/products/FindMeData";
+import { INTAKE_FORM_ROUTES as DATA_ADVISORY_INTAKE_FORM_ROUTES } from "./constants/products/DataAdvisory";
+import { INTAKE_FORM_ROUTES as WEBSITE_DESIGN_INTAKE_FORM_ROUTES } from "./constants/products/WebsiteDesign";
+import { INTAKE_FORM_ROUTES as WEBSITE_DESIGN_LEGACY_INTAKE_FORM_ROUTES } from "./constants/products/WebsiteDesignLegacy";
+import {
+ authUserError,
+ authUserSuccess,
+} from "./hoc/withAuthentication/actions";
+import { getIntakeFormChallenges } from "services/challenge";
+import SelectWorkType from "./routes/SelectWorkType";
+import DataExploration from "./routes/Products/DataExploration";
+import FindMeData from "./routes/Products/FindMeData";
+import WebsiteDesign from "./routes/Products/WebsiteDesign";
+import DataAdvisory from "./routes/Products/DataAdvisory";
+import WebsiteDesignLegacy from "./routes/Products/WebsiteDesignLegacy";
+
+import { WorkType } from "../src-ts";
+
+export default function IntakeForm() {
+ const dispatch = useDispatch();
+ const [isLoading, setIsLoading] = useState(false);
+ const [isLoggedIn, setIsLoggedIn] = useState(false);
+
+ const onReload = (event) => {
+ getAuthUserTokens()
+ .then((auth) => {
+ if (auth?.tokenV3) {
+ event.preventDefault();
+ event.returnValue = "";
+ }
+ })
+ .catch((error) => {
+ setCookie(MAX_COMPLETED_STEP, "", -1);
+ authUserError(error);
+ });
+ dispatch(triggerAutoSave(true));
+ };
+
+ useEffect(() => {
+ setIsLoading(true);
+ setCookie(MAX_COMPLETED_STEP, "", -1);
+ setUpAutoSave()
+ .then(() => {
+ setIsLoading(false);
+ })
+ .catch((e) => {
+ dispatch(autoSaveInitErrored(e));
+ });
+
+ window.addEventListener("beforeunload", onReload);
+ return () => {
+ window.removeEventListener("beforeunload", onReload);
+ };
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, []);
+
+ const goToUnfinishedStep = (currentStep, workType) => {
+ if (currentStep - 1 >= 0) {
+ switch (workType) {
+ case WorkType.designLegacy:
+ navigate(WEBSITE_DESIGN_LEGACY_INTAKE_FORM_ROUTES[currentStep - 1]);
+ break;
+ case WorkType.data:
+ navigate(DATA_EXPLORATION_INTAKE_FORM_ROUTES[currentStep - 1]);
+ break;
+ case WorkType.findData:
+ navigate(FIND_ME_DATA_INTAKE_FORM_ROUTES[currentStep - 1]);
+ break;
+ case WorkType.problem:
+ navigate(DATA_ADVISORY_INTAKE_FORM_ROUTES[currentStep - 1]);
+ break;
+ case WorkType.design:
+ navigate(WEBSITE_DESIGN_INTAKE_FORM_ROUTES[currentStep - 1]);
+ break;
+ default:
+ return;
+ }
+ }
+ };
+
+ const setUpAutoSave = async () => {
+ const { handle } = await getAuth();
+ if (handle) {
+ await handleAutoSaveLoggedIn(handle);
+ setIsLoggedIn(true);
+ } else {
+ handleAutoSavedLoggedOut();
+ }
+ return;
+ };
+
+ const handleAutoSaveLoggedIn = async (handle) => {
+ const challengeDetail = await receiveChallengeDetail(handle);
+ const dataToSync = await getSavedDataAfterLoggedIn(challengeDetail);
+ syncSavedData(dataToSync);
+ };
+
+ const receiveChallengeDetail = async (handle) => {
+ const challengeId = loadChallengeId();
+ if (!challengeId) return undefined;
+ return getIntakeFormChallenges(handle, challengeId)
+ .then((challengeDetail) => {
+ const savedChallenge = challengeDetail
+ ? _.find(challengeDetail, (c) => c.status === "New")
+ : undefined;
+ if (savedChallenge) {
+ dispatch(getChallenge(savedChallenge));
+ cacheChallengeId(savedChallenge.id);
+ }
+ return savedChallenge;
+ })
+ .catch((e) => {
+ dispatch(autoSaveInitErrored(e));
+ });
+ };
+
+ const getSavedDataAfterLoggedIn = async (challengeDetail) => {
+ const savedCookie = loadSavedFormCookie();
+ return dataSyncWithoutCookie(challengeDetail) || savedCookie || {};
+ };
+
+ const dataSyncWithoutCookie = (challengeDetail) => {
+ const metaData = challengeDetail?.metadata;
+ const savedForm = metaData
+ ? _.find(metaData, (m) => m.name === "intake-form")
+ : {};
+ return _.isString(savedForm?.value)
+ ? JSON.parse(savedForm?.value)
+ : undefined;
+ };
+
+ const syncSavedData = (savedData) => {
+ if (!savedData) return;
+ const { form, progress } = savedData;
+ if (form) dispatch(saveForm(form));
+ if (progress?.currentStep) {
+ dispatch(setProgressItem(progress.currentStep));
+ goToUnfinishedStep(
+ progress.currentStep,
+ _.get(form, "workType.selectedWorkType")
+ );
+ }
+ };
+
+ const handleAutoSavedLoggedOut = () => {
+ const savedFormCookie = loadSavedFormCookie();
+ syncSavedData(savedFormCookie);
+ };
+
+ const getAuth = async () => {
+ let auth = {};
+ try {
+ const { tokenV3 } = await getAuthUserTokens();
+ if (!!tokenV3) {
+ const tokenData = decodeToken(tokenV3);
+ const authProps = ["userId", "handle", "roles"];
+ dispatch(authUserSuccess(_.pick(tokenData, authProps)));
+ auth = tokenData;
+ }
+ } catch (err) {
+ dispatch(authUserError(err));
+ }
+ return auth;
+ };
+
+ return (
+
+
+ {!isLoading && (
+
+ {/* Data Exploration */}
+
+
+ {/* Data Advisory */}
+
+
+ {/* Find Me Data */}
+
+
+ {/* Web Design (NEW) */}
+
+
+ {/* Web Design (Legacy) */}
+
+
+
+ {/* */}
+
+ )}
+
+ );
+}
diff --git a/src/ScrollToTop.jsx b/src/ScrollToTop.jsx
new file mode 100644
index 000000000..1b06399cb
--- /dev/null
+++ b/src/ScrollToTop.jsx
@@ -0,0 +1,6 @@
+import React from "react";
+
+export const ScrollToTop = ({ children, location }) => {
+ React.useEffect(() => window.scrollTo(0, 0), [location.pathname]);
+ return children;
+};
diff --git a/src/actions/autoSave.js b/src/actions/autoSave.js
new file mode 100644
index 000000000..6afbaa784
--- /dev/null
+++ b/src/actions/autoSave.js
@@ -0,0 +1,38 @@
+import { patchChallenge } from "services/challenge";
+import { getChallenge } from "../actions/challenge";
+import { autoSaveCookie } from "../autoSaveBeforeLogin";
+import { ACTIONS } from "../constants";
+
+export const autoSaveInitErrored = (error) => ({
+ type: ACTIONS.AUTO_SAVE.INIT_ERRORED,
+ payload: error,
+});
+
+export const triggerAutoSave = (isTriggered, isForced) => ({
+ type: ACTIONS.AUTO_SAVE.TRIGGER_AUTO_SAVE,
+ payload: {
+ isTriggered,
+ isForced,
+ },
+});
+
+export const triggerCookieClear = () => ({
+ type: ACTIONS.AUTO_SAVE.TRIGGER_COOKIE_CLEARED,
+});
+
+export const autoSaveCookieCleared = (isCookieCleared) => ({
+ type: ACTIONS.AUTO_SAVE.COOKIE_CLEARED,
+ payload: isCookieCleared,
+});
+
+export const sendAutoSavedPatch = (dataToSave, challengeId) => (dispatch) => {
+ patchChallenge(dataToSave, challengeId)
+ .then((patched) => {
+ dispatch(getChallenge(patched));
+ })
+ .catch((e) => {});
+};
+
+export const storeAutoSavedCookie = (dataToSave) => (dispatch) => {
+ autoSaveCookie(dataToSave);
+};
diff --git a/src/actions/challenge.js b/src/actions/challenge.js
new file mode 100644
index 000000000..d75f28b8f
--- /dev/null
+++ b/src/actions/challenge.js
@@ -0,0 +1,20 @@
+import { ACTIONS } from "../constants";
+import { createChallenge } from "services/challenge";
+import { cacheChallengeId } from "../autoSaveBeforeLogin";
+
+export const getChallenge = (challenge) => ({
+ type: ACTIONS.CHALLENGE.GET_CHALLENGE,
+ payload: challenge,
+});
+
+export const createNewChallenge = (workType) => (dispatch) => {
+ return createChallenge(workType)
+ .then((created) => {
+ if (created?.id) {
+ getChallenge(created);
+ cacheChallengeId(created.id);
+ return created.id;
+ }
+ })
+ .catch((e) => {});
+};
diff --git a/src/actions/form.js b/src/actions/form.js
new file mode 100644
index 000000000..405c917c5
--- /dev/null
+++ b/src/actions/form.js
@@ -0,0 +1,59 @@
+import { ACTIONS } from "../constants";
+import { createSupportTicket } from "../services/form";
+
+export const saveForm = (form) => ({
+ type: ACTIONS.FORM.SAVE_FORM,
+ payload: form,
+});
+
+export const resetIntakeForm = (isReset) => ({
+ type: ACTIONS.FORM.RESET_INTAKE_FORM,
+ payload: isReset,
+});
+
+export const saveWorkType = (workType) => ({
+ type: ACTIONS.FORM.SAVE_WORK_TYPE,
+ payload: workType,
+});
+
+export const saveBasicInfo = (basicInfo) => ({
+ type: ACTIONS.FORM.SAVE_BASIC_INFO,
+ payload: basicInfo,
+});
+
+export const saveWebsitePurpose = (websitePurpose) => ({
+ type: ACTIONS.FORM.SAVE_WEBSITE_PURPOSE,
+ payload: websitePurpose,
+});
+
+export const savePageDetails = (pageDetails) => ({
+ type: ACTIONS.FORM.SAVE_PAGE_DETAILS,
+ payload: pageDetails,
+});
+
+export const saveBranding = (branding) => ({
+ type: ACTIONS.FORM.SAVE_BRANDING,
+ payload: branding,
+});
+
+export const reviewConfirmed = (confirmed) => ({
+ type: ACTIONS.FORM.REVIEW_CONFIRMED,
+ payload: confirmed,
+});
+
+export const toggleSupportModal = (show = null) => ({
+ type: ACTIONS.FORM.TOGGLE_SUPPORT_MODAL,
+ payload: show,
+});
+
+export const createNewSupportTicket =
+ (request, challengeId, selfService) => (dispatch) => {
+ return createSupportTicket(request, challengeId, selfService)
+ .then((ticket) => {
+ dispatch(() => ({
+ type: ACTIONS.FORM.CREATE_SUPPORT_TICKET,
+ payload: ticket,
+ }));
+ })
+ .catch((e) => {});
+ };
diff --git a/src/actions/index.js b/src/actions/index.js
new file mode 100644
index 000000000..f479bfd76
--- /dev/null
+++ b/src/actions/index.js
@@ -0,0 +1,15 @@
+import autoSave from "./autoSave";
+import challenge from "./challenge";
+import form from "./form";
+import progress from "./progress";
+import profile from "./profile";
+import myWork from "./myWork";
+
+export default {
+ autoSave,
+ challenge,
+ form,
+ progress,
+ profile,
+ myWork,
+};
diff --git a/src/actions/myWork.js b/src/actions/myWork.js
new file mode 100644
index 000000000..e318db11d
--- /dev/null
+++ b/src/actions/myWork.js
@@ -0,0 +1,34 @@
+import { ACTIONS } from "constants/";
+
+/**
+ * Creates an action denoting the failure to get user works.
+ *
+ * @param {Object} error error object
+ * @returns {Object}
+ */
+export const loadWorksError = (error) => ({
+ type: ACTIONS.MY_WORK.LOAD_WORKS_ERROR,
+ payload: error,
+});
+
+/**
+ * Creates an action denoting the start of loading user's works.
+ *
+ * @param {Object} cancelSource axios' cancel source object
+ * @returns {Object}
+ */
+export const loadWorksPending = (cancelSource) => ({
+ type: ACTIONS.MY_WORK.LOAD_WORKS_PENDING,
+ payload: cancelSource,
+});
+
+/**
+ * Creates an action denoting the successful load of user's works.
+ *
+ * @param {Array} works user's works
+ * @returns {Object}
+ */
+export const loadWorksSuccess = (works) => ({
+ type: ACTIONS.MY_WORK.LOAD_WORKS_SUCCESS,
+ payload: works,
+});
diff --git a/src/actions/profile.js b/src/actions/profile.js
new file mode 100644
index 000000000..8991722ae
--- /dev/null
+++ b/src/actions/profile.js
@@ -0,0 +1,46 @@
+import { ACTIONS } from "../constants";
+
+/**
+ * Creates an action for grabbing user profile information
+ *
+ * @param {Object} profile user profile
+ *
+ * @returns {Object}
+ */
+export const getUserProfile = (profile) => ({
+ type: ACTIONS.PROFILE.GET_PROFILE,
+ payload: profile,
+});
+
+/**
+ * Creates an action denoting the start of updating user basic info.
+ *
+ * @returns {Object}
+ */
+export const updateBasicInfoPending = () => ({
+ type: ACTIONS.PROFILE.UPDATE_BASIC_INFO_PENDING,
+});
+
+/**
+ * Creates an action denoting the successful load of updating user basic info
+ *
+ * @param {Object} basicInfo basic info
+ *
+ * @returns {Object}
+ */
+export const updateBasicInfoSuccess = (basicInfo) => ({
+ type: ACTIONS.PROFILE.UPDATE_BASIC_INFO_SUCCESS,
+ payload: basicInfo,
+});
+
+/**
+ * Creates an action denoting the failure to updating user basic info.
+ *
+ * @param {Object} error error object
+ *
+ * @returns {Object}
+ */
+export const updateBasicInfoError = (error) => ({
+ type: ACTIONS.PROFILE.UPDATE_BASIC_INFO_ERROR,
+ payload: error,
+});
diff --git a/src/actions/progress.js b/src/actions/progress.js
new file mode 100644
index 000000000..92ee002b1
--- /dev/null
+++ b/src/actions/progress.js
@@ -0,0 +1,6 @@
+import { ACTIONS } from "../constants";
+
+export const setProgressItem = (item) => ({
+ type: ACTIONS.PROGRESS.SET_ITEM,
+ payload: item,
+});
diff --git a/src/actions/work.js b/src/actions/work.js
new file mode 100644
index 000000000..3cc1b132c
--- /dev/null
+++ b/src/actions/work.js
@@ -0,0 +1,67 @@
+import { ACTIONS } from "../constants";
+import workService from "../services/work";
+import challengeService from "../services/challenge";
+
+export const getWork = (id) => {
+ return {
+ type: ACTIONS.WORK.GET_WORK,
+ payload: workService.getWork(id),
+ };
+};
+
+export const getSummary = (work) => {
+ return {
+ type: ACTIONS.WORK.GET_SUMMARY,
+ payload: workService.getSummary(work),
+ };
+};
+
+export const getDetails = (work) => {
+ const formData = workService.getDetails(work);
+ return {
+ type: ACTIONS.WORK.GET_DETAILS,
+ payload: formData,
+ };
+};
+
+export const getSolutions = (workId) => {
+ return {
+ type: ACTIONS.WORK.GET_SOLUTIONS,
+ payload: workService.getSolutions(workId),
+ };
+};
+
+export const getSolutionsCount = (workId) => {
+ return {
+ type: ACTIONS.WORK.GET_SOLUTIONS_COUNT,
+ payload: workService.getSolutionsCount(workId),
+ };
+};
+
+export const downloadSolution = (solutionId) => {
+ return {
+ type: ACTIONS.WORK.DOWNLOAD_SOLUTION,
+ payload: workService.downloadSolution(solutionId),
+ };
+};
+
+export const saveSurvey = (workId, metadata) => {
+ return {
+ type: ACTIONS.WORK.SAVE_SURVEY,
+ payload: workService.saveSurvey(workId, metadata),
+ };
+};
+
+export const setIsSavingSurveyDone = (value) => {
+ return {
+ type: ACTIONS.WORK.SET_IS_SAVING_SURVEY_DONE,
+ payload: value,
+ };
+};
+
+export const getForumNotifications = (workId) => {
+ return {
+ type: ACTIONS.WORK.GET_FORUM_NOTIFICATIONS,
+ payload: challengeService.getForumNotifications(workId),
+ };
+};
diff --git a/src/assets/data/spec-templates/data-exploration.json b/src/assets/data/spec-templates/data-exploration.json
new file mode 100644
index 000000000..c75b10375
--- /dev/null
+++ b/src/assets/data/spec-templates/data-exploration.json
@@ -0,0 +1,4 @@
+{
+ "description": "## Goals & Descriptions \n\n {{goals}} \n\n {{shareableLinks}} ## Final Submission Guidelines \n\n Please submit a zip file containing your analysis/solution."
+}
+
diff --git a/src/assets/data/spec-templates/website-design-legacy.json b/src/assets/data/spec-templates/website-design-legacy.json
new file mode 100644
index 000000000..1edb60721
--- /dev/null
+++ b/src/assets/data/spec-templates/website-design-legacy.json
@@ -0,0 +1,4 @@
+{
+ "description": "{{websitePurpose.description}} \n\n## Full Description & Project Guide\n\n### UNIQUE PAGES DESCRIBED\n\n{{basicInfo.numberOfPages}} \n\n### DEVICE TYPES REQUIRED: \n\n{{basicInfo.numberOfDevices}}. Note: Each unique page/screen should be designed for the devices listed below.\n\n{{basicInfo.supportedDevices}} \n\n### INDUSTRY\n\n{{websitePurpose.industry}} \n\n### USERS\n\n {{websitePurpose.userStory}} \n\n ### EXISTING WEBSITE\n\n {{websitePurpose.existingWebsite}} \n\n## Required Screens\n\n{{pageDetails}} \n\n\n## Branding\n\n### STYLE & THEME:\n\n{{branding.theme}} \n\n {{branding.websitesForInspiration}} \n\n### COLOR PALETTE:\n\nPreferred: {{branding.colorOption}} \n\nSpecific Color (required): {{branding.specificColor}} \n\n### FONTS:\n\nPreferred: {{branding.fontOption}} \n\nFont files uploaded: {{branding.fontUrl}} \n\nFont special instructions: {{branding.fontUsageDescription}} \n\n### OTHER ASSETS:\n\nFiles uploaded: {{branding.assetsUrl}} \n\n ### WHAT TO AVOID \n\n {{branding.anythingToAvoid}} \n\n### STOCK PHOTOS:\n\n{{branding.stockPhotos}} \n\n### SOURCE FILES / DELIVERABLES:\n\n {{branding.selectedDeliverableOption}} \n\n"
+}
+
diff --git a/src/assets/data/spec-templates/website-design.json b/src/assets/data/spec-templates/website-design.json
new file mode 100644
index 000000000..1edb60721
--- /dev/null
+++ b/src/assets/data/spec-templates/website-design.json
@@ -0,0 +1,4 @@
+{
+ "description": "{{websitePurpose.description}} \n\n## Full Description & Project Guide\n\n### UNIQUE PAGES DESCRIBED\n\n{{basicInfo.numberOfPages}} \n\n### DEVICE TYPES REQUIRED: \n\n{{basicInfo.numberOfDevices}}. Note: Each unique page/screen should be designed for the devices listed below.\n\n{{basicInfo.supportedDevices}} \n\n### INDUSTRY\n\n{{websitePurpose.industry}} \n\n### USERS\n\n {{websitePurpose.userStory}} \n\n ### EXISTING WEBSITE\n\n {{websitePurpose.existingWebsite}} \n\n## Required Screens\n\n{{pageDetails}} \n\n\n## Branding\n\n### STYLE & THEME:\n\n{{branding.theme}} \n\n {{branding.websitesForInspiration}} \n\n### COLOR PALETTE:\n\nPreferred: {{branding.colorOption}} \n\nSpecific Color (required): {{branding.specificColor}} \n\n### FONTS:\n\nPreferred: {{branding.fontOption}} \n\nFont files uploaded: {{branding.fontUrl}} \n\nFont special instructions: {{branding.fontUsageDescription}} \n\n### OTHER ASSETS:\n\nFiles uploaded: {{branding.assetsUrl}} \n\n ### WHAT TO AVOID \n\n {{branding.anythingToAvoid}} \n\n### STOCK PHOTOS:\n\n{{branding.stockPhotos}} \n\n### SOURCE FILES / DELIVERABLES:\n\n {{branding.selectedDeliverableOption}} \n\n"
+}
+
diff --git a/src/assets/data/website-design-styles.json b/src/assets/data/website-design-styles.json
new file mode 100644
index 000000000..d44e297d8
--- /dev/null
+++ b/src/assets/data/website-design-styles.json
@@ -0,0 +1,42 @@
+[
+ {
+ "name": "Dark / Saturated",
+ "className": "dark-saturated",
+ "description": "Dark and saturated backgroud colors give a dramatic feel. Used often in entertainment and luxury brand websites."
+ },
+ {
+ "name": "Light / Airy",
+ "className": "light-airy",
+ "description": "Light and airy themes provide a clean and fresh feel. Used often in wellness and e-commerce sites for a calm and sophisticated style."
+ },
+ {
+ "name": "Fun / Playful",
+ "className": "fun-playful",
+ "description": "A fun and playful feel is suggested with bright colors and whimsical elements. Many sites geared at consumers for entertainment and children’s products follow this style."
+ },
+ {
+ "name": "Mature / Serious",
+ "className": "mature-serious",
+ "description": "Mature and serious subject matter is often represented with straightforward font styling and photographs. Muted colors and clear typography help keep the focus on content being presented."
+ },
+ {
+ "name": "Simple / Minimalist",
+ "className": "simple-minimalist",
+ "description": "Many modern brands use a very simple and minimalist approach to website style. White space is plentiful and the display is kept to few key elements without added decoration."
+ },
+ {
+ "name": "Vibrant / Colorful",
+ "className": "vibrant-colorful",
+ "description": "Bold color combinations and engaging visual shapes or images provide a feel of high energy. This style is often used to match a youthful brand or engaging subject matter."
+ },
+ {
+ "name": "Soft / Organic",
+ "className": "soft-organic",
+ "description": "Earthy or pale colors and organic shapes are often used in sites wishing to convey a sense of nature and softness."
+ },
+ {
+ "name": "Bold / Rugged",
+ "className": "bold-rugged",
+ "description": "Bold colors, larger heavy fonts, rough shapes, and outdoor settings are used in sites wanting to convey a solid and masculine feel."
+ }
+]
\ No newline at end of file
diff --git a/src/assets/images/add-website-icon.svg b/src/assets/images/add-website-icon.svg
new file mode 100644
index 000000000..9603b3c97
--- /dev/null
+++ b/src/assets/images/add-website-icon.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/src/assets/images/arrow-left-turquoise.svg b/src/assets/images/arrow-left-turquoise.svg
new file mode 100644
index 000000000..c3b7a2c87
--- /dev/null
+++ b/src/assets/images/arrow-left-turquoise.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/src/assets/images/arrow-right.svg b/src/assets/images/arrow-right.svg
new file mode 100644
index 000000000..2c60a39ff
--- /dev/null
+++ b/src/assets/images/arrow-right.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/src/assets/images/check.svg b/src/assets/images/check.svg
new file mode 100644
index 000000000..2dd03c7ce
--- /dev/null
+++ b/src/assets/images/check.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/src/assets/images/data-advisory-icon.svg b/src/assets/images/data-advisory-icon.svg
new file mode 100644
index 000000000..a46bb7f93
--- /dev/null
+++ b/src/assets/images/data-advisory-icon.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/assets/images/data-exploration-icon.svg b/src/assets/images/data-exploration-icon.svg
new file mode 100644
index 000000000..cbefaf5fc
--- /dev/null
+++ b/src/assets/images/data-exploration-icon.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/assets/images/data-exploration-mobile.png b/src/assets/images/data-exploration-mobile.png
new file mode 100644
index 000000000..ae3518053
Binary files /dev/null and b/src/assets/images/data-exploration-mobile.png differ
diff --git a/src/assets/images/data-exploration.png b/src/assets/images/data-exploration.png
new file mode 100644
index 000000000..57fd079a4
Binary files /dev/null and b/src/assets/images/data-exploration.png differ
diff --git a/src/assets/images/design-example-image1.png b/src/assets/images/design-example-image1.png
new file mode 100644
index 000000000..dbfee2be1
Binary files /dev/null and b/src/assets/images/design-example-image1.png differ
diff --git a/src/assets/images/design-example-image2.png b/src/assets/images/design-example-image2.png
new file mode 100644
index 000000000..6e876f508
Binary files /dev/null and b/src/assets/images/design-example-image2.png differ
diff --git a/src/assets/images/design-tools.svg b/src/assets/images/design-tools.svg
new file mode 100644
index 000000000..c83d96780
--- /dev/null
+++ b/src/assets/images/design-tools.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/assets/images/eye.svg b/src/assets/images/eye.svg
new file mode 100644
index 000000000..d0bee3e93
--- /dev/null
+++ b/src/assets/images/eye.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/src/assets/images/find-me-data-icon.svg b/src/assets/images/find-me-data-icon.svg
new file mode 100644
index 000000000..9a653d589
--- /dev/null
+++ b/src/assets/images/find-me-data-icon.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/assets/images/find-me-data-mobile.png b/src/assets/images/find-me-data-mobile.png
new file mode 100644
index 000000000..d5b5509fe
Binary files /dev/null and b/src/assets/images/find-me-data-mobile.png differ
diff --git a/src/assets/images/find-me-data.png b/src/assets/images/find-me-data.png
new file mode 100644
index 000000000..566741157
Binary files /dev/null and b/src/assets/images/find-me-data.png differ
diff --git a/src/assets/images/icon-active-indicator.svg b/src/assets/images/icon-active-indicator.svg
new file mode 100644
index 000000000..2a0678f7d
--- /dev/null
+++ b/src/assets/images/icon-active-indicator.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/src/assets/images/icon-any-font.png b/src/assets/images/icon-any-font.png
new file mode 100644
index 000000000..d288b1b02
Binary files /dev/null and b/src/assets/images/icon-any-font.png differ
diff --git a/src/assets/images/icon-arrow.svg b/src/assets/images/icon-arrow.svg
new file mode 100644
index 000000000..f7122f3e4
--- /dev/null
+++ b/src/assets/images/icon-arrow.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/images/icon-back-arrow.svg b/src/assets/images/icon-back-arrow.svg
new file mode 100644
index 000000000..4231f4c3d
--- /dev/null
+++ b/src/assets/images/icon-back-arrow.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/src/assets/images/icon-check-thin.svg b/src/assets/images/icon-check-thin.svg
new file mode 100644
index 000000000..4586164a5
--- /dev/null
+++ b/src/assets/images/icon-check-thin.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/src/assets/images/icon-check.svg b/src/assets/images/icon-check.svg
new file mode 100644
index 000000000..15d7ab5e8
--- /dev/null
+++ b/src/assets/images/icon-check.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/images/icon-close.svg b/src/assets/images/icon-close.svg
new file mode 100644
index 000000000..67901b4be
--- /dev/null
+++ b/src/assets/images/icon-close.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/src/assets/images/icon-copy-file.svg b/src/assets/images/icon-copy-file.svg
new file mode 100644
index 000000000..cb9f31930
--- /dev/null
+++ b/src/assets/images/icon-copy-file.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/src/assets/images/icon-cross.svg b/src/assets/images/icon-cross.svg
new file mode 100644
index 000000000..0be9aabad
--- /dev/null
+++ b/src/assets/images/icon-cross.svg
@@ -0,0 +1,16 @@
+
+
+ D450CF0B-B6EF-4991-8E48-E34846C2F842
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/assets/images/icon-device-computer-active.svg b/src/assets/images/icon-device-computer-active.svg
new file mode 100644
index 000000000..4a2a997bf
--- /dev/null
+++ b/src/assets/images/icon-device-computer-active.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/assets/images/icon-device-computer.svg b/src/assets/images/icon-device-computer.svg
new file mode 100644
index 000000000..bea688a95
--- /dev/null
+++ b/src/assets/images/icon-device-computer.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/assets/images/icon-device-phone-active.svg b/src/assets/images/icon-device-phone-active.svg
new file mode 100644
index 000000000..0b3a4c04b
--- /dev/null
+++ b/src/assets/images/icon-device-phone-active.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/assets/images/icon-device-phone.svg b/src/assets/images/icon-device-phone.svg
new file mode 100644
index 000000000..e49d75363
--- /dev/null
+++ b/src/assets/images/icon-device-phone.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/assets/images/icon-device-tablet-active.svg b/src/assets/images/icon-device-tablet-active.svg
new file mode 100644
index 000000000..b66fb588a
--- /dev/null
+++ b/src/assets/images/icon-device-tablet-active.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/src/assets/images/icon-device-tablet.svg b/src/assets/images/icon-device-tablet.svg
new file mode 100644
index 000000000..ba49d4d6c
--- /dev/null
+++ b/src/assets/images/icon-device-tablet.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/src/assets/images/icon-hint-green.svg b/src/assets/images/icon-hint-green.svg
new file mode 100644
index 000000000..742442acb
--- /dev/null
+++ b/src/assets/images/icon-hint-green.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/src/assets/images/icon-hint.svg b/src/assets/images/icon-hint.svg
new file mode 100644
index 000000000..a02551bf7
--- /dev/null
+++ b/src/assets/images/icon-hint.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/src/assets/images/icon-my-work-active.svg b/src/assets/images/icon-my-work-active.svg
new file mode 100644
index 000000000..990ed8679
--- /dev/null
+++ b/src/assets/images/icon-my-work-active.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/src/assets/images/icon-my-work.svg b/src/assets/images/icon-my-work.svg
new file mode 100644
index 000000000..a20bdaa7b
--- /dev/null
+++ b/src/assets/images/icon-my-work.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/src/assets/images/icon-sans-serif-font.png b/src/assets/images/icon-sans-serif-font.png
new file mode 100644
index 000000000..ad0013fff
Binary files /dev/null and b/src/assets/images/icon-sans-serif-font.png differ
diff --git a/src/assets/images/icon-serif-font.png b/src/assets/images/icon-serif-font.png
new file mode 100644
index 000000000..f75be637d
Binary files /dev/null and b/src/assets/images/icon-serif-font.png differ
diff --git a/src/assets/images/icon-star-empty.svg b/src/assets/images/icon-star-empty.svg
new file mode 100644
index 000000000..4bb1d0e80
--- /dev/null
+++ b/src/assets/images/icon-star-empty.svg
@@ -0,0 +1,10 @@
+
+
+
diff --git a/src/assets/images/icon-star-filled.svg b/src/assets/images/icon-star-filled.svg
new file mode 100644
index 000000000..bd6e884cf
--- /dev/null
+++ b/src/assets/images/icon-star-filled.svg
@@ -0,0 +1,10 @@
+
+
+
diff --git a/src/assets/images/icon-star.svg b/src/assets/images/icon-star.svg
new file mode 100644
index 000000000..f1e70641f
--- /dev/null
+++ b/src/assets/images/icon-star.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/src/assets/images/icon-three-dots-vertical.svg b/src/assets/images/icon-three-dots-vertical.svg
new file mode 100644
index 000000000..bd5f99a27
--- /dev/null
+++ b/src/assets/images/icon-three-dots-vertical.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/images/icon-three-dots.svg b/src/assets/images/icon-three-dots.svg
new file mode 100644
index 000000000..fa973da32
--- /dev/null
+++ b/src/assets/images/icon-three-dots.svg
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/assets/images/icon-warning.svg b/src/assets/images/icon-warning.svg
new file mode 100644
index 000000000..d5d55ffb8
--- /dev/null
+++ b/src/assets/images/icon-warning.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/src/assets/images/problem-statement-mobile.png b/src/assets/images/problem-statement-mobile.png
new file mode 100644
index 000000000..a02eafdff
Binary files /dev/null and b/src/assets/images/problem-statement-mobile.png differ
diff --git a/src/assets/images/problem-statement.png b/src/assets/images/problem-statement.png
new file mode 100644
index 000000000..afdc507b4
Binary files /dev/null and b/src/assets/images/problem-statement.png differ
diff --git a/src/assets/images/products/product-main-photos/data-exploration.jpeg b/src/assets/images/products/product-main-photos/data-exploration.jpeg
new file mode 100644
index 000000000..79ddb7eb5
Binary files /dev/null and b/src/assets/images/products/product-main-photos/data-exploration.jpeg differ
diff --git a/src/assets/images/products/product-main-photos/find-me-data.jpeg b/src/assets/images/products/product-main-photos/find-me-data.jpeg
new file mode 100644
index 000000000..d125186f0
Binary files /dev/null and b/src/assets/images/products/product-main-photos/find-me-data.jpeg differ
diff --git a/src/assets/images/products/product-main-photos/problem-statements-and-data.jpeg b/src/assets/images/products/product-main-photos/problem-statements-and-data.jpeg
new file mode 100644
index 000000000..9fdd8e493
Binary files /dev/null and b/src/assets/images/products/product-main-photos/problem-statements-and-data.jpeg differ
diff --git a/src/assets/images/products/product-main-photos/reb-blue-gradient-background.jpeg b/src/assets/images/products/product-main-photos/reb-blue-gradient-background.jpeg
new file mode 100644
index 000000000..d88fa5157
Binary files /dev/null and b/src/assets/images/products/product-main-photos/reb-blue-gradient-background.jpeg differ
diff --git a/src/assets/images/products/product-main-photos/web-design.jpeg b/src/assets/images/products/product-main-photos/web-design.jpeg
new file mode 100644
index 000000000..c6c53b26e
Binary files /dev/null and b/src/assets/images/products/product-main-photos/web-design.jpeg differ
diff --git a/src/assets/images/products/website-design/bold-ragged.png b/src/assets/images/products/website-design/bold-ragged.png
new file mode 100644
index 000000000..d656e8f11
Binary files /dev/null and b/src/assets/images/products/website-design/bold-ragged.png differ
diff --git a/src/assets/images/products/website-design/dark-saturated.png b/src/assets/images/products/website-design/dark-saturated.png
new file mode 100644
index 000000000..43cea6311
Binary files /dev/null and b/src/assets/images/products/website-design/dark-saturated.png differ
diff --git a/src/assets/images/products/website-design/fun-playful.png b/src/assets/images/products/website-design/fun-playful.png
new file mode 100644
index 000000000..24e2d08af
Binary files /dev/null and b/src/assets/images/products/website-design/fun-playful.png differ
diff --git a/src/assets/images/products/website-design/light-airy.png b/src/assets/images/products/website-design/light-airy.png
new file mode 100644
index 000000000..882a88471
Binary files /dev/null and b/src/assets/images/products/website-design/light-airy.png differ
diff --git a/src/assets/images/products/website-design/mature-serious.png b/src/assets/images/products/website-design/mature-serious.png
new file mode 100644
index 000000000..1508bc4d6
Binary files /dev/null and b/src/assets/images/products/website-design/mature-serious.png differ
diff --git a/src/assets/images/products/website-design/simple-minimalist.png b/src/assets/images/products/website-design/simple-minimalist.png
new file mode 100644
index 000000000..bb49b9949
Binary files /dev/null and b/src/assets/images/products/website-design/simple-minimalist.png differ
diff --git a/src/assets/images/products/website-design/soft-organic.png b/src/assets/images/products/website-design/soft-organic.png
new file mode 100644
index 000000000..b467642ac
Binary files /dev/null and b/src/assets/images/products/website-design/soft-organic.png differ
diff --git a/src/assets/images/products/website-design/vibrant-colorful.png b/src/assets/images/products/website-design/vibrant-colorful.png
new file mode 100644
index 000000000..9cb6938fe
Binary files /dev/null and b/src/assets/images/products/website-design/vibrant-colorful.png differ
diff --git a/src/assets/images/review-and-submit-icon.svg b/src/assets/images/review-and-submit-icon.svg
new file mode 100644
index 000000000..28ec4632b
--- /dev/null
+++ b/src/assets/images/review-and-submit-icon.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/assets/images/save-for-later-icon.svg b/src/assets/images/save-for-later-icon.svg
new file mode 100644
index 000000000..b83c0d7e3
--- /dev/null
+++ b/src/assets/images/save-for-later-icon.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/src/assets/images/save-for-later-icon2.png b/src/assets/images/save-for-later-icon2.png
new file mode 100644
index 000000000..ab00ff778
Binary files /dev/null and b/src/assets/images/save-for-later-icon2.png differ
diff --git a/src/assets/images/thumbsdown.svg b/src/assets/images/thumbsdown.svg
new file mode 100644
index 000000000..3fb3ba7ca
--- /dev/null
+++ b/src/assets/images/thumbsdown.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/assets/images/thumbsup.svg b/src/assets/images/thumbsup.svg
new file mode 100644
index 000000000..362b6ca40
--- /dev/null
+++ b/src/assets/images/thumbsup.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/assets/images/website-design-banner-mobile.png b/src/assets/images/website-design-banner-mobile.png
new file mode 100644
index 000000000..917c3fdcf
Binary files /dev/null and b/src/assets/images/website-design-banner-mobile.png differ
diff --git a/src/assets/images/website-design-v2.png b/src/assets/images/website-design-v2.png
new file mode 100644
index 000000000..16b4dcf37
Binary files /dev/null and b/src/assets/images/website-design-v2.png differ
diff --git a/src/assets/images/website-design.png b/src/assets/images/website-design.png
new file mode 100644
index 000000000..52a867718
Binary files /dev/null and b/src/assets/images/website-design.png differ
diff --git a/src/assets/images/website-design.svg b/src/assets/images/website-design.svg
new file mode 100644
index 000000000..7cba167a1
--- /dev/null
+++ b/src/assets/images/website-design.svg
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/assets/images/welcome.png b/src/assets/images/welcome.png
new file mode 100644
index 000000000..50e54c4dc
Binary files /dev/null and b/src/assets/images/welcome.png differ
diff --git a/src/assets/pdf/WebDesign-1.pdf b/src/assets/pdf/WebDesign-1.pdf
new file mode 100644
index 000000000..ce12a03e1
Binary files /dev/null and b/src/assets/pdf/WebDesign-1.pdf differ
diff --git a/src/assets/pdf/WebDesign-2.pdf b/src/assets/pdf/WebDesign-2.pdf
new file mode 100644
index 000000000..188b7516f
Binary files /dev/null and b/src/assets/pdf/WebDesign-2.pdf differ
diff --git a/src/autoSaveBeforeLogin.js b/src/autoSaveBeforeLogin.js
new file mode 100644
index 000000000..c40df3e1f
--- /dev/null
+++ b/src/autoSaveBeforeLogin.js
@@ -0,0 +1,176 @@
+import { ACTIONS, AUTO_SAVE_FORM, CACHED_CHALLENGE_ID } from "constants/index";
+import CryptoJS from "crypto-js";
+import _ from "lodash";
+import moment from "moment";
+import "moment-timezone";
+import config from "../config";
+import {
+ autoSaveCookieCleared,
+ sendAutoSavedPatch,
+ storeAutoSavedCookie,
+} from "./actions/autoSave";
+import { createNewChallenge } from "./actions/challenge";
+
+let CREATION_IN_PROGRESS = false;
+
+export const saveUpdatesMiddleware = ({ dispatch, getState }) => {
+ const handleAutoSave = () => {
+ const { progress, form, authUser, challenge, autoSave } = getState();
+ const isEmptyForm = !form?.workType?.selectedWorkType;
+ if (isEmptyForm) return;
+
+ let challengeId = loadChallengeId() || challenge?.id;
+ const dataToSave = { progress, form };
+ const currentStep = _.get(dataToSave, "progress.currentStep", 1);
+ if (authUser?.isLoggedIn && (autoSave.forced || currentStep >= 3)) {
+ const triggerSave = () => {
+ challengeId = loadChallengeId() || challenge?.id;
+ if (!challengeId) {
+ // retry until challenge gets created
+ return setTimeout(() => triggerSave(), 1000);
+ }
+ CREATION_IN_PROGRESS = false;
+ clearCachedCookie(autoSave);
+ handleLoginSave(autoSave, dataToSave, challengeId, challenge);
+ };
+ if (!challengeId) {
+ if (!CREATION_IN_PROGRESS) {
+ dispatch(
+ createNewChallenge(_.get(form, "workType.selectedWorkType"))
+ );
+ CREATION_IN_PROGRESS = true;
+ }
+ triggerSave();
+ } else {
+ triggerSave();
+ }
+ } else {
+ dispatch(storeAutoSavedCookie(dataToSave));
+ }
+ };
+
+ const clearCache = () => {
+ clearAutoSavedForm();
+ dispatch(autoSaveCookieCleared(true));
+ };
+
+ const clearCachedCookie = (autoSave) => {
+ if (autoSave.triggered && !autoSave.cookieCleared) {
+ clearCache();
+ }
+ };
+
+ const handleLoginSave = (autoSave, dataToSave, challengeId, challenge) => {
+ const metaData = challenge?.metadata
+ ? _.find(challenge.metadata, (m) => m.name === "intake-form")
+ : undefined;
+ const formString = JSON.stringify(dataToSave);
+ if (metaData?.value !== formString) {
+ dispatch(sendAutoSavedPatch(formString, challengeId));
+ }
+ };
+
+ return (next) => (action) => {
+ const result = next(action);
+
+ if ([ACTIONS.AUTO_SAVE.TRIGGER_COOKIE_CLEARED].includes(result.type)) {
+ clearCachedChallengeId();
+ clearCache();
+ } else if ([ACTIONS.AUTO_SAVE.TRIGGER_AUTO_SAVE].includes(result.type)) {
+ handleAutoSave();
+ }
+ return result;
+ };
+};
+
+export const autoSaveCookie = (stateToSave) => {
+ const { progress, form } = stateToSave;
+ if (progress?.currentStep && isUpdatingTheLatest(form)) {
+ const newCookie = CryptoJS?.AES.encrypt(
+ JSON.stringify(stateToSave),
+ AUTO_SAVE_FORM
+ );
+ setCookie(AUTO_SAVE_FORM, newCookie, config.AUTO_SAVED_COOKIE_EXPIRED_IN);
+ }
+};
+
+const isUpdatingTheLatest = (form) => {
+ const cachedCookie = loadSavedFormCookie();
+ const lastUpdatedAt = cachedCookie?.form?.updatedAt;
+ const thisUpdatedAt = form.updatedAt;
+ return !lastUpdatedAt || moment(lastUpdatedAt).isBefore(thisUpdatedAt);
+};
+
+export const loadSavedFormCookie = () => {
+ try {
+ const savedCookie = getCookie(AUTO_SAVE_FORM);
+ if (!savedCookie) {
+ return undefined;
+ }
+ const bytes = CryptoJS?.AES.decrypt(savedCookie, AUTO_SAVE_FORM);
+ const autoSavedForm = bytes.toString(CryptoJS.enc.Utf8);
+ return JSON.parse(autoSavedForm);
+ } catch (e) {
+ return undefined;
+ }
+};
+
+export const clearAutoSavedForm = () => {
+ setCookie(AUTO_SAVE_FORM, "", -1);
+};
+
+export const clearCachedChallengeId = () => {
+ setCookie(CACHED_CHALLENGE_ID, "", -1);
+};
+
+export const loadChallengeId = () => {
+ try {
+ const savedId = getCookie(CACHED_CHALLENGE_ID);
+ if (!savedId) {
+ return undefined;
+ }
+ const bytes = CryptoJS?.AES.decrypt(savedId, CACHED_CHALLENGE_ID);
+ const challengeId = bytes.toString(CryptoJS.enc.Utf8);
+ return challengeId;
+ } catch (e) {
+ return undefined;
+ }
+};
+
+export const cacheChallengeId = (challengeId) => {
+ if (_.isString(challengeId)) {
+ const encryptedId = CryptoJS.AES.encrypt(challengeId, CACHED_CHALLENGE_ID);
+ setCookie(
+ CACHED_CHALLENGE_ID,
+ encryptedId,
+ config.AUTO_SAVED_COOKIE_EXPIRED_IN
+ );
+ }
+};
+
+export function setCookie(cname, cvalue, exMins) {
+ const cDomain = getHostDomain();
+
+ let d = new Date();
+ d.setTime(d.getTime() + exMins * 60 * 1000);
+
+ let expires = ";expires=" + d.toUTCString();
+ document.cookie = cname + "=" + cvalue + cDomain + expires + ";path=/";
+}
+
+export function getCookie(name) {
+ const v = document.cookie.match("(^|;) ?" + name + "=([^;]*)(;|$)");
+ return v ? v[2] : undefined;
+}
+
+function getHostDomain() {
+ let hostDomain = "";
+ if (location.hostname !== "localhost") {
+ hostDomain =
+ ";domain=." +
+ location.hostname.split(".").reverse()[1] +
+ "." +
+ location.hostname.split(".").reverse()[0];
+ }
+ return hostDomain;
+}
diff --git a/src/components/Banners/FeaturedWorkTypeBanner/index.jsx b/src/components/Banners/FeaturedWorkTypeBanner/index.jsx
new file mode 100644
index 000000000..ee74531e7
--- /dev/null
+++ b/src/components/Banners/FeaturedWorkTypeBanner/index.jsx
@@ -0,0 +1,39 @@
+/**
+ *
+ * Featured Work Type banner
+ */
+import React from "react";
+import PT from "prop-types";
+import styles from "./styles.module.scss";
+
+export const FeaturedWorkTypeBanner = ({ title, subTitle, workType }) => {
+ const styleType = workType
+ .toLowerCase()
+ .split(" ")
+ .join("-")
+ .split("&")
+ .join("");
+ return (
+
+ );
+};
+
+FeaturedWorkTypeBanner.propTypes = {
+ title: PT.string,
+ subTitle: PT.string,
+ workType: PT.string,
+};
+
+export default FeaturedWorkTypeBanner;
diff --git a/src/components/Banners/FeaturedWorkTypeBanner/styles.module.scss b/src/components/Banners/FeaturedWorkTypeBanner/styles.module.scss
new file mode 100644
index 000000000..b8fdd9ff8
--- /dev/null
+++ b/src/components/Banners/FeaturedWorkTypeBanner/styles.module.scss
@@ -0,0 +1,270 @@
+@import "styles/include";
+
+.heroContainer {
+ position: static;
+ min-width: 610px;
+ left: 0px;
+ top: 0px;
+ margin: 16px 0px;
+
+ display: grid;
+ grid-template-columns: 1fr 359px;
+
+ &.website-design,
+ &.website-design-new,
+ &.data-exploration,
+ &.review--payment {
+ background: linear-gradient(84.92deg, #065D6E 2.08%, #06596E 2.09%, #3E3B91 97.43%);
+ }
+
+ &.find-me-data,
+ &.problem-statement--data-advisory {
+ background: linear-gradient(84.92deg, #723390 2.08%, #8C384F 97.43%);
+ }
+
+ border-radius: 8px;
+ margin-bottom: -35px;
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
+
+
+ @include mobile {
+ min-width: 0;
+ max-width: 100%;
+ overflow: hidden;
+ flex-direction: column;
+ grid-template-columns: auto;
+ margin-top: 0 !important;
+ border-radius: 0 !important;
+ }
+
+ .heroBackgroundContainer {
+ position: static;
+ width: 359px;
+ left: 793px;
+ top: 0px;
+ margin: 0px;
+
+ flex: none;
+ order: 1;
+ align-self: stretch;
+ flex-grow: 0;
+
+ border-radius: 0 8px 8px 0;
+
+ @include mobile {
+ width: 100%;
+ height: 156px;
+ order: 0;
+ }
+
+ &.data-exploration {
+ background: url("../../../assets/images/data-exploration.png");
+ background-size: cover;
+ @include mobile {
+ background: url("../../../assets/images/data-exploration-mobile.png");
+ background-size: cover;
+ background-position: bottom;
+ }
+ }
+
+ &.find-me-data {
+ background: url("../../../assets/images/find-me-data.png");
+ background-size: cover;
+ @include mobile {
+ background: url("../../../assets/images/find-me-data-mobile.png");
+ background-size: cover;
+ background-position: bottom;
+ }
+ }
+
+ &.problem-statement--data-advisory {
+ background: url("../../../assets/images/problem-statement.png");
+ background-size: cover;
+ @include mobile {
+ background: url("../../../assets/images/problem-statement-mobile.png");
+ background-size: cover;
+ background-position: bottom;
+ }
+ }
+
+ &.website-design,
+ &.website-design-new {
+ background: url("../../../assets/images/website-design-v2.png");
+ background-size: cover;
+
+ @include mobile {
+ background: url("../../../assets/images/website-design-banner-mobile.png");
+ background-size: cover;
+ background-position: bottom;
+ }
+ }
+ }
+
+ .heroContent {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ padding: 32px 0px;
+
+ color: $black-0;
+
+ position: static;
+ left: 32px;
+ top: 0px;
+
+ /* Inside auto layout */
+ flex: none;
+ order: 0;
+ flex-grow: 1;
+ margin: 0px 24px;
+
+ .heroHeader {
+ /* Auto layout */
+ display: flex;
+ flex-direction: row;
+ align-items: flex-start;
+ padding: 0px;
+
+ position: static;
+ left: 0px;
+ top: 0px;
+
+ /* Inside auto layout */
+ flex: none;
+ order: 0;
+ align-self: stretch;
+ flex-grow: 0;
+
+ .heroIconContainer {
+ /* Auto layout */
+ display: flex;
+ flex-direction: row;
+ align-items: flex-start;
+ margin-right: 16px;
+
+ position: static;
+ width: 40px;
+ left: 0px;
+ top: 0px;
+ }
+
+ .heroHeaderContent {
+ /* Auto layout */
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ row-gap: 16px;
+ padding: 0px;
+
+ position: static;
+ left: 56px;
+ top: 0px;
+
+ /* Inside auto layout */
+ flex: none;
+ order: 1;
+ flex-grow: 1;
+
+ font-size: 42px;
+ font-weight: 400;
+
+ @include mobile {
+ flex: auto;
+ }
+
+ .heroHeaderTitle {
+ display: flex;
+ text-transform: uppercase;
+
+ @include mobile {
+ font-size: 28px;
+ line-height: 32px;
+ }
+ }
+
+ .heroHeaderSubtitle {
+ font-size: 17px;
+ max-width: 713px;
+ line-height: 24px;
+ font-weight: 500;
+
+ @include mobile {
+ font-size: 14px;
+ line-height: 20px;
+ }
+ }
+ }
+ }
+
+ .heroText {
+ position: static;
+ // height: 96px;
+ left: 0px;
+ top: 64px;
+ max-width: 713px;
+
+ /* desktop/body-large */
+ font-family: Roboto;
+ font-style: normal;
+ font-weight: normal;
+ font-size: 24px;
+ line-height: 32px;
+ /* or 133% */
+
+ /* gray/white */
+ color: #FFFFFF;
+
+ /* Inside auto layout */
+ order: 1;
+ margin: 16px 0px;
+ flex: none;
+ align-self: stretch;
+ flex-grow: 0;
+ }
+ }
+}
+
+.cardContainer {
+ display: flex;
+ column-gap: 8px;
+ justify-content: space-around;
+
+ @include mobile {
+ flex-direction: column;
+ justify-content: flex-start;
+ align-items: center;
+ row-gap: 8px;
+ }
+
+ .card {
+ /* Auto layout */
+ display: flex;
+ flex-direction: column;
+ justify-content: flex-start;
+ align-items: center;
+ row-gap: 8px;
+ padding: 32px;
+
+ position: static;
+ min-width: 500px;
+ max-width: 568px;
+ height: 172px;
+
+ /* gray/white */
+ background: $black-0;
+ /* Button hover shadow */
+ box-shadow: 0px 1px 5px rgba(0, 0, 0, 0.2);
+ border-radius: 8px;
+
+ .title {
+ font-size: 24px;
+ }
+
+ .text {
+ font-size: 16px;
+ line-height: 28px;
+ text-align: center;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/components/Banners/WebsiteDesignBannerLegacy/index.js b/src/components/Banners/WebsiteDesignBannerLegacy/index.js
new file mode 100644
index 000000000..8b2f7856c
--- /dev/null
+++ b/src/components/Banners/WebsiteDesignBannerLegacy/index.js
@@ -0,0 +1,34 @@
+/**
+ *
+ * Website Design Banner
+ */
+import React from "react";
+import "./styles.module.scss";
+import { IconWebsiteTools } from "../../../assets/images/design-tools.svg";
+
+export const WebsiteDesignBannerLegacy = () => {
+ return (
+
+
+
+
+
+
+
+ Create a beautiful custom visual design for your website. and
+ device types, your vision, and receive up to 5 modern modern
+ modern designs.
+
+
+
+
+
+ );
+};
+
+export default WebsiteDesignBannerLegacy;
diff --git a/src/components/Banners/WebsiteDesignBannerLegacy/styles.module.scss b/src/components/Banners/WebsiteDesignBannerLegacy/styles.module.scss
new file mode 100644
index 000000000..facad6d99
--- /dev/null
+++ b/src/components/Banners/WebsiteDesignBannerLegacy/styles.module.scss
@@ -0,0 +1,201 @@
+@import "styles/include";
+
+.heroContainer {
+ position: static;
+ min-width: 610px;
+ left: 0px;
+ top: 0px;
+
+ display: grid;
+ grid-template-columns: 1fr 359px;
+
+ background: linear-gradient(263.22deg, #038664 2.65%, #075F96 98.14%), #FFFFFF;
+ margin-bottom: -35px;
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
+
+
+ @include mobile {
+ min-width: 0;
+ max-width: 100%;
+ overflow: hidden;
+ grid-template-columns: 1fr 200px;
+ }
+
+ .heroBackgroundContainer {
+ position: static;
+ width: 359px;
+ left: 793px;
+ top: 0px;
+ margin: 0px;
+
+ flex: none;
+ order: 1;
+ align-self: stretch;
+ flex-grow: 0;
+
+ background: url("../../../assets/images/website-design.png");
+ background-size: cover;
+ border-radius: 0 8px 8px 0;
+
+ @include mobile {
+ width: 200px;
+ }
+ }
+
+ .heroContent {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ padding: 32px 0px;
+
+ color: $black-0;
+
+ position: static;
+ left: 32px;
+ top: 0px;
+
+ /* Inside auto layout */
+ flex: none;
+ order: 0;
+ flex-grow: 1;
+ margin: 0px 24px;
+
+ .heroHeader {
+ /* Auto layout */
+ display: flex;
+ flex-direction: row;
+ align-items: flex-start;
+ padding: 0px;
+
+ position: static;
+ left: 0px;
+ top: 0px;
+
+ /* Inside auto layout */
+ flex: none;
+ order: 0;
+ align-self: stretch;
+ flex-grow: 0;
+
+ .heroIconContainer {
+ /* Auto layout */
+ display: flex;
+ flex-direction: row;
+ align-items: flex-start;
+ margin-right: 16px;
+
+ position: static;
+ width: 40px;
+ left: 0px;
+ top: 0px;
+ }
+
+ .heroHeaderContent {
+ /* Auto layout */
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ row-gap: 16px;
+ padding: 0px;
+
+ position: static;
+ left: 56px;
+ top: 0px;
+
+ /* Inside auto layout */
+ flex: none;
+ order: 1;
+ flex-grow: 1;
+
+ font-size: 42px;
+ font-weight: 400;
+
+ @include mobile {
+ flex: auto;
+ }
+
+ .heroHeaderTitle {
+ display: flex;
+ }
+
+ .heroHeaderSubtitle {
+ font-size: 17px;
+ max-width: 713px;
+ line-height: 24px;
+ font-weight: 500;
+ }
+ }
+ }
+
+ .heroText {
+ position: static;
+ // height: 96px;
+ left: 0px;
+ top: 64px;
+ max-width: 713px;
+
+ /* desktop/body-large */
+ font-family: Roboto;
+ font-style: normal;
+ font-weight: normal;
+ font-size: 24px;
+ line-height: 32px;
+ /* or 133% */
+
+ /* gray/white */
+ color: #FFFFFF;
+
+ /* Inside auto layout */
+ order: 1;
+ margin: 16px 0px;
+ flex: none;
+ align-self: stretch;
+ flex-grow: 0;
+ }
+ }
+}
+
+.cardContainer {
+ display: flex;
+ column-gap: 8px;
+ justify-content: space-around;
+
+ @include mobile {
+ flex-direction: column;
+ justify-content: flex-start;
+ align-items: center;
+ row-gap: 8px;
+ }
+
+ .card {
+ /* Auto layout */
+ display: flex;
+ flex-direction: column;
+ justify-content: flex-start;
+ align-items: center;
+ row-gap: 8px;
+ padding: 32px;
+
+ position: static;
+ min-width: 500px;
+ max-width: 568px;
+ height: 172px;
+
+ /* gray/white */
+ background: $black-0;
+ /* Button hover shadow */
+ box-shadow: 0px 1px 5px rgba(0, 0, 0, 0.2);
+ border-radius: 8px;
+
+ .title {
+ font-size: 24px;
+ }
+
+ .text {
+ font-size: 16px;
+ line-height: 28px;
+ text-align: center;
+ }
+ }
+}
diff --git a/src/components/Button/index.jsx b/src/components/Button/index.jsx
new file mode 100644
index 000000000..99ef3afb5
--- /dev/null
+++ b/src/components/Button/index.jsx
@@ -0,0 +1,76 @@
+/**
+ * Button
+ *
+ * Supports:
+ * - size - see BUTTON_SIZE values
+ * - type - see BUTTON_TYPE values
+ *
+ * If `routeTo` is set, then button works as React Router Link
+ *
+ * if `href` is set, then button is rendered as a link ``
+ */
+import { Link } from "@reach/router";
+import cn from "classnames";
+import { BUTTON_SIZE, BUTTON_TYPE } from "constants";
+import PT from "prop-types";
+import React from "react";
+import "./styles.module.scss";
+
+const Button = ({
+ children,
+ size = BUTTON_SIZE.SMALL,
+ type = BUTTON_TYPE.PRIMARY,
+ onClick,
+ className,
+ innerRef,
+ disabled,
+ routeTo,
+ href,
+ target,
+ isSubmit,
+}) => {
+ if (href) {
+ return (
+
+ {children}
+
+ );
+ } else {
+ const button = (
+
+ {children}
+
+ );
+
+ return routeTo ? {button} : button;
+ }
+};
+
+Button.propTypes = {
+ children: PT.node,
+ size: PT.oneOf(Object.values(BUTTON_SIZE)),
+ type: PT.oneOf(Object.values(BUTTON_TYPE)),
+ onClick: PT.func,
+ className: PT.string,
+ innerRef: PT.func,
+ disabled: PT.bool,
+ routeTo: PT.string,
+ href: PT.string,
+ isSubmit: PT.bool,
+};
+
+export default Button;
diff --git a/src/components/Button/styles.module.scss b/src/components/Button/styles.module.scss
new file mode 100644
index 000000000..3168f947a
--- /dev/null
+++ b/src/components/Button/styles.module.scss
@@ -0,0 +1,118 @@
+@import "styles/include";
+
+.button {
+ @include font-roboto;
+ background: transparent;
+ border: 0;
+ box-sizing: border-box;
+ cursor: pointer;
+ align-items: center;
+ display: flex;
+ justify-content: center;
+ margin: 0;
+ padding: 0;
+ text-decoration: none;
+ outline: none;
+ white-space: nowrap;
+
+ &[disabled] {
+ cursor: default;
+ }
+
+ svg {
+ fill: white;
+ }
+}
+
+.size-large {
+ border-radius: 25px;
+ font-size: 20px;
+ font-weight: 700;
+ letter-spacing: 0.8px;
+ line-height: 46px;
+ height: 48px;
+ padding: 18px 30px;
+ text-transform: uppercase;
+}
+
+.size-medium {
+ border-radius: 20px;
+ font-size: 14px;
+ font-weight: 700;
+ letter-spacing: 0.8px;
+ line-height: 38px;
+ height: 40px;
+ padding: 0 19px;
+ text-transform: uppercase;
+}
+
+.size-small {
+ border-radius: 15px;
+ font-size: 12px;
+ font-weight: 700;
+ line-height: 28px;
+ letter-spacing: 0.8px;
+ height: 30px;
+ padding: 0 14px;
+ text-transform: uppercase;
+}
+
+.size-tiny {
+ border-radius: 12px;
+ padding: 6px 15px;
+ height: 24px;
+ font-size: 10px;
+ font-weight: 700;
+ line-height: 22px;
+ letter-spacing: 0.8px;
+ text-transform: uppercase;
+}
+
+.type-primary {
+ border: 2px solid $green1;
+ background-color: $green1;
+ color: #fff;
+}
+
+.type-warning {
+ border: 2px solid #ef476f;
+ background-color: #ef476f;
+ color: #fff;
+}
+
+.type-secondary {
+ background-color: #fff;
+ border: 2px solid $green1;
+ color: #229174;
+}
+
+.type-secondary[disabled] {
+ border-color: #b5b5b5;
+ color: #b5b5b5;
+}
+
+.type-rounded {
+ position: relative;
+ width: 22px;
+ border-radius: 50%;
+ background-color: #fff;
+ border: 1px solid $green1;
+ color: #229174;
+
+ svg {
+ position: absolute;
+ left: 37%;
+ }
+}
+
+.type-rounded[disabled] {
+ border-radius: 50%;
+ border-color: #b5b5b5;
+ color: #b5b5b5;
+}
+
+.type-primary[disabled],
+.type-warning[disabled] {
+ background-color: #b5b5b5;
+ border-color: #b5b5b5;
+}
diff --git a/src/components/DateInput/index.jsx b/src/components/DateInput/index.jsx
new file mode 100644
index 000000000..e5d93747b
--- /dev/null
+++ b/src/components/DateInput/index.jsx
@@ -0,0 +1,81 @@
+/**
+ * DateInput
+ *
+ * Date Input control.
+ */
+import React, { createRef, useState } from "react";
+import PT from "prop-types";
+import DatePicker from "react-datepicker";
+import cn from "classnames";
+import "react-datepicker/dist/react-datepicker.css";
+import CalendarIcon from "../../assets/images/icon-calendar.svg";
+import ArrowIcon from "../../assets/images/icon-arrow.svg";
+import styles from "./styles.module.scss";
+import moment from "moment";
+
+const DateInput = (props) => {
+ const [open, setOpen] = useState(false);
+ const calendarRef = createRef();
+ return (
+
+
calendarRef.current.setOpen(true)}
+ styleName={cn("styles.icon", "styles.icon-calendar")}
+ role="button"
+ tabIndex={0}
+ >
+
+
+
{
+ setOpen(false);
+ }}
+ onFocus={props.onFocus}
+ showYearDropdown
+ onCalendarOpen={() => setOpen(true)}
+ maxDate={
+ props.allowFutureDate ? null : moment().subtract(1, "days").toDate()
+ }
+ disabled={props.disabled}
+ />
+ calendarRef.current.setOpen(true)}
+ role="button"
+ tabIndex={0}
+ >
+
+
+
+ );
+};
+
+DateInput.propTypes = {
+ value: PT.string,
+ onChange: PT.func.isRequired,
+ placeholder: PT.string,
+ onBlur: PT.func,
+ onFocus: PT.func,
+ className: PT.string,
+ style2: PT.bool,
+ disabled: PT.bool,
+ allowFutureDate: PT.bool,
+};
+
+export default DateInput;
diff --git a/src/components/DateInput/styles.module.scss b/src/components/DateInput/styles.module.scss
new file mode 100644
index 000000000..6949cde2a
--- /dev/null
+++ b/src/components/DateInput/styles.module.scss
@@ -0,0 +1,64 @@
+@import "styles/include";
+
+.datepicker-wrapper {
+ position: relative;
+ padding: 0 10px;
+ .icon {
+ position: absolute;
+ display: flex;
+ padding: 8px 0 8px 4px;
+ align-items: center;
+ & > svg {
+ width: 20px;
+ height: 20px;
+ }
+ }
+ .icon-calendar {
+ left: 8px;
+ cursor: pointer;
+ }
+
+ .icon-arrow {
+ right: 8px;
+ top: 0;
+ & > svg {
+ color: hsl(0, 0%, 80%);
+ }
+ &:hover {
+ & > svg {
+ color: hsl(0, 0%, 60%);
+ }
+ }
+ &.icon-arrow-open {
+ & > svg {
+ color: hsl(0, 0%, 40%);
+ }
+ }
+ }
+
+ &.error {
+ input {
+ border-color: #fe665d;
+ }
+ }
+
+ & > div:nth-child(2) {
+ margin-left: 24px;
+ }
+
+ &.style2 input {
+ border: none !important;
+ box-shadow: none !important;
+ margin-bottom: 0 !important;
+ font-size: 18px;
+ &::placeholder {
+ color: #aaa;
+ font-size: 18px;
+ text-transform: none !important;
+ }
+ }
+}
+
+.datepicker-wrapper > div:nth-child(2) > div:nth-child(2) > div:nth-child(2) {
+ z-index: 100;
+}
diff --git a/src/components/FormElements/FormField/index.jsx b/src/components/FormElements/FormField/index.jsx
new file mode 100644
index 000000000..1c00cab13
--- /dev/null
+++ b/src/components/FormElements/FormField/index.jsx
@@ -0,0 +1,72 @@
+/**
+ * FormField
+ *
+ * A Form Field Is a wrapper for input to add the label to it
+ */
+import cn from "classnames";
+import PT from "prop-types";
+import React from "react";
+import "./styles.module.scss";
+
+const FormField = ({
+ children,
+ label = "",
+ placeholder = "",
+ onChange = (f) => f,
+ className,
+ styleName,
+ disabled,
+ helperText,
+ ...props
+}) => {
+ const handleClick = (e) => {
+ // focus on input label click
+ const inputElement = e.target.closest(".form-field").querySelector("input");
+ inputElement && inputElement.focus();
+ };
+ return (
+
+
+
+ {label}
+
+ {children}
+
+ {helperText &&
{helperText}
}
+
+
+ {props.error}
+
+
+ );
+};
+
+FormField.propTypes = {
+ onChange: PT.func,
+ label: PT.string,
+ placeholder: PT.string,
+ children: PT.node,
+ error: PT.string,
+};
+
+export default FormField;
diff --git a/src/components/FormElements/FormField/styles.module.scss b/src/components/FormElements/FormField/styles.module.scss
new file mode 100644
index 000000000..3547a2ae8
--- /dev/null
+++ b/src/components/FormElements/FormField/styles.module.scss
@@ -0,0 +1,64 @@
+@import "styles/include";
+
+.form-field-wrapper {
+ position: relative;
+ display: flex;
+ flex-direction: column;
+ justify-content: flex-start;
+ margin-bottom: 18px;
+ @include mobile {
+ margin-bottom: 0px;
+ }
+
+ &.helper {
+ margin-bottom: 35px !important;
+ }
+
+ .form-field {
+ border: 1px solid #b7b7b7;
+ border-radius: 4px;
+ background: white;
+ padding-top: 24px;
+ margin-bottom: 10px;
+
+ &.disabled {
+ background-color: $grey-bg !important;
+ }
+
+ .label {
+ position: absolute;
+ top: 5px;
+ left: 15px;
+ color: $green1;
+ font-size: 13px;
+ }
+
+ > div {
+ border-radius: 4px;
+ }
+ }
+ .error {
+ color: $red;
+ }
+
+ .helperText {
+ @include font-roboto;
+ font-weight: 400;
+ font-size: 12px;
+ line-height: 14px;
+ color: #555;
+ margin-top: -6px;
+ }
+}
+
+.labelStyle {
+ font-size: 11px !important;
+ margin-top: 10px;
+ left: 10px !important;
+ top: 8px !important;
+}
+
+.formTitleStyle {
+ margin-top: 12px !important;
+ padding-top: 0 !important;
+}
diff --git a/src/components/FormElements/FormInputCheckbox/index.jsx b/src/components/FormElements/FormInputCheckbox/index.jsx
new file mode 100644
index 000000000..7e5843a0a
--- /dev/null
+++ b/src/components/FormElements/FormInputCheckbox/index.jsx
@@ -0,0 +1,54 @@
+/* eslint-disable jsx-a11y/label-has-associated-control */
+/**
+ * FormInputCheckbox
+ *
+ * Form Input Checkbox
+ */
+import cn from "classnames";
+import PT from "prop-types";
+import Checkbox from "rc-checkbox";
+import "rc-checkbox/assets/index.css";
+import React from "react";
+import styles from "./styles.module.scss";
+
+const FormInputCheckbox = ({
+ label,
+ additionalContent,
+ onChange = (f) => f,
+ styleName,
+ inline,
+ ...props
+}) => {
+ return inline ? (
+
+
+
+
+ {label} {additionalContent}
+
+
+
+ ) : (
+ // eslint-disable-next-line jsx-a11y/label-has-associated-control
+
+
+
+ {label} {additionalContent}
+
+
+ );
+};
+
+FormInputCheckbox.propTypes = {
+ label: PT.string,
+};
+
+export default FormInputCheckbox;
diff --git a/src/components/FormElements/FormInputCheckbox/styles.module.scss b/src/components/FormElements/FormInputCheckbox/styles.module.scss
new file mode 100644
index 000000000..da8a7afdb
--- /dev/null
+++ b/src/components/FormElements/FormInputCheckbox/styles.module.scss
@@ -0,0 +1,60 @@
+@import "styles/include";
+
+.form-input-checkbox {
+ display: flex;
+ align-items: center;
+
+ .label {
+ @include font-roboto;
+ font-size: 14px;
+ line-height: 18px;
+ margin-left: 8px;
+ font-weight: normal;
+
+ span {
+ text-decoration: underline;
+ color: $link-blue;
+ cursor: pointer;
+ }
+ }
+}
+
+/* rc checkbox custom style */
+:global {
+ .rc-checkbox.form-input-rc-checkbox {
+ display: flex;
+
+ .rc-checkbox-inner {
+ width: 20px !important;
+ height: 20px !important;
+
+ &:hover {
+ border-color: $green1;
+ }
+ }
+
+ .rc-checkbox-inner:after {
+ left: 6px !important;
+ top: 0 !important;
+ width: 7px !important;
+ height: 14px !important;
+ }
+
+
+ }
+
+ .rc-checkbox.form-input-rc-checkbox.rc-checkbox-checked {
+ .rc-checkbox-inner {
+ background-color: $green1;
+ border-color: $green1;
+ }
+ }
+}
+
+.inline {
+ display: inline-block;
+ .span {
+ color: $link-blue;
+ text-decoration: underline;
+ }
+}
diff --git a/src/components/FormElements/FormInputNumber/index.jsx b/src/components/FormElements/FormInputNumber/index.jsx
new file mode 100644
index 000000000..253380384
--- /dev/null
+++ b/src/components/FormElements/FormInputNumber/index.jsx
@@ -0,0 +1,22 @@
+/**
+ * FormInputNumber
+ *
+ * Form Input Type=text
+ */
+import cn from "classnames";
+import React from "react";
+import "./styles.module.scss";
+
+const FormInputNumber = ({ styleName, ...props }) => {
+ return (
+
+ );
+};
+
+FormInputNumber.propTypes = {};
+
+export default FormInputNumber;
diff --git a/src/components/FormElements/FormInputNumber/styles.module.scss b/src/components/FormElements/FormInputNumber/styles.module.scss
new file mode 100644
index 000000000..2724e6ac4
--- /dev/null
+++ b/src/components/FormElements/FormInputNumber/styles.module.scss
@@ -0,0 +1,25 @@
+@import "styles/include";
+
+.form-input-number {
+ background-color: #ffffff !important;
+ box-sizing: border-box !important;
+ color: #444 !important;
+ font-size: 18px !important;
+ height: 32px !important;
+ outline: none !important;
+ border: 0 !important;
+ padding: 0 15px !important;
+ width: 100% !important;
+ &::placeholder {
+ color: #aaaaaa !important;
+ font-size: 18px !important;
+ text-transform: none !important;
+ }
+ &:focus {
+ box-shadow: none !important;
+ }
+
+ &:disabled {
+ background-color: $grey-bg !important;
+ }
+}
diff --git a/src/components/FormElements/FormInputText/index.jsx b/src/components/FormElements/FormInputText/index.jsx
new file mode 100644
index 000000000..47bfa8d02
--- /dev/null
+++ b/src/components/FormElements/FormInputText/index.jsx
@@ -0,0 +1,22 @@
+/**
+ * FormInputText
+ *
+ * Form Input Type=text
+ */
+import cn from "classnames";
+import React from "react";
+import "./styles.module.scss";
+
+const FormInputText = ({ styleName, ...props }) => {
+ return (
+
+ );
+};
+
+FormInputText.propTypes = {};
+
+export default FormInputText;
diff --git a/src/components/FormElements/FormInputText/styles.module.scss b/src/components/FormElements/FormInputText/styles.module.scss
new file mode 100644
index 000000000..6a5264f42
--- /dev/null
+++ b/src/components/FormElements/FormInputText/styles.module.scss
@@ -0,0 +1,5 @@
+@import "styles/include";
+
+.form-input-text {
+ @include formInputText;
+}
diff --git a/src/components/FormElements/FormInputTextArea/index.jsx b/src/components/FormElements/FormInputTextArea/index.jsx
new file mode 100644
index 000000000..8d9f65f9e
--- /dev/null
+++ b/src/components/FormElements/FormInputTextArea/index.jsx
@@ -0,0 +1,22 @@
+/**
+ * FormInputTextArea
+ *
+ * Form Input textarea
+ */
+import cn from "classnames";
+import React from "react";
+import "./styles.module.scss";
+
+const FormInputTextArea = ({ styleName, ...props }) => {
+ return (
+
+ );
+};
+
+FormInputTextArea.propTypes = {};
+
+export default FormInputTextArea;
diff --git a/src/components/FormElements/FormInputTextArea/styles.module.scss b/src/components/FormElements/FormInputTextArea/styles.module.scss
new file mode 100644
index 000000000..1b6b95809
--- /dev/null
+++ b/src/components/FormElements/FormInputTextArea/styles.module.scss
@@ -0,0 +1,23 @@
+@import "styles/include";
+
+.form-input-textarea {
+ background-color: #ffffff !important;
+ box-sizing: border-box !important;
+ color: #444 !important;
+ font-size: 16px !important;
+ outline: none !important;
+ border: 0 !important;
+ padding: 0 15px !important;
+ width: 100% !important;
+ height: 70px;
+ resize: none;
+ &::placeholder {
+ color: #aaaaaa !important;
+ font-size: 18px !important;
+ text-transform: none !important;
+ font-weight: 400;
+ }
+ &:focus {
+ box-shadow: none !important;
+ }
+}
diff --git a/src/components/FormElements/FormPasswordField/index.jsx b/src/components/FormElements/FormPasswordField/index.jsx
new file mode 100644
index 000000000..b55ce732a
--- /dev/null
+++ b/src/components/FormElements/FormPasswordField/index.jsx
@@ -0,0 +1,38 @@
+/**
+ * FormPasswordField
+ *
+ * Form Input Type=text
+ */
+import cn from "classnames";
+import React, { useState } from "react";
+import EyeIcon from "../../../assets/images/eye.svg";
+import "./styles.module.scss";
+
+const FormPasswordField = ({ styleName, ...props }) => {
+ const [inputType, setInputType] = useState("password");
+
+ const handleViewPassword = () => {
+ setInputType(inputType === "password" ? "text" : "password");
+ };
+
+ return (
+ <>
+
+
+
+
+ >
+ );
+};
+
+FormPasswordField.propTypes = {};
+
+export default FormPasswordField;
diff --git a/src/components/FormElements/FormPasswordField/styles.module.scss b/src/components/FormElements/FormPasswordField/styles.module.scss
new file mode 100644
index 000000000..bb55e970a
--- /dev/null
+++ b/src/components/FormElements/FormPasswordField/styles.module.scss
@@ -0,0 +1,36 @@
+@import "styles/include";
+
+.form-password-field {
+ background-color: #ffffff !important;
+ box-sizing: border-box !important;
+ color: #444 !important;
+ font-size: 18px !important;
+ height: 32px !important;
+ outline: none !important;
+ border: 0 !important;
+ padding: 0 15px !important;
+ width: 100% !important;
+ &::placeholder {
+ color: #aaaaaa !important;
+ font-size: 18px !important;
+ text-transform: none !important;
+ }
+ &:focus {
+ box-shadow: none !important;
+ }
+
+ &:disabled {
+ background-color: $grey-bg !important;
+ }
+
+ &::-ms-reveal {
+ display: none;
+ }
+}
+
+.eye-icon {
+ position: absolute;
+ right: 9px;
+ top: 37px;
+ cursor: pointer;
+}
diff --git a/src/components/HelpBanner/index.jsx b/src/components/HelpBanner/index.jsx
new file mode 100644
index 000000000..60fb7c82c
--- /dev/null
+++ b/src/components/HelpBanner/index.jsx
@@ -0,0 +1,47 @@
+/**
+ * Help Banner component
+ */
+import React, { useState } from "react";
+import cn from "classnames";
+import ArrowIcon from "../../assets/images/icon-arrow.svg";
+import "./styles.module.scss";
+import Button from "../Button";
+
+const HelpBanner = ({
+ title,
+ description,
+ contactSupport,
+ children,
+ styles = [],
+ defaultOpen = false,
+}) => {
+ const [open, setOpen] = useState(defaultOpen);
+ return (
+
+
setOpen(!open)}
+ role="button"
+ tabIndex={0}
+ >
+
{title}
+
+
+
+
+ {open && title !== description && (
+
{description}
+ )}
+ {open && children &&
{children}
}
+ {open && contactSupport && (
+
+ Contact support
+
+ )}
+
+ );
+};
+
+export default HelpBanner;
diff --git a/src/components/HelpBanner/styles.module.scss b/src/components/HelpBanner/styles.module.scss
new file mode 100644
index 000000000..e414ea365
--- /dev/null
+++ b/src/components/HelpBanner/styles.module.scss
@@ -0,0 +1,75 @@
+@import "styles/include";
+
+.banner {
+ background-color: $orange-25;
+ border-radius: 8px;
+ width: 100%;
+ margin-top: 32px;
+
+ .title {
+ cursor: pointer;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 16px;
+
+ span {
+ color: $black;
+ font-size: 20px;
+ line-height: 20px;
+ text-transform: uppercase;
+ font-weight: 600;
+ }
+
+ .arrowIcon {
+
+ &.up {
+ transform: rotate(180deg);
+ }
+ }
+ }
+
+ .description {
+ @include font-roboto;
+ font-size: 16px;
+ line-height: 26px;
+ color: $black;
+ margin-top: -26px;
+ padding: 16px;
+ }
+
+ .supportButton {
+ padding: 16px;
+ }
+}
+
+.gray {
+ background-color: $gray-10;
+ font-size: 16px;
+ @include font-roboto;
+ line-height: 26px;
+ color: $black;
+ font-style: normal;
+
+ .description {
+ padding-top: 0px;
+ }
+
+ a {
+ text-decoration: underline;
+ color: $link-blue;
+ cursor: pointer;
+ }
+}
+
+.turqoise {
+ background-color: $turqoise;
+}
+
+.marginTop24Mobile {
+ margin-top: 0;
+
+ @include mobile {
+ margin-top: 24px;
+ }
+}
\ No newline at end of file
diff --git a/src/components/HelpIcon/index.jsx b/src/components/HelpIcon/index.jsx
new file mode 100644
index 000000000..5204e5b79
--- /dev/null
+++ b/src/components/HelpIcon/index.jsx
@@ -0,0 +1,36 @@
+import React, { useRef } from "react";
+import ReactTooltip from "react-tooltip";
+import HintIcon from "../../assets/images/icon-hint-green.svg";
+import { v4 as uuidv4 } from "uuid";
+
+import "./styles.module.scss";
+
+const HelpIcon = ({
+ children,
+ inverted,
+ arrowColor = "#f4f4f4",
+ backgroundColor = "#f4f4f4",
+ textColor = "#00000",
+}) => {
+ const tooltipId = useRef(uuidv4());
+
+ return (
+
+
+
+ {children}
+
+
+ );
+};
+
+export default HelpIcon;
diff --git a/src/components/HelpIcon/styles.module.scss b/src/components/HelpIcon/styles.module.scss
new file mode 100644
index 000000000..eb4e48b4a
--- /dev/null
+++ b/src/components/HelpIcon/styles.module.scss
@@ -0,0 +1,23 @@
+@import "styles/include";
+
+.help-icon {
+ .tooltip {
+ display: flex;
+ @include font-roboto;
+ font-weight: 400;
+ font-size: 12px;
+ line-height: 20px;
+ max-width: 30ch;
+ padding: 8px;
+ background-color: $grey-bg;
+ color: $black;
+ border-radius: 8px;
+ opacity: 1 !important;
+ box-shadow: 0 1px 5px $tips-shadow;
+
+ &.inverted {
+ background-color: $black;
+ color: $grey-bg;
+ }
+ }
+}
diff --git a/src/components/Layout/index.jsx b/src/components/Layout/index.jsx
new file mode 100644
index 000000000..e3723e5c4
--- /dev/null
+++ b/src/components/Layout/index.jsx
@@ -0,0 +1,22 @@
+import React from "react";
+import PT from "prop-types";
+
+/**
+ * Block Layout
+ */
+const Layout = ({ PageComponent, ...routeProps }) => {
+ return (
+
+ );
+};
+
+Layout.propTypes = {
+ PageComponent: PT.func,
+ path: PT.string,
+};
+
+export default Layout;
diff --git a/src/components/LoadingIndicator/index.jsx b/src/components/LoadingIndicator/index.jsx
new file mode 100644
index 000000000..c6668f083
--- /dev/null
+++ b/src/components/LoadingIndicator/index.jsx
@@ -0,0 +1,25 @@
+/**
+ * LoadingIndicator
+ *
+ * Optionally shows error.
+ */
+import React from "react";
+import _ from "lodash";
+import PT from "prop-types";
+import "./styles.module.scss";
+
+const LoadingIndicator = ({ error }) => {
+ return (
+
+ {!error
+ ? "Loading..."
+ : _.get(error, "response.data.message", error.toString())}
+
+ );
+};
+
+LoadingIndicator.propTypes = {
+ error: PT.object,
+};
+
+export default LoadingIndicator;
diff --git a/src/components/LoadingIndicator/styles.module.scss b/src/components/LoadingIndicator/styles.module.scss
new file mode 100644
index 000000000..8066ccf44
--- /dev/null
+++ b/src/components/LoadingIndicator/styles.module.scss
@@ -0,0 +1,3 @@
+.loading-indicator {
+ text-align: center;
+}
diff --git a/src/components/LoadingSpinner/index.jsx b/src/components/LoadingSpinner/index.jsx
new file mode 100644
index 000000000..1fc69afaf
--- /dev/null
+++ b/src/components/LoadingSpinner/index.jsx
@@ -0,0 +1,26 @@
+/**
+ * LoadingSpinner
+ *
+ * Centered Loading Spinner with back overlay
+ */
+import React from "react";
+import PT from "prop-types";
+import cn from "classnames";
+import "./styles.module.scss";
+import PuffLoader from "react-spinners/PuffLoader";
+
+const LoadingSpinner = ({ show = false, styleName }) => {
+ return (
+
+ );
+};
+
+LoadingSpinner.propTypes = {
+ show: PT.bool,
+};
+
+export default LoadingSpinner;
diff --git a/src/components/LoadingSpinner/styles.module.scss b/src/components/LoadingSpinner/styles.module.scss
new file mode 100644
index 000000000..dede58173
--- /dev/null
+++ b/src/components/LoadingSpinner/styles.module.scss
@@ -0,0 +1,24 @@
+@import "styles/include";
+
+.loading-spinner {
+ position: fixed;
+ width: 100%;
+ height: 100%;
+ top: 0;
+ left: 0;
+ background: #0000001a;
+ color: white;
+ z-index: 1000;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ transition: opacity 1s ease;
+ opacity: 1;
+ &.hide {
+ opacity: 0;
+ pointer-events: none;
+ }
+ &.show {
+ opacity: 1;
+ }
+}
diff --git a/src/components/Modal/PolicyContent/index.jsx b/src/components/Modal/PolicyContent/index.jsx
new file mode 100644
index 000000000..b651c4217
--- /dev/null
+++ b/src/components/Modal/PolicyContent/index.jsx
@@ -0,0 +1,348 @@
+import PageH2 from "components/PageElements/PageH2";
+import PageP from "components/PageElements/PageP";
+import React from "react";
+import "./styles.module.scss";
+
+const PolicyContent = () => (
+
+
STOCK ARTWORK POLICY
+
+ Your submission CANNOT contain any stock art, clipart, icons, or “free”
+ elements from the web. All items you design and submit within a Topcoder
+ Design Challenge must be created solely by you (as original artwork) or be
+ provided by the client as part of the challenge inputs. Note, we treat
+ icons differently.
+
+
+ The exception to this rule is when a Design challenge allows Stock
+ Artwork. Every challenge clearly states whether or not stock artwork is
+ allowed. If the challenge allows it, you will need to abide by the
+ following rules:
+
+
+
+ You must document your Stock Artwork (photos, illustrations) when
+ submitting. (This helps a customer find the Stock Artwork for purchasing
+ or attribution later)
+
+
+ You are allowed to use stock photos and stock illustrations. If you use
+ any Stock Artwork (anything!) in your design it MUST BE DOCUMENTED. This
+ includes Unsplash, Pexels, and client/ challenge provided artwork or
+ photos.
+
+
+ You are only allowed to use Stock Artwork from the provided websites:
+
+
+
+ Watermark: You MUST keep the stock watermark intact. If the photo is
+ cropped in such a way that the watermark is not visible, please be sure
+ to include the entire watermarked image in your source files so
+ Screeners can review and see where the image is from. When using either
+ Unsplash or Pexels, where a watermark is not included on the image,
+ please add either “Unsplash” or “Pexels” text on top of the image
+ somewhere.
+
+
+
+
+ If the challenge does not allow Stock Artwork (photos or illustrations),
+ it will clearly state this in the challenge details page.
+
+
+
+ Stock Illustrations:
+ Stock Illustrations are allowed but you must treat them like “stock
+ photos”. You are NOT allowed to edit any illustration and claim it as your
+ own artwork. You are not allowed to trace stock illustrations and claim
+ them as your own artwork. Stock Illustrations MUST include proper
+ watermarks and source documentation.
+
+ Personal Photos:
+ You are allowed to create and use your own photography. Make sure to
+ attribute the photo to yourself. If you include your own photography the
+ licensing must be free for the customer to use (if you are a prize
+ winner).
+
+ Client Supplied Assets:
+ Any assets supplied as part of the challenge can be used in your designs.
+ These assets MUST still be declared as part of your submission.
+
+
+ Things to Remember
+
+
+
+ We screen all design submissions for copyright infringement and proper
+ source documentation.
+
+ All designs must be created by you
+ DO NOT COPY OR TRACE EXISTING ARTWORK
+
+ Make sure you understand the Topcoder Terms, Official Design Contest
+ Rules, and check each contest for more information and what is allowed
+ in that challenge before you submit.
+
+
+
GENERAL FONT POLICIES
+
+
+ Fonts only need to be declared in design challenges, not wireframe or
+ idea generation challenges.
+
+
+ All fonts you introduced within your design must be declared when you
+ submit your design.
+
+ Fonts must be from the Font sites listed below.
+ You may not use symbol fonts (webdings, etc.)
+
+ You must list the name, source, and URL of each font when submitting (We
+ do this to help the Customer)
+
+
+ In general, missing font documentation or two will not affect screening
+ but Copilots will check source files and you will have to provide ALL
+ font documentation in Final Fixes in order to get your full payment. It
+ is best to do it correctly the first time.
+
+
+ If you have not introduced any new fonts then choose that option in the
+ drop-down when you are declaring your fonts.
+
+
+
+
APPROVED FONT SITES
+
+ Typekit
+
+ (Limited Library)
+
+
+
+ Google Fonts
+
+
+
+
+ Web Safe Fonts
+
+
ICON POLICY
+
+ Topcoder Design Challenges either allow or disallow stock icons as part of
+ the creative process. It is critical that you review what is allowed or
+ not allowed in each challenge, and if the policy is not clear, you ask in
+ the respective challenge forum.
+
+
+ When stock icons are allowed, you must treat them like “stock photos.” You
+ are not allowed to edit stock icons and claim them as your artwork. You
+ are not allowed to trace stock icons and claim them as your artwork. Stock
+ icons are only allowed in design challenges that allow “Stock Icons.”
+ Stock icons do not require watermarks, but they do require proper source
+ documentation and attribution.
+
+
+ Every challenge clearly states whether or not Stock Icons are allowed. If
+ the challenge allows stock icons, you will need to abide by the following
+ rules:
+
+
+
+ You must document your Stock Icons when submitting.
+
+
+
+
+ Goal: Help customers find your stock Icons for purchase and
+ usage during development.
+
+
+
+
+
+
+
+ If you use any Stock Icons (anything!) in your design, it{" "}
+ MUST BE DOCUMENTED .
+
+
+
+
+ When documenting your icons, you must provide a link to every icon
+ family you are using, or to each unique icon. It is essential that
+ everything is easy to find and is from Topcoder approved sources.
+
+
+
+
+ Alternatively, you can provide the source only, disregarding each
+ link. Nevertheless, you may be asked to disclose each link for
+ each icon.
+
+
+
+ Example: “Icons taken from Iconmonstr and FlatIcon”
+
+
+
+
+
+ You are ONLY ALLOWED to use Stock Icons from these approved sources:
+
+
+
+
+
+
+ SVG/ Vector Format:
+
+
+
+
+ You MUST use SVG or vector versions of icons.
+
+
+ DO NOT use PNG, JPG, or GIF formats.
+
+
+ If you create your own icons
+
+
+
+ Write down the description of each icon and where to find it in
+ the design.
+
+
+
+
+ Make sure they are in a vector format and included in your designs
+ AND as separate files as part of your submission. We need to
+ easily be able to download/ export SVG versions of all icons in
+ your designs.
+
+
+
+
+
+
+ If the challenge does not allow Stock Icons, it will clearly state this in
+ the challenge details page.
+
+
+ Client Supplied Assets: Any assets supplied as part of a challenge can be
+ used in your designs. These assets MUST still be declared as part of your
+ submission.
+
+
+ Things to Remember
+
+
+
+
+ We screen all design submissions for copyright infringement and proper
+ source documentation.
+
+
+
+ DO NOT COPY OR TRACE EXISTING ARTWORK OR ICONS
+
+
+
+ Ensure you understand the Topcoder Terms, Official Design Contest
+ Rules, and check each contest for more information and what is allowed
+ in that challenge before you submit.
+
+
+
+ Make sure ALL icons are vector/ SVG
+
+
+ No PNG, JPG, or GIF (raster) icons allowed.
+
+
+
+);
+
+export default PolicyContent;
diff --git a/src/components/Modal/PolicyContent/styles.module.scss b/src/components/Modal/PolicyContent/styles.module.scss
new file mode 100644
index 000000000..f6af2e4aa
--- /dev/null
+++ b/src/components/Modal/PolicyContent/styles.module.scss
@@ -0,0 +1,40 @@
+@import "styles/include";
+
+.container {
+ line-height: 20px;
+
+ p {
+ @include font-roboto;
+ font-weight: 400;
+ color: #404041;
+ font-size: 15px;
+ color: #2a2a2a;
+ font-size: 16px;
+ margin-bottom: 20px;
+ }
+
+ li {
+ margin-bottom: 10px;
+ }
+
+ a {
+ text-decoration: underline;
+ color: $link-blue;
+ }
+
+ ol {
+ list-style: decimal;
+ list-style-type: decimal;
+ padding-left: 30px;
+
+ ul {
+ margin-top: 10px;
+ }
+ }
+
+ ul {
+ list-style: disc;
+ list-style-type: disc;
+ padding-left: 30px;
+ }
+}
\ No newline at end of file
diff --git a/src/components/Modal/index.jsx b/src/components/Modal/index.jsx
new file mode 100644
index 000000000..99b25dd71
--- /dev/null
+++ b/src/components/Modal/index.jsx
@@ -0,0 +1,64 @@
+/**
+ * Modal
+ *
+ * Modal
+ */
+import cn from "classnames";
+import React from "react";
+import PT from "prop-types";
+
+import styles from "./styles.module.scss";
+import IconCross from "../../assets/images/icon-cross.svg";
+
+const Modal = ({
+ children,
+ fullWidth,
+ halfWidth,
+ handleClose = (f) => f,
+ hideClose = false,
+ show = false,
+ title,
+}) => {
+ return (
+ show && (
+
+
handleClose(e)}
+ role="button"
+ tabIndex={0}
+ >
+
+
+
+
{title}
+ {!hideClose && (
+
handleClose(e)}
+ />
+ )}
+
+
+ {children}
+
+
+ )
+ );
+};
+
+Modal.propTypes = {
+ children: PT.node,
+ handleClose: PT.func,
+ hideClose: PT.bool,
+ show: PT.bool,
+ title: PT.string,
+};
+
+export default Modal;
diff --git a/src/components/Modal/styles.module.scss b/src/components/Modal/styles.module.scss
new file mode 100644
index 000000000..dea182dfd
--- /dev/null
+++ b/src/components/Modal/styles.module.scss
@@ -0,0 +1,91 @@
+@import 'styles/include';
+
+.modalContainer {
+ @include font-barlow;
+ position: fixed;
+ left: 0;
+ right: 0;
+ top: 0;
+ bottom: 0;
+ z-index: 1000;
+
+ .modalContent {
+ width: 80%;
+ max-width: 350px;
+ min-height: 300px;
+ max-height: calc(100vh - 100px);
+ margin: 50px auto 0;
+ background: white;
+ position: relative;
+ border-radius: 5px;
+ padding: 26px;
+ overflow: auto;
+ font-size: 15px;
+ line-height: 1.3em;
+ @include mobile {
+ overflow: hidden;
+ }
+
+ .stickyHeader {
+ position: sticky;
+ top: 0;
+ z-index: 1;
+ }
+
+ .titleContainer {
+ display: flex;
+ justify-content: center;
+ color: $blue1;
+ text-transform: uppercase;
+ margin-bottom: 22px;
+ font-weight: bold;
+ }
+
+ form {
+ margin-top: 30px;
+
+ .modalButtonContainer {
+ display: flex;
+ justify-content: center;
+ }
+ }
+ }
+
+ .full-width {
+ max-width: 100%;
+ }
+
+ .half-width {
+ max-width: 50%;
+ @include mobile {
+ max-width: 100%;
+ }
+ }
+
+ .modalBackground {
+ background: #00000055;
+ height: 100vh;
+ position: fixed;
+ left: 0;
+ right: 0;
+ top: 0;
+ bottom: 0;
+ z-index: -1;
+ }
+
+ .modalCloseBtn {
+ position: absolute;
+ top: 23px;
+ right: 20px;
+ cursor: pointer;
+ height: 27px;
+ width: 27px;
+ padding: 6px;
+ border-radius: 100%;
+ background: white;
+ }
+
+ .modalCloseBtn * {
+ stroke-width: 1px !important;
+ }
+}
diff --git a/src/components/Page/index.jsx b/src/components/Page/index.jsx
new file mode 100644
index 000000000..d360d1def
--- /dev/null
+++ b/src/components/Page/index.jsx
@@ -0,0 +1,24 @@
+/**
+ * Page
+ *
+ * Handles common stuff for pages.
+ * Should wrap each page.
+ */
+import cn from "classnames";
+import PT from "prop-types";
+import React from "react";
+import "./styles.module.scss";
+
+const Page = ({ children, styleName, ...props }) => {
+ return (
+
+ {children}
+
+ );
+};
+
+Page.propTypes = {
+ children: PT.node,
+};
+
+export default Page;
diff --git a/src/components/Page/styles.module.scss b/src/components/Page/styles.module.scss
new file mode 100644
index 000000000..234ea8b27
--- /dev/null
+++ b/src/components/Page/styles.module.scss
@@ -0,0 +1,7 @@
+@import "styles/include";
+.page {
+ padding: 0 32px 32px;
+ @include mobile {
+ padding: 0px;
+ }
+}
diff --git a/src/components/PageContent/index.jsx b/src/components/PageContent/index.jsx
new file mode 100644
index 000000000..40fb4f492
--- /dev/null
+++ b/src/components/PageContent/index.jsx
@@ -0,0 +1,23 @@
+/**
+ * PageContent
+ *
+ * Main page layout.
+ */
+import React, { useEffect } from "react";
+import PT from "prop-types";
+import cn from "classnames";
+import "./styles.module.scss";
+
+const PageContent = ({ children, styleName, ...props }) => {
+ return (
+
+ {children}
+
+ );
+};
+
+PageContent.propTypes = {
+ children: PT.node,
+};
+
+export default PageContent;
diff --git a/src/components/PageContent/styles.module.scss b/src/components/PageContent/styles.module.scss
new file mode 100644
index 000000000..f7b82ad54
--- /dev/null
+++ b/src/components/PageContent/styles.module.scss
@@ -0,0 +1,11 @@
+@import "styles/include";
+.page-content {
+ margin: 32px 0;
+ padding: 40px 0;
+ @include mobile {
+ padding: 20px;
+ }
+ background: white;
+ border-radius: 8px;
+ position: relative;
+}
diff --git a/src/components/PageDivider/index.jsx b/src/components/PageDivider/index.jsx
new file mode 100644
index 000000000..12e11bc75
--- /dev/null
+++ b/src/components/PageDivider/index.jsx
@@ -0,0 +1,14 @@
+/**
+ * PageDivider
+ *
+ * A Divider (line).
+ */
+import React, { useEffect } from "react";
+import cn from "classnames";
+import "./styles.module.scss";
+
+const PageDivider = ({ styleName, ...props }) => {
+ return
;
+};
+
+export default PageDivider;
diff --git a/src/components/PageDivider/styles.module.scss b/src/components/PageDivider/styles.module.scss
new file mode 100644
index 000000000..19366671e
--- /dev/null
+++ b/src/components/PageDivider/styles.module.scss
@@ -0,0 +1,7 @@
+.page-divider {
+ height: 1px;
+ border-bottom: 1px solid #ccc;
+ margin: 10px 0;
+ padding-top: 20px;
+ width: 100%;
+}
diff --git a/src/components/PageElements/PageCard/index.jsx b/src/components/PageElements/PageCard/index.jsx
new file mode 100644
index 000000000..5851a9396
--- /dev/null
+++ b/src/components/PageElements/PageCard/index.jsx
@@ -0,0 +1,38 @@
+/**
+ * PageCard
+ *
+ * page card
+ */
+import React from "react";
+import PT from "prop-types";
+import cn from "classnames";
+import "./styles.module.scss";
+
+const PageCard = ({
+ colorStyle = "primary",
+ hasImage = false,
+ children,
+ styleName,
+ ...props
+}) => {
+ return (
+
+ {children}
+
+ );
+};
+
+PageCard.propTypes = {
+ children: PT.node,
+ hasImage: PT.bool,
+};
+
+export default PageCard;
diff --git a/src/components/PageElements/PageCard/styles.module.scss b/src/components/PageElements/PageCard/styles.module.scss
new file mode 100644
index 000000000..2fac336a3
--- /dev/null
+++ b/src/components/PageElements/PageCard/styles.module.scss
@@ -0,0 +1,52 @@
+@import "styles/include";
+
+.page-card {
+ padding: 10px 30px;
+ color: white;
+ border-radius: 8px;
+ overflow: hidden;
+ height: 200px;
+ @include mobile {
+ height: auto;
+ margin-bottom: 20px;
+ padding-right: 20px;
+ }
+
+ p {
+ color: white;
+ }
+ &.color-primary {
+ background: linear-gradient(
+ 90deg,
+ rgba(101, 35, 133, 1),
+ rgba(140, 56, 76, 1)
+ );
+ }
+ &.color-secondary {
+ background: linear-gradient(
+ 90deg,
+ rgba(5, 106, 135, 1),
+ rgba(3, 131, 104, 1)
+ );
+ }
+ &.has-image {
+ display: flex;
+ align-items: center;
+ @include desktop {
+ padding: 0;
+ padding-right: 10px;
+ }
+ @include mobile {
+ padding-top: 0;
+ flex-direction: column;
+ text-align: center;
+ }
+ }
+ & img {
+ height: 100%;
+ object-fit: contain;
+ @include desktop {
+ margin-right: 31px;
+ }
+ }
+}
diff --git a/src/components/PageElements/PageFoot/index.jsx b/src/components/PageElements/PageFoot/index.jsx
new file mode 100644
index 000000000..179a44f86
--- /dev/null
+++ b/src/components/PageElements/PageFoot/index.jsx
@@ -0,0 +1,26 @@
+/**
+ * PageFoot
+ *
+ * page bottom section
+ */
+import React from "react";
+import PT from "prop-types";
+import cn from "classnames";
+import "./styles.module.scss";
+
+const PageFoot = ({ children, align = "right", styleName, ...props }) => {
+ return (
+
+ {children}
+
+ );
+};
+
+PageFoot.propTypes = {
+ children: PT.node,
+};
+
+export default PageFoot;
diff --git a/src/components/PageElements/PageFoot/styles.module.scss b/src/components/PageElements/PageFoot/styles.module.scss
new file mode 100644
index 000000000..8e6f0a09d
--- /dev/null
+++ b/src/components/PageElements/PageFoot/styles.module.scss
@@ -0,0 +1,26 @@
+@import "styles/include";
+
+.page-foot {
+ margin: 30px 0 0 0;
+ display: flex;
+ justify-content: flex-start;
+
+ &.page-foot.align-right {
+ justify-content: flex-end;
+ }
+
+ &.page-foot.align-between {
+ justify-content: space-between;
+ }
+ @include mobile {
+ flex-direction: column;
+ justify-content: center !important;
+ align-items: center !important;
+ & > * {
+ margin-bottom: 20px;
+ }
+ }
+ a {
+ text-decoration: none;
+ }
+}
diff --git a/src/components/PageElements/PageH1/index.jsx b/src/components/PageElements/PageH1/index.jsx
new file mode 100644
index 000000000..746a944bc
--- /dev/null
+++ b/src/components/PageElements/PageH1/index.jsx
@@ -0,0 +1,23 @@
+/**
+ * PageH1
+ *
+ * page content heading 1
+ */
+import React from "react";
+import PT from "prop-types";
+import cn from "classnames";
+import "./styles.module.scss";
+
+const PageH1 = ({ children, styleName, ...props }) => {
+ return (
+
+ {children}
+
+ );
+};
+
+PageH1.propTypes = {
+ children: PT.node,
+};
+
+export default PageH1;
diff --git a/src/components/PageElements/PageH1/styles.module.scss b/src/components/PageElements/PageH1/styles.module.scss
new file mode 100644
index 000000000..407d55ade
--- /dev/null
+++ b/src/components/PageElements/PageH1/styles.module.scss
@@ -0,0 +1,10 @@
+@import "styles/include";
+
+.page-h1 {
+ margin: 30px 0 20px 0;
+ @include font-barlow;
+ font-size: 44px;
+ font-weight: 410;
+ line-height: 40px;
+ text-transform: uppercase;
+}
diff --git a/src/components/PageElements/PageH2/index.jsx b/src/components/PageElements/PageH2/index.jsx
new file mode 100644
index 000000000..7cb250916
--- /dev/null
+++ b/src/components/PageElements/PageH2/index.jsx
@@ -0,0 +1,23 @@
+/**
+ * PageH2
+ *
+ * page content heading 2
+ */
+import React from "react";
+import PT from "prop-types";
+import cn from "classnames";
+import "./styles.module.scss";
+
+const PageH2 = ({ children, styleName, ...props }) => {
+ return (
+
+ {children}
+
+ );
+};
+
+PageH2.propTypes = {
+ children: PT.node,
+};
+
+export default PageH2;
diff --git a/src/components/PageElements/PageH2/styles.module.scss b/src/components/PageElements/PageH2/styles.module.scss
new file mode 100644
index 000000000..c40baecec
--- /dev/null
+++ b/src/components/PageElements/PageH2/styles.module.scss
@@ -0,0 +1,17 @@
+@import "styles/include";
+
+.page-h2 {
+ margin: 20px 0;
+ @include font-barlow;
+ font-weight: normal;
+ font-size: 34px;
+ font-weight: 420;
+ line-height: 40px;
+ text-transform: uppercase;
+
+ @media screen and (max-width: 1325px) and (min-width: 1199px) {
+ margin-top: 20px;
+ font-size: 24px;
+ line-height: 30px;
+ }
+}
diff --git a/src/components/PageElements/PageH3/index.jsx b/src/components/PageElements/PageH3/index.jsx
new file mode 100644
index 000000000..0472fde6d
--- /dev/null
+++ b/src/components/PageElements/PageH3/index.jsx
@@ -0,0 +1,23 @@
+/**
+ * PageH2
+ *
+ * page content heading 3
+ */
+import React from "react";
+import PT from "prop-types";
+import cn from "classnames";
+import "./styles.module.scss";
+
+const PageH3 = ({ children, styleName, ...props }) => {
+ return (
+
+ {children}
+
+ );
+};
+
+PageH3.propTypes = {
+ children: PT.node,
+};
+
+export default PageH3;
diff --git a/src/components/PageElements/PageH3/styles.module.scss b/src/components/PageElements/PageH3/styles.module.scss
new file mode 100644
index 000000000..274cd3e67
--- /dev/null
+++ b/src/components/PageElements/PageH3/styles.module.scss
@@ -0,0 +1,11 @@
+@import "styles/include";
+
+.page-h3 {
+ margin: 15px 0;
+ @include font-barlow;
+ font-weight: normal;
+ font-size: 22px;
+ font-weight: 420;
+ line-height: 30px;
+ text-transform: uppercase;
+}
diff --git a/src/components/PageElements/PageP/index.jsx b/src/components/PageElements/PageP/index.jsx
new file mode 100644
index 000000000..995650c38
--- /dev/null
+++ b/src/components/PageElements/PageP/index.jsx
@@ -0,0 +1,23 @@
+/**
+ * PageP
+ *
+ * page content paragraph tag
+ */
+import cn from "classnames";
+import PT from "prop-types";
+import React from "react";
+import "./styles.module.scss";
+
+const PageP = ({ children, styleName, ...props }) => {
+ return (
+
+ {children}
+
+ );
+};
+
+PageP.propTypes = {
+ children: PT.node,
+};
+
+export default PageP;
diff --git a/src/components/PageElements/PageP/styles.module.scss b/src/components/PageElements/PageP/styles.module.scss
new file mode 100644
index 000000000..de568232f
--- /dev/null
+++ b/src/components/PageElements/PageP/styles.module.scss
@@ -0,0 +1,16 @@
+@import "styles/include";
+
+.page-p {
+ font-size: 16px;
+ line-height: 26px;
+ color: #333;
+ margin: 10px 0;
+}
+
+.bold {
+ font-weight: 800;
+}
+
+.description {
+ margin-top: 0;
+}
\ No newline at end of file
diff --git a/src/components/PageElements/PageRow/index.jsx b/src/components/PageElements/PageRow/index.jsx
new file mode 100644
index 000000000..19c3b794e
--- /dev/null
+++ b/src/components/PageElements/PageRow/index.jsx
@@ -0,0 +1,31 @@
+/**
+ * PageUl
+ *
+ * page content row (flex -> row)
+ */
+import React from "react";
+import PT from "prop-types";
+import cn from "classnames";
+import "./styles.module.scss";
+
+const PageRow = ({ children, half = false, styleName, ...props }) => {
+ return (
+
+ {children}
+
+ );
+};
+
+PageRow.propTypes = {
+ children: PT.node,
+ half: PT.bool,
+};
+
+export default PageRow;
diff --git a/src/components/PageElements/PageRow/styles.module.scss b/src/components/PageElements/PageRow/styles.module.scss
new file mode 100644
index 000000000..7e9d5dca3
--- /dev/null
+++ b/src/components/PageElements/PageRow/styles.module.scss
@@ -0,0 +1,33 @@
+@import "styles/include";
+
+.page-row {
+ display: flex;
+ align-items: center;
+ @include desktop {
+ &.page-row-half {
+ & > div {
+ width: 50%;
+ }
+ & > div:nth-child(1) {
+ margin-right: 20px;
+ }
+ & > div:nth-child(2) {
+ margin-left: 20px;
+ }
+ }
+ &.page-row-normal > div:nth-child(1) {
+ width: 40%;
+ padding-right: 100px;
+ min-width: 500px;
+ }
+ &.page-row-normal > div:nth-child(2) {
+ width: 60%;
+ }
+ }
+ @include mobile {
+ flex-direction: column;
+ & > div {
+ width: 100%;
+ }
+ }
+}
diff --git a/src/components/PageElements/PageUl/index.jsx b/src/components/PageElements/PageUl/index.jsx
new file mode 100644
index 000000000..5a514247b
--- /dev/null
+++ b/src/components/PageElements/PageUl/index.jsx
@@ -0,0 +1,23 @@
+/**
+ * PageUl
+ *
+ * page content ul tag
+ */
+import React from "react";
+import PT from "prop-types";
+import cn from "classnames";
+import "./styles.module.scss";
+
+const PageUl = ({ children, styleName, ...props }) => {
+ return (
+
+ );
+};
+
+PageUl.propTypes = {
+ children: PT.node,
+};
+
+export default PageUl;
diff --git a/src/components/PageElements/PageUl/styles.module.scss b/src/components/PageElements/PageUl/styles.module.scss
new file mode 100644
index 000000000..b4c3d2c00
--- /dev/null
+++ b/src/components/PageElements/PageUl/styles.module.scss
@@ -0,0 +1,12 @@
+@import "styles/include";
+
+.page-ul {
+ list-style: disc;
+ padding-left: 30px;
+ font-size: 16px;
+ line-height: 26px;
+
+ li {
+ padding: 0 0 8px 0;
+ }
+}
diff --git a/src/components/PageListInput/index.jsx b/src/components/PageListInput/index.jsx
new file mode 100644
index 000000000..969b14c97
--- /dev/null
+++ b/src/components/PageListInput/index.jsx
@@ -0,0 +1,52 @@
+/**
+ * PageListInput
+ *
+ * A List Of grouped Inputs, used in build my profile page
+ */
+import cn from "classnames";
+import Button from "components/Button";
+import { BUTTON_SIZE, BUTTON_TYPE } from "constants/";
+import PT from "prop-types";
+import React from "react";
+import { currencyFormat } from "utils/";
+import "./styles.module.scss";
+
+const PageListInput = ({
+ name,
+ addListInputItem,
+ styleName,
+ children,
+ canAdd,
+ pageCost,
+}) => {
+ return (
+
+
+
{children}
+
+
addListInputItem(name)}
+ >
+ {canAdd && (
+
+
NEED ANOTHER PAGE?
+
+ ADD PAGE: +{currencyFormat(pageCost)}
+
+
+ )}
+
+
+
+
+ );
+};
+
+PageListInput.propTypes = {
+ addListInputItem: PT.func,
+ children: PT.node,
+};
+
+export default PageListInput;
diff --git a/src/components/PageListInput/styles.module.scss b/src/components/PageListInput/styles.module.scss
new file mode 100644
index 000000000..ff1529411
--- /dev/null
+++ b/src/components/PageListInput/styles.module.scss
@@ -0,0 +1,27 @@
+@import "styles/include";
+
+.page-list-input {
+ .add-listinput-item-button {
+ color: $green1;
+ display: flex;
+ align-items: center;
+ font-weight: 430;
+ width: 100%;
+
+ & > * {
+ cursor: pointer;
+ align-items: center;
+ display: flex;
+ }
+
+ .pageText {
+ @include font-roboto;
+ font-weight: 700;
+ font-size: 14px;
+ color: $black;
+ letter-spacing: 0.8px;
+ line-height: 12px;
+ margin-bottom: 8px;
+ }
+ }
+}
diff --git a/src/components/Progress/index.jsx b/src/components/Progress/index.jsx
new file mode 100644
index 000000000..fb4670c28
--- /dev/null
+++ b/src/components/Progress/index.jsx
@@ -0,0 +1,72 @@
+/**
+ * Onboard Progress
+ *
+ * Onboard Progress (level) Indicator
+ */
+import _ from "lodash";
+import PT from "prop-types";
+import React, { useState } from "react";
+import cn from "classnames";
+import ProgressDonutChart from "components/ProgressDonutChart";
+import ProgressPopup from "components/ProgressPopup";
+import config from "../../../config";
+import { MAX_COMPLETED_STEP } from "constants";
+import { PROGRESS_LEVELS as originalLevels } from "../../constants/products/WebsiteDesignLegacy";
+import { setCookie, getCookie } from "../../autoSaveBeforeLogin";
+import IconThreeDots from "../../assets/images/icon-three-dots-vertical.svg";
+import "./styles.module.scss";
+
+const Progress = ({ level, styleName, setStep, ...props }) => {
+ const [progressPopupOpen, setProgressPopupOpen] = useState(false);
+ let maxCompletedStep = getCookie(MAX_COMPLETED_STEP) || 0;
+ if (
+ _.isUndefined(maxCompletedStep) ||
+ _.isNull(maxCompletedStep) ||
+ parseInt(maxCompletedStep) < level
+ ) {
+ setCookie(MAX_COMPLETED_STEP, level, config.AUTO_SAVED_COOKIE_EXPIRED_IN);
+ maxCompletedStep = level;
+ }
+
+ const levels = _.filter(originalLevels, (l) => l.visibleInProgressIndicator);
+
+ const trueLevel = _.find(levels, (l) => l.trueIndex === level);
+
+ return (
+
+
+
+ STEP {trueLevel.showIndex}
+ / {levels.length}
+
+
{trueLevel.label}
+
+
+
setProgressPopupOpen((o) => !o)}
+ role="tab"
+ tabIndex={0}
+ >
+
+
+
setProgressPopupOpen(false)}
+ />
+
+ );
+};
+
+Progress.propTypes = {
+ level: PT.number,
+};
+
+export default Progress;
diff --git a/src/components/Progress/styles.module.scss b/src/components/Progress/styles.module.scss
new file mode 100644
index 000000000..81a29bc2e
--- /dev/null
+++ b/src/components/Progress/styles.module.scss
@@ -0,0 +1,33 @@
+@import "styles/include";
+
+.onboard-progress {
+ position: absolute;
+ right: 30px;
+ top: 20px;
+ display: flex;
+ align-items: center;
+}
+
+.level-container {
+ display: flex;
+ align-items: flex-end;
+ flex-direction: column;
+ color: $black;
+ .level {
+ margin-bottom: 8px;
+ .level-num {
+ font-weight: bold;
+ }
+ .muted {
+ color: #ddd;
+ }
+ }
+}
+.progress-donut-chart {
+}
+.progress-popup-toggle {
+ cursor: pointer;
+ * {
+ fill: $green1;
+ }
+}
diff --git a/src/components/ProgressDonutChart/index.jsx b/src/components/ProgressDonutChart/index.jsx
new file mode 100644
index 000000000..ff58fabc4
--- /dev/null
+++ b/src/components/ProgressDonutChart/index.jsx
@@ -0,0 +1,61 @@
+/**
+ * ProgressDonutChart
+ *
+ * Progress Donut Chart to display on top-right of the page
+ */
+import React, { useState } from "react";
+import PT from "prop-types";
+import cn from "classnames";
+import "./styles.module.scss";
+import Chart from "react-apexcharts";
+
+const ProgressDonutChart = ({ progress, styleName, ...props }) => {
+ // chart options to display donut chart
+ const [chartOptions, setChartOptions] = useState({
+ chart: {
+ height: 150,
+ width: 120,
+ type: "radialBar",
+ },
+ plotOptions: {
+ radialBar: {
+ hollow: {
+ size: "40%",
+ },
+ dataLabels: {
+ name: {
+ show: false,
+ },
+ value: {
+ show: false,
+ },
+ },
+ },
+ },
+ stroke: {
+ lineCap: "round",
+ },
+ fill: {
+ colors: ["#9d41c9"],
+ },
+ });
+ return (
+
+ );
+};
+
+ProgressDonutChart.propTypes = {
+ progress: PT.number,
+};
+
+export default ProgressDonutChart;
diff --git a/src/components/ProgressDonutChart/styles.module.scss b/src/components/ProgressDonutChart/styles.module.scss
new file mode 100644
index 000000000..95e0613e1
--- /dev/null
+++ b/src/components/ProgressDonutChart/styles.module.scss
@@ -0,0 +1,4 @@
+@import "styles/include";
+
+.progress-donut-chart {
+}
diff --git a/src/components/ProgressPopup/index.jsx b/src/components/ProgressPopup/index.jsx
new file mode 100644
index 000000000..95c43e1e5
--- /dev/null
+++ b/src/components/ProgressPopup/index.jsx
@@ -0,0 +1,96 @@
+/**
+ * ProgressPopup
+ *
+ * Three dots Progress Popup
+ */
+import { useNavigate } from "@reach/router";
+import cn from "classnames";
+import PT from "prop-types";
+import React, { useEffect, useRef } from "react";
+import IconCheck from "../../assets/images/icon-check-thin.svg";
+import IconCross from "../../assets/images/icon-cross.svg";
+import "./styles.module.scss";
+
+const ProgressPopup = ({
+ level,
+ maxStep,
+ levels,
+ open,
+ setStep,
+ handleClose = (e) => e,
+ styleName,
+ ...props
+}) => {
+ const useOutsideAlerter = (ref) => {
+ useEffect(() => {
+ function handleClickOutside(event) {
+ if (ref.current && !ref.current.contains(event.target)) {
+ handleClose(event);
+ }
+ }
+
+ document.addEventListener("mousedown", handleClickOutside);
+ return () => {
+ document.removeEventListener("mousedown", handleClickOutside);
+ };
+ }, [ref]);
+ };
+
+ const wrapperRef = useRef(null);
+ useOutsideAlerter(wrapperRef);
+ const navigate = useNavigate();
+ // add a class to show if it's done or current or notDone yet
+ const getLevelClass = (curLevel) => {
+ return curLevel.trueIndex === level
+ ? "current"
+ : curLevel.trueIndex < maxStep
+ ? "done"
+ : "";
+ };
+ return (
+ <>
+ {open && (
+
+
handleClose(e)} />
+
+ {levels.map((level, levelIndex) => (
+
{
+ if (getLevelClass(level) !== "") {
+ setStep(level.trueIndex);
+ navigate(level.url);
+ }
+ }}
+ role="tab"
+ tabIndex={0}
+ >
+
+ {getLevelClass(level) === "done" && (
+
+ )}
+
+ {level.label}
+
+ ))}
+
+
+ )}
+ >
+ );
+};
+
+ProgressPopup.propTypes = {
+ level: PT.number,
+ maxStep: PT.number,
+ levels: PT.array,
+ open: PT.bool,
+ handleClose: PT.func,
+};
+
+export default ProgressPopup;
diff --git a/src/components/ProgressPopup/styles.module.scss b/src/components/ProgressPopup/styles.module.scss
new file mode 100644
index 000000000..3b42540cf
--- /dev/null
+++ b/src/components/ProgressPopup/styles.module.scss
@@ -0,0 +1,58 @@
+@import "styles/include";
+
+.progress-popup {
+ position: absolute;
+ right: 10px;
+ top: 85px;
+ min-height: 150px;
+ background: #fff;
+ padding: 20px 20px 10px 20px;
+ box-shadow: 0 0 6px #aaa;
+ border-radius: 4px;
+
+ .level {
+ margin: 20px 0;
+ display: flex;
+ align-items: center;
+ &.done,
+ &.current {
+ cursor: pointer;
+ }
+ }
+
+ .level-check-icon {
+ width: 24px;
+ height: 24px;
+ background: #f4f4f4;
+ border-radius: 50%;
+ margin-right: 10px;
+ &.done {
+ background: #06d6a0;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ .icon-check {
+ height: 14px;
+ * {
+ fill: #ffffff;
+ }
+ }
+ }
+ &.current {
+ border: 2px solid #06d6a0;
+ background: #ffffff;
+ }
+ }
+
+ .close-btn {
+ position: absolute;
+ top: 21px;
+ right: 18px;
+ cursor: pointer;
+ height: 15px;
+ width: 15px;
+ * {
+ stroke-width: 1px !important;
+ }
+ }
+}
diff --git a/src/components/RadioButton/index.jsx b/src/components/RadioButton/index.jsx
new file mode 100644
index 000000000..5d1b57576
--- /dev/null
+++ b/src/components/RadioButton/index.jsx
@@ -0,0 +1,98 @@
+/* eslint-disable jsx-a11y/label-has-for */
+/* eslint-disable jsx-a11y/label-has-associated-control */
+/**
+ * Radio button component.
+ */
+import PT from "prop-types";
+import _ from "lodash";
+import React, { useEffect, useState } from "react";
+import "./styles.module.scss";
+
+function RadioButton({ options, onChange, size, errorMsg }) {
+ const [internalOptions, setInternalOptions] = useState(
+ (options || []).map((o, i) => ({ ...o, key: i }))
+ );
+ let sizeStyle = size === "lg" ? "lgSize" : null;
+ if (!sizeStyle) {
+ sizeStyle = size === "xs" ? "xsSize" : "smSize";
+ }
+
+ useEffect(() => {
+ if (
+ !options ||
+ !options.length ||
+ _.isEqualWith(internalOptions, options, "label")
+ ) {
+ return;
+ } else if (!internalOptions || !internalOptions.length) {
+ setInternalOptions(
+ options.map((option, index) => ({ ...option, key: index }))
+ );
+ } else {
+ const newOptions = _.cloneDeep(internalOptions);
+ for (let i = 0; i < options.length; i += 1) {
+ newOptions[i].label = options[i]?.label;
+ newOptions[i].key = i;
+ if (
+ _.isUndefined(newOptions[i].value) &&
+ !_.isUndefined(options[i].value)
+ ) {
+ newOptions[i].value = options[i].value;
+ }
+ }
+ setInternalOptions(newOptions);
+ }
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, [options]);
+
+ return (
+
+
+ {internalOptions.map((o) => (
+
+
+ {
+ const newOptions = internalOptions.map((oWithKeyTmp) => ({
+ ...oWithKeyTmp,
+ value: o.key === oWithKeyTmp.key,
+ }));
+ setInternalOptions(newOptions);
+ onChange(newOptions);
+ }}
+ />
+
+
+ {o.label ? {o.label} : null}
+
+ ))}
+
+ {errorMsg ? {errorMsg} : null}
+
+ );
+}
+
+RadioButton.defaultProps = {
+ onChange: () => {},
+ size: "sm",
+ errorMsg: "",
+};
+
+RadioButton.propTypes = {
+ options: PT.arrayOf(
+ PT.shape({
+ label: PT.string,
+ value: PT.bool.isRequired,
+ })
+ ).isRequired,
+ onChange: PT.func,
+ size: PT.oneOf(["xs", "sm", "lg"]),
+ errorMsg: PT.string,
+};
+
+export default RadioButton;
diff --git a/src/components/RadioButton/styles.module.scss b/src/components/RadioButton/styles.module.scss
new file mode 100644
index 000000000..87e594f46
--- /dev/null
+++ b/src/components/RadioButton/styles.module.scss
@@ -0,0 +1,168 @@
+@import "styles/include";
+
+/* Create a custom radio button */
+.checkmark {
+ position: absolute;
+ top: 0;
+ left: 0;
+ background-color: $tc-white;
+ border-radius: 50%;
+ border: 1px solid $gui-kit-gray-30;
+
+ /* Create the indicator (the dot/circle - hidden when not checked) */
+ &::after {
+ content: '';
+ position: absolute;
+ display: none;
+ top: 50%;
+ left: 50%;
+ margin-top: -6px;
+ margin-left: -6px;
+ width: 12px;
+ height: 12px;
+ border-radius: 50%;
+ background-color: $tc-white;
+ box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.35);
+ }
+
+ &.hasError {
+ border: 2px solid $gui-kit-level-5;
+ }
+}
+
+.radioButton {
+ display: flex;
+ align-items: center;
+ margin-top: 10px;
+}
+
+.label {
+ @include font-roboto;
+ font-size: 16px;
+ line-height: 22px;
+ font-weight: 400;
+ color: $black;
+ cursor: pointer;
+}
+
+/* The container */
+.container {
+ display: block;
+ position: relative;
+ cursor: pointer;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ color: $gui-kit-gray-90;
+
+ /* Hide the browser's default radio button */
+ input {
+ position: absolute;
+ opacity: 0;
+ cursor: pointer;
+
+ /* When the radio button is checked, add a blue background */
+ &:checked ~ .checkmark {
+ background-color: $gui-kit-level-2;
+ box-shadow: inset 0 1px 2px 0 rgba(0, 0, 0, 0.29);
+ border: none;
+
+ /* Show the indicator (dot/circle) when checked */
+ &::after {
+ display: block;
+ }
+ }
+ }
+}
+
+.radioButtonContainer {
+ display: flex;
+ flex-direction: column;
+
+ .label {
+ color: $gui-kit-gray-90;
+ }
+
+ // lg size
+ &.lgSize {
+ .container {
+ padding-left: 24px;
+ line-height: 24px;
+ height: 24px;
+
+ .checkmark {
+ height: 24px;
+ width: 24px;
+
+ &::after {
+ margin-top: -6px;
+ margin-left: -6px;
+ width: 12px;
+ height: 12px;
+ }
+ }
+ }
+
+ .label {
+ margin-left: 8px;
+ }
+ }
+
+ // sm size
+ &.smSize {
+ .container {
+ padding-left: 20px;
+ line-height: 20px;
+ height: 20px;
+
+ .checkmark {
+ height: 20px;
+ width: 20px;
+
+ &::after {
+ margin-top: -5px;
+ margin-left: -5px;
+ width: 10px;
+ height: 10px;
+ }
+ }
+ }
+
+ .label {
+ margin-left: 8px;
+ }
+ }
+
+ // xs size
+ &.xsSize {
+ .container {
+ padding-left: 15px;
+ line-height: 15px;
+ height: 15px;
+
+ .checkmark {
+ height: 16px;
+ width: 16px;
+
+ &::after {
+ margin-top: -4px;
+ margin-left: -4px;
+ width: 8px;
+ height: 8px;
+ }
+ }
+ }
+
+ .label {
+ margin-left: 8px;
+ }
+ }
+}
+
+.errorMessage {
+ display: block;
+
+ color: #ef476f;
+ margin-left: 0;
+}
\ No newline at end of file
diff --git a/src/components/Rating/index.jsx b/src/components/Rating/index.jsx
new file mode 100644
index 000000000..66010f9d4
--- /dev/null
+++ b/src/components/Rating/index.jsx
@@ -0,0 +1,30 @@
+import React from "react";
+import PT from "prop-types";
+import StarEmpty from "../../assets/images/icon-star-empty.svg";
+import StarFilled from "../../assets/images/icon-star-filled.svg";
+import "./styles.module.scss";
+
+/**
+ * Displays rating as stars.
+ *
+ * @param {Object} props component properties
+ * @returns {JSX.Element}
+ */
+const Rating = ({ className, rating }) => {
+ const stars = [];
+ for (let r = 1; r <= 5; r++) {
+ stars.push(r <= rating ? : );
+ }
+ return (
+
+ {stars}
+
+ );
+};
+
+Rating.propTypes = {
+ className: PT.string,
+ rating: PT.number.isRequired,
+};
+
+export default Rating;
diff --git a/src/components/Rating/styles.module.scss b/src/components/Rating/styles.module.scss
new file mode 100644
index 000000000..f0df6cd1f
--- /dev/null
+++ b/src/components/Rating/styles.module.scss
@@ -0,0 +1,15 @@
+.container {
+ display: flex;
+ align-items: center;
+
+ > svg {
+ flex: 0 0 auto;
+ width: auto;
+ height: 16px;
+ // margin-left: 10px;
+
+ &:first-child {
+ margin-left: 0;
+ }
+ }
+}
diff --git a/src/components/ReactSelect/index.jsx b/src/components/ReactSelect/index.jsx
new file mode 100644
index 000000000..d3a97e19c
--- /dev/null
+++ b/src/components/ReactSelect/index.jsx
@@ -0,0 +1,123 @@
+/**
+ * ReactSelect
+ *
+ * A wrapper of react select control.
+ */
+import React from "react";
+import PT from "prop-types";
+import Select from "react-select";
+import "./styles.module.scss";
+
+const ReactSelect = (props) => {
+ const customStyles = {
+ control: (provided, state) => ({
+ ...provided,
+ minHeight: "40px",
+ border: props.style2 ? "0" : "1px solid #aaaaab",
+ borderColor: state.isFocused ? "#55a5ff" : "#aaaaab",
+ boxShadow: props.style2
+ ? "none"
+ : state.isFocused
+ ? "0 0 2px 1px #cee6ff"
+ : provided.boxShadow,
+ }),
+ menu: (provided) => ({
+ ...provided,
+ minHeight: "40px",
+ zIndex: 10,
+ }),
+ valueContainer: (provided) => ({
+ ...provided,
+ padding: "2px 6px",
+ }),
+ input: (provided) => ({
+ ...provided,
+ margin: "0px",
+ height: "auto",
+ padding: "0",
+ fontSize: props.style2 ? "20px" : "14px",
+ paddingLeft: props.style2 ? "8px" : "0",
+ }),
+ indicatorSeparator: () => ({
+ display: "none",
+ }),
+ indicatorsContainer: (provided) => ({
+ ...provided,
+ height: "auto",
+ marginTop: "-5px",
+ }),
+ option: (provided) => ({
+ ...provided,
+ minHeight: "32px",
+ }),
+ placeholder: (provided) => ({
+ ...provided,
+ color: "#AAAAAA",
+ fontFamily: "Roboto",
+ fontSize: props.style2 ? "20px" : "14px",
+ lineHeight: "22px",
+ textAlign: "left",
+ fontWeight: "400",
+ paddingLeft: props.style2 ? "5px" : "0",
+ marginTop: props.style2 ? "-5px" : "0",
+ }),
+ singleValue: (provided) => ({
+ paddingLeft: props.style2 ? "5px" : "",
+ marginTop: props.style2 ? "-5px" : "",
+ fontSize: props.style2 ? "20px" : "",
+ lineHeight: "24px",
+ ...provided,
+ }),
+ multiValue: (provided) => ({
+ ...provided,
+ margin: "3px 3px",
+ color: "#AAAAAA",
+ fontFamily: "Roboto",
+ fontSize: "14px",
+ lineHeight: "22px",
+ textAlign: "left",
+ borderRadius: "5px",
+ }),
+ };
+
+ return (
+
+ props.noOptionsText}
+ isDisabled={props.disabled}
+ />
+
+ );
+};
+
+ReactSelect.propTypes = {
+ value: PT.string.isRequired,
+ onChange: PT.func.isRequired,
+ placeholder: PT.string,
+ error: PT.string,
+ isMulti: PT.bool,
+ onBlur: PT.func,
+ onFocus: PT.func,
+ onInputChange: PT.func,
+ options: PT.arrayOf(
+ PT.shape({
+ value: PT.string.isRequired,
+ label: PT.string.isRequired,
+ }).isRequired
+ ),
+ noOptionsText: PT.string,
+ disabled: PT.bool,
+ style2: PT.bool,
+};
+
+export default ReactSelect;
diff --git a/src/components/ReactSelect/styles.module.scss b/src/components/ReactSelect/styles.module.scss
new file mode 100644
index 000000000..944f692c7
--- /dev/null
+++ b/src/components/ReactSelect/styles.module.scss
@@ -0,0 +1,19 @@
+.error {
+ :first-child {
+ border-color: #ff5b52;
+ }
+}
+
+.select-wrapper {
+ input {
+ border: none !important;
+ box-shadow: none !important;
+ transition: none !important;
+ height: 28px;
+ line-height: 24px;
+ }
+}
+
+.react-select__option {
+ min-height: 32px;
+}
diff --git a/src/components/ServicePrice/index.jsx b/src/components/ServicePrice/index.jsx
new file mode 100644
index 000000000..871529499
--- /dev/null
+++ b/src/components/ServicePrice/index.jsx
@@ -0,0 +1,57 @@
+/**
+ * Tab element
+ */
+import PageRow from "../PageElements/PageRow";
+import PT from "prop-types";
+import React from "react";
+import "./styles.module.scss";
+import WebsiteDesignIcon from "../../assets/images/website-design.svg";
+import HelpIcon from "../HelpIcon";
+import { currencyFormat } from "../../utils/";
+
+const ServicePrice = ({
+ stickerPrice,
+ showIcon,
+ icon,
+ serviceType,
+ price,
+ duration = 1,
+ hideTitle = false,
+}) => {
+ return (
+
+
+ {showIcon && icon && <>{icon}>}
+ {showIcon && !icon && }
+
+ {!hideTitle &&
{serviceType}
}
+
+ {stickerPrice && (
+
+ {currencyFormat(stickerPrice)}
+
+ )}
+
{currencyFormat(price)}
+
+
{duration} Days
+
+
+ The price and project length is dynamic and dependent on the
+ variables selected as you define your work.
+
+
+
+
+
+ );
+};
+
+ServicePrice.defaultProps = {
+ price: 0,
+};
+
+ServicePrice.propTypes = {
+ price: PT.number,
+};
+
+export default ServicePrice;
diff --git a/src/components/ServicePrice/styles.module.scss b/src/components/ServicePrice/styles.module.scss
new file mode 100644
index 000000000..55f25a08c
--- /dev/null
+++ b/src/components/ServicePrice/styles.module.scss
@@ -0,0 +1,95 @@
+@import "styles/include";
+
+.container {
+
+ .iconWrapper {
+ & {
+ width: 48px !important;
+ height: 48px;
+ margin-right: 16px;
+ min-width: auto !important;
+ padding-right: 0 !important;
+ }
+ }
+
+ svg {
+ margin-right: 16px;
+ }
+
+ .inline {
+ display: flex;
+ flex-direction: row;
+
+ @include mobile {
+ width: 100%;
+ }
+ }
+
+ @include mobile {
+ display: flex;
+ flex-direction: row;
+ }
+}
+
+.filler {
+ display: flex;
+
+ @include mobile {
+ flex: 1;
+ }
+}
+
+.serviceTitle {
+ margin-top: 16px;
+ @include font-barlow;
+ font-weight: 600;
+ font-size: 16px;
+ text-transform: uppercase;
+}
+
+.priceAndDuration {
+ @include font-barlow;
+ margin-top: 8px;
+ font-size: 20px;
+ line-height: 20px;
+ color: $black;
+ display: flex;
+
+ @include mobile {
+ justify-content: space-between;
+ }
+
+
+ .discount {
+ color: $discount-green;
+ }
+
+ .stickerPrice {
+ color: $gray-80;
+ text-decoration: line-through;
+ margin-right: 4px;
+ }
+
+ .separator {
+ width: 2px;
+ height: 20px;
+ background: #D4D4D4;
+ border-radius: 1px;
+ margin: 0px 16px;
+ padding: 1px;
+ }
+
+ .days {
+ display: inline;
+ }
+
+ svg {
+ margin-left: 9px;
+
+ @include mobile {
+ margin-left: 84px;
+ width: 20px;
+ height: 20px;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/components/Slider/index.jsx b/src/components/Slider/index.jsx
new file mode 100644
index 000000000..f01531ab8
--- /dev/null
+++ b/src/components/Slider/index.jsx
@@ -0,0 +1,104 @@
+/**
+ * Slider
+ *
+ * Slider
+ */
+import React, { useCallback, useMemo, useRef } from "react";
+import PT from "prop-types";
+import Carousel from "react-elastic-carousel";
+
+import ImgArrowRight from "../../assets/images/arrow-right.svg";
+
+import styles from "./styles.module.scss";
+import "./styles.scss";
+
+const SliderArrow = ({ type, onClick, isEdge }) => {
+ const isPrevButton = type === "PREV";
+
+ return (
+
+ {isPrevButton ? : }
+
+ );
+};
+
+const AUTOPLAY_SPEED = 4000; //in ms
+
+const Slider = ({ children, className }) => {
+ const carouselRef = useRef();
+ const resetTimeoutRef = useRef();
+
+ const breakPoints = useMemo(
+ () => [
+ { width: 1, itemsToShow: 1, enableAutoPlay: true },
+ { width: 720, itemsToShow: 2 },
+ { width: 980, itemsToShow: 3 },
+ ],
+ []
+ );
+
+ const handleNextEnd = useCallback(({ index }) => {
+ if (!carouselRef.current) {
+ return;
+ }
+
+ if (resetTimeoutRef.current) {
+ clearTimeout(resetTimeoutRef.current);
+ }
+
+ const totalPages = carouselRef.current.state.pages.length;
+
+ console.log({
+ carouselRef: carouselRef.current,
+ getNumOfPages: carouselRef.current.getNumOfPages(),
+ });
+
+ if (index + 1 === totalPages) {
+ if (carouselRef?.current?.goTo) {
+ resetTimeoutRef.current = setTimeout(() => {
+ if (carouselRef?.current?.goTo) {
+ carouselRef.current.goTo(0);
+ }
+ }, AUTOPLAY_SPEED);
+ }
+ }
+ }, []);
+
+ return (
+ // @ts-ignore
+
+ {children.map((item, i) => {
+ return (
+
+ {item}
+
+ );
+ })}
+
+ );
+};
+
+Slider.propTypes = {
+ children: PT.node,
+};
+
+export default Slider;
diff --git a/src/components/Slider/styles.module.scss b/src/components/Slider/styles.module.scss
new file mode 100644
index 000000000..e1b3c5f0e
--- /dev/null
+++ b/src/components/Slider/styles.module.scss
@@ -0,0 +1,64 @@
+@import "styles/include";
+
+.appSliderArrow {
+ --size: 56px;
+ position: absolute;
+ z-index: 1;
+
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+
+ width: var(--size);
+ height: var(--size);
+ min-width: var(--size);
+ min-height: var(--size);
+ border-radius: 100rem;
+ color: #fff;
+ align-self: center;
+
+ cursor: pointer;
+ background: #137d60;
+ border: 4px solid #ffffff;
+ box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.14), 0px 1px 4px rgba(0, 0, 0, 0.25);
+ transition: opacity 240ms ease-in-out;
+
+ @include mobile {
+ display: none;
+ }
+
+ svg {
+ width: 24px;
+ height: 24px;
+ }
+}
+
+.appSliderArrowHidden {
+ opacity: 0;
+ pointer-events: none;
+}
+
+.appSliderArrowPrev {
+ left: -22px;
+ transform: rotateZ(180deg);
+
+ @include mobile {
+ left: -14px;
+ }
+
+ path {
+ fill: #fff;
+ }
+}
+
+.appSliderArrowNext {
+ right: -22px;
+
+ @include mobile {
+ right: -14px;
+ }
+
+ path {
+ fill: #fff;
+ }
+}
diff --git a/src/components/Slider/styles.scss b/src/components/Slider/styles.scss
new file mode 100644
index 000000000..253db8c92
--- /dev/null
+++ b/src/components/Slider/styles.scss
@@ -0,0 +1,60 @@
+@import "styles/include";
+
+.app-slider {
+ flex-direction: column-reverse !important;
+ margin: 0 -1rem;
+ width: calc(100% + 2rem) !important;
+
+ @include mobile {
+ margin: 0 -8px;
+ width: calc(100% + 1rem) !important;
+ }
+
+ .item-container {
+ padding: 1rem;
+ max-width: 100%;
+
+ @include mobile {
+ padding: 8px;
+ }
+ }
+
+ .rec-slider-container {
+ margin: 0;
+ }
+
+ .rec-pagination {
+ margin: 0;
+ align-self: flex-end;
+
+ @include mobile {
+ padding: 4px 0;
+ }
+ }
+
+ .rec-dot {
+ position: relative;
+ width: 24px;
+ height: 16px;
+ box-shadow: none !important;
+ background: none;
+
+ &:after {
+ content: "";
+ background: #d4d4d4;
+ width: 24px;
+ height: 4px;
+ border-radius: 12px;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ }
+
+ &_active {
+ &:after {
+ background: #7f7f7f;
+ }
+ }
+ }
+}
diff --git a/src/components/TabSelector/Tab/index.jsx b/src/components/TabSelector/Tab/index.jsx
new file mode 100644
index 000000000..4e916f81a
--- /dev/null
+++ b/src/components/TabSelector/Tab/index.jsx
@@ -0,0 +1,38 @@
+/**
+ * Tab element
+ */
+import PT from "prop-types";
+import React from "react";
+import { v4 as uuidv4 } from "uuid";
+import "./styles.module.scss";
+
+const Tab = ({ title, subTitle, price, onClick, selected }) => {
+ return (
+
+
{title}
+
{subTitle}
+
STARTING AT ${price}
+
+ );
+};
+
+Tab.defaultProps = {
+ title: "",
+ subTitle: "",
+ price: 0,
+};
+
+Tab.propTypes = {
+ title: PT.string,
+ subTitle: PT.string,
+ price: PT.number,
+ onClick: PT.func,
+};
+
+export default Tab;
diff --git a/src/components/TabSelector/Tab/styles.module.scss b/src/components/TabSelector/Tab/styles.module.scss
new file mode 100644
index 000000000..f33b8083e
--- /dev/null
+++ b/src/components/TabSelector/Tab/styles.module.scss
@@ -0,0 +1,49 @@
+@import "styles/include";
+
+.tab {
+ display: flex;
+ flex: 1 1 30%;
+ flex-direction: column;
+ border: 1px $gray-80 solid;
+ padding: 9px 57px 24px 57px;
+ border-radius: 5px;
+ text-align: center;
+ cursor: pointer;
+
+ @include mobile {
+ flex: 1 1 100%;
+ }
+
+ &:hover {
+ outline: 3px $green1 solid;
+ border: 0;
+ }
+
+ .title {
+ font-size: 24px;
+ line-height: 24px;
+ font-weight: 600;
+ text-transform: uppercase;
+ padding-top: 15px;
+ }
+
+ .subTitle {
+ padding-top: 10px;
+ font-size: 16px;
+ font-weight: 400;
+ }
+
+ .price {
+ @include font-roboto;
+ font-size: 12px;
+ line-height: 16px;
+ padding-top: 10px;
+ text-transform: uppercase;
+ font-weight: 700;
+ }
+}
+
+.tab-selected {
+ outline: 3px $green1 solid;
+ border: 0;
+}
diff --git a/src/components/TabSelector/index.jsx b/src/components/TabSelector/index.jsx
new file mode 100644
index 000000000..d3bba0127
--- /dev/null
+++ b/src/components/TabSelector/index.jsx
@@ -0,0 +1,37 @@
+/**
+ * ProgressPopup
+ *
+ * Tab Selector
+ */
+import PT from "prop-types";
+import React from "react";
+import { currencyFormat } from "utils/";
+import "./styles.module.scss";
+import Tab from "./Tab";
+
+const TabSelector = ({ items, selectedState, handleClick = (e) => e }) => {
+ return (
+
+ {items.map((item) => (
+ handleClick(item)}
+ selected={selectedState === item.title}
+ />
+ ))}
+
+ );
+};
+
+TabSelector.defaultProps = {
+ items: [],
+};
+
+TabSelector.propTypes = {
+ items: PT.arrayOf(PT.shape()),
+ handleClick: PT.func,
+};
+
+export default TabSelector;
diff --git a/src/components/TabSelector/styles.module.scss b/src/components/TabSelector/styles.module.scss
new file mode 100644
index 000000000..e7b9840eb
--- /dev/null
+++ b/src/components/TabSelector/styles.module.scss
@@ -0,0 +1,9 @@
+@import "styles/include";
+
+.tabSelector {
+ @include font-barlow;
+ display: flex;
+ flex-wrap: wrap;
+ gap: 10px;
+ margin-top: 30px;
+}
\ No newline at end of file
diff --git a/src/constants/countries.json b/src/constants/countries.json
new file mode 100644
index 000000000..86598b09b
--- /dev/null
+++ b/src/constants/countries.json
@@ -0,0 +1,245 @@
+[
+ {"name": "Afghanistan", "code": "AF"},
+ {"name": "Ă…land Islands", "code": "AX"},
+ {"name": "Albania", "code": "AL"},
+ {"name": "Algeria", "code": "DZ"},
+ {"name": "American Samoa", "code": "AS"},
+ {"name": "AndorrA", "code": "AD"},
+ {"name": "Angola", "code": "AO"},
+ {"name": "Anguilla", "code": "AI"},
+ {"name": "Antarctica", "code": "AQ"},
+ {"name": "Antigua and Barbuda", "code": "AG"},
+ {"name": "Argentina", "code": "AR"},
+ {"name": "Armenia", "code": "AM"},
+ {"name": "Aruba", "code": "AW"},
+ {"name": "Australia", "code": "AU"},
+ {"name": "Austria", "code": "AT"},
+ {"name": "Azerbaijan", "code": "AZ"},
+ {"name": "Bahamas", "code": "BS"},
+ {"name": "Bahrain", "code": "BH"},
+ {"name": "Bangladesh", "code": "BD"},
+ {"name": "Barbados", "code": "BB"},
+ {"name": "Belarus", "code": "BY"},
+ {"name": "Belgium", "code": "BE"},
+ {"name": "Belize", "code": "BZ"},
+ {"name": "Benin", "code": "BJ"},
+ {"name": "Bermuda", "code": "BM"},
+ {"name": "Bhutan", "code": "BT"},
+ {"name": "Bolivia", "code": "BO"},
+ {"name": "Bosnia and Herzegovina", "code": "BA"},
+ {"name": "Botswana", "code": "BW"},
+ {"name": "Bouvet Island", "code": "BV"},
+ {"name": "Brazil", "code": "BR"},
+ {"name": "British Indian Ocean Territory", "code": "IO"},
+ {"name": "Brunei Darussalam", "code": "BN"},
+ {"name": "Bulgaria", "code": "BG"},
+ {"name": "Burkina Faso", "code": "BF"},
+ {"name": "Burundi", "code": "BI"},
+ {"name": "Cambodia", "code": "KH"},
+ {"name": "Cameroon", "code": "CM"},
+ {"name": "Canada", "code": "CA"},
+ {"name": "Cape Verde", "code": "CV"},
+ {"name": "Cayman Islands", "code": "KY"},
+ {"name": "Central African Republic", "code": "CF"},
+ {"name": "Chad", "code": "TD"},
+ {"name": "Chile", "code": "CL"},
+ {"name": "China", "code": "CN"},
+ {"name": "Christmas Island", "code": "CX"},
+ {"name": "Cocos (Keeling) Islands", "code": "CC"},
+ {"name": "Colombia", "code": "CO"},
+ {"name": "Comoros", "code": "KM"},
+ {"name": "Congo", "code": "CG"},
+ {"name": "Congo, The Democratic Republic of the", "code": "CD"},
+ {"name": "Cook Islands", "code": "CK"},
+ {"name": "Costa Rica", "code": "CR"},
+ {"name": "Cote D\"Ivoire", "code": "CI"},
+ {"name": "Croatia", "code": "HR"},
+ {"name": "Cuba", "code": "CU"},
+ {"name": "Cyprus", "code": "CY"},
+ {"name": "Czech Republic", "code": "CZ"},
+ {"name": "Denmark", "code": "DK"},
+ {"name": "Djibouti", "code": "DJ"},
+ {"name": "Dominica", "code": "DM"},
+ {"name": "Dominican Republic", "code": "DO"},
+ {"name": "Ecuador", "code": "EC"},
+ {"name": "Egypt", "code": "EG"},
+ {"name": "El Salvador", "code": "SV"},
+ {"name": "Equatorial Guinea", "code": "GQ"},
+ {"name": "Eritrea", "code": "ER"},
+ {"name": "Estonia", "code": "EE"},
+ {"name": "Ethiopia", "code": "ET"},
+ {"name": "Falkland Islands (Malvinas)", "code": "FK"},
+ {"name": "Faroe Islands", "code": "FO"},
+ {"name": "Fiji", "code": "FJ"},
+ {"name": "Finland", "code": "FI"},
+ {"name": "France", "code": "FR"},
+ {"name": "French Guiana", "code": "GF"},
+ {"name": "French Polynesia", "code": "PF"},
+ {"name": "French Southern Territories", "code": "TF"},
+ {"name": "Gabon", "code": "GA"},
+ {"name": "Gambia", "code": "GM"},
+ {"name": "Georgia", "code": "GE"},
+ {"name": "Germany", "code": "DE"},
+ {"name": "Ghana", "code": "GH"},
+ {"name": "Gibraltar", "code": "GI"},
+ {"name": "Greece", "code": "GR"},
+ {"name": "Greenland", "code": "GL"},
+ {"name": "Grenada", "code": "GD"},
+ {"name": "Guadeloupe", "code": "GP"},
+ {"name": "Guam", "code": "GU"},
+ {"name": "Guatemala", "code": "GT"},
+ {"name": "Guernsey", "code": "GG"},
+ {"name": "Guinea", "code": "GN"},
+ {"name": "Guinea-Bissau", "code": "GW"},
+ {"name": "Guyana", "code": "GY"},
+ {"name": "Haiti", "code": "HT"},
+ {"name": "Heard Island and Mcdonald Islands", "code": "HM"},
+ {"name": "Holy See (Vatican City State)", "code": "VA"},
+ {"name": "Honduras", "code": "HN"},
+ {"name": "Hong Kong", "code": "HK"},
+ {"name": "Hungary", "code": "HU"},
+ {"name": "Iceland", "code": "IS"},
+ {"name": "India", "code": "IN"},
+ {"name": "Indonesia", "code": "ID"},
+ {"name": "Iran, Islamic Republic Of", "code": "IR"},
+ {"name": "Iraq", "code": "IQ"},
+ {"name": "Ireland", "code": "IE"},
+ {"name": "Isle of Man", "code": "IM"},
+ {"name": "Israel", "code": "IL"},
+ {"name": "Italy", "code": "IT"},
+ {"name": "Jamaica", "code": "JM"},
+ {"name": "Japan", "code": "JP"},
+ {"name": "Jersey", "code": "JE"},
+ {"name": "Jordan", "code": "JO"},
+ {"name": "Kazakhstan", "code": "KZ"},
+ {"name": "Kenya", "code": "KE"},
+ {"name": "Kiribati", "code": "KI"},
+ {"name": "Korea, Democratic People\"S Republic of", "code": "KP"},
+ {"name": "Korea, Republic of", "code": "KR"},
+ {"name": "Kuwait", "code": "KW"},
+ {"name": "Kyrgyzstan", "code": "KG"},
+ {"name": "Lao People\"S Democratic Republic", "code": "LA"},
+ {"name": "Latvia", "code": "LV"},
+ {"name": "Lebanon", "code": "LB"},
+ {"name": "Lesotho", "code": "LS"},
+ {"name": "Liberia", "code": "LR"},
+ {"name": "Libyan Arab Jamahiriya", "code": "LY"},
+ {"name": "Liechtenstein", "code": "LI"},
+ {"name": "Lithuania", "code": "LT"},
+ {"name": "Luxembourg", "code": "LU"},
+ {"name": "Macao", "code": "MO"},
+ {"name": "Macedonia, The Former Yugoslav Republic of", "code": "MK"},
+ {"name": "Madagascar", "code": "MG"},
+ {"name": "Malawi", "code": "MW"},
+ {"name": "Malaysia", "code": "MY"},
+ {"name": "Maldives", "code": "MV"},
+ {"name": "Mali", "code": "ML"},
+ {"name": "Malta", "code": "MT"},
+ {"name": "Marshall Islands", "code": "MH"},
+ {"name": "Martinique", "code": "MQ"},
+ {"name": "Mauritania", "code": "MR"},
+ {"name": "Mauritius", "code": "MU"},
+ {"name": "Mayotte", "code": "YT"},
+ {"name": "Mexico", "code": "MX"},
+ {"name": "Micronesia, Federated States of", "code": "FM"},
+ {"name": "Moldova, Republic of", "code": "MD"},
+ {"name": "Monaco", "code": "MC"},
+ {"name": "Mongolia", "code": "MN"},
+ {"name": "Montserrat", "code": "MS"},
+ {"name": "Morocco", "code": "MA"},
+ {"name": "Mozambique", "code": "MZ"},
+ {"name": "Myanmar", "code": "MM"},
+ {"name": "Namibia", "code": "NA"},
+ {"name": "Nauru", "code": "NR"},
+ {"name": "Nepal", "code": "NP"},
+ {"name": "Netherlands", "code": "NL"},
+ {"name": "Netherlands Antilles", "code": "AN"},
+ {"name": "New Caledonia", "code": "NC"},
+ {"name": "New Zealand", "code": "NZ"},
+ {"name": "Nicaragua", "code": "NI"},
+ {"name": "Niger", "code": "NE"},
+ {"name": "Nigeria", "code": "NG"},
+ {"name": "Niue", "code": "NU"},
+ {"name": "Norfolk Island", "code": "NF"},
+ {"name": "Northern Mariana Islands", "code": "MP"},
+ {"name": "Norway", "code": "NO"},
+ {"name": "Oman", "code": "OM"},
+ {"name": "Pakistan", "code": "PK"},
+ {"name": "Palau", "code": "PW"},
+ {"name": "Palestinian Territory, Occupied", "code": "PS"},
+ {"name": "Panama", "code": "PA"},
+ {"name": "Papua New Guinea", "code": "PG"},
+ {"name": "Paraguay", "code": "PY"},
+ {"name": "Peru", "code": "PE"},
+ {"name": "Philippines", "code": "PH"},
+ {"name": "Pitcairn", "code": "PN"},
+ {"name": "Poland", "code": "PL"},
+ {"name": "Portugal", "code": "PT"},
+ {"name": "Puerto Rico", "code": "PR"},
+ {"name": "Qatar", "code": "QA"},
+ {"name": "Reunion", "code": "RE"},
+ {"name": "Romania", "code": "RO"},
+ {"name": "Russian Federation", "code": "RU"},
+ {"name": "RWANDA", "code": "RW"},
+ {"name": "Saint Helena", "code": "SH"},
+ {"name": "Saint Kitts and Nevis", "code": "KN"},
+ {"name": "Saint Lucia", "code": "LC"},
+ {"name": "Saint Pierre and Miquelon", "code": "PM"},
+ {"name": "Saint Vincent and the Grenadines", "code": "VC"},
+ {"name": "Samoa", "code": "WS"},
+ {"name": "San Marino", "code": "SM"},
+ {"name": "Sao Tome and Principe", "code": "ST"},
+ {"name": "Saudi Arabia", "code": "SA"},
+ {"name": "Senegal", "code": "SN"},
+ {"name": "Serbia and Montenegro", "code": "CS"},
+ {"name": "Seychelles", "code": "SC"},
+ {"name": "Sierra Leone", "code": "SL"},
+ {"name": "Singapore", "code": "SG"},
+ {"name": "Slovakia", "code": "SK"},
+ {"name": "Slovenia", "code": "SI"},
+ {"name": "Solomon Islands", "code": "SB"},
+ {"name": "Somalia", "code": "SO"},
+ {"name": "South Africa", "code": "ZA"},
+ {"name": "South Georgia and the South Sandwich Islands", "code": "GS"},
+ {"name": "Spain", "code": "ES"},
+ {"name": "Sri Lanka", "code": "LK"},
+ {"name": "Sudan", "code": "SD"},
+ {"name": "Suriname", "code": "SR"},
+ {"name": "Svalbard and Jan Mayen", "code": "SJ"},
+ {"name": "Swaziland", "code": "SZ"},
+ {"name": "Sweden", "code": "SE"},
+ {"name": "Switzerland", "code": "CH"},
+ {"name": "Syrian Arab Republic", "code": "SY"},
+ {"name": "Taiwan, Province of China", "code": "TW"},
+ {"name": "Tajikistan", "code": "TJ"},
+ {"name": "Tanzania, United Republic of", "code": "TZ"},
+ {"name": "Thailand", "code": "TH"},
+ {"name": "Timor-Leste", "code": "TL"},
+ {"name": "Togo", "code": "TG"},
+ {"name": "Tokelau", "code": "TK"},
+ {"name": "Tonga", "code": "TO"},
+ {"name": "Trinidad and Tobago", "code": "TT"},
+ {"name": "Tunisia", "code": "TN"},
+ {"name": "Turkey", "code": "TR"},
+ {"name": "Turkmenistan", "code": "TM"},
+ {"name": "Turks and Caicos Islands", "code": "TC"},
+ {"name": "Tuvalu", "code": "TV"},
+ {"name": "Uganda", "code": "UG"},
+ {"name": "Ukraine", "code": "UA"},
+ {"name": "United Arab Emirates", "code": "AE"},
+ {"name": "United Kingdom", "code": "GB"},
+ {"name": "United States", "code": "US"},
+ {"name": "United States Minor Outlying Islands", "code": "UM"},
+ {"name": "Uruguay", "code": "UY"},
+ {"name": "Uzbekistan", "code": "UZ"},
+ {"name": "Vanuatu", "code": "VU"},
+ {"name": "Venezuela", "code": "VE"},
+ {"name": "Viet Nam", "code": "VN"},
+ {"name": "Virgin Islands, British", "code": "VG"},
+ {"name": "Virgin Islands, U.S.", "code": "VI"},
+ {"name": "Wallis and Futuna", "code": "WF"},
+ {"name": "Western Sahara", "code": "EH"},
+ {"name": "Yemen", "code": "YE"},
+ {"name": "Zambia", "code": "ZM"},
+ {"name": "Zimbabwe", "code": "ZW"}
+ ]
\ No newline at end of file
diff --git a/src/constants/index.js b/src/constants/index.js
new file mode 100644
index 000000000..b95b8088f
--- /dev/null
+++ b/src/constants/index.js
@@ -0,0 +1,948 @@
+import _ from "lodash";
+import moment from "moment";
+import React from "react";
+
+// for some reason this has to be loaded from a lower-level
+// barrel for it to be available when this file loads.
+// yet another reason to get off the legacy architecture...
+import {
+ workPriceData,
+ workPriceDesign,
+ workPriceDesignLegacy,
+ workPriceFindData,
+ workPriceProblem,
+ WorkType,
+} from '../../src-ts/tools/work'
+import WebsiteDesignPdf1 from "../assets/pdf/WebDesign-1.pdf";
+import WebsiteDesignPdf2 from "../assets/pdf/WebDesign-2.pdf";
+import "./styles.module.scss";
+
+import MyWorkActiveIcon from "../assets/images/icon-my-work-active.svg";
+import exampleImage1 from "../assets/images/design-example-image1.png";
+import exampleImage2 from "../assets/images/design-example-image2.png";
+import MyWorkIcon from "../assets/images/icon-my-work.svg";
+import PageUl from "../components/PageElements/PageUl";
+import PageP from "../components/PageElements/PageP";
+import copyFileIcon from "../assets/images/icon-copy-file.svg";
+import workUtil from "../utils/work";
+
+import * as dataExplorationConfigs from "./products/DataExploration";
+import * as findMeDataConfigs from "./products/FindMeData";
+import * as dataAdvisoryConfigs from "./products/DataAdvisory";
+import * as webDesignConfigs from "./products/WebsiteDesign";
+import * as webDesignLegacyConfigs from "./products/WebsiteDesignLegacy";
+import countries from "./countries";
+
+import imgProductDataExploration from "../assets/images/products/product-main-photos/data-exploration.jpeg";
+import imgProductProblemStatement from "../assets/images/products/product-main-photos/problem-statements-and-data.jpeg";
+import imgProductFindMeData from "../assets/images/products/product-main-photos/find-me-data.jpeg";
+import imgProductWebsiteDesign from "../assets/images/products/product-main-photos/web-design.jpeg";
+import imgRedBlueGradient from "../assets/images/products/product-main-photos/reb-blue-gradient-background.jpeg";
+
+export const UNDER_MAINTENANCE = false;
+
+export const GA_ID = "GTM-MXXQHG8";
+
+export const ROUTES = {
+ INTAKE_FORM: "/self-service/wizard",
+ HOME_PAGE: "/self-service",
+ DASHBOARD_PAGE: "/work/dashboard",
+ WEBSITE_DESIGN: "/self-service/work/new/website-design-new/basic-info",
+ WEBSITE_DESIGN_REVIEW: "/self-service/work/new/website-design-new/review",
+ DATA_EXPLORATION: "/self-service/work/new/data-exploration/basic-info",
+ DATA_EXPLORATION_REVIEW: "/self-service/work/new/data-exploration/review",
+ PROBLEM_STATEMENT: "/self-service/work/new/data-advisory/basic-info",
+ PROBLEM_STATEMENT_REVIEW: "/self-service/work/new/data-advisory/review",
+ FIND_ME_DATA: "/self-service/work/new/find-me-data/basic-info",
+ FIND_ME_DATA_REVIEW: "/self-service/work/new/find-me-data/review",
+ WEBSITE_DESIGN_LEGACY: "/self-service/work/new/website-design/basic-info",
+ WEBSITE_DESIGN_PURPOSE_LEGACY:
+ "/self-service/work/new/website-design/website-purpose",
+ WEBSITE_DESIGN_PAGE_DETAILS_LEGACY:
+ "/self-service/work/new/website-design/page-details",
+ WEBSITE_DESIGN_BRANDING_LEGACY:
+ "/self-service/work/new/website-design/branding",
+};
+
+/**
+ * All action types
+ */
+export const ACTION_TYPE = {
+ /*
+ withAuthentication
+ */
+ AUTH_USER_SUCCESS: "AUTH_USER_SUCCESS",
+ AUTH_USER_ERROR: "AUTH_USER_ERROR",
+};
+
+/**
+ * Supported Button Sizes
+ */
+export const BUTTON_SIZE = {
+ TINY: "tiny",
+ SMALL: "small",
+ MEDIUM: "medium",
+ LARGE: "large",
+};
+
+/**
+ * Supported Button Types
+ */
+export const BUTTON_TYPE = {
+ PRIMARY: "primary",
+ SECONDARY: "secondary",
+ WARNING: "warning",
+ ROUNDED: "rounded",
+};
+
+export const MAX_COMPLETED_STEP = "MAX_COMPLETED_STEP";
+export const HELP_BANNER = {
+ title: "Not seeing what you need?",
+ description:
+ "Topcoder also offers solutions for multiple other technical needs and problems. We have community members expertly skilled in Development, UX / UI Design, Data Science, Quality Assurance, and more. We’d love to talk with you about all of our services.",
+};
+
+/**
+ * Industry List
+ */
+export const IndustryList = [
+ { label: "Accounting & Financial", value: "accounting-financial" },
+ { label: "Agriculture", value: "agriculture" },
+ { label: "Animal & Pet", value: "animal-pet" },
+ { label: "Architectural", value: "architectural" },
+ { label: "Art & Design", value: "art-design" },
+ { label: "Attorney & Law", value: "attorney-law" },
+ { label: "Automotive", value: "automotive" },
+ { label: "Bar & Nightclub", value: "bar-nightclub" },
+ { label: "Business & Consulting", value: "business-consulting" },
+ { label: "Childcare", value: "childcare" },
+ { label: "Cleaning & Maintenance", value: "cleaning-maintenance" },
+ { label: "Communications", value: "communications" },
+ { label: "Community & Nonprofit", value: "community-nonprofit" },
+ { label: "Computer", value: "computer" },
+ { label: "Construction", value: "construction" },
+ { label: "Cosmetic & Beauty", value: "cosmetic-beauty" },
+ { label: "Dating", value: "dating" },
+ { label: "Education", value: "education" },
+ { label: "Entertainment & the Arts", value: "entertainment-the-arts" },
+ { label: "Environmental", value: "environmental" },
+ { label: "Fashion", value: "fashion" },
+ { label: "Food & Drink", value: "food-drink" },
+ { label: "Games & Recreation", value: "games-recreation" },
+ { label: "Home furnishing", value: "home-furnishing" },
+ { label: "Industrial", value: "industrial" },
+ { label: "Internet", value: "internet" },
+ { label: "Landscaping", value: "landscaping" },
+ { label: "Medical & Pharmaceutical", value: "medical-pharmaceutical" },
+ { label: "Photography", value: "photography" },
+ { label: "Physical Fitness", value: "physical-fitness" },
+ { label: "Political", value: "political" },
+ { label: "Real Estate & Mortgage", value: "real-estate-mortgage" },
+ { label: "Religious", value: "religious" },
+ { label: "Restaurant", value: "restaurant" },
+ { label: "Retail", value: "retail" },
+ { label: "Security", value: "security" },
+ { label: "Spa & Esthetics", value: "spa-esthetics" },
+ { label: "Sport", value: "sport" },
+ { label: "Travel & Hotel", value: "travel-hotel" },
+ { label: "Wedding Service", value: "wedding-service" },
+];
+
+/**
+ * Design Options
+ */
+export const DesignOptions = [
+ {
+ label: "Yes, allow designers to recommend stock photos",
+ value: "allow",
+ },
+ { label: "No, Do not Stock Photos", value: "not-allow" },
+];
+
+/**
+ * page options
+ */
+export const PageOptions = [
+ { label: "1 page", price: 50, value: false },
+ { label: "2 pages", price: 100, value: false },
+ { label: "3 pages", price: 150, value: false },
+ { label: "4 pages", price: 200, value: false },
+ { label: "5 pages", price: 300, value: false },
+];
+
+/**
+ * page options
+ */
+export const DeviceOptions = [
+ { label: "Computer", price: 0 },
+ { label: "Tablet", price: 300 },
+ { label: "Phone", price: 500 },
+];
+
+/**
+ * page options
+ */
+export const DeliverablesOptions = [
+ { label: "Any (recommended for best participation)", value: false },
+ { label: "Adobe XD", value: false },
+ { label: "Figma", value: false },
+ { label: "Sketch", value: false },
+ { label: "Other", value: false },
+];
+
+/**
+ * page options
+ */
+export const AllowStockOptions = [
+ { label: "Yes, allow stock photos", value: true },
+ { label: "No, do not allow stock photos", value: false },
+];
+
+/**
+ * page options
+ */
+export const PrimaryDataChallengeOptions = [
+ { label: "I have data but can't share it", value: true },
+ {
+ label: "I've looked for this data and haven't been able to find it",
+ value: false,
+ },
+ {
+ label: "I don't have time to find this data",
+ value: false,
+ },
+ {
+ label: "Other (please specify below)",
+ value: false,
+ },
+];
+
+/**
+ * Work Types
+ */
+export const workTypes = [
+ {
+ title: "Website Development",
+ subTitle:
+ "Our developers can bring your website designs to life! We'll get your website ready for the world to see.",
+ price: 499,
+ comingSoon: true,
+ },
+ { title: "Mobile", subTitle: "Example or description text", price: 499 },
+ {
+ title: "Architecture",
+ subTitle: "Example or description text",
+ price: 499,
+ },
+ { title: "API", subTitle: "Example or description text", price: 499 },
+ {
+ title: "Data Science & AI",
+ subTitle:
+ "Data Mining & Analysis will empower you to reach your goals faster. Tap data science geniuses from our pool of experts.",
+ price: 499,
+ comingSoon: true,
+ },
+ {
+ title: "Visual Design",
+ subTitle: "Example or description text",
+ price: 499,
+ },
+];
+
+/**
+ * Project & professional service content
+ */
+export const projectAndProfessionalWork = {
+ title: "Projects & Professional Services",
+ shortDescription:
+ "Have a more complex need or project to discuss? We do it all and do it well. Start with confidence right here.",
+ bgImage: imgRedBlueGradient,
+ svgIcon: copyFileIcon,
+ ctaText: "Let's talk",
+};
+
+/**
+ * Web Work Types
+ */
+export const webWorkTypes = [
+ {
+ type: WorkType.designLegacy,
+ title: "Website Design",
+ duration: `${webDesignLegacyConfigs.DEFAULT_DURATION} Days`,
+ description:
+ "Create a beautiful custom visual design for your website. Specify the scope and device types, your vision, and receive up to 5 modern designs.",
+ shortDescription: "Create Custom Website Designs that Wow",
+ shortDescriptionMobile: "Design your business",
+ subTitle:
+ "​​Create a beautiful custom visual design for your website. Specify the scope and device types, your vision, and receive up to 5 modern designs.",
+ price: workPriceDesignLegacy.getPrice(workPriceDesignLegacy),
+ stickerPrice: workPriceDesignLegacy.base,
+ featured: true,
+ startRoute: "/self-service/work/new/website-design/basic-info",
+ basePath: "website-design",
+ bgImage: imgProductWebsiteDesign,
+ },
+ {
+ type: WorkType.design,
+ title: "Website Design (NEW)",
+ subTitle:
+ "Create a beautiful custom visual design for your website. Specify the scope and device types, your vision, and receive up to 5 modern designs.",
+ shortDescription: "Create Custom Website Designs that Wow",
+ shortDescriptionMobile: "Design your business",
+ description:
+ "Create a beautiful custom visual design for your website. Specify the scope and device types, your vision, and receive up to 5 modern designs.",
+ price: workPriceDesign.getPrice(workPriceDesign),
+ // stickerPrice: workPriceDesign.base,
+ duration: `${webDesignConfigs.DEFAULT_DURATION} Days`,
+ featured: true,
+ startRoute: "/self-service/work/new/website-design-new/basic-info",
+ basePath: "website-design-new",
+ helperBannerTitle: "WHAT WILL I RECEIVE?",
+ bgImage: imgProductWebsiteDesign,
+ helperBannerContent: (
+ <>
+
+
+
+ You will receive up to five unique visual designs for the main page
+ of your website, in an industry-standard format. Visual designs are
+ the first step in creating a functional website. Topcoder can help
+ you with launching your website once you have approved your design.
+
+
+
+ >
+ ),
+ aboutBannerTitle: "ABOUT WEBSITE DESIGN",
+ aboutBannerContent: (
+ <>
+
+ Topcoder design experts will take all of the information you provide
+ below, and create visual designs for your website that fit your
+ industry and match your desired look & feel. We've done this for
+ hundreds of customers and will work with you to create your ideal
+ design.
+
+ >
+ ),
+ breadcrumbs: {
+ basic: [
+ { url: ROUTES.DASHBOARD_PAGE, name: "My work" },
+ { url: ROUTES.INTAKE_FORM, name: "Start work" },
+ { url: "#", name: "Website Design" },
+ ],
+ review: [
+ { url: ROUTES.DASHBOARD_PAGE, name: "My work" },
+ { url: ROUTES.INTAKE_FORM, name: "Start work" },
+ { url: ROUTES.WEBSITE_DESIGN, name: "Website design" },
+ { url: "#", name: "Review & Payment" },
+ ],
+ },
+ },
+ {
+ type: WorkType.data,
+ title: "Data Exploration",
+ subTitle: "Get insights about your data from Topcoder experts.",
+ shortDescription: "Uncover What's Interesting About Your Data",
+ description:
+ "We accumulate data every day in the course of life and business, yet rarely have the time to give it a closer look. Get multiple fresh, expert perspectives to identify the patterns and relationships in your data. They might just be the key to your next 'Aha' moment.",
+ price: workPriceData.getPrice(workPriceData),
+ stickerPrice: workPriceData.base,
+ duration: `${dataExplorationConfigs.DEFAULT_DURATION} Days`,
+ featured: true,
+ startRoute: "/self-service/work/new/data-exploration/basic-info",
+ basePath: "data-exploration",
+ bgImage: imgProductDataExploration,
+ helperBannerTitle: "WHAT WILL I GET?",
+ helperBannerContent: (
+ <>
+
+ Topcoder data experts will create a custom report for you with:
+
+ Clear written analysis of your data and key findings
+
+ Visuals of the most compelling relationships and patterns in your
+ data
+
+
+ Expert commentary on the relevance of findings to your goals and
+ recommendations for further analysis
+
+
+ >
+ ),
+ aboutBannerTitle: "ABOUT DATA EXPLORATION",
+ aboutBannerContent: (
+
+ In Data Exploration, multiple data science experts uncover the most
+ significant patterns and relationships in your data. Unlock the full
+ potential of your data with expert insights presented in an
+ easy-to-understand format.
+
+ ),
+ breadcrumbs: {
+ basic: [
+ { url: ROUTES.DASHBOARD_PAGE, name: "My work" },
+ { url: ROUTES.INTAKE_FORM, name: "Start work" },
+ { url: "#", name: "Data exploration" },
+ ],
+ review: [
+ { url: ROUTES.DASHBOARD_PAGE, name: "My work" },
+ { url: ROUTES.INTAKE_FORM, name: "Start work" },
+ { url: ROUTES.DATA_EXPLORATION, name: "Data exploration" },
+ { url: "#", name: "Review & Payment" },
+ ],
+ },
+ },
+ {
+ type: WorkType.problem,
+ title: "Problem Statement & Data Advisory",
+ subTitle:
+ "Translate your data science idea into an actionable data science approach.",
+ shortDescription: "The easiest way to get started in data science",
+ description:
+ "Problem Statement & Data Advisory is for those asking themselves: How can I apply data science to this idea or goal? How will I interpret solutions, and how will that help me take action? What data do I need?",
+ price: workPriceProblem.getPrice(workPriceProblem),
+ stickerPrice: workPriceProblem.base,
+ duration: `${dataAdvisoryConfigs.DEFAULT_DURATION} Days`,
+ featured: true,
+ startRoute: "/self-service/work/new/data-advisory/basic-info",
+ basePath: "data-advisory",
+ helperBannerTitle: "WHAT WILL I RECEIVE?",
+ bgImage: imgProductProblemStatement,
+ helperBannerContent: (
+ <>
+
+
+
+ Detailed feedback on your business question and/or problem statement
+
+ Recommendations or refinement of your problem statement
+
+ Recommendations on the amount and type of data that should be used
+
+
+ Assessment of the quality of your data and recommendations on how to
+ improve or augment the data set
+
+
+ Scoring and evaluation recommendations for future data science
+ solutions
+
+
+ >
+ ),
+ aboutBannerTitle: "ABOUT PROBLEM STATEMENT & DATA ADVISORY",
+ aboutBannerContent: (
+
+ Problem Statement & Data Advisory is for those asking themselves:
+ How can I apply data science to this idea or goal? How will I interpret
+ solutions, and how will that help me take action? What data do I need?
+
+ ),
+ breadcrumbs: {
+ basic: [
+ { url: ROUTES.DASHBOARD_PAGE, name: "My work" },
+ { url: ROUTES.INTAKE_FORM, name: "Start work" },
+ { url: "#", name: "Problem statement & data advisory" },
+ ],
+ review: [
+ { url: ROUTES.DASHBOARD_PAGE, name: "My work" },
+ { url: ROUTES.INTAKE_FORM, name: "Start work" },
+ {
+ url: ROUTES.PROBLEM_STATEMENT,
+ name: "Problem statement & data advisory",
+ },
+ { url: "#", name: "Review & Payment" },
+ ],
+ },
+ },
+ {
+ type: WorkType.findData,
+ title: "Find Me Data",
+ subTitle: "Get the data you need to meet your analysis goals.",
+ shortDescription: "Our Experts Source Useful Data Sets For You",
+ description:
+ "Sometimes data is the only thing standing between you and something great. Tell us what you're solving for, and let our experts find the data to get you started now.",
+ price: workPriceFindData.getPrice(workPriceFindData),
+ stickerPrice: workPriceFindData.base,
+ duration: `${findMeDataConfigs.DEFAULT_DURATION} Days`,
+ featured: true,
+ startRoute: "/self-service/work/new/find-me-data/basic-info",
+ basePath: "find-me-data",
+ bgImage: imgProductFindMeData,
+ helperBannerTitle: "WHAT WILL I RECEIVE?",
+ helperBannerContent: (
+ <>
+
+
+
+ You get all of the free public data options that meet your goals.
+
+
+ Where public data isn't available, you get a listing of the best
+ paid data options and how to use them.
+
+
+ For the trickiest of data requirements, you get expert advice on how
+ to create the data you need.
+
+
+ >
+ ),
+ aboutBannerTitle: "ABOUT FIND ME DATA",
+ aboutBannerContent: (
+ <>
+
+ Find Me Data is designed for business leaders, researchers or any
+ individual who has a data question and is struggling to find the data
+ to answer it.
+
+
+ Use Find Me Data if you:
+
+
+ Want to better understand how to find and use open-source/public
+ data in your projects
+
+ Need data that you can share with others.
+
+ Note, we also offer data anonymization services to convert your
+ existing data into secure and shareable form
+
+
+ >
+ ),
+ breadcrumbs: {
+ basic: [
+ { url: ROUTES.DASHBOARD_PAGE, name: "My work" },
+ { url: ROUTES.INTAKE_FORM, name: "Start work" },
+ { url: "#", name: "Find me data" },
+ ],
+ review: [
+ { url: ROUTES.DASHBOARD_PAGE, name: "My work" },
+ { url: ROUTES.INTAKE_FORM, name: "Start work" },
+ { url: ROUTES.FIND_ME_DATA, name: "Find me data" },
+ { url: "#", name: "Review & Payment" },
+ ],
+ },
+ },
+];
+
+/**
+ * Color Options
+ */
+export const ColorOptionsItems = [
+ { name: "Any Colors", className: "angularGradient", isAny: true },
+ { name: "Blues", className: "blues" },
+ { name: "Aquas", className: "aquas" },
+ { name: "Greens", className: "greens" },
+ { name: "Purples", className: "purples" },
+ { name: "Pinks", className: "pinks" },
+ { name: "Reds", className: "reds" },
+ { name: "Oranges", className: "oranges" },
+ { name: "Yellows", className: "yellows" },
+ { name: "Light Grays", className: "lightGrays" },
+ { name: "Dark Grays", className: "darkGrays" },
+];
+
+/**
+ * Color Options
+ */
+export const tabNames = ["summary", "details", "messaging", "solutions"];
+
+export const disabledSidebarRoutes = [
+ "/self-service/basic-info",
+ "/self-service/website-purpose",
+ "/self-service/page-details",
+ "/self-service/branding",
+ "/self-service/review",
+ "/self-service/payment",
+ "/self-service/thank-you",
+ "/self-service/wizard",
+ "/self-service/profile",
+ "/self-service/login-prompt",
+ "/self-service/work-items/*",
+ "/self-service/work/*",
+];
+
+export const menuItems = [
+ {
+ item: "My Work",
+ url: ROUTES.DASHBOARD_PAGE,
+ icon: ,
+ activeIcon: ,
+ },
+];
+
+export const ACTIONS = {
+ FORM: {
+ UPDATE_PRICE: "UPDATE_PRICE",
+ UPDATE_ADDITIONAL_PRICE: "UPDATE_ADDITIONAL_PRICE",
+ SAVE_WORK_TYPE: "SAVE_WORK_TYPE",
+ SAVE_BASIC_INFO: "SAVE_BASIC_INFO",
+ SAVE_WEBSITE_PURPOSE: "SAVE_WEBSITE_PURPOSE",
+ SAVE_PAGE_DETAILS: "SAVE_PAGE_DETAILS",
+ SAVE_BRANDING: "SAVE_BRANDING",
+ ADD_DEVICE_PRICE: "ADD_DEVICE_PRICE",
+ UPDATE_PAGE_PRICE: "UPDATE_PAGE_PRICE",
+ REVIEW_CONFIRMED: "REVIEW_CONFIRMED",
+ SAVE_FORM: "SAVE_FORM",
+ RESET_INTAKE_FORM: "RESET_INTAKE_FORM",
+ TOGGLE_SUPPORT_MODAL: "TOGGLE_SUPPORT_MODAL",
+ CREATE_SUPPORT_TICKET: "CREATE_SUPPORT_TICKET",
+ },
+ PROGRESS: {
+ SET_ITEM: "SET_ITEM",
+ },
+ AUTO_SAVE: {
+ COOKIE_CLEARED: "COOKIE_CLEARED",
+ TRIGGER_AUTO_SAVE: "TRIGGER_AUTO_SAVE",
+ INIT_ERRORED: "INIT_ERRORED",
+ TRIGGER_COOKIE_CLEARED: "TRIGGER_COOKIE_CLEARED",
+ },
+ CHALLENGE: {
+ GET_CHALLENGE: "GET_CHALLENGE",
+ },
+ MY_WORK: {
+ LOAD_WORKS_ERROR: "LOAD_WORKS_ERROR",
+ LOAD_WORKS_PENDING: "LOAD_WORKS_PENDING",
+ LOAD_WORKS_SUCCESS: "LOAD_WORKS_SUCCESS",
+ },
+ PROFILE: {
+ GET_PROFILE: "GET_PROFILE",
+ UPDATE_BASIC_INFO_PENDING: "UPDATE_BASIC_INFO_PENDING",
+ UPDATE_BASIC_INFO_SUCCESS: "UPDATE_BASIC_INFO_SUCCESS",
+ UPDATE_BASIC_INFO_ERROR: "UPDATE_BASIC_INFO_ERROR",
+ },
+ WORK: {
+ GET_WORK: "GET_WORK",
+ GET_WORK_PENDING: "GET_WORK_PENDING",
+ GET_WORK_SUCCESS: "GET_WORK_SUCCESS",
+ GET_WORK_ERROR: "GET_WORK_ERROR",
+ GET_SUMMARY: "GET_SUMMARY",
+ GET_DETAILS: "GET_DETAILS",
+ GET_SOLUTIONS: "GET_SOLUTIONS",
+ GET_SOLUTIONS_PENDING: "GET_SOLUTIONS_PENDING",
+ GET_SOLUTIONS_SUCCESS: "GET_SOLUTIONS_SUCCESS",
+ GET_SOLUTIONS_ERROR: "GET_SOLUTIONS_ERROR",
+ DOWNLOAD_SOLUTION: "DOWNLOAD_SOLUTION",
+ DOWNLOAD_SOLUTION_PENDING: "DOWNLOAD_SOLUTION_PENDING",
+ DOWNLOAD_SOLUTION_SUCCESS: "DOWNLOAD_SOLUTION_SUCCESS",
+ DOWNLOAD_SOLUTION_ERROR: "DOWNLOAD_SOLUTION_ERROR",
+ SAVE_SURVEY: "SAVE_SURVEY",
+ SAVE_SURVEY_PENDING: "SAVE_SURVEY_PENDING",
+ SAVE_SURVEY_SUCCESS: "SAVE_SURVEY_SUCCESS",
+ SAVE_SURVEY_ERROR: "SAVE_SURVEY_ERROR",
+ SET_IS_SAVING_SURVEY_DONE: "SET_IS_SAVING_SURVEY_DONE",
+ GET_FORUM_NOTIFICATIONS: "GET_FORUM_NOTIFICATIONS",
+ GET_FORUM_NOTIFICATIONS_PENDING: "GET_FORUM_NOTIFICATIONS_PENDING",
+ GET_FORUM_NOTIFICATIONS_SUCCESS: "GET_FORUM_NOTIFICATIONS_SUCCESS",
+ GET_FORUM_NOTIFICATIONS_ERROR: "GET_FORUM_NOTIFICATIONS_ERROR",
+ },
+};
+
+export const AUTO_SAVE_FORM = "AUTO_SAVE_FORM";
+
+export const CACHED_CHALLENGE_ID = "CACHED_CHALLENGE_ID";
+
+export const CHALLENGE_STATUS = {
+ ACTIVE: "Active",
+ CANCELLED: "Cancelled",
+ CANCELLED_REQUIREMENTS_INFEASIBLE: "Cancelled - Requirements Infeasible",
+ CANCELLED_PAYMENT_FAILED: "Cancelled - Payment Failed",
+ COMPLETED: "Completed",
+ DRAFT: "Draft",
+ NEW: "New",
+ APPROVED: "Approved",
+ DELETED: "Deleted",
+};
+
+export const WORK_STATUS_MAP = {
+ [CHALLENGE_STATUS.ACTIVE]: "Started",
+ [CHALLENGE_STATUS.CANCELLED]: "Redirected",
+ [CHALLENGE_STATUS.CANCELLED_REQUIREMENTS_INFEASIBLE]: "Redirected",
+ [CHALLENGE_STATUS.CANCELLED_PAYMENT_FAILED]: "Redirected",
+ [CHALLENGE_STATUS.COMPLETED]: "Done",
+ [CHALLENGE_STATUS.DRAFT]: "Submitted",
+ [CHALLENGE_STATUS.NEW]: "Draft",
+ [CHALLENGE_STATUS.DELETED]: "Deleted",
+};
+
+export const WORK_STATUS_ORDER = {
+ [CHALLENGE_STATUS.NEW]: 0, // Draft
+ [CHALLENGE_STATUS.DRAFT]: 1, // Submitted
+ [CHALLENGE_STATUS.ACTIVE]: 2, // In progress
+ [CHALLENGE_STATUS.COMPLETED]: 3,
+ [CHALLENGE_STATUS.CANCELLED]: 4, // Directed to sales
+ [CHALLENGE_STATUS.CANCELLED_REQUIREMENTS_INFEASIBLE]: 4, // Directed to sales
+ [CHALLENGE_STATUS.CANCELLED_PAYMENT_FAILED]: 4, // Directed to sales
+ Unknown: 999,
+};
+
+export const WORK_STATUSES = {
+ Draft: {
+ name: WORK_STATUS_MAP[CHALLENGE_STATUS.NEW],
+ value: CHALLENGE_STATUS.NEW,
+ color: "#555555",
+ },
+ Submitted: {
+ name: WORK_STATUS_MAP[CHALLENGE_STATUS.DRAFT],
+ value: CHALLENGE_STATUS.DRAFT,
+ color: "#12C188",
+ },
+ InProgress: {
+ name: WORK_STATUS_MAP[CHALLENGE_STATUS.ACTIVE],
+ value: CHALLENGE_STATUS.ACTIVE,
+ color: "#12C188",
+ },
+ Completed: {
+ name: WORK_STATUS_MAP[CHALLENGE_STATUS.COMPLETED],
+ value: CHALLENGE_STATUS.COMPLETED,
+ color: "#555555",
+ },
+ Deleted: {
+ name: WORK_STATUS_MAP[CHALLENGE_STATUS.DELETED],
+ value: CHALLENGE_STATUS.DELETED,
+ color: "#E90C5A",
+ },
+ DirectedToSales: {
+ name: WORK_STATUS_MAP[CHALLENGE_STATUS.CANCELLED_REQUIREMENTS_INFEASIBLE],
+ value: CHALLENGE_STATUS.CANCELLED_REQUIREMENTS_INFEASIBLE,
+ color: "#F46500",
+ },
+ Cancelled: {
+ name: WORK_STATUS_MAP[CHALLENGE_STATUS.CANCELLED],
+ value: CHALLENGE_STATUS.CANCELLED,
+ color: "#F46500",
+ },
+ PaymentFailed: {
+ name: WORK_STATUS_MAP[CHALLENGE_STATUS.CANCELLED_PAYMENT_FAILED],
+ value: CHALLENGE_STATUS.CANCELLED_PAYMENT_FAILED,
+ color: "#F46500",
+ },
+};
+
+export const WORK_TIMELINE = [
+ {
+ title: "SUBMITTED",
+ color: "#12C188",
+ name: "submitted",
+ date: "created",
+ active: (work) => {
+ return work.status === WORK_STATUSES.Submitted.value;
+ },
+ completed: (work) => {
+ const submitted =
+ WORK_STATUS_ORDER[work.status] >
+ WORK_STATUS_ORDER[WORK_STATUSES.Draft.value];
+ return submitted;
+ },
+ },
+ {
+ name: "started",
+ title: "STARTED",
+ color: "#12C188",
+ date: (work) => {
+ const phase = work.phases.find((phase) => phase.name === "Registration");
+ return phase && workUtil.phaseStartDate(phase);
+ },
+ active: (work) => {
+ const phase = work.phases.find((phase) => phase.name === "Submission");
+ const isPhaseOpen =
+ phase && phase.isOpen && moment(workUtil.phaseEndDate(phase)).isAfter();
+ return work.status === WORK_STATUSES.InProgress.value && isPhaseOpen;
+ },
+ completed: (work) => {
+ const phase = work.phases.find((phase) => phase.name === "Submission");
+ const isPhaseOpen =
+ phase && moment(workUtil.phaseEndDate(phase)).isBefore();
+ const didStart =
+ WORK_STATUS_ORDER[work.status] >=
+ WORK_STATUS_ORDER[WORK_STATUSES.InProgress.value];
+ return isPhaseOpen && didStart;
+ },
+ },
+ {
+ name: "in-review",
+ title: "IN REVIEW",
+ color: "#12C188",
+ date: (work) => {
+ let phase = work.phases.find((phase) => phase.name === "Approval");
+
+ if (!phase) {
+ phase = work.phases.find((phase) => phase.name === "Review");
+ }
+
+ if (!phase) {
+ phase = work.phases.find((phase) => phase.name === "Appeals");
+ }
+
+ if (!phase) {
+ phase = work.phases.find((phase) => phase.name === "Appeals Response");
+ }
+ return workUtil.phaseEndDate(phase);
+ },
+ active: (work) => {
+ const reviewPhases = _.filter(work.phases, (p) =>
+ _.includes(
+ ["Approval", "Screening", "Review", "Appeals", "Appeals Response"],
+ p.name
+ )
+ );
+ return (
+ work.status === WORK_STATUSES.InProgress.value &&
+ _.filter(reviewPhases, (p) => p.isOpen).length > 0
+ );
+ },
+ completed: (work) => {
+ let phase = work.phases.find((phase) => phase.name === "Approval");
+
+ if (!phase) {
+ phase = work.phases.find((phase) => phase.name === "Review");
+ }
+
+ if (!phase) {
+ phase = work.phases.find((phase) => phase.name === "Appeals Response");
+ }
+ const isPhaseClosed = moment(workUtil.phaseEndDate(phase)).isBefore();
+ const didStart =
+ WORK_STATUS_ORDER[work.status] >=
+ WORK_STATUS_ORDER[WORK_STATUSES.InProgress.value];
+ return isPhaseClosed && didStart;
+ },
+ },
+ {
+ name: "downloads-ready",
+ title: "SOLUTIONS READY",
+ color: "#2C95D7",
+ date: (work) => {
+ let phase = work.phases.find((phase) => phase.name === "Approval");
+
+ if (!phase) {
+ phase = work.phases.find((phase) => phase.name === "Appeals Response");
+ }
+ return phase && workUtil.phaseEndDate(phase);
+ },
+ active: (work) => {
+ const active =
+ WORK_STATUS_ORDER[work.status] >=
+ WORK_STATUS_ORDER[WORK_STATUSES.Completed.value];
+
+ const customerFeedbacked =
+ work.metadata &&
+ work.metadata.find((item) => item.name === "customerFeedback");
+
+ return active && !customerFeedbacked;
+ },
+ completed: (work) => {
+ let phase = work.phases.find((phase) => phase.name === "Approval");
+
+ const customerFeedbacked =
+ work.metadata &&
+ work.metadata.find((item) => item.name === "customerFeedback");
+
+ const isReviewPhaseEnded =
+ phase &&
+ (moment(workUtil.phaseEndDate(phase)).isBefore() ||
+ !customerFeedbacked);
+
+ return (
+ isReviewPhaseEnded && work.status === WORK_STATUSES.Completed.value
+ );
+ },
+ },
+ {
+ name: "mark-as-done",
+ title: "DONE",
+ color: "#555555",
+ date: (work) => {
+ if (work.status === WORK_STATUSES.Completed.value) {
+ return work.updated;
+ }
+ },
+ active: (work) => {
+ const active =
+ WORK_STATUS_ORDER[work.status] >=
+ WORK_STATUS_ORDER[WORK_STATUSES.Completed.value];
+
+ const customerFeedbacked =
+ work.metadata &&
+ work.metadata.find((item) => item.name === "customerFeedback");
+
+ return active && customerFeedbacked;
+ },
+ completed: (work) => {
+ const customerFeedbacked =
+ work.metadata &&
+ work.metadata.find((item) => item.name === "customerFeedback");
+ return (
+ work.status === WORK_STATUSES.Completed.value && customerFeedbacked
+ );
+ },
+ hidden: (work) => {
+ const customerFeedbacked =
+ work.metadata &&
+ work.metadata.find((item) => item.name === "customerFeedback");
+ return (
+ work.status === WORK_STATUSES.Completed.value && customerFeedbacked
+ );
+ },
+ },
+ {
+ name: "send-to-solutions-expert",
+ title: "REDIRECTED",
+ color: "#F46500",
+ date: (work) => {
+ if (work.status === WORK_STATUSES.DirectedToSales.value) {
+ return work.updated;
+ }
+ if (work.status === WORK_STATUSES.PaymentFailed.value) {
+ return work.updated;
+ }
+ if (work.status === WORK_STATUSES.Cancelled.value) {
+ return work.updated;
+ }
+ },
+ completed: true,
+ hidden: (work) => {
+ return (
+ work.status !== WORK_STATUSES.DirectedToSales.value &&
+ work.status !== WORK_STATUSES.Cancelled.value &&
+ work.status !== WORK_STATUSES.PaymentFailed.value
+ );
+ },
+ },
+];
+
+export const SURVEY_QUESTIONS = [
+ {
+ name: "How happy are you with the quality of work?",
+ value: 0,
+ },
+ {
+ name: "How easy was it to get the results you wanted?",
+ value: 0,
+ },
+ {
+ name: "How likely are you to recommend Topcoder?",
+ value: 0,
+ },
+ {
+ name: "What can we do to make your experience better?",
+ value: "",
+ },
+];
+
+export const COUNTRY_OPTIONS = countries.map((ct) => ({
+ label: ct.name,
+ value: ct.code,
+}));
diff --git a/src/constants/products/DataAdvisory/index.js b/src/constants/products/DataAdvisory/index.js
new file mode 100644
index 000000000..30ad7a3a2
--- /dev/null
+++ b/src/constants/products/DataAdvisory/index.js
@@ -0,0 +1,48 @@
+export const CHALLENGE_FIELD_VALUES = {
+ trackId: "c0f5d461-8219-4c14-878a-c3a3f356466d",
+ typeId: "927abff4-7af9-4145-8ba1-577c16e64e2e",
+ timelineTemplateId: "7ebf1c69-f62f-4d3a-bdfb-fe9ddb56861c",
+};
+
+export const INTAKE_FORM_ROUTES = [
+ "/self-service/wizard",
+ "/self-service/work/new/data-advisory/basic-info",
+ "/self-service",
+ "/self-service",
+ "/self-service/work/new/data-advisory/login-prompt",
+ "/self-service",
+ "/self-service/work/new/data-advisory/review",
+ "/self-service/work/new/data-advisory/thank-you",
+];
+
+export const DEFAULT_TIMELINE = [
+ {
+ // Registration
+ phaseId: "a93544bc-c165-4af4-b55e-18f3593b457a",
+ duration: 259200,
+ },
+ {
+ // Submission
+ phaseId: "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49",
+ duration: 259200,
+ },
+ {
+ // Review
+ phaseId: "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b",
+ duration: 86400,
+ },
+ {
+ // Appeals
+ phaseId: "1c24cfb3-5b0a-4dbd-b6bd-4b0dff5349c6",
+ duration: 86400,
+ },
+ {
+ // Appeals response
+ phaseId: "797a6af7-cd3f-4436-9fca-9679f773bee9",
+ duration: 259200,
+ },
+];
+
+export const PRIZES_PAYMENT_BREAKDOWN = [0.375, 0.3125, 0.125];
+export const REVIEWER_PAYMENT_BREAKDOWN = [0.0625, 0.0625];
+export const DEFAULT_DURATION = 8;
diff --git a/src/constants/products/DataExploration/index.js b/src/constants/products/DataExploration/index.js
new file mode 100644
index 000000000..9b46638a1
--- /dev/null
+++ b/src/constants/products/DataExploration/index.js
@@ -0,0 +1,48 @@
+export const CHALLENGE_FIELD_VALUES = {
+ trackId: "c0f5d461-8219-4c14-878a-c3a3f356466d",
+ typeId: "927abff4-7af9-4145-8ba1-577c16e64e2e",
+ timelineTemplateId: "7ebf1c69-f62f-4d3a-bdfb-fe9ddb56861c",
+};
+
+export const INTAKE_FORM_ROUTES = [
+ "/self-service/wizard",
+ "/self-service/work/new/data-exploration/basic-info",
+ "/self-service",
+ "/self-service",
+ "/self-service/work/new/data-exploration/login-prompt",
+ "/self-service",
+ "/self-service/work/new/data-exploration/review",
+ "/self-service/work/new/data-exploration/thank-you",
+];
+
+export const DEFAULT_TIMELINE = [
+ {
+ // Registration
+ phaseId: "a93544bc-c165-4af4-b55e-18f3593b457a",
+ duration: 259200,
+ },
+ {
+ // Submission
+ phaseId: "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49",
+ duration: 259200,
+ },
+ {
+ // Review
+ phaseId: "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b",
+ duration: 86400,
+ },
+ {
+ // Appeals
+ phaseId: "1c24cfb3-5b0a-4dbd-b6bd-4b0dff5349c6",
+ duration: 43200,
+ },
+ {
+ // Appeals response
+ phaseId: "797a6af7-cd3f-4436-9fca-9679f773bee9",
+ duration: 43200,
+ },
+];
+
+export const PRIZES_PAYMENT_BREAKDOWN = [0.4, 0.3333, 0.1333];
+export const REVIEWER_PAYMENT_BREAKDOWN = [0.0667, 0.0667];
+export const DEFAULT_DURATION = 5;
diff --git a/src/constants/products/FindMeData/index.js b/src/constants/products/FindMeData/index.js
new file mode 100644
index 000000000..9a33e83d4
--- /dev/null
+++ b/src/constants/products/FindMeData/index.js
@@ -0,0 +1,52 @@
+export const CHALLENGE_FIELD_VALUES = {
+ trackId: "c0f5d461-8219-4c14-878a-c3a3f356466d",
+ typeId: "927abff4-7af9-4145-8ba1-577c16e64e2e",
+ timelineTemplateId: "7ebf1c69-f62f-4d3a-bdfb-fe9ddb56861c",
+};
+
+export const INTAKE_FORM_ROUTES = [
+ "/self-service/wizard",
+ "/self-service/work/new/find-me-data/basic-info",
+ "/self-service",
+ "/self-service",
+ "/self-service/work/new/find-me-data/login-prompt",
+ "/self-service",
+ "/self-service/work/new/find-me-data/review",
+ "/self-service/work/new/find-me-data/thank-you",
+];
+
+export const DEFAULT_TIMELINE = [
+ {
+ // Registration
+ phaseId: "a93544bc-c165-4af4-b55e-18f3593b457a",
+ duration: 259200, // 3 days
+ },
+ {
+ // Submission
+ phaseId: "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49",
+ duration: 259200, // 3 days
+ },
+ {
+ // Review
+ phaseId: "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b",
+ duration: 86400, // 1 day
+ },
+ {
+ // Appeals
+ phaseId: "1c24cfb3-5b0a-4dbd-b6bd-4b0dff5349c6",
+ duration: 86400, // 1 day
+ },
+ {
+ // Appeals response
+ phaseId: "797a6af7-cd3f-4436-9fca-9679f773bee9",
+ duration: 259200, // 3 days
+ },
+];
+
+export const DEFAULT_DURATION = 8;
+
+export const BASE_PRIZES_PAYMENT_BREAKDOWN = [0.2609, 0.2174, 0.1304];
+export const BASE_REVIEWER_PAYMENT_BREAKDOWN = [0.0435, 0.0435];
+
+export const PROMOTIONAL_PRIZES_PAYMENT_BREAKDOWN = [0.348, 0.29, 0.174];
+export const PROMOTIONAL_REVIEWER_PAYMENT_BREAKDOWN = [0.058, 0.058];
diff --git a/src/constants/products/WebsiteDesign/index.js b/src/constants/products/WebsiteDesign/index.js
new file mode 100644
index 000000000..5f53ee210
--- /dev/null
+++ b/src/constants/products/WebsiteDesign/index.js
@@ -0,0 +1,48 @@
+export const CHALLENGE_FIELD_VALUES = {
+ trackId: "5fa04185-041f-49a6-bfd1-fe82533cd6c8",
+ typeId: "927abff4-7af9-4145-8ba1-577c16e64e2e",
+ timelineTemplateId: "918f6a3e-1a63-4680-8b5e-deb95b1411e7",
+};
+
+export const INTAKE_FORM_ROUTES = [
+ "/self-service/wizard",
+ "/self-service/work/new/website-design-new/basic-info",
+ "/self-service",
+ "/self-service",
+ "/self-service/work/new/website-design-new/login-prompt",
+ "/self-service",
+ "/self-service/work/new/website-design-new/review",
+ "/self-service/work/new/website-design-new/thank-you",
+];
+
+export const DEFAULT_TIMELINE = [
+ {
+ // Submission
+ phaseId: "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49",
+ duration: 172800,
+ },
+ {
+ // Registration
+ phaseId: "a93544bc-c165-4af4-b55e-18f3593b457a",
+ duration: 172800,
+ },
+ {
+ // Screening
+ phaseId: "2d7d3d85-0b29-4989-b3b4-be7f2b1d0aa6",
+ duration: 14400,
+ },
+ {
+ // Review
+ phaseId: "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b",
+ duration: 144000,
+ },
+ {
+ // Approval
+ phaseId: "ad985cff-ad3e-44de-b54e-3992505ba0ae",
+ duration: 14400,
+ },
+];
+
+export const PRIZES_PAYMENT_BREAKDOWN = [0.4, 0.3333, 0.1333];
+export const REVIEWER_PAYMENT_BREAKDOWN = [0.0667, 0.0667];
+export const DEFAULT_DURATION = 4;
diff --git a/src/constants/products/WebsiteDesignLegacy/index.js b/src/constants/products/WebsiteDesignLegacy/index.js
new file mode 100644
index 000000000..11cf4eeee
--- /dev/null
+++ b/src/constants/products/WebsiteDesignLegacy/index.js
@@ -0,0 +1,166 @@
+export const PRIZES_PAYMENT_BREAKDOWN = [0.5, 0.2, 0.1];
+export const REVIEWER_PAYMENT_BREAKDOWN = [0.1, 0.1];
+export const DEFAULT_DURATION = "4-6";
+export const PER_PAGE_COST = 99;
+
+export const CHALLENGE_FIELD_VALUES = {
+ trackId: "5fa04185-041f-49a6-bfd1-fe82533cd6c8",
+ typeId: "927abff4-7af9-4145-8ba1-577c16e64e2e",
+ timelineTemplateId: "918f6a3e-1a63-4680-8b5e-deb95b1411e7",
+};
+
+export const DEFAULT_TIMELINE = [
+ {
+ // Screening
+ phaseId: "2d7d3d85-0b29-4989-b3b4-be7f2b1d0aa6",
+ duration: 14400,
+ },
+ {
+ // Review
+ phaseId: "aa5a3f78-79e0-4bf7-93ff-b11e8f5b398b",
+ duration: 144000,
+ },
+ {
+ // Approval
+ phaseId: "ad985cff-ad3e-44de-b54e-3992505ba0ae",
+ duration: 14400,
+ },
+];
+
+export const DEVICE_TYPE_DETAILS = {
+ computer: "Default screen 1366px width, 768px height",
+ tablet: "Default screen (vertical) 810px height, 1080px width",
+ phone: "Default screen 375px width, 812px height",
+};
+
+export const DURATION_MAPPING = [
+ [
+ {
+ submissionDuration: 2,
+ totalDuration: 4,
+ }, // 1 device
+ {
+ submissionDuration: 2,
+ totalDuration: 4,
+ }, // 2 devices
+ {
+ submissionDuration: 2,
+ totalDuration: 4,
+ }, // 3 devices
+ ], // 1 page
+
+ [
+ {
+ submissionDuration: 2,
+ totalDuration: 4,
+ }, // 1 device
+ {
+ submissionDuration: 2,
+ totalDuration: 4,
+ }, // 2 devices
+ {
+ submissionDuration: 2,
+ totalDuration: 4,
+ }, // 3 devices
+ ], // 2 pages
+
+ [
+ {
+ submissionDuration: 3,
+ totalDuration: 5,
+ }, // 1 device
+ {
+ submissionDuration: 3,
+ totalDuration: 5,
+ }, // 2 devices
+ {
+ submissionDuration: 3,
+ totalDuration: 5,
+ }, // 3 devices
+ ], // 3 pages
+
+ [
+ {
+ submissionDuration: 3,
+ totalDuration: 5,
+ }, // 1 device
+ {
+ submissionDuration: 3,
+ totalDuration: 5,
+ }, // 2 devices
+ {
+ submissionDuration: 4,
+ totalDuration: 6,
+ }, // 3 devices
+ ], // 4 pages
+
+ [
+ {
+ submissionDuration: 3,
+ totalDuration: 5,
+ }, // 1 device
+ {
+ submissionDuration: 3,
+ totalDuration: 5,
+ }, // 2 devices
+ {
+ submissionDuration: 4,
+ totalDuration: 6,
+ }, // 3 devices
+ ], // 5 pages
+];
+
+export const INTAKE_FORM_ROUTES = [
+ "/self-service/wizard",
+ "/self-service/work/new/website-design/basic-info",
+ "/self-service/work/new/website-design/website-purpose",
+ "/self-service/work/new/website-design/page-details",
+ "/self-service/work/new/website-design/login-prompt",
+ "/self-service/work/new/website-design/branding",
+ "/self-service/work/new/website-design/review",
+ "/self-service/work/new/website-design/thank-you",
+];
+
+export const PROGRESS_LEVELS = [
+ {
+ label: "Basic Info",
+ url: "/self-service/work/new/website-design/basic-info",
+ trueIndex: 2,
+ showIndex: 1,
+ visibleInProgressIndicator: true,
+ },
+ {
+ label: "REVIEW REQUIREMENTS",
+ url: "/self-service/work/new/website-design/basic-info",
+ trueIndex: 2,
+ showIndex: 1,
+ },
+ {
+ label: "Website Purpose",
+ url: "/self-service/work/new/website-design/website-purpose",
+ trueIndex: 3,
+ showIndex: 2,
+ visibleInProgressIndicator: true,
+ },
+ {
+ label: "Page Details",
+ url: "/self-service/work/new/website-design/page-details",
+ trueIndex: 4,
+ showIndex: 3,
+ visibleInProgressIndicator: true,
+ },
+ {
+ label: "Branding",
+ url: "/self-service/work/new/website-design/branding",
+ trueIndex: 5,
+ showIndex: 4,
+ visibleInProgressIndicator: true,
+ },
+ {
+ label: "Review",
+ url: "/self-service/work/new/website-design/review",
+ trueIndex: 6,
+ showIndex: 5,
+ visibleInProgressIndicator: true,
+ },
+];
diff --git a/src/constants/styles.module.scss b/src/constants/styles.module.scss
new file mode 100644
index 000000000..da1c680af
--- /dev/null
+++ b/src/constants/styles.module.scss
@@ -0,0 +1,33 @@
+@import "styles/include";
+
+.helpBanner {
+ display: flex;
+
+ @include mobile {
+ flex-direction: column;
+ }
+
+ .sampleImages {
+ display: flex;
+ padding-right: 218px;
+ margin-top: -30px;
+
+ @include mobile {
+ margin-top: 0px;
+ flex-direction: column;
+ align-items: center;
+ padding-right: 0px;
+ }
+
+
+ .imgBanner {
+ margin-right: 16px;
+ margin-left: 16px;
+
+ @include mobile {
+ flex-direction: column;
+ align-items: center;
+ }
+ }
+ }
+}
diff --git a/src/hoc/withAuthentication/actions/index.js b/src/hoc/withAuthentication/actions/index.js
new file mode 100644
index 000000000..a7d368634
--- /dev/null
+++ b/src/hoc/withAuthentication/actions/index.js
@@ -0,0 +1,22 @@
+/**
+ * Auth User actions
+ */
+import { ACTION_TYPE } from "constants";
+
+/**
+ * Action to set auth user data
+ *
+ * @param {object} tokenData user data from token
+ */
+export const authUserSuccess = (tokenData) => ({
+ type: ACTION_TYPE.AUTH_USER_SUCCESS,
+ payload: tokenData,
+});
+
+/**
+ * Action to set auth user error
+ */
+export const authUserError = (error) => ({
+ type: ACTION_TYPE.AUTH_USER_ERROR,
+ payload: error,
+});
diff --git a/src/hoc/withAuthentication/index.js b/src/hoc/withAuthentication/index.js
new file mode 100644
index 000000000..7b8ad4949
--- /dev/null
+++ b/src/hoc/withAuthentication/index.js
@@ -0,0 +1,69 @@
+/**
+ * Authentication
+ *
+ * wrap component for authentication
+ *
+ * - checks if user is logged-in, and if not, then redirects to the login page
+ *
+ * Also, this component load important data for `hasPermission` method:
+ * - decodes user token and set in Redux Store `authUser.userId, handle, roles`
+ * - we need to know user `roles` to check if user user has Topcoder Roles
+ */
+import { useParams } from "@reach/router";
+import { getAuthUserTokens, login } from "@topcoder/mfe-header";
+import _ from "lodash";
+import React, { useEffect } from "react";
+import { useDispatch, useSelector } from "react-redux";
+import { decodeToken } from "tc-auth-lib";
+import LoadingIndicator from "../../components/LoadingIndicator";
+import { authUserError, authUserSuccess } from "./actions";
+
+export default function withAuthentication(Component) {
+ const AuthenticatedComponent = (props) => {
+ const dispatch = useDispatch();
+ const { isLoggedIn, authError } = useSelector((state) => state.authUser);
+ const params = useParams();
+
+ /*
+ Check if user is logged-in or redirect ot the login page
+ */
+ useEffect(() => {
+ // prevent page redirecting to login page when unmount
+ let isUnmount = false;
+
+ if (!isLoggedIn) {
+ getAuthUserTokens()
+ .then(({ tokenV3 }) => {
+ if (!!tokenV3) {
+ const tokenData = decodeToken(tokenV3);
+ dispatch(
+ authUserSuccess(
+ _.pick(tokenData, ["userId", "handle", "roles"])
+ )
+ );
+ } else if (!isUnmount) {
+ login();
+ }
+ })
+ .catch((error) => dispatch(authUserError(error)));
+ }
+
+ return () => {
+ isUnmount = true;
+ };
+ }, [dispatch, isLoggedIn]);
+
+ return (
+ <>
+ {/* Show loading indicator until we know if user is logged-in or no.
+ In we got error during this process, show error */}
+ {isLoggedIn === null && }
+
+ {/* Show component only if user is logged-in */}
+ {isLoggedIn === true ? : null}
+ >
+ );
+ };
+
+ return AuthenticatedComponent;
+}
diff --git a/src/hoc/withAuthentication/reducers/index.js b/src/hoc/withAuthentication/reducers/index.js
new file mode 100644
index 000000000..c93ceec99
--- /dev/null
+++ b/src/hoc/withAuthentication/reducers/index.js
@@ -0,0 +1,48 @@
+/**
+ * Reducer for `authUser`
+ */
+import { ACTION_TYPE } from "constants";
+import _ from "lodash";
+
+const initialState = {
+ isLoggedIn: undefined,
+ isLoggingIn: true,
+ userId: undefined,
+ handle: undefined,
+ roles: [],
+ authError: undefined,
+};
+
+const authInitialState = _.pick(initialState, [
+ "isLoggedIn",
+ "userId",
+ "handle",
+ "roles",
+ "authError",
+]);
+
+const reducer = (state = initialState, action) => {
+ switch (action.type) {
+ case ACTION_TYPE.AUTH_USER_SUCCESS:
+ return {
+ ...state,
+ ...authInitialState,
+ ...action.payload,
+ isLoggedIn: !!action.payload?.handle,
+ isLoggingIn: false,
+ };
+
+ case ACTION_TYPE.AUTH_USER_ERROR:
+ return {
+ ...state,
+ ...authInitialState,
+ authError: action.payload,
+ isLoggingIn: false,
+ };
+
+ default:
+ return state;
+ }
+};
+
+export default reducer;
diff --git a/src/hoc/withAuthentication/selectors/index.js b/src/hoc/withAuthentication/selectors/index.js
new file mode 100644
index 000000000..ee3e869c2
--- /dev/null
+++ b/src/hoc/withAuthentication/selectors/index.js
@@ -0,0 +1,7 @@
+export const getIsLoggedIn = (state) => state.authUser.isLoggedIn;
+
+export const getIsLoggingIn = (state) => state.authUser.isLoggingIn;
+
+export const getUserHandle = (state) => state.authUser.handle;
+
+export const getUserId = (state) => state.authUser.userId;
diff --git a/src/hoc/withAuthentication/thunks/index.js b/src/hoc/withAuthentication/thunks/index.js
new file mode 100644
index 000000000..0cfc0ff61
--- /dev/null
+++ b/src/hoc/withAuthentication/thunks/index.js
@@ -0,0 +1,29 @@
+import pick from "lodash/pick";
+import { getAuthUserTokens, login } from "@topcoder/mfe-header";
+import { decodeToken } from "tc-auth-lib";
+import { getIsLoggedIn } from "../selectors";
+import { authUserError, authUserSuccess } from "../actions";
+
+/**
+ * Tries to acquire auth tokens and thus check if the user is logged in.
+ *
+ * @returns (() => Promise)
+ */
+export const checkIfLoggedIn = () => async (dispatch, getState) => {
+ const state = getState();
+ const isLoggedIn = getIsLoggedIn(state);
+ if (isLoggedIn) {
+ return;
+ }
+ let tokenData = null;
+ try {
+ const { tokenV3 } = await getAuthUserTokens();
+ if (tokenV3) {
+ tokenData = decodeToken(tokenV3);
+ }
+ } catch (error) {
+ dispatch(authUserError(error));
+ return;
+ }
+ dispatch(authUserSuccess(pick(tokenData, ["userId", "handle", "roles"])));
+};
diff --git a/src/hooks/useCheckMobileScreen.js b/src/hooks/useCheckMobileScreen.js
new file mode 100644
index 000000000..400a6e3a2
--- /dev/null
+++ b/src/hooks/useCheckMobileScreen.js
@@ -0,0 +1,21 @@
+import React, { useEffect, useState } from "react";
+
+// TODO: we don't currently support this breakpoint. Either remove this hook
+// or fix breakpoint so it's one we support.
+const useCheckMobileScreen = () => {
+ const [width, setWidth] = useState(window.innerWidth);
+ const handleWindowSizeChange = () => {
+ setWidth(window.innerWidth);
+ };
+
+ useEffect(() => {
+ window.addEventListener("resize", handleWindowSizeChange);
+ return () => {
+ window.removeEventListener("resize", handleWindowSizeChange);
+ };
+ }, []);
+
+ return width <= 768;
+};
+
+export default useCheckMobileScreen;
diff --git a/src/hooks/useMatchSomeRoute.js b/src/hooks/useMatchSomeRoute.js
new file mode 100644
index 000000000..ce0b2e935
--- /dev/null
+++ b/src/hooks/useMatchSomeRoute.js
@@ -0,0 +1,26 @@
+import { matchPath, useLocation } from "@reach/router";
+import _ from "lodash";
+
+/**
+ * Check if any of the passed paths match the current route.
+ *
+ * @param {string[]} paths paths of the routes
+ *
+ * @returns {{ uri: string, path: string, params: {} }} matched route params
+ */
+const useMatchSomeRoute = (paths) => {
+ const location = useLocation();
+ return _.find(paths, (path) => {
+ const result = matchPath(path, location.pathname);
+
+ return result
+ ? {
+ params: result.params,
+ uri: result.uri,
+ path,
+ }
+ : null;
+ });
+};
+
+export default useMatchSomeRoute;
diff --git a/src/reducers/autoSave.js b/src/reducers/autoSave.js
new file mode 100644
index 000000000..ea3f9b25d
--- /dev/null
+++ b/src/reducers/autoSave.js
@@ -0,0 +1,37 @@
+/**
+ * `progress` reducer
+ */
+
+import { ACTIONS } from "constants/";
+
+const initialState = {
+ triggered: false,
+ cookieCleared: false,
+ initErrored: null,
+ forced: false,
+};
+
+const autoSaveReducer = (state = initialState, action) => {
+ switch (action.type) {
+ case ACTIONS.AUTO_SAVE.TRIGGER_AUTO_SAVE:
+ return {
+ ...state,
+ triggered: action.payload.isTriggered,
+ forced: action.payload.isForced,
+ };
+ case ACTIONS.AUTO_SAVE.COOKIE_CLEARED:
+ return {
+ ...state,
+ cookieCleared: action.payload,
+ };
+ case ACTIONS.AUTO_SAVE.INIT_ERRORED:
+ return {
+ ...state,
+ initErrored: action.payload,
+ };
+ default:
+ return state;
+ }
+};
+
+export default autoSaveReducer;
diff --git a/src/reducers/challenge.js b/src/reducers/challenge.js
new file mode 100644
index 000000000..46798ee69
--- /dev/null
+++ b/src/reducers/challenge.js
@@ -0,0 +1,23 @@
+/**
+ * `progress` reducer
+ */
+
+import { ACTIONS } from "constants/";
+
+const initialState = {};
+
+const challengeReducer = (state = initialState, action) => {
+ switch (action.type) {
+ case ACTIONS.CHALLENGE.GET_CHALLENGE:
+ return {
+ ...state,
+ ...action.payload,
+ };
+ case ACTIONS.FORM.RESET_INTAKE_FORM:
+ return {};
+ default:
+ return state;
+ }
+};
+
+export default challengeReducer;
diff --git a/src/reducers/form.js b/src/reducers/form.js
new file mode 100644
index 000000000..12c4e7adb
--- /dev/null
+++ b/src/reducers/form.js
@@ -0,0 +1,105 @@
+/**
+ * `form` reducer
+ */
+import moment from "moment";
+import "moment-timezone";
+import _ from "lodash";
+import config from "../../config";
+import { ACTIONS } from "constants/";
+
+const initialState = {
+ pagePrice: 0,
+ workType: null,
+ basicInfo: null,
+ websitePurpose: null,
+ pageDetails: {
+ pages: [
+ {
+ pageName: "",
+ pageDetails: "",
+ },
+ ],
+ },
+ branding: null,
+ reviewConfirmed: false,
+ updatedAt: "",
+ showSupportModal: false,
+};
+
+const formReducer = (state = initialState, action) => {
+ const updatedAt = moment().tz(config.TIME_ZONE).format();
+ switch (action.type) {
+ case ACTIONS.FORM.SAVE_FORM:
+ return {
+ ...state,
+ ...action.payload,
+ updatedAt,
+ };
+ case ACTIONS.CHALLENGE.GET_CHALLENGE:
+ const metaData = action.payload?.metadata
+ ? _.find(action.payload.metadata, (m) => m.name === "intake-form")
+ : undefined;
+ return {
+ ...state,
+ ..._.get(JSON.parse(_.get(metaData, "value", "{}")), "form", {}),
+ };
+ case ACTIONS.FORM.RESET_INTAKE_FORM:
+ return {
+ ...state,
+ ...initialState,
+ updatedAt,
+ };
+ case ACTIONS.FORM.SAVE_WORK_TYPE:
+ return {
+ ...state,
+ workType: {
+ ...state.workType,
+ ...action.payload,
+ },
+ updatedAt,
+ };
+ case ACTIONS.FORM.REVIEW_CONFIRMED:
+ return {
+ ...state,
+ reviewConfirmed: action.payload,
+ updatedAt,
+ };
+ case ACTIONS.FORM.SAVE_BASIC_INFO:
+ return {
+ ...state,
+ basicInfo: action.payload,
+ updatedAt,
+ };
+ case ACTIONS.FORM.SAVE_WEBSITE_PURPOSE:
+ return {
+ ...state,
+ websitePurpose: action.payload,
+ updatedAt,
+ };
+ case ACTIONS.FORM.SAVE_PAGE_DETAILS:
+ return {
+ ...state,
+ pageDetails: action.payload,
+ updatedAt,
+ };
+ case ACTIONS.FORM.SAVE_BRANDING:
+ return {
+ ...state,
+ branding: action.payload,
+ updatedAt,
+ };
+ case ACTIONS.FORM.TOGGLE_SUPPORT_MODAL:
+ // if we don't have a payload, just toggle the modal
+ // otherwise, override the toggle w/the payload
+ const showSupportModal =
+ action.payload === null ? !state.showSupportModal : action.payload;
+ return {
+ ...state,
+ showSupportModal,
+ };
+ default:
+ return state;
+ }
+};
+
+export default formReducer;
diff --git a/src/reducers/index.js b/src/reducers/index.js
new file mode 100644
index 000000000..afceae03d
--- /dev/null
+++ b/src/reducers/index.js
@@ -0,0 +1,28 @@
+/**
+ * Root Redux Reducer
+ */
+import { reducer as toastrReducer } from "react-redux-toastr";
+import { combineReducers } from "redux";
+import authUserReducer from "../hoc/withAuthentication/reducers";
+import autoSaveReducer from "./autoSave";
+import challengeReducer from "./challenge";
+import formReducer from "./form";
+import myWorkReducer from "./myWork";
+import profileReducer from "./profile";
+import progressReducer from "./progress";
+import workReducer from "./work";
+
+// redux root reducer
+const rootReducer = combineReducers({
+ toastr: toastrReducer,
+ authUser: authUserReducer,
+ progress: progressReducer,
+ form: formReducer,
+ autoSave: autoSaveReducer,
+ challenge: challengeReducer,
+ myWork: myWorkReducer,
+ profile: profileReducer,
+ work: workReducer,
+});
+
+export default rootReducer;
diff --git a/src/reducers/myWork.js b/src/reducers/myWork.js
new file mode 100644
index 000000000..f16d80398
--- /dev/null
+++ b/src/reducers/myWork.js
@@ -0,0 +1,37 @@
+import { ACTIONS as ALL_ACTIONS } from "constants/index.js";
+
+const ACTIONS = ALL_ACTIONS.MY_WORK;
+
+const cancelSourceDummy = { cancel() {} };
+
+const initialState = {
+ works: [],
+ worksCancelSource: cancelSourceDummy,
+ worksError: null,
+};
+
+const reducer = (state = initialState, action) => {
+ const handler = actionHandlers[action.type];
+ return handler ? handler(state, action.payload) : state;
+};
+
+export default reducer;
+
+const actionHandlers = {
+ [ACTIONS.LOAD_WORKS_ERROR]: (state, worksError) => ({
+ ...state,
+ worksCancelSource: null,
+ worksError,
+ }),
+ [ACTIONS.LOAD_WORKS_PENDING]: (state, worksCancelSource) => ({
+ ...state,
+ worksCancelSource,
+ }),
+ [ACTIONS.LOAD_WORKS_SUCCESS]: (state, works) => {
+ return {
+ ...state,
+ works,
+ worksCancelSource: null,
+ };
+ },
+};
diff --git a/src/reducers/profile.js b/src/reducers/profile.js
new file mode 100644
index 000000000..b1660d312
--- /dev/null
+++ b/src/reducers/profile.js
@@ -0,0 +1,45 @@
+/**
+ * `profile` reducer
+ */
+
+import { ACTIONS } from "constants/";
+
+const initialState = {
+ email: "",
+ firstName: "",
+ lastName: "",
+ handle: "",
+ isLoading: true,
+};
+
+const progressReducer = (state = initialState, action) => {
+ switch (action.type) {
+ case ACTIONS.PROFILE.GET_PROFILE:
+ return {
+ ...state,
+ ...action.payload,
+ isLoading: false,
+ };
+ case ACTIONS.PROFILE.UPDATE_BASIC_INFO_PENDING:
+ return {
+ ...state,
+ isLoading: true,
+ };
+ case ACTIONS.PROFILE.UPDATE_BASIC_INFO_SUCCESS:
+ return {
+ ...state,
+ firstName: action.payload.firstName,
+ lastName: action.payload.lastName,
+ isLoading: false,
+ };
+ case ACTIONS.PROFILE.UPDATE_BASIC_INFO_ERROR:
+ return {
+ ...state,
+ isLoading: false,
+ };
+ default:
+ return state;
+ }
+};
+
+export default progressReducer;
diff --git a/src/reducers/progress.js b/src/reducers/progress.js
new file mode 100644
index 000000000..99c0522d8
--- /dev/null
+++ b/src/reducers/progress.js
@@ -0,0 +1,32 @@
+/**
+ * `progress` reducer
+ */
+
+import { ACTIONS } from "constants/";
+import _ from "lodash";
+const initialState = {
+ currentStep: 0,
+};
+
+const progressReducer = (state = initialState, action) => {
+ switch (action.type) {
+ case ACTIONS.PROGRESS.SET_ITEM:
+ return {
+ ...state,
+ currentStep: action.payload,
+ };
+ case ACTIONS.CHALLENGE.GET_CHALLENGE:
+ const metaData = action.payload?.metadata
+ ? _.find(action.payload.metadata, (m) => m.name === "intake-form")
+ : undefined;
+ if (!metaData) return state;
+ return {
+ ...state,
+ ..._.get(JSON.parse(_.get(metaData, "value", "{}")), "progress", {}),
+ };
+ default:
+ return state;
+ }
+};
+
+export default progressReducer;
diff --git a/src/reducers/work.js b/src/reducers/work.js
new file mode 100644
index 000000000..188039c4a
--- /dev/null
+++ b/src/reducers/work.js
@@ -0,0 +1,133 @@
+/**
+ * Work item reducer
+ */
+import { ACTIONS } from "constants";
+
+const initialState = {
+ work: null,
+ workItem: {},
+ error: null,
+ isLoadingWork: false,
+ isLoadingSolutions: false,
+ isSavingSurveyDone: false,
+ forumNotifications: null,
+};
+
+const workReducer = (state = initialState, action) => {
+ switch (action.type) {
+ case ACTIONS.WORK.GET_WORK_PENDING:
+ return {
+ ...state,
+ work: null,
+ workItem: {},
+ isLoadingWork: true,
+ error: null,
+ };
+ case ACTIONS.WORK.GET_WORK_SUCCESS:
+ return {
+ ...state,
+ work: action.payload,
+ isLoadingWork: false,
+ };
+ case ACTIONS.WORK.GET_WORK_ERROR:
+ return {
+ ...state,
+ error: action.payload,
+ isLoadingWork: false,
+ };
+ case ACTIONS.WORK.GET_SUMMARY:
+ return {
+ ...state,
+ workItem: {
+ ...state.workItem,
+ summary: action.payload,
+ },
+ };
+ case ACTIONS.WORK.GET_DETAILS:
+ return {
+ ...state,
+ workItem: {
+ ...state.workItem,
+ details: action.payload,
+ },
+ };
+ case ACTIONS.WORK.GET_SOLUTIONS_PENDING:
+ return {
+ ...state,
+ isLoadingSolutions: true,
+ error: null,
+ workItem: {
+ ...state.workItem,
+ solutions: undefined,
+ },
+ };
+ case ACTIONS.WORK.GET_SOLUTIONS_SUCCESS:
+ return {
+ ...state,
+ isLoadingSolutions: false,
+ workItem: {
+ ...state.workItem,
+ solutions: action.payload,
+ },
+ };
+ case ACTIONS.WORK.GET_SOLUTIONS_ERROR:
+ return {
+ ...state,
+ isLoadingSolutions: false,
+ error: action.payload,
+ };
+ case ACTIONS.WORK.GET_SOLUTIONS_COUNT_PENDING:
+ return {
+ ...state,
+ isLoadingSolutions: true,
+ error: null,
+ workItem: {
+ ...state.workItem,
+ solutionsCount: undefined,
+ },
+ };
+ case ACTIONS.WORK.GET_SOLUTIONS_COUNT_SUCCESS:
+ return {
+ ...state,
+ isLoadingSolutions: false,
+ workItem: {
+ ...state.workItem,
+ solutionsCount: action.payload,
+ },
+ };
+ case ACTIONS.WORK.GET_SOLUTIONS_COUNT_ERROR:
+ return {
+ ...state,
+ isLoadingSolutions: false,
+ error: action.payload,
+ };
+ case ACTIONS.WORK.SAVE_SURVEY_SUCCESS:
+ return {
+ ...state,
+ isSavingSurveyDone: true,
+ work: {
+ ...state.work,
+ metadata: action.payload.metadata,
+ },
+ };
+ case ACTIONS.WORK.SET_IS_SAVING_SURVEY_DONE:
+ return {
+ ...state,
+ isSavingSurveyDone: action.payload,
+ };
+ case ACTIONS.WORK.GET_FORUM_NOTIFICATIONS_PENDING:
+ return {
+ ...state,
+ forumNotifications: null,
+ };
+ case ACTIONS.WORK.GET_FORUM_NOTIFICATIONS_SUCCESS:
+ return {
+ ...state,
+ forumNotifications: action.payload,
+ };
+ default:
+ return state;
+ }
+};
+
+export default workReducer;
diff --git a/src/root.component.jsx b/src/root.component.jsx
new file mode 100644
index 000000000..732d7a8ed
--- /dev/null
+++ b/src/root.component.jsx
@@ -0,0 +1,61 @@
+import { createHistory, LocationProvider } from "@reach/router";
+import React, { StrictMode } from "react";
+import { Provider } from "react-redux";
+import { BrowserRouter } from "react-router-dom";
+import ReduxToastr from "react-redux-toastr";
+
+import {
+ AppNextGen,
+ RouteProvider,
+ routeRootLoggedIn,
+ routeRootLoggedOut,
+ ToolsRoutes,
+ UtilsRoutes,
+ PageFooter,
+ ProfileProvider,
+} from "../src-ts";
+
+import App from "./App";
+import store from "./store";
+
+import "./styles/main.vendor.scss";
+
+const history = createHistory(window);
+
+export default function Root() {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+ state.toastr}
+ transitionIn="fadeIn"
+ transitionOut="fadeOut"
+ progressBar
+ closeOnToastrClick
+ />
+
+
+
+
+
+ );
+}
diff --git a/src/routes/BasicInfoLegacy/components/BasicInfoFormLegacy/index.jsx b/src/routes/BasicInfoLegacy/components/BasicInfoFormLegacy/index.jsx
new file mode 100644
index 000000000..809d12501
--- /dev/null
+++ b/src/routes/BasicInfoLegacy/components/BasicInfoFormLegacy/index.jsx
@@ -0,0 +1,136 @@
+/* eslint-disable react-hooks/exhaustive-deps */
+/**
+ * Basic Info Form component
+ */
+import FormField from "components/FormElements/FormField";
+import FormInputText from "components/FormElements/FormInputText";
+import HelpBanner from "components/HelpBanner";
+import PageDivider from "components/PageDivider";
+import PageP from "components/PageElements/PageP";
+import PageRow from "components/PageElements/PageRow";
+import RadioButton from "components/RadioButton";
+import ServicePrice from "components/ServicePrice";
+import { HELP_BANNER } from "constants/";
+import PT from "prop-types";
+import _ from "lodash";
+import React from "react";
+import DeviceTypes from "../DeviceTypes";
+import "./styles.module.scss";
+
+const BasicInfoFormLegacy = ({
+ formData,
+ serviceType,
+ onFormUpdate,
+ onShowSupportModal,
+ numOfPages,
+ updateNumOfPages,
+ estimate,
+ pageListOptions,
+}) => {
+ const handleInputChange = (name, value, option = "") => {
+ onFormUpdate({ ...formData, [name]: { ...formData[name], option, value } });
+ };
+
+ return (
+
+
+
+ Your Website Design project includes up to 5 unique Visual Design
+ solutions. Each solution will match your specified scope and device
+ types. You will receive industry-standard source files to take forward
+ to further design and/or development. Design deliverables will NOT
+ include functional code.
+
+
+
+
+
+
PROJECT TITLE
+
+ Give your project a descriptive title. This is what the designers
+ will see when looking for your work.
+
+
+
+
+
+
+ handleInputChange(e.target.name, e.target.value, e.target.value)
+ }
+ />
+
+
+
+
+
+
+
+
How many pages?
+
+ How many pages (individual screens) would you like designed?
+
+
+
+
+ {
+ const newNumOfPages = _.findIndex(items, (i) => i.value);
+ updateNumOfPages(newNumOfPages + 1);
+ }}
+ size="lg"
+ options={pageListOptions}
+ />
+
+
+
+
+
+
+
Device Types
+
+ Your project includes designs for computers. You can add tablet and/
+ or mobile device sizes as well. Designing for multiple devices,
+ sizes or types is referred to as Responsive Design.
+
+
+
+
+ {
+ handleInputChange("selectedDevice", selectedOption, option);
+ }}
+ />
+
+
+
+
+ );
+};
+
+BasicInfoFormLegacy.defaultProps = {
+ serviceType: "",
+};
+
+BasicInfoFormLegacy.propTypes = {
+ estimate: PT.shape().isRequired,
+ serviceType: PT.string,
+ onFormUpdate: PT.func,
+ formData: PT.shape(),
+};
+
+export default BasicInfoFormLegacy;
diff --git a/src/routes/BasicInfoLegacy/components/BasicInfoFormLegacy/styles.module.scss b/src/routes/BasicInfoLegacy/components/BasicInfoFormLegacy/styles.module.scss
new file mode 100644
index 000000000..20e923b6a
--- /dev/null
+++ b/src/routes/BasicInfoLegacy/components/BasicInfoFormLegacy/styles.module.scss
@@ -0,0 +1,38 @@
+@import "styles/include";
+
+.basicInfoForm {
+ .title {
+ font-weight: 600;
+ color: $grey-text;
+ font-size: 20px;
+ line-height: 20px;
+ text-transform: uppercase;
+ }
+
+ .description {
+ @include font-roboto;
+ font-size: 16px;
+ line-height: 26px;
+ margin-top: 24px;
+ color: $grey-text;
+ }
+
+ .form-row {
+ align-items: flex-start;
+ }
+
+ .formFieldWrapper {
+ margin-top: 48px;
+ }
+}
+
+.infoAlert {
+ @include font-barlow;
+ display: flex;
+ padding: 16px;
+ background: #E0FAF3;
+ border-radius: 8px;
+ margin: 16px 0;
+ font-size: 16px;
+ line-height: 26px;
+}
diff --git a/src/routes/BasicInfoLegacy/components/DeviceTypes/index.jsx b/src/routes/BasicInfoLegacy/components/DeviceTypes/index.jsx
new file mode 100644
index 000000000..bda6ef9b2
--- /dev/null
+++ b/src/routes/BasicInfoLegacy/components/DeviceTypes/index.jsx
@@ -0,0 +1,119 @@
+/**
+ * Tab element
+ */
+import classNames from "classnames";
+import PT from "prop-types";
+import React, { useEffect, useState } from "react";
+import { currencyFormat } from "utils/";
+import { v4 as uuidv4 } from "uuid";
+import ComputerIconActive from "../../../../assets/images/icon-device-computer-active.svg";
+import ComputerIcon from "../../../../assets/images/icon-device-computer.svg";
+import PhoneIconActive from "../../../../assets/images/icon-device-phone-active.svg";
+import PhoneIcon from "../../../../assets/images/icon-device-phone.svg";
+import TabletIconActive from "../../../../assets/images/icon-device-tablet-active.svg";
+import TabletIcon from "../../../../assets/images/icon-device-tablet.svg";
+import "./styles.module.scss";
+
+const DeviceTypes = ({ numOfPages, selectedOptions, onSelect }) => {
+ const [selectedIndexes, setSelectedIndexes] = useState([]);
+
+ const types = [
+ {
+ title: "Computer",
+ description: "(Included)",
+ icon: ,
+ included: true,
+ iconActive: ,
+ },
+ {
+ title: "Tablet",
+ description: `+${currencyFormat(numOfPages * 99)}`, // TODO: move this to constants
+ subDescription: "($99 / page)",
+ icon: ,
+ iconActive: ,
+ },
+ {
+ title: "Phone",
+ description: `+${currencyFormat(numOfPages * 99)}`, // TODO: move this to constants
+ subDescription: "($99 / page)",
+ icon: ,
+ iconActive: ,
+ },
+ ];
+
+ useEffect(() => {
+ // backward compatible with old version.
+ if (typeof selectedOptions == "number") {
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ selectedOptions = [selectedOptions];
+ }
+ setSelectedIndexes(
+ selectedOptions.filter((index) => !types[index].included)
+ );
+ }, [selectedOptions]);
+
+ const handleDeviceSelection = (index, type) => {
+ if (!type.included) {
+ let newSelectedIndexes = [];
+ if (selectedIndexes.includes(index)) {
+ newSelectedIndexes = selectedIndexes.filter((i) => i !== index);
+ } else {
+ newSelectedIndexes = [...selectedIndexes, index];
+ }
+ setSelectedIndexes(newSelectedIndexes);
+ sendSelectedType(newSelectedIndexes);
+ }
+ };
+
+ const sendSelectedType = (indexes) => {
+ const selectedItems = [
+ ...types
+ .filter((item) => !!item.included)
+ .map((item) => types.indexOf(item)),
+ ...indexes,
+ ];
+ onSelect(
+ selectedItems,
+ selectedItems.map((index) => types[index].title)
+ );
+ };
+
+ return (
+
+ {types.map((type, index) => {
+ const isActive = selectedIndexes.includes(index) || type.included;
+ return (
+
handleDeviceSelection(index, type)}
+ >
+
+ {isActive ? type.iconActive : type.icon}
+
+
{type.title}
+
{type.description}
+ {type.subDescription && (
+
{type.subDescription}
+ )}
+
+ );
+ })}
+
+ );
+};
+
+DeviceTypes.defaultProps = {
+ selectedOptions: [0],
+};
+
+DeviceTypes.propTypes = {
+ selectedOptions: PT.arrayOf(PT.number),
+ onSelect: PT.func,
+};
+
+export default DeviceTypes;
diff --git a/src/routes/BasicInfoLegacy/components/DeviceTypes/styles.module.scss b/src/routes/BasicInfoLegacy/components/DeviceTypes/styles.module.scss
new file mode 100644
index 000000000..9f8a46175
--- /dev/null
+++ b/src/routes/BasicInfoLegacy/components/DeviceTypes/styles.module.scss
@@ -0,0 +1,60 @@
+@import "styles/include";
+
+.device-types {
+
+ display: flex;
+ gap: 32px;
+
+ .device {
+ cursor: pointer;
+
+ .iconWrapper {
+ display: flex;
+ justify-content: center;
+ width: 112px;
+ height: 112px;
+ border-radius: 4px;
+
+ outline: 1px solid $grey-text;
+
+ svg {
+ align-self: center;
+ }
+
+ &.active {
+ background-color: $green1;
+ outline: 0;
+ }
+ }
+
+
+ .title {
+ @include font-roboto;
+ text-align: center;
+ margin-top: 8px;
+ font-weight: 700;
+ font-size: 16px;
+ line-height: 26px;
+ color: $black;
+ }
+
+ .subTitle {
+ @include font-roboto;
+ text-align: center;
+ color: $black;
+ font-weight: 400;
+ font-size: 16px;
+ line-height: 26px;
+ }
+
+ .subDescription {
+ @include font-roboto;
+ text-align: center;
+ color: $black;
+ font-weight: 400;
+ font-size: 12px;
+ line-height: 20px;
+ }
+ }
+
+}
diff --git a/src/routes/BasicInfoLegacy/index.jsx b/src/routes/BasicInfoLegacy/index.jsx
new file mode 100644
index 000000000..abc8f36a7
--- /dev/null
+++ b/src/routes/BasicInfoLegacy/index.jsx
@@ -0,0 +1,241 @@
+import React, { useEffect, useState } from "react";
+import { connect, useSelector, useDispatch } from "react-redux";
+import { navigate } from "@reach/router";
+import _ from "lodash";
+import Button from "../../components/Button";
+import LoadingSpinner from "../../components/LoadingSpinner";
+import Page from "../../components/Page";
+import PageContent from "../../components/PageContent";
+import PageDivider from "../../components/PageDivider";
+import PageFoot from "../../components/PageElements/PageFoot";
+import PageH2 from "../../components/PageElements/PageH2";
+import Progress from "../../components/Progress";
+import { WebsiteDesignBannerLegacy } from "../../components/Banners/WebsiteDesignBannerLegacy";
+import {
+ BUTTON_SIZE,
+ BUTTON_TYPE,
+ PageOptions,
+ ROUTES,
+} from "../../constants/";
+import {
+ saveBasicInfo,
+ toggleSupportModal,
+ savePageDetails,
+ saveWorkType,
+ resetIntakeForm,
+} from "../../actions/form";
+import { triggerAutoSave } from "../../actions/autoSave";
+import { setProgressItem } from "../../actions/progress";
+import BackIcon from "../../assets/images/icon-back-arrow.svg";
+import BasicInfoFormLegacy from "./components/BasicInfoFormLegacy";
+import "./styles.module.scss";
+import {
+ getDynamicPriceAndTimeline,
+ getDynamicPriceAndTimelineEstimate,
+ currencyFormat,
+} from "../../utils/";
+
+import { Breadcrumb, ContactSupportModal } from "../../../src-ts";
+
+/**
+ * Basic Info Page
+ */
+const BasicInfoLegacy = ({
+ saveBasicInfo,
+ setProgressItem,
+ savePageDetails,
+ toggleSupportModal,
+ saveWorkType,
+}) => {
+ const [formData, setFormData] = useState({
+ projectTitle: { title: "Project Title", option: "", value: "" },
+ numberOfPages: { title: "How Many Pages?", option: "", value: "" },
+ selectedDevice: {
+ title: "Device Types",
+ option: ["Computer"],
+ value: [0],
+ },
+ });
+ const isFormValid = formData?.projectTitle?.value.length;
+ const dispatch = useDispatch();
+ const [isLoading, setLoading] = useState(false);
+ const workType = useSelector((state) => state.form.workType);
+ const basicInfo = useSelector((state) => state.form.basicInfo);
+ const currentStep = useSelector((state) => state.progress.currentStep);
+ const pageDetails = useSelector((state) => state.form.pageDetails);
+ const showSupportModal = useSelector((state) => state.form.showSupportModal);
+ const challenge = useSelector((state) => state.challenge);
+ const fullState = useSelector((state) => state);
+ const estimate = getDynamicPriceAndTimelineEstimate(fullState);
+
+ const onBack = () => {
+ dispatch(resetIntakeForm(true));
+ navigate("/self-service/wizard");
+ };
+
+ const onNext = () => {
+ setProgressItem(3);
+ saveBasicInfo(formData);
+ navigate("/self-service/work/new/website-design/website-purpose");
+ };
+
+ const updateNumOfPages = (newNumOfPages) => {
+ let newPages = pageDetails?.pages || [];
+ if (newNumOfPages < newPages.length) {
+ newPages.length = newNumOfPages;
+ } else if (newNumOfPages !== newPages.length) {
+ for (let i = newPages.length; i < newNumOfPages; i += 1) {
+ newPages.push({
+ pageName: "",
+ pageDetails: "",
+ });
+ }
+ }
+
+ savePageDetails({
+ ...pageDetails,
+ pages: newPages,
+ });
+ setFormData({
+ ...formData,
+ numberOfPages: {
+ title: "How Many Pages?",
+ option: newNumOfPages === 1 ? "1 Screen" : `${newNumOfPages} Screens`,
+ value: newNumOfPages === 1 ? "1 Screen" : `${newNumOfPages} Screens`,
+ },
+ });
+ };
+
+ const [firstMounted, setFirstMounted] = useState(true);
+
+ useEffect(() => {
+ if (!firstMounted) {
+ return;
+ }
+
+ setProgressItem(2);
+
+ if (currentStep === 0) {
+ saveWorkType({
+ selectedWorkType: "Website Design",
+ selectedWorkTypeDetail: "Website Design",
+ });
+ dispatch(triggerAutoSave(true));
+ }
+
+ if (basicInfo && basicInfo?.projectTitle?.value.length > 0) {
+ setFormData(basicInfo);
+ }
+
+ setFirstMounted(false);
+
+ return () => {
+ dispatch(triggerAutoSave(true));
+ };
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, [basicInfo, currentStep, dispatch, setProgressItem, firstMounted]);
+
+ useEffect(() => {
+ if (formData) {
+ saveBasicInfo(formData);
+ }
+ }, [formData, formData.selectedDevices, saveBasicInfo]);
+
+ const onShowSupportModal = () => {
+ toggleSupportModal(true);
+ };
+ const onHideSupportModal = () => {
+ toggleSupportModal(false);
+ };
+
+ const breadcrumbs = [
+ { url: ROUTES.DASHBOARD_PAGE, name: "My work" },
+ {
+ url: ROUTES.INTAKE_FORM,
+ name: "Start work",
+ onClick: () => {
+ dispatch(resetIntakeForm(true));
+ },
+ },
+ { url: ROUTES.WEBSITE_DESIGN_LEGACY, name: "Basic Info" },
+ ];
+
+ return (
+ <>
+
+
+
+
+
+
+ BASIC INFO
+
+
+ ({
+ ...o,
+ value: i === (pageDetails?.pages?.length || 0) - 1,
+ label: `${o.label} (${currencyFormat(
+ getDynamicPriceAndTimeline(
+ i + 1,
+ formData?.selectedDevice?.value?.length || 0
+ ).total
+ )})`,
+ }))}
+ estimate={estimate}
+ formData={formData}
+ serviceType={workType?.selectedWorkTypeDetail}
+ onFormUpdate={setFormData}
+ numOfPages={pageDetails?.pages?.length || 0}
+ updateNumOfPages={updateNumOfPages}
+ onShowSupportModal={onShowSupportModal}
+ />
+
+
+
+
+
+
+
+
+
+ >
+ );
+};
+
+const mapStateToProps = ({ form }) => form;
+
+const mapDispatchToProps = {
+ saveBasicInfo,
+ setProgressItem,
+ savePageDetails,
+ toggleSupportModal,
+ saveWorkType,
+};
+
+export default connect(mapStateToProps, mapDispatchToProps)(BasicInfoLegacy);
diff --git a/src/routes/BasicInfoLegacy/styles.module.scss b/src/routes/BasicInfoLegacy/styles.module.scss
new file mode 100644
index 000000000..51c0376ed
--- /dev/null
+++ b/src/routes/BasicInfoLegacy/styles.module.scss
@@ -0,0 +1,22 @@
+@import "styles/include";
+
+.footerContent {
+ display: flex;
+ width: 100%;
+ flex-direction: row;
+ justify-content: space-between;
+
+ .footer-right {
+ display: flex;
+ gap: 16px;
+ }
+}
+
+.container {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+
+.backButtonWrapper {
+ @include backButtonWrapper;
+}
diff --git a/src/routes/BrandingLegacy/components/BrandingForm/index.jsx b/src/routes/BrandingLegacy/components/BrandingForm/index.jsx
new file mode 100644
index 000000000..38f1cd3f1
--- /dev/null
+++ b/src/routes/BrandingLegacy/components/BrandingForm/index.jsx
@@ -0,0 +1,506 @@
+/**
+ * Tab element
+ */
+import Button from "components/Button";
+import FormField from "components/FormElements/FormField";
+import FormInputText from "components/FormElements/FormInputText";
+import FormInputTextArea from "components/FormElements/FormInputTextArea";
+import PageDivider from "components/PageDivider";
+import PageP from "components/PageElements/PageP";
+import PageRow from "components/PageElements/PageRow";
+import RadioButton from "components/RadioButton";
+import ServicePrice from "components/ServicePrice";
+import {
+ BUTTON_SIZE,
+ BUTTON_TYPE,
+ ColorOptionsItems,
+ DeliverablesOptions,
+ AllowStockOptions,
+} from "constants/";
+import PT from "prop-types";
+import React, { useEffect, useState } from "react";
+import ColorOptions from "../ColorOptions";
+import FontOptions from "../FontOptions";
+import "./styles.module.scss";
+import _ from "lodash";
+import Modal from "components/Modal";
+import PolicyContent from "../../../../components/Modal/PolicyContent";
+import PageH3 from "components/PageElements/PageH3";
+
+const BrandingForm = ({
+ serviceType,
+ setFormData,
+ formData,
+ saveBranding,
+ estimate,
+}) => {
+ const [selectedColor, setSelectedColor] = useState(0);
+ const [selectedFont, setSelectedFont] = useState(0);
+ const [isPolicyModalOpen, setIsPolicyModalOpen] = useState(false);
+ const [deliverableOptions, setDeliverableOptions] =
+ useState(DeliverablesOptions);
+ const [allowStockOption, setAllowStockOption] = useState(AllowStockOptions);
+
+ const handleInputChange = (name, value, option = null) => {
+ setFormData((formData) => {
+ const newFormData = {
+ ...formData,
+ [name]: { ...formData[name], option: option ? option : value, value },
+ };
+ saveBranding(newFormData);
+ return newFormData;
+ });
+ };
+
+ const handleArrayInputChange = (index, name, key, value, option = null) => {
+ setFormData((formData) => {
+ const newFormData = {
+ ...formData,
+ };
+
+ if (!newFormData[name]) {
+ newFormData[name] = [
+ {
+ website: { name, value, option: option ? option : value },
+ feedback: { name, value, option: option ? option : value },
+ },
+ ];
+ }
+
+ newFormData[name][index][key] = {
+ name,
+ value,
+ option: option ? option : value,
+ };
+
+ saveBranding(newFormData);
+ return newFormData;
+ });
+ };
+
+ const addWebsite = () => {
+ setFormData((formData) => {
+ const newFormData = {
+ ...formData,
+ inspiration: [
+ ...(formData.inspiration || []),
+ {
+ website: { name: "Website", value: "", option: "" },
+ feedback: { name: "Feedback", value: "", option: "" },
+ },
+ ],
+ };
+
+ saveBranding(newFormData);
+ return newFormData;
+ });
+ };
+
+ const removeWebsite = (index) => {
+ setFormData((formData) => {
+ const newFormData = {
+ ...formData,
+ };
+ newFormData.inspiration.splice(index, 1);
+
+ saveBranding(newFormData);
+ return newFormData;
+ });
+ };
+
+ useEffect(() => {
+ if (formData.colorOption) {
+ setSelectedColor(formData?.colorOption);
+ }
+ }, [formData.colorOption]);
+
+ useEffect(() => {
+ if (formData.fontOption) {
+ setSelectedFont(formData.fontOption?.value);
+ }
+ }, [formData.fontOption]);
+
+ useEffect(() => {
+ const itemSelected = formData?.selectedDeliverableOption;
+ if (itemSelected?.option && deliverableOptions[0]) {
+ const newDeliverableOptions = deliverableOptions.map((o) => {
+ o.value = o.label === itemSelected.option;
+ return o;
+ });
+ setDeliverableOptions(newDeliverableOptions);
+ }
+
+ const optionSelected = formData?.allowStockOption;
+ if (optionSelected?.option && allowStockOption[0]) {
+ const newAllowStockPhoto = allowStockOption.map((o) => {
+ o.value = o.label === optionSelected.option;
+ return o;
+ });
+ setAllowStockOption(newAllowStockPhoto);
+ }
+
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, [formData.selectedDeliverableOption, formData.allowStockOption]);
+ return (
+
+
setIsPolicyModalOpen(false)}
+ >
+ STOCK ARTWORK POLICY
+
+
+
+
+
+
+
+
+
{"STYLE & THEME"}
+
+ What ideas do you have for the overall style and theme of your
+ website? For example, modern and minimalist, bold and colorful, or
+ muted and masculine. Describe the vibe and personality you have in
+ mind. For example: friendly, approachable, upscale, exclusive,
+ high-tech, handcrafted.
+
+
+
+
+
+ handleInputChange(e.target.name, e.target.value)}
+ styleName={"text-area"}
+ name="theme"
+ placeholder={"Be as descriptive as possible"}
+ />
+
+
+
+
+
+
+
+
Inspiration
+
+ Are there other websites you would like our designers to draw
+ inspiration from? List websites you like and describe what you like
+ about them.
+
+
+
+
+ {_.map(_.get(formData, "inspiration", []), (entry, index) => (
+
+ {index ? (
+
removeWebsite(index)}
+ >
+ Remove Website
+
+ ) : null}
+
+
+ handleArrayInputChange(
+ index,
+ "inspiration",
+ e.target.name,
+ e.target.value
+ )
+ }
+ />
+
+
+
+ handleArrayInputChange(
+ index,
+ "inspiration",
+ e.target.name,
+ e.target.value
+ )
+ }
+ styleName={"text-area"}
+ name="feedback"
+ placeholder={"Describe what you like about this website"}
+ />
+
+
+ ))}
+
+ ADD ANOTHER WEBSITE
+
+
+
+
+
+
+
+
COLORS
+
+ Pick up to three colors you'd like our designers to use. You can
+ also include your specific brand colors.
+
+
+
+
+ {
+ setSelectedColor(index);
+ handleInputChange("colorOption", index, colorName);
+ }}
+ />
+ 0 ? "(optional)" : ""
+ }`}
+ >
+ handleInputChange(e.target.name, e.target.value)}
+ styleName={"text-area"}
+ name="specificColor"
+ />
+
+
+
+
+
+
+
+
FONTS
+
+ Choose your general font style preference. If you have specific
+ fonts that should be used, please share them.
+
+
+
+
+
{
+ if (selectedFont === index) {
+ handleInputChange("fontOption", null, null);
+ } else {
+ setSelectedFont(index);
+ handleInputChange("fontOption", index, fontName);
+ }
+ }}
+ />
+
+
+
+ I have specific fonts I want to use.
+
+ Share a link to your publicly accessible fonts via drive, dropbox,
+ etc.
+
+
+
+ handleInputChange(e.target.name, e.target.value)
+ }
+ />
+
+
+
+ handleInputChange(e.target.name, e.target.value)
+ }
+ />
+
+
+
+
+
+
+
+
+
Other Assets (optional)
+
+ Do you have any additional assets that would be helpful to our
+ designers? For example, your current logo, branding direction,
+ photos, illustrations, content, layout ideas, etc.
+
+
+
+
+
+
+ Share a link to your publicly accessible assets via drive,
+ dropbox, etc.
+
+
+
+ handleInputChange(e.target.name, e.target.value)
+ }
+ />
+
+
+
+
+
+
+
+
+
Anything to avoid? (optional)
+
+ If there are any themes, ideas, or specific directions our designers
+ should avoid, please let us know. Be as descriptive as possible.
+
+
+
+
+
+ handleInputChange(e.target.name, e.target.value)}
+ styleName={"text-area"}
+ name="anythingToAvoid"
+ placeholder={"Describe themes or ideas to avoid"}
+ />
+
+
+
+
+
+
+
+
Allow Stock Photos?
+
+ ​​There may be additional costs for designs that use stock images.
+ Our designers will include details for any stock images used, so you
+ can buy them at the end of the project.{" "}
+ setIsPolicyModalOpen(true)}
+ >
+ Learn more about our stock photo policy
+
+ .
+
+
+
+
+ {
+ const selectedOption = items.findIndex((item) => item.value);
+ const foundOption = items.find((item) => item.value);
+ handleInputChange(
+ "allowStockOption",
+ selectedOption,
+ foundOption.label
+ );
+ }}
+ size="lg"
+ options={allowStockOption}
+ />
+
+
+
+
+
+
+
Final Deliverable SOURCE FILES
+
+ If you want your final deliverables created with a specific design
+ software, please specify.{" "}
+
+
+
+
+
{
+ const selectedOption = items.findIndex((item) => item.value);
+ const foundOption = items.find((item) => item.value);
+ handleInputChange(
+ "selectedDeliverableOption",
+ selectedOption,
+ foundOption.label
+ );
+ }}
+ size="lg"
+ options={deliverableOptions}
+ />
+
+ {formData.selectedDeliverableOption?.value === 4 && (
+
+
+
+ handleInputChange(e.target.name, e.target.value)
+ }
+ />
+
+
+ )}
+
+
+
+ );
+};
+
+BrandingForm.defaultProps = {
+ price: 0,
+ serviceType: "",
+};
+
+BrandingForm.propTypes = {
+ estimate: PT.shape().isRequired,
+ price: PT.string,
+ serviceType: PT.string,
+ formData: PT.shape(),
+ setFormData: PT.func,
+};
+
+export default BrandingForm;
diff --git a/src/routes/BrandingLegacy/components/BrandingForm/styles.module.scss b/src/routes/BrandingLegacy/components/BrandingForm/styles.module.scss
new file mode 100644
index 000000000..5fe24bc13
--- /dev/null
+++ b/src/routes/BrandingLegacy/components/BrandingForm/styles.module.scss
@@ -0,0 +1,82 @@
+@import "styles/include";
+
+.brandingForm {
+ .remove-website {
+ color: $green1;
+ cursor: pointer;
+ margin-bottom: 16px;
+ display: flex;
+ justify-content: flex-end;
+
+ &:hover {
+ text-decoration: underline;
+ }
+ }
+
+ .title {
+ font-weight: 600;
+ color: $grey-text;
+ font-size: 20px;
+ line-height: 20px;
+ text-transform: uppercase;
+ }
+
+ .description {
+ @include font-roboto;
+ font-size: 16px;
+ line-height: 26px;
+ margin-top: 24px;
+ color: $grey-text;
+
+ .link {
+ cursor: pointer;
+ color: $link-blue;
+ text-decoration: underline;
+ margin-top: 20px;
+ }
+ }
+
+ .form-row {
+ align-items: flex-start;
+ }
+
+ .formFieldWrapper {
+ margin-top: 48px;
+ }
+
+ .text-area {
+ height: 117px !important;
+ }
+
+ .uploadFonts {
+ margin-top: 32px;
+
+ p {
+ @include font-roboto;
+ font-weight: 700;
+ font-size: 12px;
+ letter-spacing: 0.8px;
+ line-height: 16px;
+ color: $black;
+ margin-bottom: 8px;
+ }
+ }
+
+ .assets {
+ margin-top: 12px;
+ p {
+ @include font-roboto;
+ font-weight: 700;
+ font-size: 12px;
+ letter-spacing: 0.8px;
+ line-height: 12px;
+ color: $black;
+ margin-bottom: 8px;
+ }
+ }
+
+ .customDeliverable {
+ margin-top: 32px;
+ }
+}
+
diff --git a/src/routes/BrandingLegacy/components/ColorOptions/index.jsx b/src/routes/BrandingLegacy/components/ColorOptions/index.jsx
new file mode 100644
index 000000000..5ed3579bb
--- /dev/null
+++ b/src/routes/BrandingLegacy/components/ColorOptions/index.jsx
@@ -0,0 +1,73 @@
+/**
+ * Color Options component
+ */
+import classNames from "classnames";
+import PT from "prop-types";
+import React from "react";
+import _ from "lodash";
+import { v4 as uuidV4 } from "uuid";
+import CheckIcon from "../../../../assets/images/check.svg";
+import "./styles.module.scss";
+
+const ColorOptions = ({ colors, selectedColor, onSelect }) => {
+ const anyColor = colors.find((x) => x.isAny);
+ return (
+
+ {colors.map((color, index) => (
+
{
+ if (!_.isArray(selectedColor.value)) {
+ selectedColor.value = [];
+ selectedColor.option = [];
+ }
+ if (_.includes(selectedColor.value, color.name)) {
+ const newColors = _.filter(
+ selectedColor.value,
+ (v) => v !== color.name
+ );
+ onSelect(newColors, newColors);
+ } else if (color.isAny) {
+ const newColors = [color.name];
+ onSelect(newColors, newColors);
+ } else if (selectedColor.value.length < 3) {
+ const newColors = [
+ ...selectedColor.value.filter(
+ (name) => name !== anyColor?.name
+ ),
+ color.name,
+ ];
+ onSelect(newColors, newColors);
+ }
+ }}
+ >
+
+
+
+
{color.name}
+
+ ))}
+
+ );
+};
+
+ColorOptions.defaultProps = {
+ colors: [],
+};
+
+ColorOptions.propTypes = {
+ colors: PT.arrayOf(PT.shape()),
+ selectedColor: PT.number,
+ onSelect: PT.func,
+};
+
+export default ColorOptions;
diff --git a/src/routes/BrandingLegacy/components/ColorOptions/styles.module.scss b/src/routes/BrandingLegacy/components/ColorOptions/styles.module.scss
new file mode 100644
index 000000000..a2bde608e
--- /dev/null
+++ b/src/routes/BrandingLegacy/components/ColorOptions/styles.module.scss
@@ -0,0 +1,90 @@
+@import "styles/include";
+
+.colorOptions {
+
+ display: flex;
+ flex-wrap: wrap;
+ gap: 24px;
+ margin-bottom: 34px;
+ @include mobile {
+ justify-content: flex-start;
+ //margin-left: -6px;
+ }
+ .colorWrapper {
+ .color {
+ position: relative;
+ width: 120px;
+ height: 80px;
+ padding: 16px;
+ @include mobile {
+ width: 74px;
+ height: 64px;
+ }
+ cursor: pointer;
+
+ border: 1px solid $gui-kit-gray-90;
+ border-radius: 4px;
+
+ svg {
+ display: none;
+ }
+
+ &.selected {
+ svg {
+ display: flex;
+ width: 40px;
+ height: 40px;
+ align-self: center;
+ width: 100%;
+ }
+ }
+
+ &.blues {
+ background: linear-gradient(180deg, #2492EB 0%, #104378 100%);
+ }
+ &.aquas {
+ background: linear-gradient(180deg, #4BB7C2 0%, #215563 100%);
+ }
+ &.greens {
+ background: linear-gradient(180deg, #98C739 0%, #435B1D 100%);
+ }
+ &.purples {
+ background: linear-gradient(180deg, #6D78B0 0%, #31375B 100%);
+ }
+ &.pinks {
+ background: linear-gradient(180deg, #E16CA0 0%, #643353 100%);
+ }
+ &.reds {
+ background: linear-gradient(180deg, #CC4645 0%, #5B2024 100%);
+ }
+ &.oranges {
+ background: linear-gradient(180deg, #F47E58 0%, #6E3A2C 100%);
+ }
+ &.yellows {
+ background: linear-gradient(180deg, #F5C257 0%, #6C5A2C 100%);
+ }
+ &.lightGrays {
+ background: linear-gradient(180deg, #C3C5CA 0%, #828692 100%);
+ }
+ &.darkGrays {
+ background: linear-gradient(180deg, #555962 0%, #18191B 100%);
+ }
+ &.angularGradient {
+ background: conic-gradient(from 180deg at 50% 50%, #2492EB 0deg, #4BB7C2 56.25deg, #98C739 106.88deg, #6D78B0 159.38deg, #E16CA0 208.13deg, #CC4645 258.75deg, #F47E58 309.38deg, #F5C257 360deg);
+ }
+ }
+
+ .colorName {
+ @include font-roboto;
+ color: $black;
+ font-size: 16px;
+ font-weight: 600;
+ line-height: 26px;
+ text-align: center;
+ margin-top: 8px;
+ @include mobile {
+ font-size: 14px;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/routes/BrandingLegacy/components/FontOptions/index.jsx b/src/routes/BrandingLegacy/components/FontOptions/index.jsx
new file mode 100644
index 000000000..5270c27b6
--- /dev/null
+++ b/src/routes/BrandingLegacy/components/FontOptions/index.jsx
@@ -0,0 +1,56 @@
+/**
+ * Color Options component
+ */
+import classNames from "classnames";
+import PT from "prop-types";
+import React from "react";
+import { v4 as uuidV4 } from "uuid";
+import SansSerifIcon from "../../../../assets/images/icon-sans-serif-font.png";
+import SerifIcon from "../../../../assets/images/icon-serif-font.png";
+import AnyFont from "../../../../assets/images/icon-any-font.png";
+import "./styles.module.scss";
+
+const FontOptions = ({ selectedFont, onSelect }) => {
+ const fontOptions = [
+ { name: "Any Fonts", image: AnyFont },
+ { name: "Serif", image: SerifIcon },
+ { name: "Sans Serif", image: SansSerifIcon },
+ ];
+
+ return (
+
+ {fontOptions.map((item, index) => (
+
onSelect(index, item.name)}
+ >
+
+
+
+
+
{item.name}
+
+ ))}
+
+ );
+};
+
+FontOptions.defaultProps = {
+ selectedFont: 0,
+};
+
+FontOptions.propTypes = {
+ selectedFont: PT.number,
+ onSelect: PT.func,
+};
+
+export default FontOptions;
diff --git a/src/routes/BrandingLegacy/components/FontOptions/styles.module.scss b/src/routes/BrandingLegacy/components/FontOptions/styles.module.scss
new file mode 100644
index 000000000..6fc40c40a
--- /dev/null
+++ b/src/routes/BrandingLegacy/components/FontOptions/styles.module.scss
@@ -0,0 +1,36 @@
+@import "styles/include";
+
+.fontOptions {
+ display: flex;
+ gap: 30px;
+
+ .fontWrapper {
+
+ .image {
+ width: 260px;
+ padding: 32px 0;
+ border-radius: 4px;
+ text-align: center;
+ outline: 1px solid $black;
+ cursor: pointer;
+
+ img {
+ object-fit: contain;
+ }
+
+ &.active {
+ outline: 4px solid $green1;
+ }
+ }
+
+ .name {
+ @include font-roboto;
+ font-weight: 700;
+ font-size: 16px;
+ color: $black;
+ line-height: 26px;
+ text-align: center;
+ margin-top: 8px;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/routes/BrandingLegacy/index.jsx b/src/routes/BrandingLegacy/index.jsx
new file mode 100644
index 000000000..53963e7d2
--- /dev/null
+++ b/src/routes/BrandingLegacy/index.jsx
@@ -0,0 +1,186 @@
+import { navigate, redirectTo } from "@reach/router";
+import Button from "components/Button";
+import LoadingSpinner from "components/LoadingSpinner";
+import Page from "components/Page";
+import PageContent from "components/PageContent";
+import PageDivider from "components/PageDivider";
+import PageFoot from "components/PageElements/PageFoot";
+import PageH2 from "components/PageElements/PageH2";
+import Progress from "components/Progress";
+import { BUTTON_SIZE, BUTTON_TYPE } from "constants/";
+import React, { useEffect, useState } from "react";
+import { connect, useDispatch, useSelector } from "react-redux";
+import withAuthentication from "hoc/withAuthentication";
+import { triggerAutoSave } from "../../actions/autoSave";
+import { resetIntakeForm, saveBranding } from "../../actions/form";
+import { setProgressItem } from "../../actions/progress";
+import BackIcon from "../../assets/images/icon-back-arrow.svg";
+import BrandingForm from "./components/BrandingForm";
+import "./styles.module.scss";
+import { getDynamicPriceAndTimelineEstimate } from "utils/";
+import { WebsiteDesignBannerLegacy } from "../../components/Banners/WebsiteDesignBannerLegacy";
+import { ROUTES } from "../../constants";
+import { Breadcrumb } from "../../../src-ts";
+
+/**
+ * Branding Page
+ */
+const BrandingLegacy = ({ saveBranding, setProgressItem }) => {
+ const [isLoading, setLoading] = useState(false);
+ const [formData, setFormData] = useState({
+ theme: { title: "Style & Theme", option: "", value: null },
+ inspiration: [
+ {
+ website: { title: "Website Address", value: "", option: "" },
+ feedback: { title: "What Do You Like", value: "", option: "" },
+ },
+ ],
+ colorOption: { title: "Color Option", value: [], option: [] },
+ specificColor: { title: "Custom Color", option: "", value: "" },
+ fontOption: { title: "Fonts", option: "", value: -1 },
+ fontUrl: { title: "Custom Font URL", value: "", option: "" },
+ fontUsageDescription: {
+ title: "How to Use Your Fonts",
+ value: "",
+ option: "",
+ },
+ assetsUrl: { title: "Custom Assets URL", value: "" },
+ anythingToAvoid: { title: "Anything to Avoid?", option: "", value: "" },
+ allowStockOption: {
+ title: "Allow Stock Photos",
+ option: "",
+ value: null,
+ },
+ selectedDeliverableOption: {
+ title: "Final Deliverable Option",
+ option: "",
+ value: null,
+ },
+ customDeliverable: { title: "Custom Deliverable", option: "", value: "" },
+ });
+
+ const dispatch = useDispatch();
+ const workType = useSelector((state) => state.form.workType);
+ const branding = useSelector((state) => state.form.branding);
+ const currentStep = useSelector((state) => state.progress.currentStep);
+ const fullState = useSelector((state) => state);
+
+ const [firstMounted, setFirstMounted] = useState(true);
+ useEffect(() => {
+ if (!firstMounted) {
+ return;
+ }
+
+ setProgressItem(5);
+
+ if (currentStep === 0) {
+ redirectTo("/self-service/wizard");
+ }
+
+ if (branding) {
+ setFormData(branding);
+ }
+
+ setFirstMounted(false);
+
+ return () => {
+ dispatch(triggerAutoSave(true));
+ };
+ }, [currentStep, branding, dispatch, setProgressItem, firstMounted]);
+
+ const isFormValid =
+ formData?.theme?.value &&
+ formData?.selectedDeliverableOption?.value !== null &&
+ (formData?.colorOption.value.length > 0 ||
+ formData?.specificColor.value.trim() !== "") &&
+ (formData?.selectedDeliverableOption.option !== "Other" ||
+ formData?.customDeliverable.value.trim() !== "") &&
+ (formData?.fontOption.option !== null ||
+ formData?.fontUrl.value.trim() !== "");
+
+ const onBack = () => {
+ navigate("/self-service/work/new/website-design/page-details");
+ };
+
+ const onNext = () => {
+ navigate("/self-service/work/new/website-design/review");
+ saveBranding(formData);
+ setProgressItem(6);
+ };
+
+ const breadcrumbs = [
+ { url: ROUTES.DASHBOARD_PAGE, name: "My work" },
+ {
+ url: ROUTES.INTAKE_FORM,
+ name: "Start work",
+ onClick: () => {
+ dispatch(resetIntakeForm(true));
+ },
+ },
+ { url: ROUTES.WEBSITE_DESIGN_LEGACY, name: "Basic Info" },
+ { url: ROUTES.WEBSITE_DESIGN_PURPOSE_LEGACY, name: "Website purpose" },
+ { url: ROUTES.WEBSITE_DESIGN_PAGE_DETAILS_LEGACY, name: "Page details" },
+ { url: "#", name: "Branding" },
+ ];
+
+ return (
+ <>
+
+
+
+
+
+ BRANDING
+
+
+
+
+
+
+
+
+
+
+
+ >
+ );
+};
+
+const mapStateToProps = ({ form }) => form;
+
+const mapDispatchToProps = {
+ saveBranding,
+ setProgressItem,
+};
+
+export default connect(
+ mapStateToProps,
+ mapDispatchToProps
+)(withAuthentication(BrandingLegacy));
diff --git a/src/routes/BrandingLegacy/styles.module.scss b/src/routes/BrandingLegacy/styles.module.scss
new file mode 100644
index 000000000..62334703b
--- /dev/null
+++ b/src/routes/BrandingLegacy/styles.module.scss
@@ -0,0 +1,17 @@
+@import "styles/include";
+
+.footerContent {
+ display: flex;
+ width: 100%;
+ flex-direction: row;
+ justify-content: space-between;
+
+ .footer-right {
+ display: flex;
+ gap: 16px;
+ }
+}
+
+.backButtonWrapper {
+ @include backButtonWrapper;
+}
diff --git a/src/routes/Forum/index.jsx b/src/routes/Forum/index.jsx
new file mode 100644
index 000000000..2ad7ca696
--- /dev/null
+++ b/src/routes/Forum/index.jsx
@@ -0,0 +1,36 @@
+/**
+ * Forum component
+ */
+import PT from "prop-types";
+import React, { useEffect } from "react";
+import config from "../../../config";
+import "./styles.module.scss";
+
+const Forum = ({ challengeId }) => {
+ useEffect(() => {
+ const script = document.createElement("script");
+
+ window.vanilla_embed_type = config.VANILLA_EMBED_TYPE;
+ window.vanilla_category_id = challengeId;
+ script.src = config.VANILLA_EMBED_JS;
+ script.async = true;
+
+ document.body.appendChild(script);
+
+ return () => {
+ document.body.removeChild(script);
+ };
+ }, [challengeId]);
+
+ return (
+
+
+
+ );
+};
+
+Forum.propTypes = {
+ challengeId: PT.string,
+};
+
+export default Forum;
diff --git a/src/routes/Forum/styles.module.scss b/src/routes/Forum/styles.module.scss
new file mode 100644
index 000000000..b42a10f0f
--- /dev/null
+++ b/src/routes/Forum/styles.module.scss
@@ -0,0 +1,6 @@
+@import "styles/include";
+
+.forumWrapper {
+ margin-top: 32px;
+ overflow-y: hidden;
+}
diff --git a/src/routes/Home/index.jsx b/src/routes/Home/index.jsx
new file mode 100644
index 000000000..d41248d49
--- /dev/null
+++ b/src/routes/Home/index.jsx
@@ -0,0 +1,87 @@
+import { navigate } from "@reach/router";
+import Button from "components/Button";
+import LoadingSpinner from "components/LoadingSpinner";
+import { BUTTON_SIZE, BUTTON_TYPE, ROUTES } from "constants/";
+import {
+ getIsLoggedIn,
+ getIsLoggingIn,
+} from "hoc/withAuthentication/selectors";
+import { checkIfLoggedIn } from "hoc/withAuthentication/thunks";
+import React, { useCallback, useEffect, useState } from "react";
+import { connect, useDispatch, useSelector } from "react-redux";
+import WelcomeImage from "../../assets/images/welcome.png";
+import "./styles.module.scss";
+import {
+ clearAutoSavedForm,
+ clearCachedChallengeId,
+ setCookie,
+} from "../../../src/autoSaveBeforeLogin";
+import { resetIntakeForm } from "../../../src/actions/form";
+
+/**
+ * Home Page
+ */
+const Home = () => {
+ const [isLoading, setLoading] = useState(true);
+ const isLoggedIn = useSelector(getIsLoggedIn);
+ const isLoggingIn = useSelector(getIsLoggingIn);
+ const dispatch = useDispatch();
+
+ useEffect(() => {
+ dispatch(checkIfLoggedIn());
+ }, [dispatch]);
+
+ useEffect(() => {
+ if (isLoggedIn) {
+ navigate(ROUTES.DASHBOARD_PAGE);
+ } else {
+ if (!isLoggingIn) {
+ setLoading(false);
+ }
+ }
+ }, [isLoggedIn, isLoggingIn]);
+
+ const handleClick = useCallback(() => {
+ clearCachedChallengeId();
+ clearAutoSavedForm();
+ dispatch(resetIntakeForm(true));
+ navigate(ROUTES.INTAKE_FORM);
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, []);
+
+ return (
+ <>
+
+ {!isLoading && (
+
+
+
+
+
+
+
put our great talent to work for you
+
+ Amazing talent. Passionate people.
+
+ Start something great today.
+
+
+
+ CREATE WORK
+
+
+
+ )}
+ >
+ );
+};
+
+const mapStateToProps = ({ form }) => form;
+const mapDispatchToProps = {};
+
+export default connect(mapStateToProps, mapDispatchToProps)(Home);
diff --git a/src/routes/Home/styles.module.scss b/src/routes/Home/styles.module.scss
new file mode 100644
index 000000000..0402f23e1
--- /dev/null
+++ b/src/routes/Home/styles.module.scss
@@ -0,0 +1,95 @@
+@import "styles/include";
+
+.container {
+ display: flex;
+ justify-content: space-between;
+ max-width: 1920px;
+ margin: 32px;
+ background: linear-gradient(
+ 90deg,
+ #02225d 0%,
+ #002341 50.52%,
+ #002538 73.59%,
+ #002740 100%
+ ),
+ #ffffff;
+ border-radius: 8px;
+
+ @include mobile {
+ flex-direction: column;
+ align-items: center;
+ margin: 32px 12px;
+ }
+
+ .leftContent {
+ padding: 71px 32px 60px 0;
+ .welcomeImage {
+ max-height: 646px;
+
+ @include mobile {
+ max-width: 90vw;
+ }
+ }
+
+ @include mobile {
+ padding: 12px 0px;
+ }
+ }
+
+ .rightContent {
+ padding-left: 20px;
+
+ @include mobile {
+ text-align: center;
+ padding: 0;
+ margin-top: 32px;
+ }
+
+ .title {
+ @include font-barlow-condensed;
+ font-weight: 500;
+ font-size: 60px;
+ line-height: 56px;
+ padding-top: 80px;
+ text-transform: uppercase;
+ background: linear-gradient(270deg, #0ab88a 0%, #63f963 100%);
+ background-clip: text;
+ -webkit-background-clip: text;
+ -webkit-text-fill-color: transparent;
+ word-wrap: break-word;
+ padding-right: 60px;
+
+ @include mobile {
+ font-size: 24px;
+ line-height: 26px;
+ padding: 0;
+ }
+ }
+
+ .description {
+ @include font-roboto;
+ font-weight: 300;
+ font-size: 24px;
+ line-height: 32px;
+ color: $tc-white;
+ margin-top: 16px;
+ margin-left: 3px;
+ padding-right: 32px;
+
+ @include mobile {
+ font-size: 14px;
+ line-height: 18px;
+ padding-right: 0;
+ }
+ }
+
+ .createWorkButton {
+ margin-top: 24px;
+ margin-left: 2px;
+
+ @include mobile {
+ margin: 32px auto;
+ }
+ }
+ }
+}
diff --git a/src/routes/LoginPrompt/index.jsx b/src/routes/LoginPrompt/index.jsx
new file mode 100644
index 000000000..8d444d186
--- /dev/null
+++ b/src/routes/LoginPrompt/index.jsx
@@ -0,0 +1,106 @@
+import { navigate } from "@reach/router";
+import Button from "components/Button";
+import LoadingSpinner from "components/LoadingSpinner";
+import Page from "components/Page";
+import PageContent from "components/PageContent";
+import PageH2 from "components/PageElements/PageH2";
+import { BUTTON_SIZE, BUTTON_TYPE } from "constants/";
+import React, { useEffect, useState } from "react";
+import { connect } from "react-redux";
+import { setProgressItem } from "actions/progress";
+import config from "../../../config";
+import "./styles.module.scss";
+import PageFoot from "components/PageElements/PageFoot";
+import PageDivider from "components/PageDivider";
+import BackIcon from "../../assets/images/icon-back-arrow.svg";
+import { ROUTES } from "../../constants";
+
+/**
+ * Log in Page
+ */
+const LoginPrompt = ({
+ isLoggedIn,
+ setProgressItem,
+ previousPageUrl,
+ nextPageUrl,
+}) => {
+ const [isLoading, setIsLoading] = useState(false);
+
+ useEffect(() => {
+ if (isLoggedIn) {
+ navigate(nextPageUrl || ROUTES.DASHBOARD_PAGE);
+ setProgressItem(5);
+ }
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, [isLoggedIn]);
+
+ const onLogin = () => {
+ navigate(config.SIGN_IN_URL);
+ };
+
+ const onSingUp = () => {
+ navigate(config.SIGN_UP_URL);
+ };
+
+ const onBack = () => {
+ navigate(
+ previousPageUrl || "/self-service/work/new/website-design/page-details"
+ );
+ };
+
+ return (
+ <>
+
+
+
+
+
+
+ Log in or create an account
+
+
+ You are about to share secured information. To ensure your
+ security, please log in or create an account.
+
+
+
+
+ LOG IN
+
+ OR
+
+ SIGN UP
+
+
+
+
+
+
+
+
+
+
+
+ >
+ );
+};
+
+const mapStateToProps = ({ form }) => form;
+
+const mapDispatchToProps = {
+ setProgressItem,
+};
+
+export default connect(mapStateToProps, mapDispatchToProps)(LoginPrompt);
diff --git a/src/routes/LoginPrompt/styles.module.scss b/src/routes/LoginPrompt/styles.module.scss
new file mode 100644
index 000000000..2f52c3363
--- /dev/null
+++ b/src/routes/LoginPrompt/styles.module.scss
@@ -0,0 +1,40 @@
+@import "styles/include";
+
+.container {
+ display: flex;
+ justify-content: center;
+ text-align: center;
+
+ .content {
+ color: $black;
+ font-size: 16px;
+ line-height: 26px;
+
+ .loginTitle {
+ font-weight: bold;
+ }
+ }
+
+ .btn {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ margin-top: 76px;
+ font-size: 14px;
+ line-height: 14px;
+
+ .separator {
+ margin-left: 16px;
+ margin-right: 16px;
+ }
+ }
+ .footerContent {
+ width: 100%;
+ flex-direction: row;
+ justify-content: space-between;
+
+ .backButtonWrapper {
+ @include backButtonWrapper;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/routes/PageDetailsLegacy/components/PageDetailsForm/index.jsx b/src/routes/PageDetailsLegacy/components/PageDetailsForm/index.jsx
new file mode 100644
index 000000000..72a30b408
--- /dev/null
+++ b/src/routes/PageDetailsLegacy/components/PageDetailsForm/index.jsx
@@ -0,0 +1,239 @@
+/**
+ * Page Details Form component
+ */
+import FormField from "components/FormElements/FormField";
+import FormInputText from "components/FormElements/FormInputText";
+import FormInputTextArea from "components/FormElements/FormInputTextArea";
+import HelpBanner from "components/HelpBanner";
+import PageDivider from "components/PageDivider";
+import PageH3 from "components/PageElements/PageH3";
+import PageP from "components/PageElements/PageP";
+import PageRow from "components/PageElements/PageRow";
+import PageListInput from "components/PageListInput";
+import ServicePrice from "components/ServicePrice";
+import PT from "prop-types";
+import React from "react";
+import "./styles.module.scss";
+
+const PageDetailsForm = ({
+ savePageDetails,
+ listInputs,
+ setListInputs,
+ serviceType,
+ estimate,
+}) => {
+ // get an empty page item
+ const emptyPage = () => ({
+ pageName: "",
+ pageDetails: "",
+ });
+
+ // handle list input changes
+ const handleListInputChange = (listInputName, index, inputName, value) => {
+ setListInputs((listInputs) => {
+ let listInput = listInputs[listInputName];
+ let newListInput = listInput.map((item, i) => {
+ if (i !== index) return item;
+ else return { ...item, [inputName]: value };
+ });
+ const listInputUpdated = { ...listInputs, [listInputName]: newListInput };
+ savePageDetails(listInputUpdated);
+ return listInputUpdated;
+ });
+ };
+
+ // add an item to a list input
+ const addListInputItem = (listInputName) => {
+ setListInputs((listInputs) => {
+ let listInput = listInputs[listInputName];
+ let newListInput = [...listInput, emptyPage()];
+ const listInputUpdated = { ...listInputs, [listInputName]: newListInput };
+ savePageDetails(listInputUpdated);
+ return listInputUpdated;
+ });
+ };
+
+ // remove an item from list input
+ const removeListInputItem = (listInputName, index) => {
+ if (!confirm("Are you sure you want to delete this item?")) return;
+ setListInputs((listInputs) => {
+ let listInput = listInputs[listInputName];
+ let newListInput = listInput.filter((item, i) => {
+ return i !== index;
+ });
+ const listInputUpdated = { ...listInputs, [listInputName]: newListInput };
+ savePageDetails(listInputUpdated);
+ return listInputUpdated;
+ });
+ };
+
+ return (
+
+
+
+
+
+
Describe each page
+
+
+ For each page (or screen) required in your design project, please
+ provide:
+
+
+ A descriptive page name (e.g. Homepage).
+ The primary purpose of the page.
+
+ Describe all required content and functional elements. Or,
+ reference the content as provided in uploaded resource
+ documents.
+
+
+
+ Page Name
+ WalkieDoggie Homepage
+ Requirements & Details
+
+ The purpose of this screen is to welcome our customers and make
+ them feel welcome and warm. We love their dog and we want them
+ to feel it!
+
+
+
+ This page is essentially a landing page where we really want
+ them to do one core action and that’s to get started finding
+ their perfect “Walkie” which is what we call our professional
+ dog walkers.
+
+
+
+ {" "}
+ Top Navigation:
+
+ The top navigation of the website should allow a user to mouse
+ over core navigation sections. Our Services, Our Walkies, Our
+ Promise, Locations We Serve, FAQs.
+
+
+
+ In the top navigation - top right - I’d like to make sure a user
+ can “Create an Account” and if they are logged in, they would
+ see their profile image and know they are logged in.
+
+
+
+ Main Body:
+ I want to see amazing imagery choice/design here and a
+ large tagline that reads, “We Love Your Dog, Too” with a main
+ button that says “Find Your Walkie”.
+
+
+
+ On the home screen I would also like to see included: Our
+ TrustPilot Rating -{" "}
+
+ {" "}
+ https://www.trustpilot.com/{" "}
+ {" "}
+ - We have a 4.7 out of 5 rating so plz mock up how that will
+ look.
+
+
+
+ I want a badge of some sort that indicates all of our dog
+ walkers are insured.
+
+
+
+ I want to see one amazing testimonial on the screen that reads…
+ “WalkieDoggie is perfect. They are always professional and they
+ take amazing care of our dog, Beefcake.” The testimonial is from
+ “Victoria B.” from Tacoma, Washington (please use an image of a
+ young, professional female for this testimonial image).
+
+
+
+
+
+
+
+ {listInputs.pages.map((page, index) => (
+
+
+
Page {index + 1}
+ {index ? (
+
removeListInputItem("pages", index)}
+ >
+ Remove Page
+
+ ) : null}
+
+
+
+ handleListInputChange(
+ "pages",
+ index,
+ e.target.name,
+ e.target.value
+ )
+ }
+ />
+
+
+
+ handleListInputChange(
+ "pages",
+ index,
+ e.target.name,
+ e.target.value
+ )
+ }
+ />
+
+
+ ))}
+
+
+
+
+ );
+};
+
+PageDetailsForm.defaultProps = {
+ price: 0,
+ serviceType: "",
+};
+
+PageDetailsForm.propTypes = {
+ estimate: PT.shape().isRequired,
+ price: PT.string,
+ serviceType: PT.string,
+ setListInputs: PT.func,
+ listInputs: PT.arrayOf(PT.shape()),
+};
+
+export default PageDetailsForm;
diff --git a/src/routes/PageDetailsLegacy/components/PageDetailsForm/styles.module.scss b/src/routes/PageDetailsLegacy/components/PageDetailsForm/styles.module.scss
new file mode 100644
index 000000000..8cb446860
--- /dev/null
+++ b/src/routes/PageDetailsLegacy/components/PageDetailsForm/styles.module.scss
@@ -0,0 +1,68 @@
+@import "styles/include";
+
+.pageDetailsForm {
+ .title {
+ font-weight: 600;
+ color: $grey-text;
+ font-size: 20px;
+ line-height: 20px;
+ text-transform: uppercase;
+ }
+
+ .description {
+ @include font-roboto;
+ font-size: 16px;
+ line-height: 26px;
+ margin-top: 24px;
+ color: $grey-text;
+ }
+
+ .form-row {
+ align-items: flex-start;
+ }
+
+ .formFieldWrapper {
+ margin-top: 18px;
+ }
+
+ .list {
+ list-style-type: decimal;
+ list-style-position: outside;
+ margin-left: 15px;
+ }
+
+ .link {
+ cursor: pointer;
+ color: $link-blue;
+ text-decoration: underline;
+ margin-top: 20px;
+ }
+
+ .page{
+ margin-top: 38px;
+ }
+
+ .page-header {
+ display: flex;
+ justify-content: space-between;
+
+ .page-title {
+ font-size: 16px;
+ line-height: 20px;
+ font-weight: 600;
+ text-transform: uppercase;
+ color: $black;
+ margin-bottom: 16px;
+ }
+
+ .remove-page {
+ color: $green1;
+ cursor: pointer;
+
+ &:hover {
+ text-decoration: underline;
+ }
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/src/routes/PageDetailsLegacy/index.jsx b/src/routes/PageDetailsLegacy/index.jsx
new file mode 100644
index 000000000..aa0482c2e
--- /dev/null
+++ b/src/routes/PageDetailsLegacy/index.jsx
@@ -0,0 +1,159 @@
+import { navigate, redirectTo } from "@reach/router";
+import Button from "components/Button";
+import LoadingSpinner from "components/LoadingSpinner";
+import Page from "components/Page";
+import PageContent from "components/PageContent";
+import PageDivider from "components/PageDivider";
+import PageFoot from "components/PageElements/PageFoot";
+import PageH2 from "components/PageElements/PageH2";
+import Progress from "components/Progress";
+import { BUTTON_SIZE, BUTTON_TYPE } from "constants/";
+import React, { useEffect, useRef, useState } from "react";
+import { connect, useDispatch, useSelector } from "react-redux";
+import { getDynamicPriceAndTimelineEstimate } from "utils/";
+import { triggerAutoSave } from "../../actions/autoSave";
+import { resetIntakeForm, savePageDetails } from "../../actions/form";
+import { setProgressItem } from "../../actions/progress";
+import BackIcon from "../../assets/images/icon-back-arrow.svg";
+import PageDetailsForm from "./components/PageDetailsForm";
+import { WebsiteDesignBannerLegacy } from "../../components/Banners/WebsiteDesignBannerLegacy";
+import "./styles.module.scss";
+import { ROUTES } from "../../constants";
+import { Breadcrumb } from "../../../src-ts";
+
+/**
+ * Page Details Page
+ */
+const PageDetailsLegacy = ({ savePageDetails, setProgressItem }) => {
+ const [isLoading, setLoading] = useState(false);
+ const [listInputs, setListInputs] = useState({
+ pages: [
+ {
+ pageName: "",
+ pageDetails: "",
+ },
+ ],
+ });
+ const dispatch = useDispatch();
+ const workType = useSelector((state) => state.form.workType);
+ const pageDetails = useSelector((state) => state.form.pageDetails);
+ const currentStep = useSelector((state) => state.progress.currentStep);
+ const fullState = useSelector((state) => state);
+ const estimate = getDynamicPriceAndTimelineEstimate(fullState);
+
+ const onBack = () => {
+ navigate("/self-service/work/new/website-design/website-purpose");
+ };
+
+ const [firstMounted, setFirstMounted] = useState(true);
+ useEffect(() => {
+ if (!firstMounted) {
+ return;
+ }
+
+ setProgressItem(4);
+
+ if (currentStep === 0) {
+ redirectTo("/self-service/wizard");
+ }
+
+ if (pageDetails) {
+ setListInputs(pageDetails);
+ }
+
+ setFirstMounted(false);
+
+ return () => {
+ dispatch(triggerAutoSave(true));
+ };
+ }, [currentStep, pageDetails, dispatch, setProgressItem, firstMounted]);
+
+ const onNext = () => {
+ navigate("/self-service/work/new/website-design/login-prompt");
+ savePageDetails(listInputs);
+ setProgressItem(5);
+ };
+
+ const isFormValid = () => {
+ let isValid = true;
+ (listInputs?.pages || []).forEach((item) => {
+ if (!item.pageName.length || !item.pageDetails.length) {
+ isValid = false;
+ }
+ });
+ return isValid;
+ };
+
+ const breadcrumbs = [
+ { url: ROUTES.DASHBOARD_PAGE, name: "My work" },
+ {
+ url: ROUTES.INTAKE_FORM,
+ name: "Start work",
+ onClick: () => {
+ dispatch(resetIntakeForm(true));
+ },
+ },
+ { url: ROUTES.WEBSITE_DESIGN_LEGACY, name: "Basic Info" },
+ { url: ROUTES.WEBSITE_DESIGN_PURPOSE_LEGACY, name: "Website purpose" },
+ { url: "#", name: "Page details" },
+ ];
+
+ return (
+ <>
+
+
+
+
+
+ PAGE DETAILS
+
+
+
+
+
+
+
+
+
+
+
+
+ >
+ );
+};
+
+const mapStateToProps = ({ form }) => form;
+
+const mapDispatchToProps = {
+ savePageDetails,
+ setProgressItem,
+};
+
+export default connect(mapStateToProps, mapDispatchToProps)(PageDetailsLegacy);
diff --git a/src/routes/PageDetailsLegacy/styles.module.scss b/src/routes/PageDetailsLegacy/styles.module.scss
new file mode 100644
index 000000000..62334703b
--- /dev/null
+++ b/src/routes/PageDetailsLegacy/styles.module.scss
@@ -0,0 +1,17 @@
+@import "styles/include";
+
+.footerContent {
+ display: flex;
+ width: 100%;
+ flex-direction: row;
+ justify-content: space-between;
+
+ .footer-right {
+ display: flex;
+ gap: 16px;
+ }
+}
+
+.backButtonWrapper {
+ @include backButtonWrapper;
+}
diff --git a/src/routes/Products/DataAdvisory/index.jsx b/src/routes/Products/DataAdvisory/index.jsx
new file mode 100644
index 000000000..4c6188d07
--- /dev/null
+++ b/src/routes/Products/DataAdvisory/index.jsx
@@ -0,0 +1,64 @@
+import { Router } from "@reach/router";
+import React from "react";
+import Review from "../../Review";
+import ThankYou from "../../ThankYou";
+import LoginPrompt from "../../LoginPrompt";
+import BasicInfo from "../components/BasicInfo";
+import config from "../../../../config";
+import DataAdvisoryIcon from "../../../assets/images/data-advisory-icon.svg";
+import HelpBanner from "components/HelpBanner";
+import FeaturedWorkTypeBanner from "../../../components/Banners/FeaturedWorkTypeBanner";
+import { ROUTES, webWorkTypes } from "../../../constants/index";
+import { WorkType } from "../../../../src-ts";
+
+export default function DataAdvisory({ isLoggedIn }) {
+ const dataAdvisory = webWorkTypes.find(
+ (workType) => workType.type === WorkType.problem
+ );
+
+ const { title, subTitle, helperBannerTitle, helperBannerContent } =
+ dataAdvisory;
+
+ return (
+
+
+
+
+ }
+ secondaryBanner={
+
+ {helperBannerContent}
+
+ }
+ path="/review"
+ previousPageUrl="/self-service/work/new/data-advisory/basic-info"
+ nextPageUrl={
+ isLoggedIn
+ ? "/self-service/work/new/data-advisory/thank-you"
+ : config.SIGN_IN_URL
+ }
+ icon={ }
+ showIcon
+ workItemConfig={dataAdvisory}
+ breadcrumb={dataAdvisory.breadcrumbs.review}
+ />
+
+
+ );
+}
diff --git a/src/routes/Products/DataExploration/index.jsx b/src/routes/Products/DataExploration/index.jsx
new file mode 100644
index 000000000..baea2090d
--- /dev/null
+++ b/src/routes/Products/DataExploration/index.jsx
@@ -0,0 +1,64 @@
+import { Router } from "@reach/router";
+import React from "react";
+import Review from "../../Review";
+import ThankYou from "../../ThankYou";
+import LoginPrompt from "../../LoginPrompt";
+import BasicInfo from "../components/BasicInfo";
+import config from "../../../../config";
+import DataExplorationIcon from "../../../assets/images/data-exploration-icon.svg";
+import HelpBanner from "components/HelpBanner";
+import FeaturedWorkTypeBanner from "../../../components/Banners/FeaturedWorkTypeBanner";
+import { webWorkTypes } from "../../../constants/index";
+import { WorkType } from "../../../../src-ts";
+
+export default function DataExploration({ isLoggedIn }) {
+ const dataExploration = webWorkTypes.find(
+ (workType) => workType.type === WorkType.data
+ );
+
+ const { title, subTitle, helperBannerTitle, helperBannerContent } =
+ dataExploration;
+
+ return (
+
+
+
+
+ }
+ secondaryBanner={
+
+ {helperBannerContent}
+
+ }
+ path="/review"
+ previousPageUrl="/self-service/work/new/data-exploration/basic-info"
+ nextPageUrl={
+ isLoggedIn
+ ? "/self-service/work/new/data-exploration/thank-you"
+ : config.SIGN_IN_URL
+ }
+ icon={ }
+ showIcon
+ workItemConfig={dataExploration}
+ breadcrumb={dataExploration.breadcrumbs.review}
+ />
+
+
+ );
+}
diff --git a/src/routes/Products/FindMeData/index.jsx b/src/routes/Products/FindMeData/index.jsx
new file mode 100644
index 000000000..6c698a439
--- /dev/null
+++ b/src/routes/Products/FindMeData/index.jsx
@@ -0,0 +1,64 @@
+import { Router } from "@reach/router";
+import React from "react";
+import Review from "../../Review";
+import ThankYou from "../../ThankYou";
+import LoginPrompt from "../../LoginPrompt";
+import BasicInfo from "../components/BasicInfo";
+import config from "../../../../config";
+import FindMeDataIcon from "../../../assets/images/find-me-data-icon.svg";
+import HelpBanner from "components/HelpBanner";
+import { webWorkTypes } from "../../../constants/index";
+import FeaturedWorkTypeBanner from "../../../components/Banners/FeaturedWorkTypeBanner";
+import { WorkType } from "../../../../src-ts";
+
+export default function FindMeData({ isLoggedIn }) {
+ const findMeData = webWorkTypes.find(
+ (workType) => workType.type === WorkType.findData
+ );
+
+ const { title, subTitle, helperBannerTitle, helperBannerContent } =
+ findMeData;
+
+ return (
+
+
+
+
+ }
+ secondaryBanner={
+
+ {helperBannerContent}
+
+ }
+ path="/review"
+ previousPageUrl="/self-service/work/new/find-me-data/basic-info"
+ nextPageUrl={
+ isLoggedIn
+ ? "/self-service/work/new/find-me-data/thank-you"
+ : config.SIGN_IN_URL
+ }
+ icon={ }
+ showIcon
+ workItemConfig={findMeData}
+ breadcrumb={findMeData.breadcrumbs.review}
+ />
+
+
+ );
+}
diff --git a/src/routes/Products/WebsiteDesign/index.jsx b/src/routes/Products/WebsiteDesign/index.jsx
new file mode 100644
index 000000000..585b4c3db
--- /dev/null
+++ b/src/routes/Products/WebsiteDesign/index.jsx
@@ -0,0 +1,64 @@
+import { Router } from "@reach/router";
+import React from "react";
+import Review from "../../Review";
+import ThankYou from "../../ThankYou";
+import LoginPrompt from "../../LoginPrompt";
+import BasicInfo from "../components/BasicInfo";
+import config from "../../../../config";
+import DataExplorationIcon from "../../../assets/images/data-exploration-icon.svg";
+import HelpBanner from "components/HelpBanner";
+import FeaturedWorkTypeBanner from "../../../components/Banners/FeaturedWorkTypeBanner";
+import { webWorkTypes } from "../../../constants/index";
+import { WorkType } from "../../../../src-ts";
+
+export default function WebsiteDesign({ isLoggedIn }) {
+ const websiteDesign = webWorkTypes.find(
+ (workType) => workType.type === WorkType.design
+ );
+
+ const { title, subTitle, helperBannerTitle, helperBannerContent } =
+ websiteDesign;
+
+ return (
+
+
+
+
+ }
+ secondaryBanner={
+
+ {helperBannerContent}
+
+ }
+ path="/review"
+ previousPageUrl="/self-service/work/new/website-design-new/basic-info"
+ nextPageUrl={
+ isLoggedIn
+ ? "/self-service/work/new/website-design-new/thank-you"
+ : config.SIGN_IN_URL
+ }
+ icon={ }
+ showIcon
+ workItemConfig={websiteDesign}
+ breadcrumb={websiteDesign.breadcrumbs.review}
+ />
+
+
+ );
+}
diff --git a/src/routes/Products/WebsiteDesignLegacy/index.jsx b/src/routes/Products/WebsiteDesignLegacy/index.jsx
new file mode 100644
index 000000000..e0f611c64
--- /dev/null
+++ b/src/routes/Products/WebsiteDesignLegacy/index.jsx
@@ -0,0 +1,34 @@
+import { Router } from "@reach/router";
+import React from "react";
+import ReviewLegacy from "../../ReviewLegacy";
+import ThankYou from "../../ThankYou";
+import LoginPrompt from "../../LoginPrompt";
+import BasicInfoLegacy from "../../BasicInfoLegacy";
+import BrandingLegacy from "../../BrandingLegacy";
+import PageDetailsLegacy from "../../PageDetailsLegacy";
+import WebsitePurposeLegacy from "../../WebsitePurposeLegacy";
+import WebsiteDesignBannerLegacy from "../../../components/Banners/WebsiteDesignBannerLegacy";
+
+export default function WebsiteDesignLegacy({ isLoggedIn }) {
+ return (
+
+
+
+
+
+
+ }
+ showProgress
+ />
+
+
+ );
+}
diff --git a/src/routes/Products/components/BasicInfo/index.jsx b/src/routes/Products/components/BasicInfo/index.jsx
new file mode 100644
index 000000000..38bf2e956
--- /dev/null
+++ b/src/routes/Products/components/BasicInfo/index.jsx
@@ -0,0 +1,331 @@
+import React, { useEffect, useState } from "react";
+import { connect, useSelector, useDispatch } from "react-redux";
+import { navigate } from "@reach/router";
+import _ from "lodash";
+import Button from "components/Button";
+import LoadingSpinner from "components/LoadingSpinner";
+import Page from "components/Page";
+import PageContent from "components/PageContent";
+import PageDivider from "components/PageDivider";
+import PageFoot from "components/PageElements/PageFoot";
+import {
+ BUTTON_SIZE,
+ BUTTON_TYPE,
+ PageOptions,
+ PrimaryDataChallengeOptions,
+} from "constants/";
+import {
+ saveBasicInfo,
+ toggleSupportModal,
+ savePageDetails,
+ saveWorkType,
+ resetIntakeForm,
+} from "../../../../actions/form";
+import { triggerAutoSave, triggerCookieClear } from "../../../../actions/autoSave";
+import { setProgressItem } from "../../../../actions/progress";
+import BackIcon from "../../../../assets/images/icon-back-arrow.svg";
+import SaveForLaterIcon from "../../../../assets/images/save-for-later-icon.svg";
+import { getUserProfile } from "../../../../thunks/profile";
+
+import BasicInfoForm from "../BasicInfoForm";
+import "./styles.module.scss";
+import {
+ getDynamicPriceAndTimeline,
+ getDataAdvisoryPriceAndTimelineEstimate,
+ currencyFormat,
+ getDataExplorationPriceAndTimelineEstimate,
+ getFindMeDataPriceAndTimelineEstimate,
+ getWebsiteDesignPriceAndTimelineEstimate,
+} from "utils/";
+import FeaturedWorkTypeBanner from "../../../../components/Banners/FeaturedWorkTypeBanner";
+
+import {
+ Breadcrumb,
+ ContactSupportModal,
+ WorkType,
+} from "../../../../../src-ts";
+
+/**
+ * Basic Info Page
+ */
+const BasicInfo = ({
+ saveBasicInfo,
+ saveWorkType,
+ setProgressItem,
+ toggleSupportModal,
+ workItemConfig,
+ isLoggedIn,
+ triggerCookieClear,
+ breadcrumb = [],
+}) => {
+ const defaultFormData = {
+ projectTitle: { title: "Project Title", option: "", value: "" },
+ description: { title: "Description", option: "", value: "" },
+ assetsUrl: { title: "Shareable URL Link(s)", value: "" },
+ assetsDescription: { title: "About Your Assets", value: "" },
+ goals: { title: "Goals & Data Description", option: "", value: null },
+ analysis: { title: "What Data Do You Need?", option: "", value: "" },
+ feedback: { title: "What Data Do You like?", option: "", value: "" },
+ yourIndustry: { title: "Your Industry", option: "", value: "" },
+ colorOption: { title: "Color Option", value: [], option: [] },
+ likedStyles: { title: "Liked Styles", value: [], option: [] },
+ dislikedStyles: { title: "Disliked Styles", value: [], option: [] },
+ specificColor: { title: "Custom Color", option: "", value: "" },
+ primaryDataChallenge: {
+ title: "Primary Data Challenge",
+ option: PrimaryDataChallengeOptions[0].label,
+ value: 0,
+ },
+ primaryDataChallengeOther: {
+ title: "Primary Data Challenge (Other Option)",
+ option: "",
+ value: "",
+ },
+ inspiration: [
+ {
+ website: { title: "Website Address", value: "", option: "" },
+ feedback: { title: "What Do You Like", value: "", option: "" },
+ },
+ ],
+ sampleData: { title: "Sample Data", option: "", value: "" },
+ };
+
+ const [formData, setFormData] = useState(defaultFormData);
+ const isFindMeData = workItemConfig.type === WorkType.findData;
+ const isWebsiteDesign = workItemConfig.type === WorkType.design;
+ const isWebsiteDesignFormValid = formData?.projectTitle?.value?.trim().length;
+ const isDataExploration = workItemConfig.type === WorkType.data;
+ const isDataAdvisory = workItemConfig.type === WorkType.problem;
+ const isDataExplorationFormValid =
+ formData?.projectTitle?.value?.trim().length &&
+ formData?.goals?.value?.trim().length;
+ const isDataAdvisoryFormValid =
+ formData?.projectTitle?.value?.trim().length &&
+ formData?.goals?.value?.trim().length;
+ const isFindMeDataFormValid =
+ formData?.projectTitle?.value?.trim().length &&
+ formData?.analysis?.value?.trim().length &&
+ ((formData?.primaryDataChallenge?.value >= 0 &&
+ formData?.primaryDataChallenge?.value < 3) ||
+ (formData?.primaryDataChallenge?.value === 3 &&
+ formData?.primaryDataChallengeOther?.value?.trim().length)) &&
+ formData?.sampleData?.value?.trim().length;
+
+ let isFormValid;
+ if (isDataExploration) {
+ isFormValid = isDataExplorationFormValid;
+ } else if (isFindMeData) {
+ isFormValid = isFindMeDataFormValid;
+ } else if (isWebsiteDesign) {
+ isFormValid = isWebsiteDesignFormValid;
+ } else if (isDataAdvisory) {
+ isFormValid = isDataAdvisoryFormValid;
+ }
+
+ const dispatch = useDispatch();
+ const [isLoading, setLoading] = useState(false);
+ const workType = useSelector((state) => state.form.workType);
+ const basicInfo = useSelector((state) => state.form.basicInfo);
+ const currentStep = useSelector((state) => state.progress.currentStep);
+ const pageDetails = useSelector((state) => state.form.pageDetails);
+ const showSupportModal = useSelector((state) => state.form.showSupportModal);
+ const challenge = useSelector((state) => state.challenge);
+
+ const estimate =
+ workType?.selectedWorkType === WorkType.design
+ ? getWebsiteDesignPriceAndTimelineEstimate()
+ : isDataExploration
+ ? getDataExplorationPriceAndTimelineEstimate()
+ : isDataAdvisory
+ ? getDataAdvisoryPriceAndTimelineEstimate()
+ : getFindMeDataPriceAndTimelineEstimate();
+
+ const onBack = () => {
+ dispatch(triggerCookieClear());
+ saveBasicInfo(defaultFormData);
+ navigate("/self-service/wizard");
+ };
+
+ const baseUrl = `/self-service/work/new/${workItemConfig.basePath}`;
+
+ const onNext = () => {
+ setProgressItem(isLoggedIn ? 7 : 5);
+ saveBasicInfo(formData);
+ dispatch(triggerAutoSave(true, true));
+ navigate(isLoggedIn ? `${baseUrl}/review` : `${baseUrl}/login-prompt`);
+ };
+
+ const [firstMounted, setFirstMounted] = useState(true);
+
+ useEffect(() => {
+ if (!firstMounted) {
+ return;
+ }
+
+ setProgressItem(2);
+
+ if (currentStep === 0) {
+ saveWorkType({
+ selectedWorkType: workItemConfig.type,
+ selectedWorkTypeDetail: workItemConfig.title,
+ });
+ dispatch(triggerAutoSave(true));
+ }
+
+ if (!!basicInfo?.projectTitle?.value?.length) {
+ setFormData(basicInfo);
+ }
+
+ setFirstMounted(false);
+
+ return () => {
+ dispatch(triggerAutoSave(true, false));
+ };
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, [basicInfo, currentStep, dispatch, setProgressItem, firstMounted]);
+
+ useEffect(() => {
+ if (
+ formData?.primaryDataChallenge?.value !== 3 &&
+ formData?.primaryDataChallengeOther?.value?.trim().length > 0
+ ) {
+ setFormData({
+ ...formData,
+ primaryDataChallengeOther: {
+ ...formData["primaryDataChallengeOther"],
+ option: "",
+ value: "",
+ },
+ });
+ } else {
+ if (formData) {
+ saveBasicInfo(formData);
+ }
+ }
+ }, [formData, formData.selectedDevices, saveBasicInfo]);
+
+ const onShowSupportModal = () => {
+ toggleSupportModal(true);
+ };
+ const onHideSupportModal = () => {
+ toggleSupportModal(false);
+ };
+
+ useEffect(() => {
+ dispatch(getUserProfile());
+ }, [dispatch]);
+
+ const saveForm = (autoSave) => {
+ saveBasicInfo(formData);
+ dispatch(triggerAutoSave(autoSave, true));
+ if (autoSave) navigate("/self-service");
+ };
+
+ const onClickBreadcrumbItem = (item) => {
+ if (item.name === "Start work") {
+ dispatch(resetIntakeForm(true));
+ dispatch(triggerCookieClear());
+ saveBasicInfo(defaultFormData);
+ }
+ };
+
+ return (
+ <>
+
+
+
+ ({
+ ...item,
+ onClick: onClickBreadcrumbItem,
+ }))}
+ />
+
+
+ ({
+ ...o,
+ value: i === (pageDetails?.pages?.length || 0) - 1,
+ label: `${o.label} (${currencyFormat(
+ getDynamicPriceAndTimeline(
+ i + 1,
+ formData?.selectedDevice?.value?.length || 0
+ ).total
+ )})`,
+ }))}
+ estimate={estimate}
+ formData={formData}
+ serviceType={workType?.selectedWorkTypeDetail}
+ onFormUpdate={setFormData}
+ numOfPages={pageDetails?.pages?.length || 0}
+ onShowSupportModal={onShowSupportModal}
+ bannerData={workItemConfig}
+ saveForm={saveForm}
+ />
+
+
+
+
+
+
+ {isLoggedIn && (
+ saveForm(true)}
+ >
+
+ SAVE FOR LATER
+
+ )}
+
+
+ REVIEW & SUBMIT
+
+
+
+
+
+
+
+ >
+ );
+};
+
+const mapStateToProps = ({ form }) => form;
+
+const mapDispatchToProps = {
+ saveBasicInfo,
+ setProgressItem,
+ savePageDetails,
+ toggleSupportModal,
+ saveWorkType,
+ triggerCookieClear,
+};
+
+export default connect(mapStateToProps, mapDispatchToProps)(BasicInfo);
diff --git a/src/routes/Products/components/BasicInfo/styles.module.scss b/src/routes/Products/components/BasicInfo/styles.module.scss
new file mode 100644
index 000000000..1973bea30
--- /dev/null
+++ b/src/routes/Products/components/BasicInfo/styles.module.scss
@@ -0,0 +1,108 @@
+@import "../../../../../src-ts/lib/styles";
+@import "styles/include";
+
+.footerContent {
+ display: flex;
+ width: 100%;
+ flex-direction: row;
+ justify-content: space-between;
+
+ @include ltemd {
+ flex-direction: row;
+ gap: 16px;
+ }
+
+ .footer-right {
+ display: flex;
+ gap: 16px;
+
+ .rotated {
+ transform: rotate(-90deg);
+ }
+
+ .save-icon {
+ display: none;
+ }
+
+ @include mobile {
+ flex-direction: row;
+ }
+
+ button {
+ &.saveForLater {
+ span {
+ @include ltemd {
+ display: none;
+ }
+ }
+
+ svg {
+ @include gtelg {
+ display: none;
+ }
+ }
+ }
+
+ &.reviewAndSubmit {
+
+ .desktop {
+ @include ltemd {
+ display: none;
+ }
+ }
+ }
+ }
+ }
+}
+
+.container {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+
+.backButtonWrapper {
+ @include backButtonWrapper;
+ margin-top: 0;
+}
+
+@include mobile {
+
+ button {
+ svg {
+ display: block !important;
+
+ @include gtelg {
+ display: inline-block !important;
+ }
+ }
+ }
+
+ .save-button-text {
+ display: none;
+ }
+
+ .review-button-text {
+ display: none;
+ }
+}
+
+@include mobile {
+
+ button {
+ svg {
+ display: block !important;
+
+ @include gtelg {
+ display: inline-block !important;
+ }
+ }
+ }
+
+ .save-button-text {
+ display: none;
+ }
+
+ .review-button-text {
+ display: none;
+ }
+}
\ No newline at end of file
diff --git a/src/routes/Products/components/BasicInfoForm/index.jsx b/src/routes/Products/components/BasicInfoForm/index.jsx
new file mode 100644
index 000000000..b0776ccb8
--- /dev/null
+++ b/src/routes/Products/components/BasicInfoForm/index.jsx
@@ -0,0 +1,926 @@
+/* eslint-disable react-hooks/exhaustive-deps */
+/**
+ * Basic Info Form component
+ */
+import FormField from "../../../../components/FormElements/FormField";
+import FormInputText from "../../../../components/FormElements/FormInputText";
+import HelpBanner from "../../../../components/HelpBanner";
+import HelpIcon from "../../../../components/HelpIcon";
+import PageDivider from "../../../../components/PageDivider";
+import PageP from "../../../../components/PageElements/PageP";
+import PageRow from "../../../../components/PageElements/PageRow";
+import RadioButton from "../../../../components/RadioButton";
+import FormInputTextArea from "../../../../components/FormElements/FormInputTextArea";
+import ServicePrice from "../../../../components/ServicePrice";
+// TODO: Move this component to /components
+import ColorOptions from "../../../BrandingLegacy/components/ColorOptions";
+import { HELP_BANNER } from "../../../../constants/";
+import PT from "prop-types";
+import _ from "lodash";
+import React, { useEffect, useState } from "react";
+import DataExplorationIcon from "../../../../assets/images/data-exploration-icon.svg";
+import FindMeDataIcon from "../../../../assets/images/find-me-data-icon.svg";
+import AddWebsiteIcon from "../../../../assets/images/add-website-icon.svg";
+import StylesOptionsModal from "../StyleOptionsModal";
+import "./styles.module.scss";
+import {
+ PrimaryDataChallengeOptions,
+ ColorOptionsItems,
+} from "../../../../constants";
+import StyleOptions from "../StyleOptions";
+import { WorkType, WorkTypeCategoryDesignIcon } from "../../../../../src-ts";
+
+const BasicInfoForm = ({
+ formData,
+ serviceType,
+ onFormUpdate,
+ onShowSupportModal,
+ estimate,
+ bannerData,
+ saveForm,
+}) => {
+ const handleInputChange = (name, value, option = "") => {
+ onFormUpdate({ ...formData, [name]: { ...formData[name], option, value } });
+ };
+ const [primaryDataChallenge, setPrimaryDataChallenge] = useState(
+ PrimaryDataChallengeOptions
+ );
+ const [selectedStyleOption, setSelectedStyleOption] = useState(null);
+
+ let selectedColor = formData.colorOption;
+
+ const {
+ title,
+ type,
+ helperBannerTitle,
+ helperBannerContent,
+ aboutBannerTitle,
+ aboutBannerContent,
+ } = bannerData;
+
+ const isDataExploration = type === WorkType.data;
+ const isDataAdvisory = type === WorkType.problem;
+ const isFindMeData = type === WorkType.findData;
+ const isWebsiteDesign = type === WorkType.design;
+ const isOtherOptionSelected = formData?.primaryDataChallenge?.value !== 3;
+
+ const handleArrayInputChange = (index, name, key, value, option = null) => {
+ onFormUpdate((formData) => {
+ const newFormData = {
+ ...formData,
+ };
+
+ if (!newFormData[name]) {
+ newFormData[name] = [
+ {
+ website: { name, value, option: option ? option : value },
+ feedback: { name, value, option: option ? option : value },
+ },
+ ];
+ }
+
+ newFormData[name][index][key] = {
+ name,
+ value,
+ option: option ? option : value,
+ };
+
+ return newFormData;
+ });
+ };
+
+ const addWebsite = () => {
+ onFormUpdate((formData) => {
+ const newFormData = {
+ ...formData,
+ inspiration: [
+ ...(formData.inspiration || []),
+ {
+ website: { name: "Website", value: "", option: "" },
+ feedback: { name: "Feedback", value: "", option: "" },
+ },
+ ],
+ };
+
+ return newFormData;
+ });
+ };
+
+ const removeWebsite = (index) => {
+ onFormUpdate((formData) => {
+ const newFormData = {
+ ...formData,
+ };
+ newFormData.inspiration.splice(index, 1);
+
+ return newFormData;
+ });
+ };
+
+ useEffect(() => {
+ const itemSelected = formData?.primaryDataChallenge;
+
+ if (itemSelected?.option && primaryDataChallenge[0]) {
+ const newDeliverableOptions = primaryDataChallenge.map((o) => {
+ o.value = o.label === itemSelected.option;
+ return o;
+ });
+ setPrimaryDataChallenge(newDeliverableOptions);
+ }
+
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, [formData.primaryDataChallenge]);
+
+ useEffect(() => {
+ if (
+ isOtherOptionSelected &&
+ formData?.primaryDataChallengeOther?.value?.trim().length
+ ) {
+ handleInputChange("primaryDataChallengeOther", "", "");
+ }
+
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, [primaryDataChallenge, setPrimaryDataChallenge]);
+
+ let servicePriceIcon;
+ switch (title) {
+ case WorkType.data:
+ case WorkType.problem:
+ servicePriceIcon = ;
+ break;
+ case WorkType.findData:
+ servicePriceIcon = ;
+ break;
+ case WorkType.design:
+ servicePriceIcon = ;
+ break;
+ default:
+ break;
+ }
+
+ return (
+
+
+
+ {helperBannerContent}
+
+
+
+ {aboutBannerContent}
+
+
+
+
+
+
+
PROJECT TITLE
+ {isWebsiteDesign && (
+
+ Give your project a descriptive title. This is the name designers
+ will see when looking for your work.
+
+ )}
+ {(isDataExploration || isFindMeData || isDataAdvisory) && (
+
+ Give your project a descriptive title. This is what the data
+ scientists will see when looking for your work.
+
+ )}
+
+
+
+
+
+ handleInputChange(e.target.name, e.target.value, e.target.value)
+ }
+ onBlur={() => saveForm(false, true)}
+ />
+
+
+
+
+
+
+ {isDataExploration && (
+ <>
+
+
+
Share Your Data (optional)
+
+ Add links (separate multiple links with commas) or upload your
+ data files here. Not ready or able to share? No problem, we'll
+ work with you on that later.
+
+
+
+
+
+
+
+ handleInputChange(
+ e.target.name,
+ e.target.value,
+ e.target.value
+ )
+ }
+ />
+
+
+
+
+
+
+
+
+
+
{"what would you like to learn?"}
+
+ Describe your data and what you would like to learn about it. If
+ you have a formal problem statement, please share it.
+
+
+
+
+ I spend money on marketing for my website, but it's hard to
+ know which marketing option works best. I make money from
+ advertising, so the more people that visit my site and engage
+ with something, the more ad money I can make. I shared the
+ reports I have from the past year for each of my 3 marketing
+ channels. I'd like to know how that data can help understand
+ where to focus my marketing spend.
+
+
+
+
+
+
+
+ handleInputChange(
+ e.target.name,
+ e.target.value,
+ e.target.value
+ )
+ }
+ styleName={"text-area"}
+ name="goals"
+ placeholder={"Enter your goals and descriptions here"}
+ />
+
+
+
+ >
+ )}
+
+ {isFindMeData && (
+ <>
+
+
+
{"What Data Do You Need?"}
+
+ Briefly describe the analysis you want to do, and the type of
+ data you're looking for to do it. Be sure to include any
+ critical data requirements, such as specific geographies,
+ demographics, date ranges and/or key variables needed for your
+ analysis.{" "}
+
+
+
+
+ I'm a real estate investor & want to diversify into other
+ cities in Texas. Currently, we only invest in Dallas Fort
+ Worth. We're looking for 3-5 other cities in Texas to invest.
+ I'd like to evaluate rental demand and occupancy rates,
+ property price vs. avg rental payments, job and population
+ growth compared to state and national averages, and the trends
+ of renter-occupied households compared to homeowners. I think
+ there's data on sites like{" "}
+
+ {" "}
+ zillow.com
+ {" "}
+ and{" "}
+
+ {" "}
+ hotpads.com
+
+ , but it's hard to find and organize.
+
+
+
+ Not sure what data you need? Consider{" "}
+
+ {" "}
+ Problem Statement & Data Advisory
+ {" "}
+ to get clarity on the best data & approach for your goals.
+
+
+
+
+
+
+
+ handleInputChange(
+ e.target.name,
+ e.target.value,
+ e.target.value
+ )
+ }
+ styleName={"text-area"}
+ name="analysis"
+ placeholder={
+ "Describe your analysis goal and data requirements"
+ }
+ />
+
+
+
+
+
+
+
+
+
{"Primary Data Challenge"}
+
+ Select the primary data challenge you're facing.
+
+
+
+
+ {
+ const selectedOption = items.findIndex((item) => item.value);
+ const foundOption = items.find((item) => item.value);
+ handleInputChange(
+ "primaryDataChallenge",
+ selectedOption,
+ foundOption.label
+ );
+ }}
+ size="lg"
+ options={primaryDataChallenge}
+ />
+
+
+
+ handleInputChange(
+ e.target.name,
+ e.target.value,
+ e.target.value
+ )
+ }
+ disabled={isOtherOptionSelected}
+ />
+
+
+
+
+
+
+
+
+
Sample Data
+
+ Sample data helps us understand your data needs. Often this is a
+ simple CSV/Excel table that shows the data labels (usually the
+ title of each column or row) and two or more rows of example
+ input data. Example: FName is a data label, 'Ankit' is input
+ data.
+
+
+
+
+
+
+
+ handleInputChange(
+ e.target.name,
+ e.target.value,
+ e.target.value
+ )
+ }
+ />
+
+
+
+
+ >
+ )}
+
+ {isDataAdvisory && (
+ <>
+
+
+
{"what’s your goal?"}
+
+ Describe what you want to do or learn with the help of data
+ science. What will this information or ability help improve?
+ Keep in mind that data science typically answers a question.
+ Good questions are specific, measurable and clarify important
+ context. This ensures that when your question is answered, you
+ learn something valuable and actionable.
+
+
+
+
+ How can I increase profit? How can I get more customers? How
+ can I do computer vision? These questions alone are too vague.
+ Which piece of equipment is going to fail first? Which of my
+ marketing channels produces the most customers per dollar? How
+ can I automatically review pictures or documents to for
+ specific content? These questions along with relevant data
+ and/or context enable our experts to shape your question into
+ something actionable. Don't worry, we'll help you along the
+ way. So let's get started!
+
+
+
+
+
+
+
+ handleInputChange(
+ e.target.name,
+ e.target.value,
+ e.target.value
+ )
+ }
+ styleName={"text-area"}
+ name="goals"
+ placeholder={"Describe your goal"}
+ />
+
+
+
+
+
+
+
+
+
What data do you have?
+
+ The data you have available helps determine your data science
+ approach. Briefly describe the data you have in mind for your
+ project. What is it and how do you use it today? How much do you
+ have, and how/how often do you get more? Once you've described
+ the data, please upload a sample.
+
+
+ No data?
+
+ No problem. Based on your goals we'll recommend the type(s)
+ of data you need.
+
+
+
+ Can't share/upload?
+
+ Try sharing a sample. Samples can be just the headers,
+ labels or titles of your data set. Our experts need to
+ understand the type, volume and structure of your data, not
+ the contents themselves.
+
+
+
+
+
+
+
+
+
+ handleInputChange(
+ e.target.name,
+ e.target.value,
+ e.target.value
+ )
+ }
+ />
+
+
+
+
+ handleInputChange(
+ e.target.name,
+ e.target.value,
+ e.target.value
+ )
+ }
+ styleName={"text-area"}
+ name="assetsDescription"
+ placeholder={"Describe your data"}
+ />
+
+
+
+ >
+ )}
+
+ {isWebsiteDesign && (
+ <>
+
+
+
{"Description"}
+
+ What is the purpose of your website? What do you want visitors
+ to be able to do, e.g., see your work? Contact you? You should
+ include a general description as well as goals of the website.
+ You may also describe your audience and what you would like them
+ to do at your website.{" "}
+
+
+
+
+
+ I would like a design for a dog walking website that allows
+ visitors to select dog walkers and schedule dog walking
+ appointments.
+
+
+ The audience for my website will be dog owners. As a dog
+ owner, I want someone trustworthy to walk my dog, so he
+ feels loved while I’m at work.
+
+
+ Home Page:
+ I would like to see a landing screen to welcome our
+ customers and make them feel welcome and warm. We love their
+ dog and we want them to feel it! We really want our audience
+ to do one core action and that’s to get started finding
+ their perfect “Walkie” which is what we call our
+ professional dog walkers.
+
+
+ Information Pages:
+
+ Our customers should be able to reach information about: Our
+ Services, Our Walkies, and Locations We Serve. Also, a user
+ must be able to Create an Account.
+
+
+ Our Services include: dog walking, doggie day care, dog
+ feeding, basic grooming.
+
+
+ Our Walkies information should show a photo of the Walkie,
+ their name and a little bit about them. It’s important for
+ customers to see a badge of some sort that indicates all of
+ our dog walkers are insured.
+
+
+ Locations We Serve: We have 3 locations in the greater
+ Seattle area.
+
+
+ Each page should include a testimonial from one of our
+ users. For example: “WalkieDoggie is perfect. They are
+ always professional and they take amazing care of our dog,
+ Beefcake. - Victoria B. from Tacoma, Washington”
+
+
+
+
+
+
+
+
+ handleInputChange(
+ e.target.name,
+ e.target.value,
+ e.target.value
+ )
+ }
+ styleName={"text-area"}
+ name="analysis"
+ placeholder={"Describe your website"}
+ />
+
+
+
+
+
+
+
+
+
Your industry
+
+ Knowing your industry will help our designers understand you and
+ your audience. For example, some common industries are: Business
+ & Consulting, Construction, Entertainment & Arts, Healthcare,
+ Retail, and Technology.
+
+
+
+
+
+
+
+ handleInputChange(
+ e.target.name,
+ e.target.value,
+ e.target.value
+ )
+ }
+ />
+
+
+
+
+
+
+
+
+
+
inspiration
+
+ Are there websites that you love, from which our designers may
+ draw inspiration? Share the website URLs and tell us what you
+ like about them.
+
+
+
+
+ {_.map(_.get(formData, "inspiration", []), (entry, index) => (
+
+ {index ? (
+
removeWebsite(index)}
+ >
+ Remove Website
+
+ ) : null}
+
+
+ handleArrayInputChange(
+ index,
+ "inspiration",
+ e.target.name,
+ e.target.value
+ )
+ }
+ />
+
+
+
+ handleArrayInputChange(
+ index,
+ "inspiration",
+ e.target.name,
+ e.target.value
+ )
+ }
+ styleName={"text-area"}
+ name="feedback"
+ placeholder={"Describe what you like about this website"}
+ />
+
+
+ ))}
+
+ {" "}
+
+ Add Another Website
+
+
+
+
+
+
+
+ STYLE & THEME
+
+
+
+
+
+ Let us know the visual styles you like or dislike (optional):
+
+
+ setSelectedStyleOption(style)}
+ onLike={(likes) => {
+ handleInputChange("likedStyles", likes, likes);
+ }}
+ onDislike={(dislikes) => {
+ handleInputChange("dislikedStyles", dislikes, dislikes);
+ }}
+ />
+
+
+
+
+ Additional details about your look & feel preferences:
+
+
+
+
+
+ handleInputChange(e.target.name, e.target.value)
+ }
+ styleName={"text-area"}
+ name="stylePreferences"
+ placeholder={"Describe your ideal look & feel"}
+ />
+
+
+
+
+
+
+ {selectedStyleOption && (
+
{
+ handleInputChange("likedStyles", likes, likes);
+ }}
+ onDislike={(dislikes) => {
+ handleInputChange("dislikedStyles", dislikes, dislikes);
+ }}
+ onDismiss={() => setSelectedStyleOption(null)}
+ />
+ )}
+
+
+
+
+ Choose colors you would like our designers to use in your site
+ design:
+
+
+ {
+ handleInputChange("colorOption", index, colorName);
+ }}
+ />
+
+
+
+
+ List any specific colors you would like used in your design:
+
+
+
+ 0 ? "(optional)" : ""
+ }`}
+ >
+
+ handleInputChange(e.target.name, e.target.value)
+ }
+ styleName={"text-area"}
+ name="specificColor"
+ placeholder={
+ "Specify colors using their value in RGB, CMYK, or Hex"
+ }
+ />
+
+
+
+
+
+
+
+
+
+
+
share your brand or style assets
+
+ If you have them, gather and upload any assets that you think
+ might be helpful for our designers. Let us know if there is
+ anything you would like to communicate about these items.
+ Assets could be:
+
+ your logo
+ your brand guide
+ mood boards
+ font files
+ sketches or other inspiration
+
+
+
+
+
+
+
+
+ handleInputChange(
+ e.target.name,
+ e.target.value,
+ e.target.value
+ )
+ }
+ />
+
+
+
+ handleInputChange(
+ e.target.name,
+ e.target.value,
+ e.target.value
+ )
+ }
+ styleName={"text-area"}
+ name="assetsDescription"
+ placeholder={"Describe what you would like us to know"}
+ />
+
+
+
+
+ >
+ )}
+
+
+
+
+
+ );
+};
+
+BasicInfoForm.defaultProps = {
+ serviceType: "",
+};
+
+BasicInfoForm.propTypes = {
+ estimate: PT.shape().isRequired,
+ serviceType: PT.string,
+ onFormUpdate: PT.func,
+ formData: PT.shape(),
+ bannerData: PT.shape().isRequired,
+};
+
+export default BasicInfoForm;
diff --git a/src/routes/Products/components/BasicInfoForm/styles.module.scss b/src/routes/Products/components/BasicInfoForm/styles.module.scss
new file mode 100644
index 000000000..212305c9c
--- /dev/null
+++ b/src/routes/Products/components/BasicInfoForm/styles.module.scss
@@ -0,0 +1,123 @@
+@import "styles/include";
+
+.basicInfoForm {
+ .title {
+ font-weight: 600;
+ color: $grey-text;
+ font-size: 20px;
+ line-height: 20px;
+ text-transform: uppercase;
+ }
+
+ .remove-website {
+ color: $green1;
+ cursor: pointer;
+ margin-bottom: 16px;
+ display: flex;
+ justify-content: flex-end;
+
+ &:hover {
+ text-decoration: underline;
+ }
+ }
+
+ .addWebsiteButton {
+ background-color: white;
+ border: 0px;
+ color: #229174;
+ font-weight: 700;
+ font-size: 14px;
+ display: flex;
+ align-items: center;
+
+ svg {
+ width: 13.33px;
+ height: 13.33px;
+ margin-right: 2px;
+ }
+ }
+
+ .description {
+ @include font-roboto;
+ font-size: 16px;
+ line-height: 26px;
+ margin-top: 24px;
+ color: $grey-text;
+ }
+
+ .form-row {
+ align-items: flex-start;
+ }
+
+ .text-area {
+ height: 117px !important;
+ }
+
+ .formFieldWrapper {
+ margin-top: 48px;
+ @include mobile {
+ margin-top: 24px;
+ }
+ }
+}
+
+.helpText {
+ color: $green1;
+ display: flex;
+}
+
+.assets {
+ margin-top: 12px;
+ p {
+ @include font-roboto;
+ font-weight: 700;
+ font-size: 12px;
+ letter-spacing: 0.8px;
+ line-height: 12px;
+ color: $black;
+ margin-bottom: 8px;
+ }
+}
+
+.list {
+ list-style-type: disc;
+ padding-left: 20px;
+}
+
+.color-picker,
+.style-picker {
+ @include mobile {
+ padding: 29px;
+ }
+ width: 100% !important;
+ padding-right: inherit !important;
+ border: 2px solid $divider-color;
+ border-radius: 20px;
+ padding: 20px;
+
+ .colors,
+ .styles {
+ padding: 20px;
+ @include mobile {
+ margin-bottom: -30px;
+ padding: 0px;
+ }
+ }
+
+ .formFieldWrapper {
+ padding-right: 20px;
+ margin-top: 0;
+ @include mobile {
+ padding-right: 30px;
+ }
+ }
+}
+
+.label {
+ font-weight: 500;
+ font-size: 20px;
+ line-height: 26px;
+ @include mobile {
+ font-size: 16px;
+ }
+}
diff --git a/src/routes/Products/components/StyleOptions/index.jsx b/src/routes/Products/components/StyleOptions/index.jsx
new file mode 100644
index 000000000..75e6430ee
--- /dev/null
+++ b/src/routes/Products/components/StyleOptions/index.jsx
@@ -0,0 +1,93 @@
+/**
+ * Style Options component
+ */
+import classNames from "classnames";
+import PT from "prop-types";
+import React from "react";
+import _ from "lodash";
+import { v4 as uuidV4 } from "uuid";
+import LikeIcon from "../../../../assets/images/thumbsup.svg";
+import DislikeIcon from "../../../../assets/images/thumbsdown.svg";
+import styles from "../../../../assets/data/website-design-styles.json";
+import HelpIcon from "../../../../components/HelpIcon";
+import "./styles.module.scss";
+
+const StyleOptions = ({
+ likes = [],
+ dislikes = [],
+ onLike,
+ onDislike,
+ onSelect,
+}) => {
+ return (
+
+ {styles.map((style, index) => (
+
+
+
+ {style.name}
+
+ {style.description}
+
+
+
+
onSelect(style)}
+ />
+
+ {
+ if (likes.includes(style.name)) {
+ onLike(likes.filter((s) => s !== style.name));
+ } else {
+ onLike([...likes, style.name]);
+ if (dislikes.includes(style.name)) {
+ onDislike(dislikes.filter((s) => s !== style.name));
+ }
+ }
+ }}
+ styleName={_.includes(likes, style.name) ? "liked" : null}
+ />
+ {
+ if (dislikes.includes(style.name)) {
+ onDislike(dislikes.filter((s) => s !== style.name));
+ } else {
+ onDislike([...dislikes, style.name]);
+ if (likes.includes(style.name)) {
+ onLike(likes.filter((s) => s !== style.name));
+ }
+ }
+ }}
+ styleName={
+ _.includes(dislikes, style.name) ? "disliked" : null
+ }
+ />
+
+
+
+
+ ))}
+
+ );
+};
+
+StyleOptions.defaultProps = {};
+
+StyleOptions.propTypes = {
+ likes: PT.arrayOf(PT.string),
+ dislikes: PT.arrayOf(PT.string),
+ onLike: PT.func,
+ onDislike: PT.func,
+};
+
+export default StyleOptions;
diff --git a/src/routes/Products/components/StyleOptions/styles.module.scss b/src/routes/Products/components/StyleOptions/styles.module.scss
new file mode 100644
index 000000000..86e7e8f2c
--- /dev/null
+++ b/src/routes/Products/components/StyleOptions/styles.module.scss
@@ -0,0 +1,126 @@
+@import "styles/include";
+
+.styleOptions {
+
+ display: flex;
+ flex-wrap: wrap;
+ gap: 24px;
+ margin-bottom: 34px;
+ justify-content: center;
+ @include mobile {
+ display: inline-block;
+ }
+ .styleWrapper {
+ .style {
+ position: relative;
+ padding: 16px;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+
+ .box {
+ border: 1px solid $black-20;
+ border-radius: 4px;
+ }
+
+ .preview {
+ width: 240px;
+ height: 200px;
+ cursor: pointer;
+ }
+
+ .actions {
+ display: flex;
+ justify-content: center;
+ padding: 20px;
+
+ svg {
+ width: 25px;
+ height: 25px;
+ margin-left: 10px;
+ margin-right: 10px;
+ }
+ }
+
+ &.dark-saturated {
+ .preview {
+ background: url('../../../../assets/images/products/website-design/dark-saturated.png');
+ background-size: cover;
+ }
+ }
+ &.light-airy {
+ .preview {
+ background: url('../../../../assets/images/products/website-design/light-airy.png');
+ background-size: cover;
+ }
+ }
+ &.fun-playful {
+ .preview {
+ background: url('../../../../assets/images/products/website-design/fun-playful.png');
+ background-size: cover;
+ }
+ }
+ &.mature-serious {
+ .preview {
+ background: url('../../../../assets/images/products/website-design/mature-serious.png');
+ background-size: cover;
+ }
+ }
+ &.simple-minimalist {
+ .preview {
+ background: url('../../../../assets/images/products/website-design/simple-minimalist.png');
+ background-size: cover;
+ }
+ }
+ &.vibrant-colorful {
+ .preview {
+ background: url('../../../../assets/images/products/website-design/vibrant-colorful.png');
+ background-size: cover;
+ }
+ }
+ &.soft-organic {
+ .preview {
+ background: url('../../../../assets/images/products/website-design/soft-organic.png');
+ background-size: cover;
+ }
+ }
+ &.bold-rugged {
+ .preview {
+ background: url('../../../../assets/images/products/website-design/bold-ragged.png');
+ background-size: cover;
+ }
+ }
+ }
+
+ .liked {
+ fill: $green1;
+ * {
+ fill: $green1;
+ }
+ }
+
+ .disliked {
+ fill: $green1;
+ * {
+ fill: $green1;
+ }
+ }
+
+ .name {
+ @include font-roboto;
+ display: flex;
+ justify-content: center;
+ style: $black;
+ font-size: 16px;
+ font-weight: 600;
+ line-height: 26px;
+ text-align: center;
+ margin-top: 8px;
+ margin-bottom: 8px;
+
+ .toolTip {
+ margin-left: 2px;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/routes/Products/components/StyleOptionsModal/index.jsx b/src/routes/Products/components/StyleOptionsModal/index.jsx
new file mode 100644
index 000000000..30a197740
--- /dev/null
+++ b/src/routes/Products/components/StyleOptionsModal/index.jsx
@@ -0,0 +1,84 @@
+/**
+ * Style Options component
+ */
+import classNames from "classnames";
+import PT from "prop-types";
+import React from "react";
+import _ from "lodash";
+import LikeIcon from "../../../../assets/images/thumbsup.svg";
+import DislikeIcon from "../../../../assets/images/thumbsdown.svg";
+import PageDivider from "../../../../components/PageDivider";
+import "./styles.module.scss";
+import Modal from "components/Modal";
+import useCheckMobileScreen from "../../../../hooks/useCheckMobileScreen";
+
+const StylesOptionsModal = ({
+ onDismiss,
+ style,
+ likes = [],
+ dislikes = [],
+ onLike,
+ onDislike,
+}) => {
+ const isMobile = useCheckMobileScreen();
+ const modalWidth = isMobile ? { fullWidth: true } : { halfWidth: true };
+ return (
+
+
+
+
+ {style.name}
+
+
+
+ {style.description}
+
+
+
+
+ {
+ if (likes.includes(style.name)) {
+ onLike(likes.filter((s) => s !== style.name));
+ } else {
+ onLike([...likes, style.name]);
+ if (dislikes.includes(style.name)) {
+ onDislike(dislikes.filter((s) => s !== style.name));
+ }
+ }
+ }}
+ styleName={_.includes(likes, style.name) ? "liked" : null}
+ />
+ {
+ if (dislikes.includes(style.name)) {
+ onDislike(dislikes.filter((s) => s !== style.name));
+ } else {
+ onDislike([...dislikes, style.name]);
+ if (likes.includes(style.name)) {
+ onLike(likes.filter((s) => s !== style.name));
+ }
+ }
+ }}
+ styleName={_.includes(dislikes, style.name) ? "disliked" : null}
+ />
+
+
+
+
+
+ );
+};
+
+StylesOptionsModal.defaultProps = {};
+
+StylesOptionsModal.propTypes = {
+ likes: PT.arrayOf(PT.string),
+ dislikes: PT.arrayOf(PT.string),
+ onLike: PT.func,
+ onDislike: PT.func,
+};
+
+export default StylesOptionsModal;
diff --git a/src/routes/Products/components/StyleOptionsModal/styles.module.scss b/src/routes/Products/components/StyleOptionsModal/styles.module.scss
new file mode 100644
index 000000000..6c3aabde9
--- /dev/null
+++ b/src/routes/Products/components/StyleOptionsModal/styles.module.scss
@@ -0,0 +1,132 @@
+@import "styles/include";
+@import '../../../../../src-ts/lib/styles';
+
+.styleWrapper {
+ min-width:500px;
+ .style {
+ position: relative;
+ padding: 16px;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ font-size: 22px;
+ @include mobile {
+ width: 250px;
+ padding: 0px;
+ }
+
+ .box {
+ border: 1px solid $black-20;
+ border-radius: 4px;
+ }
+
+ .preview {
+ width: 100%;
+ height: 450px;
+ max-height: calc(100vh - 450px);
+
+ @include ltemd {
+ max-height: calc(100vh - 550px);
+ }
+ }
+
+ .actions {
+ display: flex;
+ justify-content: center;
+ padding: 20px;
+
+ svg {
+ width: 25px;
+ height: 25px;
+ margin-left: 10px;
+ margin-right: 10px;
+ }
+ }
+
+ &.dark-saturated {
+ .preview {
+ background: url('../../../../assets/images/products/website-design/dark-saturated.png');
+ background-size: cover;
+ }
+ }
+ &.light-airy {
+ .preview {
+ background: url('../../../../assets/images/products/website-design/light-airy.png');
+ background-size: cover;
+ }
+ }
+ &.fun-playful {
+ .preview {
+ background: url('../../../../assets/images/products/website-design/fun-playful.png');
+ background-size: cover;
+ }
+ }
+ &.mature-serious {
+ .preview {
+ background: url('../../../../assets/images/products/website-design/mature-serious.png');
+ background-size: cover;
+ }
+ }
+ &.simple-minimalist {
+ .preview {
+ background: url('../../../../assets/images/products/website-design/simple-minimalist.png');
+ background-size: cover;
+ }
+ }
+ &.vibrant-colorful {
+ .preview {
+ background: url('../../../../assets/images/products/website-design/vibrant-colorful.png');
+ background-size: cover;
+ }
+ }
+ &.soft-organic {
+ .preview {
+ background: url('../../../../assets/images/products/website-design/soft-organic.png');
+ background-size: cover;
+ }
+ }
+ &.bold-rugged {
+ .preview {
+ background: url('../../../../assets/images/products/website-design/bold-ragged.png');
+ background-size: cover;
+ }
+ }
+ }
+
+ .liked {
+ fill: $green1;
+ * {
+ fill: $green1;
+ }
+ }
+
+ .disliked {
+ fill: $green1;
+ * {
+ fill: $green1;
+ }
+ }
+
+ .name {
+ @include font-roboto;
+ display: flex;
+ justify-content: flex-start;
+ style: $black;
+ font-size: 22px;
+ font-weight: 600;
+ line-height: 26px;
+ text-align: left;
+ margin-top: -10px;
+ margin-bottom: 8px;
+
+ .toolTip {
+ margin-left: 2px;
+ }
+ }
+
+ .description {
+ font-size: 16px;
+ line-height: 24px;
+ margin-bottom: 10px;
+ }
+}
diff --git a/src/routes/Review/components/AboutYourProject/index.jsx b/src/routes/Review/components/AboutYourProject/index.jsx
new file mode 100644
index 000000000..6448485f3
--- /dev/null
+++ b/src/routes/Review/components/AboutYourProject/index.jsx
@@ -0,0 +1,43 @@
+import React from "react";
+import HelpBanner from "../../../../components/HelpBanner";
+import PageUl from "../../../../components/PageElements/PageUl";
+
+const AboutYourProject = () => {
+ return (
+
+
+
+
+ Your Dashboard is your go-to hub for managing your work.
+
+ From here you can view timelines, details, and other important
+ information tied to your work submissions.
+
+
+
+ You can expect members of our community to ask you questions about
+ this work.
+
+ From your Work Summary page you’ll see if you have any
+ outstanding Messages, indicated by a red icon. Please answer questions
+ from our members in a timely and thorough manner. This will help them
+ deliver high quality results for you on time!
+
+
+
+ Topcoder experts will curate the best solutions for you.
+
+ This saves you time and energy wading through submissions that
+ perhaps aren't of value to you. When your high-quality submissions are
+ ready, you'll be notified to download your assets, rate your Topcoder
+ experience, and officially close out this work.
+
+
+
+ );
+};
+
+export default AboutYourProject;
diff --git a/src/routes/Review/components/PaymentForm/index.jsx b/src/routes/Review/components/PaymentForm/index.jsx
new file mode 100644
index 000000000..a45bd3c7c
--- /dev/null
+++ b/src/routes/Review/components/PaymentForm/index.jsx
@@ -0,0 +1,201 @@
+import _ from "lodash";
+import {
+ CardCvcElement,
+ CardExpiryElement,
+ CardNumberElement,
+} from "@stripe/react-stripe-js";
+import PT from "prop-types";
+import React, { useState } from "react";
+import { useSelector } from "react-redux";
+
+import FormField from "../../../../components/FormElements/FormField";
+import FormInputText from "../../../../components/FormElements/FormInputText";
+import ReactSelect from "../../../../components/ReactSelect";
+import { COUNTRY_OPTIONS } from "../../../../constants";
+import { getProfile } from "../../../../selectors/profile";
+import FormInputCheckbox from "../../../../components/FormElements/FormInputCheckbox";
+
+import styles from "./styles.module.scss";
+
+/**
+ * Payment Form Page
+ */
+const PaymentForm = ({ formData, setFormData, onOpenContractModal }) => {
+ const handleInputChange = (name, value) =>
+ setFormData((formData) => ({ ...formData, [name]: value }));
+
+ const [cardNumberError, setCardNumberError] = useState("");
+ const [cardExpiryError, setCardExpiryError] = useState("");
+ const [cvcError, setCvcError] = useState("");
+ const { email } = useSelector(getProfile);
+
+ // set the email, if it exists
+ if (formData && !formData.email && email) {
+ setFormData({
+ ...formData,
+ email,
+ });
+ }
+
+ const getFieldError = (data) => data?.error?.message || "";
+
+ const onCardNumberChange = (data) => {
+ const errorMessage = getFieldError(data);
+ setCardNumberError(errorMessage);
+ if (_.isEmpty(errorMessage)) {
+ handleInputChange("cardNumber", data?.complete);
+ }
+ };
+
+ const onExpirationChange = (data) => {
+ const errorMessage = getFieldError(data);
+ setCardExpiryError(errorMessage);
+ if (_.isEmpty(errorMessage)) {
+ handleInputChange("expiryDate", data?.complete);
+ }
+ };
+
+ const onCvcChange = (data) => {
+ const errorMessage = getFieldError(data);
+ setCvcError(errorMessage);
+ handleInputChange("cvc", !errorMessage && data?.complete);
+ };
+
+ return (
+
+
Contact Information
+
+
+
+
+
+
+
+
Card Information
+
+
+
+ onCardNumberChange(data)}
+ />
+
+ {!!String(cardNumberError).length && (
+ {cardNumberError}
+ )}
+
+
+
+
+
+ onExpirationChange(data)}
+ />
+
+ {!!String(cardExpiryError).length && (
+ {cardExpiryError}
+ )}
+
+
+
+
+ onCvcChange(data)}
+ />
+
+ {!!String(cvcError).length && (
+ {cvcError}
+ )}
+
+
+
+
+
+ handleInputChange(e.target.name, e.target.value)}
+ >
+
+
+
+
+ handleInputChange("country", option)}
+ options={COUNTRY_OPTIONS}
+ style2={true}
+ >
+
+
+
+
+ handleInputChange(e.target.name, e.target.value)}
+ >
+
+
+
+
+ handleInputChange("checked", e.target.checked)}
+ inline
+ />
+
+
+ Yes, I understand and agree to Topcoder's
+ onOpenContractModal(true)}
+ >
+ Order Contract
+
+
+
+
+
+
+ A hold will be placed on your card for the full amount of the project.
+ Once your work is live on the Topcoder platform, you will be charged.
+
+
+
+ );
+};
+
+PaymentForm.defaultProps = {};
+
+PaymentForm.propTypes = {
+ formData: PT.shape(),
+ onFormUpdate: PT.func,
+ setFormData: PT.func.isRequired,
+};
+
+export default PaymentForm;
diff --git a/src/routes/Review/components/PaymentForm/styles.module.scss b/src/routes/Review/components/PaymentForm/styles.module.scss
new file mode 100644
index 000000000..312b7d99d
--- /dev/null
+++ b/src/routes/Review/components/PaymentForm/styles.module.scss
@@ -0,0 +1,78 @@
+@import "styles/include";
+
+.paymentForm {
+ width: 100%;
+
+ .infoBox {
+ display: flex;
+ flex-direction: column;
+ row-gap: 24px;
+ font-size: 16px;
+ line-height: 26px;
+
+ .confirmationBox {
+ @include confirmationBox;
+ }
+
+ .title {
+ text-transform: uppercase;
+ font-size: 20px;
+ }
+
+ .importantInfo {
+ font-size: 16px;
+ }
+ }
+
+ .formHeader {
+ font-size: 12px;
+ font-weight: 500;
+ margin-bottom: 4px;
+ }
+
+ .cardElement {
+ @include formInputText;
+ padding: 0 8px !important;
+
+ input,
+ select {
+ @include formInputText;
+ padding: 0 8px !important;
+ }
+ }
+
+ .halfWidth {
+ display: grid;
+ grid-template-columns: repeat(2, 1fr);
+ column-gap: 8px;
+ width: 100%;
+ }
+
+ .error {
+ display: flex;
+ color: $red;
+ margin-left: 14px;
+ font-size: 11px;
+ margin-top: -15px;
+ padding-bottom: 5px;
+ }
+
+ .link {
+ color: $link-blue;
+ text-decoration: underline;
+ cursor: pointer;
+ }
+
+ .contract {
+ display: flex;
+ margin-bottom: 16px;
+
+ @include mobile {
+ margin-bottom: 8px;
+ }
+
+ .checkbox {
+ padding-top: 2px;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/routes/Review/components/ReviewTable/index.jsx b/src/routes/Review/components/ReviewTable/index.jsx
new file mode 100644
index 000000000..0a3e74c31
--- /dev/null
+++ b/src/routes/Review/components/ReviewTable/index.jsx
@@ -0,0 +1,18 @@
+import React from "react";
+import { WorkType, WorkDetailDetailsPane } from "../../../../../src-ts";
+
+/**
+ * Review Table Component
+ */
+const ReviewTable = ({ workItemConfig, formData }) => {
+ const redirectUrl = `/self-service/work/new/${workItemConfig.basePath}/basic-info`;
+ return (
+
+ );
+};
+
+export default ReviewTable;
diff --git a/src/routes/Review/index.jsx b/src/routes/Review/index.jsx
new file mode 100644
index 000000000..d1ee4c56d
--- /dev/null
+++ b/src/routes/Review/index.jsx
@@ -0,0 +1,334 @@
+import { navigate, redirectTo } from "@reach/router";
+import Button from "components/Button";
+import LoadingSpinner from "components/LoadingSpinner";
+import config from "../../../config";
+import { Elements, useElements, useStripe } from "@stripe/react-stripe-js";
+import { loadStripe } from "@stripe/stripe-js";
+import Page from "components/Page";
+import PageContent from "components/PageContent";
+import PageDivider from "components/PageDivider";
+import PageFoot from "components/PageElements/PageFoot";
+import { resetIntakeForm } from "../../actions/form";
+import { toastr } from "react-redux-toastr";
+import Progress from "components/Progress";
+import { BUTTON_SIZE, BUTTON_TYPE, MAX_COMPLETED_STEP } from "constants/";
+import React, { useEffect, useState } from "react";
+import { connect, useDispatch, useSelector } from "react-redux";
+import PaymentForm from "./components/PaymentForm";
+import { triggerAutoSave, triggerCookieClear } from "../../actions/autoSave";
+import { setProgressItem } from "../../actions/progress";
+import BackIcon from "../../assets/images/icon-back-arrow.svg";
+import ReviewTable from "./components/ReviewTable";
+import withAuthentication from "../../hoc/withAuthentication";
+import ServicePrice from "components/ServicePrice";
+import * as services from "../../services/payment";
+import { getUserProfile } from "../../thunks/profile";
+import { activateChallenge } from "../../services/challenge";
+import "./styles.module.scss";
+import {
+ getWebsiteDesignPriceAndTimelineEstimate,
+ getDataExplorationPriceAndTimelineEstimate,
+ getFindMeDataPriceAndTimelineEstimate,
+ getDataAdvisoryPriceAndTimelineEstimate,
+ currencyFormat,
+} from "utils/";
+import _ from "lodash";
+import {
+ loadChallengeId,
+ setCookie,
+ clearCachedChallengeId,
+} from "../../autoSaveBeforeLogin";
+import { Breadcrumb, OrderContractModal, WorkType } from "../../../src-ts";
+import AboutYourProject from "./components/AboutYourProject";
+
+const stripePromise = loadStripe(config.STRIPE.API_KEY, {
+ apiVersion: config.STRIPE.API_VERSION,
+});
+
+/**
+ * Review Page
+ */
+const Review = ({
+ setProgressItem,
+ previousPageUrl,
+ nextPageUrl,
+ introText,
+ banner,
+ icon,
+ showIcon,
+ secondaryBanner,
+ workItemConfig,
+ breadcrumb,
+}) => {
+ const dispatch = useDispatch();
+ const [paymentFailed, setPaymentFailed] = useState(false);
+ const [isLoading, setLoading] = useState(false);
+ const intakeFormData = useSelector((state) => state?.form);
+ const [formData, setFormData] = useState({
+ cardName: null,
+ cardNumber: false, // value is bool indicating if it's valid or not
+ country: null,
+ cvc: false, // value is bool indicating if it's valid or not
+ expiryDate: false, // value is bool indicating if it's valid or not
+ zipCode: null,
+ checked: false, // value to toggle terms and conditions checkbox
+ });
+
+ const currentStep = useSelector((state) => state?.progress.currentStep);
+ const workType = useSelector((state) => state.form.workType);
+ const stripe = useStripe();
+ const elements = useElements();
+ const fullState = useSelector((state) => state);
+ const [isOrderContractModalOpen, setIsOrderContractModalOpen] =
+ useState(false);
+
+ let estimate;
+ switch (workType?.selectedWorkType) {
+ case WorkType.design:
+ estimate = getWebsiteDesignPriceAndTimelineEstimate();
+ break;
+ case WorkType.data:
+ estimate = getDataExplorationPriceAndTimelineEstimate();
+ break;
+ case WorkType.problem:
+ estimate = getDataAdvisoryPriceAndTimelineEstimate();
+ break;
+ case WorkType.findData:
+ estimate = getFindMeDataPriceAndTimelineEstimate();
+ break;
+ default:
+ estimate = getFindMeDataPriceAndTimelineEstimate();
+ break;
+ }
+
+ const [firstMounted, setFirstMounted] = useState(true);
+ useEffect(() => {
+ if (!firstMounted) {
+ return;
+ }
+
+ setProgressItem(7);
+
+ if (currentStep === 0) {
+ redirectTo("/self-service");
+ }
+
+ setFirstMounted(false);
+
+ return () => {
+ dispatch(triggerAutoSave(true));
+ };
+ }, [currentStep, formData, dispatch, setProgressItem, firstMounted]);
+
+ const [anotherFirstMounted, setAnotherFirstMounted] = useState(true);
+ useEffect(() => {
+ if (!anotherFirstMounted) {
+ return;
+ }
+
+ if (currentStep === 0) {
+ redirectTo("/self-service");
+ }
+
+ setAnotherFirstMounted(false);
+ }, [currentStep, anotherFirstMounted]);
+
+ const onBack = () => {
+ navigate(previousPageUrl || "/self-service/branding");
+ };
+
+ const clearPreviousForm = () => {
+ setCookie(MAX_COMPLETED_STEP, "", -1);
+ clearCachedChallengeId();
+ dispatch(resetIntakeForm(true));
+ };
+
+ const challengeId = loadChallengeId();
+ const onNext = async () => {
+ if (!stripe || !elements) {
+ return;
+ }
+
+ setLoading(true);
+ setPaymentFailed(false);
+
+ const numOfPages = _.get(fullState, "form.pageDetails.pages.length", 1);
+ const numOfDevices = _.get(
+ fullState,
+ "form.basicInfo.selectedDevice.option.length",
+ 1
+ );
+
+ const description = `Work Item #${challengeId}\n${_.get(
+ fullState,
+ "form.basicInfo.projectTitle.value",
+ ""
+ ).slice(0, 355)}\n${_.get(fullState, "form.workType.selectedWorkType")}`;
+
+ services
+ .processPayment(
+ stripe,
+ elements,
+ estimate.total,
+ challengeId,
+ formData.email,
+ description
+ )
+ .then((res) => {
+ activateChallenge(challengeId);
+ clearPreviousForm();
+ navigate(nextPageUrl || "/self-service/thank-you");
+ setProgressItem(8);
+ setPaymentFailed(false);
+ })
+ .catch(() => {
+ setPaymentFailed(true);
+ toastr.error("Error", "There was an error processing the payment");
+ })
+ .finally(() => {
+ setLoading(false);
+ });
+ };
+
+ useEffect(() => {
+ dispatch(getUserProfile());
+ }, [dispatch]);
+
+ const isFormValid =
+ formData.cardName &&
+ formData.cardNumber &&
+ formData.country &&
+ formData.cvc &&
+ formData.expiryDate &&
+ formData.zipCode &&
+ formData.checked;
+
+ const onClickBreadcrumbItem = (item) => {
+ if (item.name === "Start work") {
+ dispatch(resetIntakeForm(true));
+ dispatch(triggerCookieClear());
+ }
+ };
+
+ return (
+ <>
+
setIsOrderContractModalOpen(false)}
+ />
+
+
+ ({
+ ...item,
+ onClick: onClickBreadcrumbItem,
+ }))}
+ />
+ {banner}
+
+
+
+
+ {secondaryBanner}
+ {introText && {introText}
}
+
+
+
+
+
+ {estimate.stickerPrice && (
+
+ {currencyFormat(estimate.stickerPrice)}
+
+ )}
+ {currencyFormat(estimate.total)}
+
+
+
Total Payment
+
+
+
+
+ {paymentFailed && (
+
+ Your card was declined. Please try a different card.
+
+ )}
+
+
+
+ PAY ${estimate.total}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ >
+ );
+};
+
+const ReviewWrapper = (props) => {
+ return (
+
+
+
+ );
+};
+
+const mapStateToProps = ({ form }) => form;
+
+const mapDispatchToProps = {
+ setProgressItem,
+};
+
+export default connect(
+ mapStateToProps,
+ mapDispatchToProps
+)(withAuthentication(ReviewWrapper));
diff --git a/src/routes/Review/styles.module.scss b/src/routes/Review/styles.module.scss
new file mode 100644
index 000000000..67c26fd32
--- /dev/null
+++ b/src/routes/Review/styles.module.scss
@@ -0,0 +1,161 @@
+@import "styles/include";
+
+.footerContent {
+ display: flex;
+ width: 100%;
+ flex-direction: row;
+ justify-content: space-between;
+
+ .footer-right {
+ display: flex;
+ gap: 16px;
+ }
+}
+.mobileHidden {
+ @include mobile {
+ display: none;
+ }
+}
+
+.container {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+
+ .splitView {
+ display: grid;
+ grid-template-columns: 1fr 562px;
+ column-gap: 24px;
+
+ @include mobile {
+ grid-template-columns: 1fr;
+ }
+
+ .reviewContainer {
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+ }
+ }
+
+ .paymentWrapper {
+
+ .infoBox {
+ display: flex;
+ flex-direction: column;
+ row-gap: 24px;
+ font-size: 16px;
+ line-height: 26px;
+
+ .confirmationBox {
+ @include confirmationBox;
+ }
+
+ .title {
+ text-transform: uppercase;
+ font-size: 20px;
+ }
+
+ .importantInfo {
+ font-size: 16px;
+ }
+ }
+
+ .paymentBox {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ border: 1px solid $gray-10;
+ border-radius: 8px;
+ margin-top: 18px;
+ padding: 24px;
+ row-gap: 8px;
+
+ .total {
+ @include font-barlow-condensed;
+ color: $aqua;
+ font-size: 48px;
+ position: relative;
+
+ .originalPrice {
+ position: absolute;
+ bottom: 0;
+ left: -55px;
+ text-decoration: line-through;
+ font-size: 24px;
+ }
+ }
+
+ .totalInfo {
+ text-transform: uppercase;
+ font-size: 12px;
+ font-weight: 700;
+ }
+
+ .pageDivider {
+ margin-top: -10px;
+ }
+
+ .paymentButtonContainer,
+ .wideButton {
+ width: 100%;
+ }
+ }
+
+ .contract {
+ display: flex;
+ align-items: center;
+ }
+ }
+}
+
+.backButtonWrapper {
+ @include backButtonWrapper;
+}
+
+.confirmationBox {
+ margin-top: 32px;
+ @include confirmationBox;
+}
+
+.infoAlert {
+ @include font-barlow;
+ display: flex;
+ padding: 16px;
+ background: #E0FAF3;
+ border-radius: 8px;
+ margin: 16px 0;
+ font-size: 16px;
+ line-height: 26px;
+}
+
+.inline {
+ display: inline-block;
+}
+
+.link {
+ color: $link-blue;
+ text-decoration: underline;
+ cursor: pointer;
+ @include mobile {
+ flex: none;
+ }
+}
+
+.error {
+ font-size: 14px;
+ color: $red-120;
+}
+
+.hideMobile {
+ @include mobile {
+ display: none;
+ }
+}
+
+.showOnlyMobile {
+ display: none;
+
+ @include mobile {
+ display: block;
+ }
+}
diff --git a/src/routes/ReviewLegacy/components/ReviewTableLegacy/index.jsx b/src/routes/ReviewLegacy/components/ReviewTableLegacy/index.jsx
new file mode 100644
index 000000000..631b85152
--- /dev/null
+++ b/src/routes/ReviewLegacy/components/ReviewTableLegacy/index.jsx
@@ -0,0 +1,161 @@
+import React, { useState } from "react";
+import { Link } from "@reach/router";
+import _ from "lodash";
+import classNames from "classnames";
+import PageDivider from "../../../../components/PageDivider";
+import { PROGRESS_LEVELS } from "../../../../constants/products/WebsiteDesignLegacy";
+import ArrowIcon from "../../../../assets/images/icon-arrow.svg";
+import "./styles.module.scss";
+
+/**
+ * Review Table Component
+ */
+const ReviewTableLegacy = ({ formData, enableEdit = true }) => {
+ const [steps, setSteps] = useState([
+ { id: 0, label: "Basic Info", value: "basicInfo", isOpen: true },
+ { id: 1, label: "Website Purpose", value: "websitePurpose", isOpen: true },
+ { id: 2, label: "Page Details", value: "pageDetails", isOpen: true },
+ { id: 3, label: "Branding", value: "branding", isOpen: true },
+ ]);
+
+ const setStepToggler = (id) => {
+ const newSteps = steps.map((item) =>
+ item.id === id ? { ...item, isOpen: !item.isOpen } : item
+ );
+
+ setSteps(newSteps);
+ };
+
+ const formatOption = (option) => {
+ if (_.isArray(option)) return option.join(", ");
+ if (_.isObject(option)) {
+ return formatOption(_.get(option, "option", option));
+ }
+ return option;
+ };
+
+ const renderOption = (option, title) => {
+ return (
+
+ {option.option && (
+
+
+
{option.title || title}
+
+
{formatOption(option.option)}
+
+ )}
+
+ );
+ };
+
+ const renderDetails = (step) => {
+ let items = formData[step.value] || {};
+ if (formData?.workType?.selectedWorkType === "Find Me Data") {
+ items = _.omit(items, ["assetsUrl", "goals"]);
+ } else {
+ items = _.omit(items, [
+ "analysis",
+ "primaryDataChallenge",
+ "primaryDataChallengeOther",
+ "sampleData",
+ ]);
+ }
+ return Object.keys(items).map((key) => {
+ if (_.isArray(items[key]))
+ return _.map(items[key], (item, i) => (
+
+
+
+ {Object.keys(item).map((subKey) =>
+ renderOption(item[subKey], subKey)
+ )}
+
+
+ ));
+ return renderOption(items[key]);
+ });
+ };
+
+ const renderPageDetails = (step) => {
+ const items = formData[step.value] || {};
+ const pages = items?.pages || [];
+
+ return pages.map((page, index) => {
+ return (
+
+ {page?.pageName && (
+
+
+
Page {index + 1} Name
+
+
{page?.pageName}
+
+ )}
+ {page?.pageDetails && (
+
+
+
Page {index + 1} Requirements
+
+
{page?.pageDetails}
+
+ )}
+
+ );
+ });
+ };
+
+ return (
+ <>
+ {steps
+ .filter((s) => {
+ if (s.value === "pageDetails")
+ return _.get(formData[s.value], "pages[0].pageDetails") !== "";
+ return !!formData[s.value];
+ })
+ .map((step, index) => {
+ let redirectPage = PROGRESS_LEVELS.find(
+ (item) => item.label === step.label
+ );
+ return (
+ <>
+ setStepToggler(index)}
+ >
+
+ {step.label}
+ {enableEdit && (
+
+ edit
+
+ )}
+
+
+
+
+ {step.isOpen
+ ? step.value === "pageDetails"
+ ? renderPageDetails(step)
+ : renderDetails(step)
+ : null}
+
+
+ >
+ );
+ })}
+ >
+ );
+};
+
+export default ReviewTableLegacy;
diff --git a/src/routes/ReviewLegacy/components/ReviewTableLegacy/styles.module.scss b/src/routes/ReviewLegacy/components/ReviewTableLegacy/styles.module.scss
new file mode 100644
index 000000000..2327adedd
--- /dev/null
+++ b/src/routes/ReviewLegacy/components/ReviewTableLegacy/styles.module.scss
@@ -0,0 +1,76 @@
+@import "styles/include";
+
+.header {
+ display: flex;
+ justify-content: space-between;
+ cursor: pointer;
+ margin-bottom: 0;
+
+ .icon {
+ svg {
+ transform: scale(1.5);
+ margin-top: 22px;
+ }
+
+ &.open {
+ svg {
+ margin-top: 0 !important;
+ }
+ transform: rotate(-180deg);
+ }
+ }
+
+ .stepLabel {
+ font-size: 16px;
+ font-weight: 600;
+ line-height: 20px;
+ text-transform: uppercase;
+ margin-top: 14px;
+
+ .link {
+ color: $link-blue;
+ cursor: pointer;
+ margin-left: 10px;
+ margin-top: 4px;
+ text-transform: none;
+
+ &:hover {
+ text-decoration: underline;
+ }
+ }
+ }
+}
+
+.projectTitle {
+ font-weight: 600;
+ margin-top: 18px;
+ font-size: 16px;
+ line-height: 20px;
+}
+
+.detail {
+ margin-top: 16px;
+ white-space: pre-wrap;
+
+ .itemWrapper {
+ display: flex;
+
+ .item {
+ text-transform: capitalize;
+ @include font-roboto;
+ font-weight: 700;
+ font-size: 16px;
+ line-height: 26px;
+ }
+ }
+
+ .key {
+ @include font-roboto;
+ font-size: 16px;
+ line-height: 26px;
+
+ .detail {
+ padding-left: 20px;
+ }
+ }
+}
diff --git a/src/routes/ReviewLegacy/index.jsx b/src/routes/ReviewLegacy/index.jsx
new file mode 100644
index 000000000..2d0179d78
--- /dev/null
+++ b/src/routes/ReviewLegacy/index.jsx
@@ -0,0 +1,328 @@
+import React, { useEffect, useState } from "react";
+import { connect, useDispatch, useSelector } from "react-redux";
+import { navigate, redirectTo } from "@reach/router";
+import { toastr } from "react-redux-toastr";
+import { loadStripe } from "@stripe/stripe-js";
+import { Elements, useElements, useStripe } from "@stripe/react-stripe-js";
+import _ from "lodash";
+
+import Button from "../../components/Button";
+import LoadingSpinner from "../../components/LoadingSpinner";
+import config from "../../../config";
+import Page from "../../components/Page";
+import PageContent from "../../components/PageContent";
+import PageDivider from "../../components/PageDivider";
+import PageFoot from "../../components/PageElements/PageFoot";
+import { resetIntakeForm } from "../../actions/form";
+import Progress from "../../components/Progress";
+import {
+ BUTTON_SIZE,
+ BUTTON_TYPE,
+ MAX_COMPLETED_STEP,
+ ROUTES,
+} from "../../constants/";
+import PaymentForm from "../Review/components/PaymentForm";
+import { triggerAutoSave } from "../../actions/autoSave";
+import { setProgressItem } from "../../actions/progress";
+import BackIcon from "../../assets/images/icon-back-arrow.svg";
+import ReviewTableLegacy from "./components/ReviewTableLegacy";
+import withAuthentication from "../../hoc/withAuthentication";
+import ServicePrice from "../../components/ServicePrice";
+import * as services from "../../services/payment";
+import { getUserProfile } from "../../thunks/profile";
+import { activateChallenge } from "../../services/challenge";
+import "./styles.module.scss";
+import {
+ getDynamicPriceAndTimelineEstimate,
+ currencyFormat,
+} from "../../utils/";
+import {
+ loadChallengeId,
+ setCookie,
+ clearCachedChallengeId,
+} from "../../autoSaveBeforeLogin";
+import { Breadcrumb, OrderContractModal } from "../../../src-ts";
+import AboutYourProject from "../../routes/Review/components/AboutYourProject";
+import PageH2 from "../../components/PageElements/PageH2";
+
+const stripePromise = loadStripe(config.STRIPE.API_KEY, {
+ apiVersion: config.STRIPE.API_VERSION,
+});
+
+/**
+ * Review Legacy Page
+ */
+const ReviewLegacy = ({
+ setProgressItem,
+ showProgress,
+ introText,
+ banner,
+ icon,
+ showIcon,
+ enableEdit = true,
+ secondaryBanner,
+}) => {
+ const dispatch = useDispatch();
+ const [paymentFailed, setPaymentFailed] = useState(false);
+ const [isLoading, setLoading] = useState(false);
+ const intakeFormData = useSelector((state) => state?.form);
+ const [formData, setFormData] = useState({
+ cardName: null,
+ cardNumber: false, // value is bool indicating if it's valid or not
+ country: null,
+ cvc: false, // value is bool indicating if it's valid or not
+ expiryDate: false, // value is bool indicating if it's valid or not
+ zipCode: null,
+ checked: false, // value to toggle terms and conditions checkbox
+ });
+
+ const currentStep = useSelector((state) => state?.progress.currentStep);
+ const workType = useSelector((state) => state.form.workType);
+ const stripe = useStripe();
+ const elements = useElements();
+ const fullState = useSelector((state) => state);
+ const [isOrderContractModalOpen, setIsOrderContractModalOpen] =
+ useState(false);
+ const estimate = getDynamicPriceAndTimelineEstimate(fullState);
+
+ const [firstMounted, setFirstMounted] = useState(true);
+
+ useEffect(() => {
+ if (!firstMounted) {
+ return;
+ }
+
+ setProgressItem(7);
+
+ if (currentStep === 0) {
+ redirectTo("/self-service");
+ }
+
+ setFirstMounted(false);
+
+ return () => {
+ dispatch(triggerAutoSave(true));
+ };
+ }, [currentStep, formData, dispatch, setProgressItem, firstMounted]);
+
+ const [anotherFirstMounted, setAnotherFirstMounted] = useState(true);
+ useEffect(() => {
+ if (!anotherFirstMounted) {
+ return;
+ }
+
+ if (currentStep === 0) {
+ redirectTo("/self-service");
+ }
+
+ setAnotherFirstMounted(false);
+ }, [currentStep, anotherFirstMounted]);
+
+ const onBack = () => {
+ navigate("/self-service/work/new/website-design/branding");
+ };
+
+ const clearPreviousForm = () => {
+ setCookie(MAX_COMPLETED_STEP, "", -1);
+ clearCachedChallengeId();
+ dispatch(resetIntakeForm(true));
+ };
+
+ const challengeId = loadChallengeId();
+ const onNext = async () => {
+ if (!stripe || !elements) {
+ return;
+ }
+
+ setLoading(true);
+ setPaymentFailed(false);
+
+ const numOfPages = _.get(fullState, "form.pageDetails.pages.length", 1);
+ const numOfDevices = _.get(
+ fullState,
+ "form.basicInfo.selectedDevice.option.length",
+ 1
+ );
+ const additionalPaymentInfo = `\n${numOfPages} Pages\n${numOfDevices} Devices`;
+
+ const description = `Work Item #${challengeId}\n${_.get(
+ fullState,
+ "form.basicInfo.projectTitle.value",
+ ""
+ ).slice(0, 355)}\n${_.get(
+ fullState,
+ "form.workType.selectedWorkType"
+ )}${additionalPaymentInfo}`;
+
+ services
+ .processPayment(
+ stripe,
+ elements,
+ estimate.total,
+ challengeId,
+ formData.email,
+ description
+ )
+ .then((res) => {
+ activateChallenge(challengeId);
+ clearPreviousForm();
+ navigate("/self-service/work/new/website-design/thank-you");
+ setProgressItem(8);
+ setPaymentFailed(false);
+ })
+ .catch(() => {
+ setPaymentFailed(true);
+ toastr.error("Error", "There was an error processing the payment");
+ })
+ .finally(() => {
+ setLoading(false);
+ });
+ };
+
+ useEffect(() => {
+ dispatch(getUserProfile());
+ }, [dispatch]);
+
+ const isFormValid =
+ formData.cardName &&
+ formData.cardNumber &&
+ formData.country &&
+ formData.cvc &&
+ formData.expiryDate &&
+ formData.zipCode &&
+ formData.checked;
+
+ const breadcrumbs = [
+ { url: ROUTES.DASHBOARD_PAGE, name: "My work" },
+ {
+ url: ROUTES.INTAKE_FORM,
+ name: "Start work",
+ onClick: () => {
+ dispatch(resetIntakeForm(true));
+ },
+ },
+ { url: ROUTES.WEBSITE_DESIGN_LEGACY, name: "Basic Info" },
+ { url: ROUTES.WEBSITE_DESIGN_PURPOSE_LEGACY, name: "Website purpose" },
+ { url: ROUTES.WEBSITE_DESIGN_PAGE_DETAILS_LEGACY, name: "Page details" },
+ { url: ROUTES.WEBSITE_DESIGN_BRANDING_LEGACY, name: "Branding" },
+ { url: "#", name: "Review" },
+ ];
+
+ return (
+ <>
+ setIsOrderContractModalOpen(false)}
+ />
+
+
+
+ {banner}
+
+ REVIEW & PAYMENT
+
+
+ {secondaryBanner}
+ {introText && {introText}
}
+
+
+
+
+
+
+ {estimate.stickerPrice && (
+
+ {currencyFormat(estimate.stickerPrice)}
+
+ )}
+ {currencyFormat(estimate.total)}
+
+
+
Total Payment
+
+
+
+
+ {paymentFailed && (
+
+ Your card was declined. Please try a different card.
+
+ )}
+
+
+
+ PAY ${estimate.total}
+
+
+
+
+
+
+
+
+
+
+ {showProgress && }
+
+
+ >
+ );
+};
+
+const ReviewWrapper = (props) => {
+ return (
+
+
+
+ );
+};
+
+const mapStateToProps = ({ form }) => form;
+
+const mapDispatchToProps = {
+ setProgressItem,
+};
+
+export default connect(
+ mapStateToProps,
+ mapDispatchToProps
+)(withAuthentication(ReviewWrapper));
diff --git a/src/routes/ReviewLegacy/styles.module.scss b/src/routes/ReviewLegacy/styles.module.scss
new file mode 100644
index 000000000..d46d89cc9
--- /dev/null
+++ b/src/routes/ReviewLegacy/styles.module.scss
@@ -0,0 +1,142 @@
+@import "styles/include";
+
+.footerContent {
+ display: flex;
+ width: 100%;
+ flex-direction: row;
+ justify-content: space-between;
+
+ .footer-right {
+ display: flex;
+ gap: 16px;
+ }
+}
+
+.container {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+
+ .splitView {
+ display: grid;
+ grid-template-columns: 1fr 562px;
+ column-gap: 24px;
+
+ @include mobile {
+ grid-template-columns: 1fr;
+ }
+
+ .reviewContainer {
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+ }
+ }
+
+ .paymentWrapper {
+
+ .infoBox {
+ display: flex;
+ flex-direction: column;
+ row-gap: 24px;
+ font-size: 16px;
+ line-height: 26px;
+
+ .confirmationBox {
+ @include confirmationBox;
+ }
+
+ .title {
+ text-transform: uppercase;
+ font-size: 20px;
+ }
+
+ .importantInfo {
+ font-size: 16px;
+ }
+ }
+
+ .paymentBox {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ border: 1px solid $gray-10;
+ border-radius: 8px;
+ margin-top: 18px;
+ padding: 24px;
+ row-gap: 8px;
+
+ .total {
+ @include font-barlow-condensed;
+ color: $aqua;
+ font-size: 48px;
+ position: relative;
+
+ .originalPrice {
+ position: absolute;
+ bottom: 0;
+ left: -55px;
+ text-decoration: line-through;
+ font-size: 24px;
+ }
+ }
+
+ .totalInfo {
+ text-transform: uppercase;
+ font-size: 12px;
+ font-weight: 700;
+ }
+
+ .pageDivider {
+ margin-top: -10px;
+ }
+
+ .paymentButtonContainer,
+ .wideButton {
+ width: 100%;
+ }
+ }
+ }
+}
+
+.backButtonWrapper {
+ @include backButtonWrapper;
+}
+
+.confirmationBox {
+ margin-top: 32px;
+ @include confirmationBox;
+}
+
+.infoAlert {
+ @include font-barlow;
+ display: flex;
+ padding: 16px;
+ background: #E0FAF3;
+ border-radius: 8px;
+ margin: 16px 0;
+ font-size: 16px;
+ line-height: 26px;
+}
+
+.inline {
+ display: inline-block;
+}
+
+.error {
+ font-size: 14px;
+ color: $red-120;
+}
+
+.hideMobile {
+ @include mobile {
+ display: none;
+ }
+}
+
+.showOnlyMobile {
+ display: none;
+
+ @include mobile {
+ display: block;
+ }
+}
\ No newline at end of file
diff --git a/src/routes/SelectWorkType/index.jsx b/src/routes/SelectWorkType/index.jsx
new file mode 100644
index 000000000..4ac523933
--- /dev/null
+++ b/src/routes/SelectWorkType/index.jsx
@@ -0,0 +1,223 @@
+import { navigate } from "@reach/router";
+
+import React, { useEffect, useState } from "react";
+import { connect, useDispatch, useSelector } from "react-redux";
+
+import { triggerAutoSave } from "../../actions/autoSave";
+import { saveWorkType, toggleSupportModal } from "../../actions/form";
+import { setProgressItem } from "../../actions/progress";
+import Button from "../../components/Button";
+import LoadingSpinner from "../../components/LoadingSpinner";
+import Page from "../../components/Page";
+import PageContent from "../../components/PageContent";
+import PageDivider from "../../components/PageDivider";
+import PageH2 from "../../components/PageElements/PageH2";
+import Slider from "../../components/Slider";
+import { Breadcrumb, ContactSupportModal } from "../../../src-ts";
+import {
+ BUTTON_SIZE,
+ projectAndProfessionalWork,
+ ROUTES,
+ webWorkTypes,
+ workTypes,
+} from "../../constants/";
+
+import styles from "./styles.module.scss";
+
+const WorkTypeCard = ({
+ className = "",
+ title,
+ subHeading,
+ subHeadingMobile,
+ bgImage,
+ ctaButtonOnClick,
+ content,
+}) => {
+ return (
+
+
+
+ {subHeading}
+
+
+ {subHeadingMobile || subHeading}
+
+
+
{title}
+
+
+ {content}
+
+
+ {content}
+
+
+
+ {!!ctaButtonOnClick && (
+
+ learn more
+
+ )}
+
+ );
+};
+
+const WorkTypeCardWide = ({
+ className = "",
+ bgImage = "",
+ title,
+ content,
+ ctaText = "",
+ icon = "",
+ svgIcon: SvgIcon = "",
+ ctaButtonOnClick,
+}) => {
+ return (
+
+ {!!SvgIcon ?
: !!icon &&
}
+
+
{title}
+
{content}
+
+ {!!ctaText && !!ctaButtonOnClick && (
+
+ {ctaText}
+
+ )}
+
+
+ );
+};
+
+/**
+ * Select Work Type Page
+ */
+const SelectWorkType = ({
+ saveWorkType,
+ setProgressItem,
+ toggleSupportModal,
+}) => {
+ const dispatch = useDispatch();
+ const [isLoading, setLoading] = useState(false);
+ const showSupportModal = useSelector((state) => state.form.showSupportModal);
+ const challenge = useSelector((state) => state.challenge);
+
+ const allWorkTypes = [...workTypes, ...webWorkTypes];
+ const featuredWorkTypes = allWorkTypes.filter((wt) => wt.featured);
+
+ useEffect(() => {
+ return () => {
+ dispatch(triggerAutoSave(true));
+ };
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, []);
+
+ const handleClick = (selectedItem = webWorkTypes[0]) => {
+ saveWorkType({
+ selectedWorkType: selectedItem.type || selectedItem.title,
+ selectedWorkTypeDetail: selectedItem.title,
+ });
+ setProgressItem(2);
+ navigate(selectedItem.startRoute);
+ dispatch(triggerAutoSave(true));
+ };
+
+ const onBack = () => {
+ navigate(`/self-service`);
+ setProgressItem(1);
+ saveWorkType({ workTypeStep: 0 });
+ dispatch(triggerAutoSave(true));
+ };
+
+ const onShowSupportModal = () => {
+ toggleSupportModal(true);
+ };
+ const onHideSupportModal = () => {
+ toggleSupportModal(false);
+ };
+
+ const breadcrumb = [
+ { url: ROUTES.DASHBOARD_PAGE, name: "My work" },
+ { url: "/self-service/wizard", name: "Start work" },
+ ];
+
+ const workTypeClassName = (title) => title.toLowerCase().split(" ").join("-");
+
+ return (
+ <>
+
+
+
+
+
+ Start work
+
+
+
+
+ {featuredWorkTypes.map((featuredWorkType) => (
+ handleClick(featuredWorkType)}
+ content={featuredWorkType.description}
+ />
+ ))}
+
+
+
+
+
+ >
+ );
+};
+
+const mapStateToProps = ({ form }) => form;
+
+const mapDispatchToProps = {
+ saveWorkType,
+ setProgressItem,
+ toggleSupportModal,
+};
+
+export default connect(mapStateToProps, mapDispatchToProps)(SelectWorkType);
diff --git a/src/routes/SelectWorkType/styles.module.scss b/src/routes/SelectWorkType/styles.module.scss
new file mode 100644
index 000000000..c859aed2d
--- /dev/null
+++ b/src/routes/SelectWorkType/styles.module.scss
@@ -0,0 +1,452 @@
+@import "styles/include";
+
+.heroContainer {
+ position: static;
+ min-width: 610px;
+ left: 0px;
+ top: 0px;
+ margin: 16px 0px;
+
+ display: grid;
+ grid-template-columns: 1fr 359px;
+
+ background: linear-gradient(263.22deg, #038664 2.65%, #075f96 98.14%), #ffffff;
+ border-radius: 8px;
+
+ &.website-design,
+ &.website-design-new {
+ background: linear-gradient(263.22deg, #038664 2.65%, #075f96 98.14%),
+ #ffffff;
+ }
+
+ &.data-exploration {
+ background: linear-gradient(263.22deg, #038664 2.65%, #075f96 98.14%),
+ #ffffff;
+ }
+
+ &.find-me-data {
+ background: linear-gradient(84.92deg, #723390 2.08%, #8c384f 97.43%);
+ }
+
+ .heroBackgroundContainer {
+ position: static;
+ width: 359px;
+ left: 793px;
+ top: 0px;
+ margin: 0px;
+
+ flex: none;
+ order: 1;
+ align-self: stretch;
+ flex-grow: 0;
+
+ border-radius: 0 8px 8px 0;
+
+ &.website-design {
+ background: url("../../assets/images/website-design.png");
+ background-size: cover;
+ }
+
+ &.data-exploration {
+ background: url("../../assets/images/data-exploration.png");
+ background-size: cover;
+ }
+
+ &.find-me-data {
+ background: url("../../assets/images/find-me-data.png");
+ background-size: cover;
+ }
+ }
+
+ .heroContent {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ padding: 32px 0px;
+
+ color: $black-0;
+
+ position: static;
+ left: 32px;
+ top: 0px;
+
+ /* Inside auto layout */
+ flex: none;
+ order: 0;
+ flex-grow: 1;
+ margin: 0px 24px;
+
+ .heroHeader {
+ /* Auto layout */
+ display: flex;
+ flex-direction: row;
+ align-items: flex-start;
+ padding: 0px;
+
+ position: static;
+ height: 48px;
+ left: 0px;
+ top: 0px;
+
+ /* Inside auto layout */
+ flex: none;
+ order: 0;
+ align-self: stretch;
+ flex-grow: 0;
+
+ .heroIconContainer {
+ /* Auto layout */
+ display: flex;
+ flex-direction: row;
+ align-items: flex-start;
+ padding: 4px 0px 0px;
+ margin-right: 16px;
+
+ position: static;
+ width: 40px;
+ height: 44px;
+ left: 0px;
+ top: 0px;
+ }
+
+ .heroHeaderContent {
+ /* Auto layout */
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ row-gap: 16px;
+ padding: 0px;
+
+ position: static;
+ height: 48px;
+ left: 56px;
+ top: 0px;
+
+ /* Inside auto layout */
+ flex: none;
+ order: 1;
+ flex-grow: 1;
+
+ text-transform: uppercase;
+ font-size: 24px;
+ font-weight: 400;
+
+ .heroHeaderSubtitle {
+ font-size: 16px;
+
+ .strikeThrough {
+ text-decoration: line-through;
+ }
+
+ .priceChip {
+ background-color: $black-0;
+ color: $gui-kit-gray-90;
+ font-weight: 600;
+ border-radius: 10px;
+ padding: 0 8px;
+ margin: 0 8px;
+ }
+
+ .separator {
+ margin: 0 16px 0 8px;
+ }
+ }
+ }
+ }
+
+ .heroText {
+ position: static;
+ // height: 96px;
+ left: 0px;
+ top: 64px;
+ max-width: 713px;
+
+ /* desktop/body-large */
+ font-family: Roboto;
+ font-style: normal;
+ font-weight: normal;
+ font-size: 24px;
+ line-height: 32px;
+ /* or 133% */
+
+ /* gray/white */
+ color: #ffffff;
+
+ /* Inside auto layout */
+ order: 1;
+ margin: 16px 0px;
+ flex: none;
+ align-self: stretch;
+ flex-grow: 0;
+ }
+
+ .heroButtonContainer {
+ /* Auto layout */
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ padding: 0px;
+
+ position: static;
+ height: 40px;
+ left: 0px;
+ top: 216px;
+
+ /* Inside auto layout */
+ flex: none;
+ order: 1;
+ align-self: stretch;
+ flex-grow: 0;
+ margin: 12px 0px;
+ }
+ }
+}
+
+.cardContainer {
+ display: flex;
+ column-gap: 8px;
+ justify-content: space-around;
+ margin-top: 1rem;
+
+ @include mobile {
+ flex-direction: column;
+ justify-content: flex-start;
+ align-items: center;
+ row-gap: 8px;
+ }
+
+ .card {
+ /* Auto layout */
+ display: flex;
+ flex-direction: column;
+ justify-content: flex-start;
+ align-items: center;
+ row-gap: 8px;
+ padding: 32px;
+
+ position: static;
+ width: 500px;
+ max-width: 100%;
+ height: 100%;
+ min-height: 172px;
+ margin-top: 1rem;
+
+ /* gray/white */
+ background: $black-0;
+ /* Button hover shadow */
+ box-shadow: 0px 1px 5px rgba(0, 0, 0, 0.2);
+ border-radius: 8px;
+
+ .title,
+ .smallHeader {
+ font-weight: bold;
+ text-transform: uppercase;
+ }
+
+ .smallHeader {
+ font-size: 12px;
+ }
+
+ .title {
+ font-size: 24px;
+ }
+
+ .text {
+ font-size: 16px;
+ line-height: 26px;
+ text-align: center;
+ }
+ }
+}
+
+.backButtonContainer {
+ @include backButtonContainer;
+
+ .backButtonWrapper {
+ @include backButtonWrapper;
+ }
+}
+
+.pageContent {
+ margin-top: 0;
+ padding-right: 0;
+ padding-left: 0;
+ padding-top: 28px;
+}
+
+.pageHeading {
+ margin-bottom: 0;
+ margin-top: 0;
+ font-weight: 600;
+ color: #2a2a2a;
+
+ @include mobile {
+ font-size: 28px;
+ }
+}
+
+.workTypeCard {
+ max-width: 100%;
+ background-size: cover;
+ background-repeat: no-repeat;
+ border-radius: 8px;
+ color: #fff;
+ text-align: left;
+ cursor: pointer;
+}
+
+.workTypeCardContentContainer {
+ border-radius: inherit;
+}
+
+.workTypeCardSubHeading {
+ font-weight: 700;
+ font-size: 12px;
+ text-transform: uppercase;
+ margin: 0;
+
+ @include mobile {
+ font-size: 10px;
+ }
+}
+
+.workTypeCardHeading {
+ font-weight: 600;
+ font-size: 24px;
+ text-transform: uppercase;
+ margin: 0;
+
+ @include mobile {
+ font-size: 20px;
+ }
+}
+
+.workTypeCardSmall {
+ position: relative;
+ width: 435px;
+ height: 362px;
+ text-align: left;
+ padding-bottom: 90px;
+
+ @include mobile {
+ height: 380px;
+ }
+}
+
+.workTypeCardSmall .workTypeCardSubHeading {
+ letter-spacing: 1px;
+}
+
+.workTypeCardCtaButton {
+ border-color: #fff !important;
+}
+
+.workTypeCardContent {
+ padding-bottom: 48px;
+ @include font-roboto;
+
+ @include mobile {
+ font-weight: 500;
+ font-size: 12px;
+ }
+}
+
+.workTypeCardSmall .workTypeCardContent {
+ padding-bottom: 48px;
+
+ @include desktop {
+ opacity: 0;
+ transition: opacity 240ms ease-in-out;
+ }
+}
+
+.workTypeCardSmall .workTypeCardCtaButton {
+ position: absolute;
+ bottom: 24px;
+ left: 24px;
+
+ @include desktop {
+ opacity: 0;
+ transform: translateY(1rem);
+ transition: opacity 240ms ease-in-out, transform 400ms ease-in-out;
+ }
+}
+
+.workTypeCardSmall .workTypeCardContentContainer {
+ background: linear-gradient(180deg, #2a2a2a 0%, rgba(42, 42, 42, 0) 78.12%),
+ linear-gradient(180deg, #2a2a2a 0%, rgba(42, 42, 42, 0) 100%);
+}
+
+.workTypeCardSmall .workTypeCardContentContainer {
+ padding: 24px;
+}
+
+.workTypeCardSmall .workTypeCardContent {
+ margin-top: 1rem;
+}
+
+.workTypeCardSmall:hover .workTypeCardContent {
+ opacity: 1;
+}
+
+.workTypeCardSmall:hover .workTypeCardCtaButton {
+ @include desktop {
+ opacity: 1;
+ transform: translateY(0);
+ }
+}
+
+.workTypeCardWide {
+ display: flex;
+ padding: 24px;
+ gap: 24px;
+
+ @include mobile {
+ flex-direction: column;
+ }
+}
+
+.workTypeCardWide svg {
+ min-width: fit-content;
+}
+
+.workTypeCardWide .workTypeCardSubHeading,
+.workTypeCardWide .workTypeCardCtaButton {
+ margin-top: 1rem !important;
+}
+
+.workTypeCardWide::before {
+ content: "";
+ position: absolute;
+ background: rgba(255, 255, 255, 0.1);
+}
+
+.workTypeCardWide .workTypeCardHeading {
+ @include font-barlow;
+}
+
+.workTypeCardWide .workTypeCardSubHeading {
+ @include font-roboto;
+ font-weight: 500;
+ font-size: 16px;
+
+ @include mobile {
+ font-size: 14px;
+ }
+}
+
+.workTypeSlider {
+ margin-bottom: 1rem;
+}
+
+.hideOnDesktop {
+ @include desktop {
+ display: none;
+ }
+}
+
+.hideOnMobile {
+ @include mobile {
+ display: none;
+ }
+}
\ No newline at end of file
diff --git a/src/routes/ThankYou/index.jsx b/src/routes/ThankYou/index.jsx
new file mode 100644
index 000000000..9d6309a32
--- /dev/null
+++ b/src/routes/ThankYou/index.jsx
@@ -0,0 +1,75 @@
+import { navigate } from "@reach/router";
+import Button from "components/Button";
+import LoadingSpinner from "components/LoadingSpinner";
+import Page from "components/Page";
+import PageContent from "components/PageContent";
+import PageH2 from "components/PageElements/PageH2";
+import { BUTTON_SIZE, MAX_COMPLETED_STEP } from "constants/";
+import React, { useEffect, useState } from "react";
+import { useDispatch, connect } from "react-redux";
+import "./styles.module.scss";
+import { setCookie } from "../../autoSaveBeforeLogin";
+import { resetIntakeForm } from "../../actions/form";
+
+/**
+ * Thank You Page
+ */
+const ThankYou = () => {
+ const dispatch = useDispatch();
+ const [isLoading, setLoading] = useState(false);
+
+ useEffect(() => {
+ clearPreviousForm();
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, []);
+
+ const clearPreviousForm = () => {
+ dispatch(resetIntakeForm(true));
+ setCookie(MAX_COMPLETED_STEP, "", -1);
+ };
+
+ const onDone = async () => {
+ navigate("/self-service");
+ };
+
+ return (
+ <>
+
+
+
+
+
+
THANK YOU
+
+
+
Your payment has been processed successfully.
+
+
+ You can now go to the Dashboard to manage the work you've
+ submitted.
+
+
+
+ If your changes do not appear immediately, please reload the
+ page.
+
+
+
+
+
+ Go to Dashboard
+
+
+
+
+
+
+ >
+ );
+};
+
+const mapStateToProps = ({ form }) => form;
+
+const mapDispatchToProps = {};
+
+export default connect(mapStateToProps, mapDispatchToProps)(ThankYou);
diff --git a/src/routes/ThankYou/styles.module.scss b/src/routes/ThankYou/styles.module.scss
new file mode 100644
index 000000000..c271d556e
--- /dev/null
+++ b/src/routes/ThankYou/styles.module.scss
@@ -0,0 +1,26 @@
+@import "styles/include";
+
+.container {
+ display: flex;
+ justify-content: center;
+ text-align: center;
+
+ .content {
+ color: $black;
+ font-size: 16px;
+ line-height: 26px;
+
+ .content-container {
+
+ p {
+ padding: 24px;
+ }
+ }
+ }
+
+ .btn {
+ display: flex;
+ justify-content: center;
+ margin-top: 76px;
+ }
+}
\ No newline at end of file
diff --git a/src/routes/UnderMaintenance/index.jsx b/src/routes/UnderMaintenance/index.jsx
new file mode 100644
index 000000000..d9c9b2077
--- /dev/null
+++ b/src/routes/UnderMaintenance/index.jsx
@@ -0,0 +1,31 @@
+import Page from "components/Page";
+import PageContent from "components/PageContent";
+import PageH2 from "components/PageElements/PageH2";
+import React from "react";
+import "./styles.module.scss";
+
+/**
+ * Under Maintenance Page
+ */
+const UnderMaintenance = () => {
+ return (
+ <>
+
+
+
+
+
UNDER MAINTENANCE
+
+ The application is under maintenance. Please contact{" "}
+ support@topcoder.com {" "}
+ if you need help!
+
+
+
+
+
+ >
+ );
+};
+
+export default UnderMaintenance;
diff --git a/src/routes/UnderMaintenance/styles.module.scss b/src/routes/UnderMaintenance/styles.module.scss
new file mode 100644
index 000000000..235c87ced
--- /dev/null
+++ b/src/routes/UnderMaintenance/styles.module.scss
@@ -0,0 +1,20 @@
+@import "styles/include";
+
+.container {
+ display: flex;
+ justify-content: center;
+ text-align: center;
+
+ .content {
+ max-width: 439px;
+ color: $black;
+ font-size: 16px;
+ line-height: 26px;
+ }
+
+ .btn {
+ display: flex;
+ justify-content: center;
+ margin-top: 76px;
+ }
+}
\ No newline at end of file
diff --git a/src/routes/WebsitePurposeLegacy/components/WebsitePurposeForm/index.jsx b/src/routes/WebsitePurposeLegacy/components/WebsitePurposeForm/index.jsx
new file mode 100644
index 000000000..b3706aa23
--- /dev/null
+++ b/src/routes/WebsitePurposeLegacy/components/WebsitePurposeForm/index.jsx
@@ -0,0 +1,183 @@
+/**
+ * Tab element
+ */
+import _ from "lodash";
+import FormField from "components/FormElements/FormField";
+import FormInputText from "components/FormElements/FormInputText";
+import FormInputTextArea from "components/FormElements/FormInputTextArea";
+import PageDivider from "components/PageDivider";
+import PageP from "components/PageElements/PageP";
+import PageRow from "components/PageElements/PageRow";
+import Select from "components/ReactSelect";
+import ServicePrice from "components/ServicePrice";
+import { IndustryList } from "constants/";
+import PT from "prop-types";
+import React from "react";
+import "./styles.module.scss";
+
+const WebsitePurposeForm = ({
+ formData,
+ setFormData,
+ price,
+ serviceType,
+ saveWebsitePurpose,
+ estimate,
+}) => {
+ const handleInputChange = (name, value, option = null) => {
+ setFormData((formData) => {
+ const newFormData = {
+ ...formData,
+ [name]: { ...formData[name], option: option ? option : value, value },
+ };
+ saveWebsitePurpose(newFormData);
+ return newFormData;
+ });
+ };
+
+ return (
+
+
+
+
+
+
+
Your industry
+
+ Knowing your industry will help our designers understand your
+ audience, and the basic visual direction and overall tone to take
+ for your website design.
+
+
+
+
+
+ {
+ handleInputChange("industry", option, option.label);
+ }}
+ options={IndustryList}
+ style2={true}
+ placeholder={"Select industry"}
+ />
+
+
+
+
+
+
+
+
DESCRIPTION
+
+ What is the purpose of your website? What do you want visitors to be
+ able to do, e.g., see your work? Contact you? You can include a
+ general description as well as goals of the website.{" "}
+
+
+
+ Example: A dog walking website that allows
+ visitors to select dog walkers and schedule dog walking appointments
+
+
+
+
+
+ handleInputChange(e.target.name, e.target.value)}
+ styleName={"text-area"}
+ name="description"
+ placeholder={"Describe your website"}
+ />
+
+
+
+
+
+
+
+
USERS
+
+ Describe your target audience—are they pharmaceutical reps?
+ Middle-aged mechanical engineers? Beekeepers? Write their user
+ story, using the format, “As a <type of users>, I want
+ <some goal>, so that <some reason>.”
+
+
+
+ Example:
+ “As a dog owner, I want someone trustworthy to walk my dog, so that
+ he feels loved when I'm at work.“
+
+
+
+
+
+ handleInputChange(e.target.name, e.target.value)}
+ styleName={"text-area"}
+ name="userStory"
+ placeholder={"Enter your user story"}
+ />
+
+
+
+
+
+
+
+
EXISTING WEBSITE?
+
+ If you have an existing website, please enter it here. Are we
+ designing additional pages for your existing website? Or are we
+ redesigning your current website? Please add additional information
+ on how the designers should reference and use your existing website.
+
+
+
+
+
+ handleInputChange(e.target.name, e.target.value)}
+ />
+
+
+ handleInputChange(e.target.name, e.target.value)}
+ styleName={"text-area"}
+ name="existingWebsiteInfo"
+ placeholder={
+ "Anything we should know about your existing website"
+ }
+ />
+
+
+
+
+ );
+};
+
+WebsitePurposeForm.defaultProps = {
+ price: 0,
+ serviceType: "",
+};
+
+WebsitePurposeForm.propTypes = {
+ estimate: PT.shape().isRequired,
+ price: PT.string,
+ serviceType: PT.string,
+ formData: PT.shape(),
+ setFormData: PT.func,
+};
+
+export default WebsitePurposeForm;
diff --git a/src/routes/WebsitePurposeLegacy/components/WebsitePurposeForm/styles.module.scss b/src/routes/WebsitePurposeLegacy/components/WebsitePurposeForm/styles.module.scss
new file mode 100644
index 000000000..3e760d4d5
--- /dev/null
+++ b/src/routes/WebsitePurposeLegacy/components/WebsitePurposeForm/styles.module.scss
@@ -0,0 +1,31 @@
+@import "styles/include";
+
+.websitePurposeForm {
+ .title {
+ font-weight: 600;
+ color: $grey-text;
+ font-size: 20px;
+ line-height: 20px;
+ text-transform: uppercase;
+ }
+
+ .description {
+ @include font-roboto;
+ font-size: 16px;
+ line-height: 26px;
+ margin-top: 24px;
+ color: $grey-text;
+ }
+
+ .form-row {
+ align-items: flex-start;
+ }
+
+ .formFieldWrapper {
+ margin-top: 48px;
+ }
+
+ .text-area {
+ height: 150px !important;
+ }
+}
\ No newline at end of file
diff --git a/src/routes/WebsitePurposeLegacy/index.jsx b/src/routes/WebsitePurposeLegacy/index.jsx
new file mode 100644
index 000000000..cf0b7ce96
--- /dev/null
+++ b/src/routes/WebsitePurposeLegacy/index.jsx
@@ -0,0 +1,158 @@
+import { navigate, redirectTo } from "@reach/router";
+import Button from "components/Button";
+import LoadingSpinner from "components/LoadingSpinner";
+import Page from "components/Page";
+import PageContent from "components/PageContent";
+import PageDivider from "components/PageDivider";
+import PageFoot from "components/PageElements/PageFoot";
+import PageH2 from "components/PageElements/PageH2";
+import Progress from "components/Progress";
+import { BUTTON_SIZE, BUTTON_TYPE } from "constants/";
+import React, { useEffect, useRef, useState } from "react";
+import { connect, useSelector, useDispatch } from "react-redux";
+import { getDynamicPriceAndTimelineEstimate } from "utils/";
+import { triggerAutoSave } from "../../actions/autoSave";
+import { resetIntakeForm, saveWebsitePurpose } from "../../actions/form";
+import { setProgressItem } from "../../actions/progress";
+import BackIcon from "../../assets/images/icon-back-arrow.svg";
+import WebsitePurposeForm from "./components/WebsitePurposeForm";
+import { WebsiteDesignBannerLegacy } from "../../components/Banners/WebsiteDesignBannerLegacy";
+import "./styles.module.scss";
+import { Breadcrumb } from "../../../src-ts";
+import { ROUTES } from "../../constants";
+
+/**
+ * Website Purpose Page
+ */
+const WebsitePurposeLegacy = ({ saveWebsitePurpose, setProgressItem }) => {
+ const [isLoading, setLoading] = useState(false);
+ const [formData, setFormData] = useState({
+ industry: { title: "Your Industry", option: "", value: null },
+ description: { title: "Description", option: "", value: "" },
+ userStory: { title: "User Story", option: "", value: "" },
+ existingWebsite: { title: "Existing Website?", option: "", value: "" },
+ existingWebsiteInfo: {
+ title: "Existing Website Information",
+ option: "",
+ value: "",
+ },
+ });
+ const dispatch = useDispatch();
+ const workType = useSelector((state) => state.form.workType);
+ const websitePurpose = useSelector((state) => state.form.websitePurpose);
+ const currentStep = useSelector((state) => state.progress.currentStep);
+ const fullState = useSelector((state) => state);
+
+ const isFormValid =
+ formData?.industry?.value &&
+ formData?.description?.value.length &&
+ formData?.userStory?.value.length;
+
+ const onBack = () => {
+ navigate("/self-service/work/new/website-design/basic-info");
+ };
+
+ const onNext = () => {
+ saveWebsitePurpose(formData);
+ navigate("/self-service/work/new/website-design/page-details");
+ setProgressItem(4);
+ };
+
+ const [firstMounted, setFirstMounted] = useState(true);
+ useEffect(() => {
+ if (!firstMounted) {
+ return;
+ }
+
+ setProgressItem(3);
+
+ if (currentStep === 0) {
+ redirectTo("/self-service");
+ }
+
+ if (websitePurpose) {
+ setFormData(websitePurpose);
+ }
+
+ setFirstMounted(false);
+
+ return () => {
+ dispatch(triggerAutoSave(true));
+ };
+ }, [currentStep, websitePurpose, dispatch, setProgressItem, firstMounted]);
+
+ const breadcrumbs = [
+ { url: ROUTES.DASHBOARD_PAGE, name: "My work" },
+ {
+ url: ROUTES.INTAKE_FORM,
+ name: "Start work",
+ onClick: () => {
+ dispatch(resetIntakeForm(true));
+ },
+ },
+ { url: ROUTES.WEBSITE_DESIGN_LEGACY, name: "Basic Info" },
+ { url: "#", name: "Website purpose" },
+ ];
+
+ return (
+ <>
+
+
+
+
+
+ WEBSITE PURPOSE
+
+
+
+
+
+
+
+
+
+
+
+
+ >
+ );
+};
+
+const mapStateToProps = ({ form }) => form;
+
+const mapDispatchToProps = {
+ saveWebsitePurpose,
+ setProgressItem,
+};
+
+export default connect(
+ mapStateToProps,
+ mapDispatchToProps
+)(WebsitePurposeLegacy);
diff --git a/src/routes/WebsitePurposeLegacy/styles.module.scss b/src/routes/WebsitePurposeLegacy/styles.module.scss
new file mode 100644
index 000000000..62334703b
--- /dev/null
+++ b/src/routes/WebsitePurposeLegacy/styles.module.scss
@@ -0,0 +1,17 @@
+@import "styles/include";
+
+.footerContent {
+ display: flex;
+ width: 100%;
+ flex-direction: row;
+ justify-content: space-between;
+
+ .footer-right {
+ display: flex;
+ gap: 16px;
+ }
+}
+
+.backButtonWrapper {
+ @include backButtonWrapper;
+}
diff --git a/src/routes/WorkItems/index.jsx b/src/routes/WorkItems/index.jsx
new file mode 100644
index 000000000..c8082b65f
--- /dev/null
+++ b/src/routes/WorkItems/index.jsx
@@ -0,0 +1,347 @@
+import React, {
+ useCallback,
+ useContext,
+ useEffect,
+ useMemo,
+ useState,
+} from "react";
+import _ from "lodash";
+import PT from "prop-types";
+import { navigate } from "@reach/router";
+import { connect, useSelector, useDispatch } from "react-redux";
+import LoadingSpinner from "components/LoadingSpinner";
+import Page from "components/Page";
+import PageContent from "components/PageContent";
+import { ROUTES } from "constants/";
+import workUtil from "utils/work";
+import Forum from "../Forum";
+
+import {
+ getWork,
+ getSummary,
+ getDetails,
+ getSolutions,
+ getSolutionsCount,
+ downloadSolution,
+ saveSurvey,
+ setIsSavingSurveyDone,
+ getForumNotifications,
+} from "../../actions/work";
+import { toggleSupportModal } from "../../actions/form";
+import { getUserProfile } from "../../thunks/profile";
+import { getProfile } from "../../selectors/profile";
+import ReviewTable from "../Review/components/ReviewTable";
+
+import {
+ Breadcrumb,
+ ChallengeMetadataName,
+ TabsNavbar,
+ workContext,
+ WorkDetailDetails,
+ WorkDetailHeader,
+ WorkDetailSummary,
+ WorkFeedback,
+ WorkStatusItem,
+ WorkDetailSolutions,
+} from "../../../src-ts";
+
+import "./styles.module.scss";
+
+/**
+ * Work Item Page
+ */
+const WorkItem = ({
+ workItemId,
+ work,
+ workItem,
+ isLoadingWork,
+ isLoadingSolutions,
+ isSavingSurveyDone,
+ forumNotifications,
+ getWork,
+ getSummary,
+ getDetails,
+ getSolutions,
+ getSolutionsCount,
+ downloadSolution,
+ saveSurvey,
+ setIsSavingSurveyDone,
+ getForumNotifications,
+}) => {
+ const dispatch = useDispatch();
+ const [selectedTab, setSelectedTab] = useState("summary");
+ const [showSurvey, setShowSurvey] = useState(false);
+ const profileData = useSelector(getProfile);
+
+ const workContextData = useContext(workContext);
+ const workStatus = !!work
+ ? workContextData.getStatusFromChallenge(work)
+ : undefined;
+
+ useEffect(() => {
+ getWork(workItemId);
+ }, [workItemId, getWork]);
+
+ const { summary, details, solutions, solutionsCount } = useMemo(
+ () => workItem,
+ [workItem]
+ );
+
+ const isReviewPhaseEnded = useMemo(() => {
+ if (work) {
+ return workUtil.isReviewPhaseEnded(work);
+ }
+ }, [work]);
+
+ useEffect(() => {
+ if (!work) {
+ return;
+ }
+
+ if (profileData) {
+ if (work.createdBy !== profileData.handle) {
+ navigate(ROUTES.HOME_PAGE);
+ }
+ }
+
+ if (selectedTab === "summary") {
+ if (!summary) {
+ getSummary(work);
+ }
+ } else if (selectedTab === "solutions") {
+ if (!solutions) {
+ isReviewPhaseEnded && getSolutions(work.id);
+ }
+ } else if (selectedTab === "details") {
+ if (!details) {
+ getDetails(work);
+ }
+ }
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, [
+ work,
+ selectedTab,
+ summary,
+ solutions,
+ details,
+ getSummary,
+ getSolutions,
+ getDetails,
+ isReviewPhaseEnded,
+ ]);
+
+ useEffect(() => {
+ if (!work) {
+ return;
+ }
+
+ if (work || selectedTab === "messaging") {
+ getForumNotifications(work.id);
+ }
+ }, [work, selectedTab, getForumNotifications]);
+
+ useEffect(() => {
+ if (!work) {
+ return;
+ }
+
+ if (isReviewPhaseEnded) {
+ getSolutionsCount(work.id);
+ }
+ }, [isReviewPhaseEnded, getSolutionsCount, work]);
+
+ useEffect(() => {
+ if (isSavingSurveyDone) {
+ getSummary(work);
+ setIsSavingSurveyDone(false);
+ }
+ }, [work, isSavingSurveyDone, setIsSavingSurveyDone, getSummary]);
+
+ useEffect(() => {
+ dispatch(getUserProfile());
+ }, [dispatch]);
+
+ // TODO: get routes from a provider
+ const breadcrumb = [
+ {
+ name: "My work",
+ url: ROUTES.DASHBOARD_PAGE,
+ },
+ {
+ name: work?.name,
+ url: "", // this isn't necessary bc it's not a link
+ },
+ ];
+
+ const navTabs = useMemo(
+ () =>
+ [
+ { id: "summary", title: "Summary" },
+ { id: "details", title: "Details" },
+ work &&
+ !workUtil.isMessagesDisabled(work) && {
+ id: "messaging",
+ title: "Messages",
+ badges: [
+ forumNotifications?.unreadNotifications && {
+ count: +forumNotifications?.unreadNotifications,
+ type: "info",
+ },
+ ].filter(Boolean),
+ },
+ {
+ id: "solutions",
+ title: "Solutions",
+ badges: [
+ isReviewPhaseEnded &&
+ !!solutionsCount && {
+ count: solutionsCount,
+ type: "info",
+ },
+ ].filter(Boolean),
+ },
+ ].filter(Boolean),
+ [work, solutionsCount, isReviewPhaseEnded]
+ );
+
+ const onTabChange = useCallback((tabId) => {
+ window.history.replaceState(window.history.state, "", `?tab=${tabId}`);
+ setSelectedTab(tabId);
+ }, []);
+
+ function saveFeedback(updatedCustomerFeedback) {
+ const metadata = (work.metadata || []).filter(
+ (item) => item.name !== ChallengeMetadataName.feedback
+ );
+
+ metadata.push({
+ name: ChallengeMetadataName.feedback,
+ value: JSON.stringify(updatedCustomerFeedback),
+ });
+
+ saveSurvey(work.id, metadata);
+ setShowSurvey(false);
+ }
+
+ return (
+ <>
+
+
+
+
+ setShowSurvey(true)}
+ />
+
+ {work && (
+
+ {work.tags[0] && (
+
{work.tags[0]}
+ )}
+
+
+ )}
+
+
+
+
+ {selectedTab === "summary" && (
+
+ {summary && (
+
+ )}
+
+ )}
+
+ {selectedTab === "details" && (
+
+
+
+ )}
+
+ {selectedTab === "solutions" && work && (
+
+
+
+ )}
+
+ {selectedTab === "messaging" && (
+
{work && }
+ )}
+
+ {selectedTab === "history" &&
}
+
+
+
+
+ setShowSurvey(false)}
+ saveSurvey={saveFeedback}
+ showSurvey={showSurvey}
+ />
+ >
+ );
+};
+
+WorkItem.propTypes = {
+ workItemId: PT.string,
+ work: PT.shape(),
+ workItem: PT.shape(),
+ isLoadingWork: PT.bool,
+ isLoadingSolutions: PT.bool,
+ isSavingSurveyDone: PT.bool,
+ getWork: PT.func,
+ getSummary: PT.func,
+ getDetails: PT.func,
+ getSolutions: PT.func,
+ downloadSolution: PT.func,
+ saveSurvey: PT.func,
+ setIsSavingSurveyDone: PT.func,
+};
+
+const mapStateToProps = (state) => {
+ const {
+ work,
+ workItem,
+ isLoadingWork,
+ isLoadingSolutions,
+ isSavingSurveyDone,
+ forumNotifications,
+ } = state.work;
+
+ return {
+ work,
+ workItem,
+ isLoadingWork,
+ isLoadingSolutions,
+ isSavingSurveyDone,
+ forumNotifications,
+ };
+};
+
+const mapDispatchToProps = {
+ getWork,
+ getSummary,
+ getDetails,
+ getSolutions,
+ getSolutionsCount,
+ downloadSolution,
+ saveSurvey,
+ setIsSavingSurveyDone,
+ getForumNotifications,
+ toggleSupportModal,
+};
+
+export default connect(mapStateToProps, mapDispatchToProps)(WorkItem);
diff --git a/src/routes/WorkItems/styles.module.scss b/src/routes/WorkItems/styles.module.scss
new file mode 100644
index 000000000..3cfb787e0
--- /dev/null
+++ b/src/routes/WorkItems/styles.module.scss
@@ -0,0 +1,66 @@
+@import "styles/include";
+
+.page {
+ padding-bottom: 0;
+}
+
+.pageContent {
+ padding: 0;
+ margin: 0;
+}
+
+.pageTitle {
+ @include font-barlow;
+ font-weight: 600;
+ font-size: 20px;
+ line-height: 1;
+ color: $gui-kit-gray-90;
+
+ display: flex;
+ align-items: center;
+ gap: 16px;
+ margin: 0 0 16px 0;
+}
+
+.message-count {
+ @include font-roboto;
+ font-weight: 700;
+ font-size: 10px;
+ line-height: 12px;
+ color: $tc-white;
+
+ display: inline-block;
+ min-width: 22px;
+ padding: 5px;
+ margin: -5px 0 -2px 4px;
+ text-align: center;
+ vertical-align: middle;
+ background-color: $pastel-red;
+ border-radius: 11px;
+}
+
+.markAsDoneBtn {
+ margin: 16px 0 0 auto;
+}
+
+.tabs-contents {
+ margin-top: 34px;
+}
+
+.status-line {
+ display: flex;
+ align-items: center;
+ gap: 24px;
+
+ margin-top: -8px;
+ margin-bottom: 24px;
+}
+
+.status-label {
+ @include font-roboto;
+ color: $black-60;
+ font-size: 12px;
+ font-weight: 700;
+ line-height: 16px;
+ text-transform: uppercase;
+}
diff --git a/src/selectors/profile.js b/src/selectors/profile.js
new file mode 100644
index 000000000..fc9a7e138
--- /dev/null
+++ b/src/selectors/profile.js
@@ -0,0 +1,6 @@
+import _ from "lodash";
+
+export const getProfile = (state) =>
+ _.pick(state.profile, ["firstName", "lastName", "email", "handle"]);
+
+export const isProfileLoading = (state) => state.profile.isLoading;
diff --git a/src/services/challenge.js b/src/services/challenge.js
new file mode 100644
index 000000000..76507b29b
--- /dev/null
+++ b/src/services/challenge.js
@@ -0,0 +1,145 @@
+import config from "../../config";
+import { axiosInstance as axios } from "./requestInterceptor";
+import { getAuthUserProfile } from "@topcoder/mfe-header";
+import _ from "lodash";
+import moment from "moment";
+import * as websiteDesignUtilsLegacy from "../utils/products/WebDesignLegacy";
+import { WorkType } from "../../src-ts";
+import {
+ formatChallengeCreationBody,
+ formatChallengeUpdateBody,
+} from "../utils/products";
+
+/**
+ * Get Challenge challenge details
+ * @param {String} challengeId challenge id
+ */
+export async function getChallengeDetails(challengeId) {
+ const response = await axios.get(
+ `${config.API.V5}/challenges/${challengeId}`
+ );
+
+ return response?.data;
+}
+
+/**
+ * Get Intake Form challenge details
+ * @param {String} userHandle
+ */
+export async function getIntakeFormChallenges(userHandle, challengeId) {
+ let url = `${config.API.V5}/challenges?createdBy=${userHandle}&selfService=true&status=New`;
+ url += challengeId ? `&id=${challengeId}` : "";
+ const response = await axios.get(url);
+
+ return response?.data;
+}
+
+/**
+ * Post a New Challenge
+ */
+export async function createChallenge(workType) {
+ const body =
+ workType === WorkType.designLegacy
+ ? websiteDesignUtilsLegacy.formatChallengeCreationBody()
+ : formatChallengeCreationBody(workType);
+
+ const response = await axios.post(
+ `${config.API.V5}/challenges`,
+ JSON.stringify(body)
+ );
+
+ return response?.data;
+}
+
+/**
+ * Patch a New Challenge
+ */
+export async function patchChallenge(intakeForm, challengeId) {
+ const jsonData = JSON.parse(intakeForm);
+ const workType = _.get(jsonData, "form.workType.selectedWorkType");
+ const body =
+ workType === WorkType.designLegacy
+ ? websiteDesignUtilsLegacy.formatChallengeUpdateBodyLegacy(intakeForm)
+ : formatChallengeUpdateBody(intakeForm, workType);
+
+ const response = await axios.patch(
+ `${config.API.V5}/challenges/${challengeId}`,
+ JSON.stringify(body)
+ );
+
+ return response?.data;
+}
+
+/**
+ * Patch a New Challenge
+ */
+export async function activateChallenge(challengeId) {
+ const challenge = await getChallengeDetails(challengeId);
+ const newDiscussions = [...(challenge.discussions || [])];
+ if (newDiscussions.length > 0) {
+ newDiscussions[0].name = challenge.name;
+ } else {
+ newDiscussions.push({
+ name: challenge.name,
+ type: "challenge",
+ provider: "vanilla",
+ });
+ }
+
+ let daysToAdd;
+ switch (moment(new Date()).weekday()) {
+ case moment().day("Friday").weekday():
+ daysToAdd = 3;
+ break;
+ case moment().day("Saturday").weekday():
+ daysToAdd = 2;
+ break;
+ case moment().day("Sunday").weekday():
+ daysToAdd = 1;
+ break;
+ default:
+ daysToAdd = 1;
+ }
+
+ const body = {
+ status: "Draft",
+ discussions: [...newDiscussions],
+ startDate: moment().add(daysToAdd, "days").format(),
+ };
+ const response = await axios.patch(
+ `${config.API.V5}/challenges/${challengeId}`,
+ JSON.stringify(body)
+ );
+
+ return response?.data;
+}
+
+/**
+ * Get Forum notifications
+ * @param {String} challengeId challenge id
+ */
+export async function getForumNotifications(challengeId) {
+ const profile = await getAuthUserProfile();
+ const response = await fetch(
+ `${config.VANILLA_FORUM_API}/groups/${challengeId}/member/${profile.handle}?access_token=${config.VANILLA_ACCESS_TOKEN}`,
+ {
+ header: {
+ "Content-Type": "application/json",
+ },
+ }
+ );
+
+ const res = await response.json();
+ return {
+ ...res,
+ challengeId,
+ };
+}
+
+export default {
+ getChallengeDetails,
+ getIntakeFormChallenges,
+ createChallenge,
+ patchChallenge,
+ getForumNotifications,
+};
diff --git a/src/services/form.js b/src/services/form.js
new file mode 100644
index 000000000..d47c2ce52
--- /dev/null
+++ b/src/services/form.js
@@ -0,0 +1,27 @@
+import config from "../../config";
+
+import { axiosInstance as axios } from "./requestInterceptor";
+
+/**
+ * Submit work to challenge API
+ * TODO: Integrate with real api
+ */
+export async function submitWork(form) {}
+
+/**
+ * Create support ticket
+ * @param {Object} request challenge id
+ * @param {String} challengeId challenge id
+ * @param {Boolean} isSelfService indicates if the challenge is self-service or not
+ */
+export async function createSupportTicket(request, challengeId, isSelfService) {
+ const supportRequest = {
+ ...request,
+ challengeId,
+ isSelfService: true, // TODO: clean up. Should always be true
+ };
+ const body = JSON.stringify(supportRequest);
+ const url = `${config.API.V5}/challenges/support-requests`;
+ const response = await axios.post(url, body);
+ return response?.data;
+}
diff --git a/src/services/index.js b/src/services/index.js
new file mode 100644
index 000000000..e022d8d82
--- /dev/null
+++ b/src/services/index.js
@@ -0,0 +1,15 @@
+import challenge from "./challenge";
+import form from "./form";
+import work from "./work";
+import myWork from "./myWork";
+import payment from "./payment";
+import profile from "./profile";
+
+export default {
+ form,
+ challenge,
+ work,
+ myWork,
+ payment,
+ profile,
+};
diff --git a/src/services/payment.js b/src/services/payment.js
new file mode 100644
index 000000000..d82034ff1
--- /dev/null
+++ b/src/services/payment.js
@@ -0,0 +1,65 @@
+import { CardNumberElement } from "@stripe/react-stripe-js";
+import _ from "lodash";
+import config from "../../config";
+import challengeService from "./challenge";
+import { axiosInstance as axios } from "./requestInterceptor";
+
+/**
+ * Initiates payment process
+ *
+ * @param {string} stripe stripe object
+ * @param {string} elements stripe elements
+ * @param {string} amount payment amount
+ * @param {string} currency payment currency
+ * @param {string} challengeId challenge id
+ *
+ * @returns {Promise} promise
+ */
+export async function processPayment(
+ stripe,
+ elements,
+ amount,
+ challengeId,
+ receiptEmail,
+ description
+) {
+ // get project ID from challenge
+ const challenge = await challengeService.getChallengeDetails(challengeId);
+
+ try {
+ // Call stripe api the create payment method, so the card info does not pass to our server.
+ const payload = await stripe.createPaymentMethod({
+ type: "card",
+ card: elements.getElement(CardNumberElement),
+ });
+
+ // WARNING: this will fail until the API accepts cardName, country, email, and zipCode
+ // until then, you can comment them out of the body, and it will work
+ // please remove this comment after the api is updated
+ const body = JSON.stringify({
+ amount,
+ currency: "USD",
+ receiptEmail,
+ paymentMethodId: payload.paymentMethod.id,
+ reference: "project",
+ referenceId: _.toString(challenge.projectId),
+ description,
+ });
+ const url = `${config.API.V5}/customer-payments`;
+ let response = await axios.post(url, body);
+
+ const customerPayment = response.data;
+ if (customerPayment.status === "requires_action") {
+ await stripe.handleCardAction(customerPayment.clientSecret);
+ response = await axios.patch(
+ `${config.API.V5}/customer-payments/${customerPayment.id}/confirm`,
+ JSON.stringify({})
+ );
+ }
+
+ return response?.data;
+ } catch (e) {
+ // TODO: Show error
+ throw e;
+ }
+}
diff --git a/src/services/profile.js b/src/services/profile.js
new file mode 100644
index 000000000..abad24e12
--- /dev/null
+++ b/src/services/profile.js
@@ -0,0 +1,47 @@
+import config from "../../config";
+import { axiosInstance as axios } from "./requestInterceptor";
+
+/**
+ * Updates user basic information
+ *
+ * @param {String} handle user handle
+ * @param {String} firstName first name
+ * @param {String} lastName last name
+ *
+ * @returns {() => Promise}
+ */
+export async function updateBasicInfo(handle, firstName, lastName) {
+ const response = await axios.put(
+ `${config.API.V5}/members/${handle}`,
+ JSON.stringify({
+ firstName,
+ lastName,
+ })
+ );
+
+ return response?.data;
+}
+/**
+ * Update user password
+ *
+ * @param {String} userId user id
+ * @param {String} currentPassword user's current password
+ * @param {String} password user's new password
+ *
+ * @returns {() => Promise}
+ */
+export async function updatePasswordV3(userId, currentPassword, password) {
+ const response = await axios.patch(
+ `${config.API.V3}/users/${userId}`,
+ JSON.stringify({
+ param: {
+ credential: {
+ currentPassword,
+ password,
+ },
+ },
+ })
+ );
+
+ return response?.data;
+}
diff --git a/src/services/requestInterceptor.js b/src/services/requestInterceptor.js
new file mode 100644
index 000000000..889cc2b46
--- /dev/null
+++ b/src/services/requestInterceptor.js
@@ -0,0 +1,41 @@
+import axios from "axios";
+import _ from "lodash";
+import { getAuthUserTokens } from "@topcoder/mfe-header";
+
+const CancelToken = axios.CancelToken;
+
+export { CancelToken };
+
+export const axiosInstance = axios.create({
+ headers: {
+ "Content-Type": "application/json",
+ },
+});
+
+// request interceptor to pass auth token
+axiosInstance.interceptors.request.use((config) => {
+ return getAuthUserTokens()
+ .then(({ tokenV3: token }) => {
+ config.headers["Authorization"] = `Bearer ${token}`;
+ return config;
+ })
+ .catch(() => config);
+});
+
+// response interceptor to handle error
+axiosInstance.interceptors.response.use(
+ (config) => {
+ // return the response
+ return config;
+ },
+ (error) => {
+ const serverErrorMessage = _.get(error, "response.data.message");
+
+ // if there is server error message, then return it inside `message` property of error
+ if (serverErrorMessage) {
+ error.message = serverErrorMessage;
+ }
+
+ return Promise.reject(error);
+ }
+);
diff --git a/src/services/work.js b/src/services/work.js
new file mode 100644
index 000000000..0a46796bd
--- /dev/null
+++ b/src/services/work.js
@@ -0,0 +1,203 @@
+import _ from "lodash";
+import moment from "moment";
+import config from "../../config";
+import { axiosInstance as axios } from "./requestInterceptor";
+import { WORK_TIMELINE, CHALLENGE_STATUS, WORK_STATUSES } from "constants";
+import workUtil from "utils/work";
+import { triggerDownload } from "utils";
+import { getChallengeDetails } from "./challenge";
+
+export const getWork = async (id) => {
+ const challengeId = id;
+
+ const response = await axios.get(
+ `${config.API.V5}/challenges/${challengeId}`
+ );
+
+ const data = response.data;
+ if (data.status.startsWith("Cancelled")) {
+ data.status = CHALLENGE_STATUS.CANCELLED;
+ }
+
+ return data;
+};
+
+export const getSummary = (work) => {
+ let timeline = WORK_TIMELINE.map((i) => {
+ const date = typeof i.date === "string" ? work[i.date] : i.date(work);
+ return {
+ name: i.name,
+ title: i.title,
+ date: date,
+ active: typeof i.active === "function" ? i.active(work) : i.active,
+ completed:
+ typeof i.completed === "function" ? i.completed(work) : i.completed,
+ hidden: typeof i.hidden === "function" ? i.hidden(work) : i.hidden,
+ };
+ });
+
+ // sort by date
+ const sendToSolutions = timeline.pop();
+
+ if (!sendToSolutions.hidden) {
+ let sorted = [];
+ let sendToSolutionsInserted = false;
+ for (let i = 0; i < timeline.length - 1; i += 1) {
+ const m = timeline[i];
+ if (!m.date) {
+ sorted.push(m);
+ } else if (
+ sendToSolutions.date &&
+ moment(m.date).isBefore(sendToSolutions.date)
+ ) {
+ sorted.push(m);
+ } else {
+ sendToSolutionsInserted = true;
+ sorted.push(sendToSolutions);
+
+ const after = timeline
+ .slice(i)
+ .map((m) => ({ ...m, active: false, completed: false }));
+
+ sorted.push(...after);
+ break;
+ }
+ }
+ if (!sendToSolutionsInserted) {
+ sorted.push(sendToSolutions);
+ }
+ timeline = sorted;
+ }
+
+ // set index
+ timeline = timeline.map((m, index) => ({
+ ...m,
+ index,
+ isFirst: index === 0,
+ isLast:
+ index === timeline.length - 1 - timeline.filter((i) => i.hidden).length,
+ }));
+
+ let status = _.get(
+ _.findLast(timeline, "active"),
+ "title",
+ workUtil.getStatus(work)
+ );
+
+ if (
+ status === WORK_STATUSES.DirectedToSales.name ||
+ status === WORK_STATUSES.PaymentFailed.name
+ ) {
+ status = "Redirected";
+ }
+
+ return {
+ status,
+ participants: work.numOfRegistrants,
+ solutions: work.numOfSubmissions,
+ submitDate: work.created,
+ workId: work.id,
+
+ timeline,
+ };
+};
+
+export const getDetails = (work) => {
+ const { metadata } = work || {};
+
+ let formData = {};
+
+ // TODO: Fix this
+ const filtered = _.filter(metadata, (m) => m.name === "intake-form");
+ (filtered || []).forEach((item) => {
+ if (item.name && item.name.includes(".")) {
+ const data = item.name.split(".");
+ const key = data[1];
+ formData[data[0]] = {
+ ...formData[data[0]],
+ [key]: JSON.parse(item.value),
+ };
+ } else {
+ if (item.name) {
+ formData[item.name] = JSON.parse(item.value);
+ }
+ }
+ });
+
+ return formData;
+};
+
+export const getSolutionsCount = async (workId) => {
+ const response = await axios.get(
+ `${config.API.V5}/submissions?challengeId=${workId}&perPage=500`
+ );
+ const submissions = response.data;
+ return submissions.length;
+
+ // const response = await axios.head(
+ // `${config.API.V5}/submissions?challengeId=${workId}`
+ // );
+ // return parseInt(_.get(response.headers, 'X-Total'), 10);
+};
+
+export const getSolutions = async (workId) => {
+ const challenge = await getChallengeDetails(workId);
+ if (!challenge?.winners || challenge?.winners?.length === 0) return [];
+ const response = await axios.get(
+ `${config.API.V5}/submissions?challengeId=${workId}&perPage=500`
+ );
+
+ const submissions = response.data;
+ const res = [];
+
+ for (const winner of challenge.winners) {
+ try {
+ const memberRes = await axios.get(
+ `${config.API.V5}/members/${winner.handle}`
+ );
+ const { userId } = memberRes.data;
+ res.push({
+ ..._.find(
+ submissions,
+ (s) => _.toString(s.memberId) === _.toString(userId)
+ ),
+ placement: winner.placement,
+ });
+ } catch (e) {}
+ }
+ return _.sortBy(res, "placement");
+};
+
+export const downloadSolution = async (solutionId) => {
+ const submissionId = solutionId;
+ const response = await axios({
+ url: `${config.API.V5}/submissions/${submissionId}/download`,
+ method: "GET",
+ responseType: "blob",
+ });
+
+ const blob = response.data;
+ triggerDownload(`submission-${solutionId}.zip`, blob);
+};
+
+export const saveSurvey = async (workId, metadata) => {
+ const challengeId = workId;
+ const body = { metadata };
+
+ const response = await axios.patch(
+ `${config.API.V5}/challenges/${challengeId}`,
+ JSON.stringify(body)
+ );
+
+ return response.data;
+};
+
+export default {
+ getWork,
+ getSummary,
+ getDetails,
+ getSolutions,
+ getSolutionsCount,
+ downloadSolution,
+ saveSurvey,
+};
diff --git a/src/set-public-path.js b/src/set-public-path.js
new file mode 100644
index 000000000..d7318c0c6
--- /dev/null
+++ b/src/set-public-path.js
@@ -0,0 +1,8 @@
+import { setPublicPath } from "systemjs-webpack-interop";
+/* This dynamically sets the webpack public path so that code splits work properly. See related:
+ * https://github.com/joeldenning/systemjs-webpack-interop#what-is-this
+ * https://webpack.js.org/guides/public-path/#on-the-fly
+ * https://single-spa.js.org/docs/faq/#code-splits
+ */
+
+setPublicPath("@topcoder/mfe-customer-work");
diff --git a/src/store.js b/src/store.js
new file mode 100644
index 000000000..320700839
--- /dev/null
+++ b/src/store.js
@@ -0,0 +1,32 @@
+/* global process */
+/**
+ * Configure Redux Store
+ */
+import { applyMiddleware, createStore } from "redux";
+import { createLogger } from "redux-logger";
+import { createPromise } from "redux-promise-middleware";
+import thunk from "redux-thunk";
+import { saveUpdatesMiddleware } from "./autoSaveBeforeLogin";
+import rootReducer from "./reducers";
+
+const middlewares = [
+ // if payload of action is promise it would split action into 3 states
+ createPromise({
+ promiseTypeSuffixes: ["PENDING", "SUCCESS", "ERROR"],
+ }),
+ thunk,
+ saveUpdatesMiddleware,
+];
+
+// enable Redux Logger in in DEV environment
+if (process.env.APPMODE !== "production") {
+ const { createLogger } = require("redux-logger");
+ const logger = createLogger();
+ middlewares.push(logger);
+}
+
+// const persistedState = loadSavedFormCookie();
+
+const store = createStore(rootReducer, applyMiddleware(...middlewares));
+
+export default store;
diff --git a/src/styles/_include.scss b/src/styles/_include.scss
new file mode 100644
index 000000000..31e4406d9
--- /dev/null
+++ b/src/styles/_include.scss
@@ -0,0 +1,4 @@
+// This file should ONLY import mixins and variables so it can be included multiple times.
+// It should NOT contain any CSS class-names as would be duplicated in the resulting file.
+@import "mixins";
+@import "variables";
diff --git a/src/styles/_mixins.scss b/src/styles/_mixins.scss
new file mode 100644
index 000000000..e4fd32d48
--- /dev/null
+++ b/src/styles/_mixins.scss
@@ -0,0 +1,68 @@
+// reusable mixins
+
+@mixin font-roboto {
+ font-family: "Roboto", Arial, Helvetica, sans-serif;
+}
+
+@mixin font-barlow-condensed {
+ font-family: "Barlow Condensed", Arial, Helvetica, sans-serif;
+}
+
+@mixin font-barlow {
+ font-family: "Barlow", Arial, Helvetica, sans-serif;
+}
+
+@mixin mobile {
+ @media (max-width: 1199px) {
+ @content;
+ }
+}
+
+@mixin desktop {
+ @media (min-width: 1200px) {
+ @content;
+ }
+}
+
+@mixin confirmationBox {
+ background: $orange-25;
+ border-radius: 8px;
+ margin: 16px 0;
+ line-height: 26px;
+ padding: 16px;
+ font-size: 16px
+}
+
+@mixin formInputText {
+ background-color: $black-0 !important;
+ box-sizing: border-box !important;
+ color: #444 !important;
+ font-size: 18px !important;
+ height: 32px !important;
+ outline: none !important;
+ border: 0 !important;
+ padding: 0 15px !important;
+ width: 100% !important;
+ &::placeholder {
+ color: $black-40 !important;
+ font-size: 18px !important;
+ text-transform: none !important;
+ }
+ &:focus {
+ box-shadow: none !important;
+ }
+
+ &:disabled {
+ background-color: $grey-bg !important;
+ }
+}
+
+@mixin backButtonWrapper {
+ min-width: 12px;
+ margin-top: 0px;
+}
+
+@mixin backButtonContainer {
+ display: flex;
+ flex: 1;
+}
diff --git a/src/styles/_reset.scss b/src/styles/_reset.scss
new file mode 100644
index 000000000..6f1c29b4c
--- /dev/null
+++ b/src/styles/_reset.scss
@@ -0,0 +1,3 @@
+strong {
+ font-weight: bold;
+}
diff --git a/src/styles/_variables.scss b/src/styles/_variables.scss
new file mode 100644
index 000000000..d30a3f4c1
--- /dev/null
+++ b/src/styles/_variables.scss
@@ -0,0 +1,46 @@
+$green1: #137d60;
+$blue1: #2f757e;
+$blue2: #eaf6fd;
+$grey-bg: #f4f4f4;
+$teal: #227681;
+$grey-text: #2a2a2a;
+$black: #000000;
+$black-20: #D4D4D4;
+$divider-color: #e9e9e9;
+$orange-25: #fff0ce;
+$red-120: #be405e;
+$purple-100: #9d41c9;
+$gray-10: #e9e9e9;
+$gray-80: #555555;
+$gui-kit-level-2: #0ab88a;
+$gui-kit-level-5: #ef476f;
+$gui-kit-gray-90: #2a2a2a;
+$tc-white: #fff;
+$gui-kit-gray-30: #aaa;
+$link-blue: #2e55b9;
+$green2: #06d6a0;
+$aqua: #1E94A3;
+$black-100: #2A2A2A;
+$black-60: #767676;
+$white: #fff;
+$gray-70: #e5e5e5;
+$black-100: #2A2A2A;
+$black-20: #D4D4D4;
+
+$error-color: $gui-kit-level-5;
+$success-color: $gui-kit-level-2;
+$red: #e90c5a;
+$tips-background: #fafafb;
+$tips-shadow: 0 1px 6px 1px rgba(0, 0, 0, 0.2);
+$tc-gray-90: #2a2a2b;
+$tc-green: #60c700;
+$pastel-red: $red;
+$pastel-turq: #12c188;
+$black-0: #ffffff;
+$black-40: #aaaaaa;
+$gold-1: #ffd84d;
+$pastel-purple: #6569ff;
+$link-blue-dark: #0d61bf;
+$discount-green: #35AC35;
+$turqoise: #E0FAF3;
+$orange-100: #FFC43D;
diff --git a/src/styles/main.module.scss b/src/styles/main.module.scss
new file mode 100644
index 000000000..3bc84b76b
--- /dev/null
+++ b/src/styles/main.module.scss
@@ -0,0 +1,31 @@
+// This file should contain global styles for the microapp
+
+@import "styles/include";
+@import "reset";
+
+.topcoder-mfe-customer-work {
+ @include font-barlow;
+ color: #555;
+ max-width: 1440px;
+ width: 100%;
+ margin: 0 auto;
+ flex: 1 1 auto;
+}
+
+:global {
+ #single-spa-main {
+ margin: 0 auto;
+ height: 100vh;
+
+ display: flex;
+ > * {
+ width: 100%;
+ display: flex;
+ flex-direction: column;
+ }
+ }
+}
+
+body {
+ background-color: $tc-white;
+}
diff --git a/src/styles/main.vendor.scss b/src/styles/main.vendor.scss
new file mode 100644
index 000000000..d841d74b7
--- /dev/null
+++ b/src/styles/main.vendor.scss
@@ -0,0 +1 @@
+@import "~react-redux-toastr/src/styles/index";
diff --git a/src/thunks/profile.js b/src/thunks/profile.js
new file mode 100644
index 000000000..1e2e7516d
--- /dev/null
+++ b/src/thunks/profile.js
@@ -0,0 +1,21 @@
+import { getAuthUserProfile } from "@topcoder/mfe-header";
+import * as actions from "actions/profile";
+import _ from "lodash";
+
+/**
+ * Loads User Profile Information
+ * @returns {() => Promise}
+ */
+export const getUserProfile = () => async (dispatch, getState) => {
+ const state = getState();
+
+ getAuthUserProfile().then((authUser) => {
+ const profile = _.pick(authUser, [
+ "firstName",
+ "lastName",
+ "email",
+ "handle",
+ ]);
+ dispatch(actions.getUserProfile(profile));
+ });
+};
diff --git a/src/topcoder-mfe-customer-work.js b/src/topcoder-mfe-customer-work.js
new file mode 100644
index 000000000..ae388ad39
--- /dev/null
+++ b/src/topcoder-mfe-customer-work.js
@@ -0,0 +1,17 @@
+import "./set-public-path";
+import React from "react";
+import ReactDOM from "react-dom";
+import singleSpaReact from "single-spa-react";
+import Root from "./root.component";
+
+const lifecycles = singleSpaReact({
+ React,
+ ReactDOM,
+ rootComponent: Root,
+ errorBoundary(err, info, props) {
+ // Customize the root error boundary for your microfrontend here.
+ return null;
+ },
+});
+
+export const { bootstrap, mount, unmount } = lifecycles;
diff --git a/src/utils/formatters.js b/src/utils/formatters.js
new file mode 100644
index 000000000..438cacaed
--- /dev/null
+++ b/src/utils/formatters.js
@@ -0,0 +1,13 @@
+import { WORK_STATUS_MAP } from "constants/index.js";
+
+const rxUnderscore = /_/g;
+
+/**
+ * Formats work type.
+ *
+ * @param {string} type work type
+ * @returns {string}
+ */
+export function formatWorkType(type) {
+ return type.replace(rxUnderscore, " ").toLowerCase();
+}
diff --git a/src/utils/hooks/useTargetSize.js b/src/utils/hooks/useTargetSize.js
new file mode 100644
index 000000000..dead9c928
--- /dev/null
+++ b/src/utils/hooks/useTargetSize.js
@@ -0,0 +1,34 @@
+import React from "react";
+
+export const useTargetSize = () => {
+ const [size, setSize] = React.useState();
+ const ref = React.useRef();
+
+ React.useLayoutEffect(() => {
+ setSize(ref.current.getBoundingClientRect());
+ }, []);
+
+ React.useLayoutEffect(() => {
+ const targetNode = ref.current;
+ const resizeObserver = new ResizeObserver((entries) => {
+ for (const entry of entries) {
+ if (entry.contentBoxSize) {
+ const contentBoxSize = Array.isArray(entry.contentBoxSize)
+ ? entry.contentBoxSize[0]
+ : entry.contentBoxSize;
+ setSize({
+ width: Math.floor(contentBoxSize.inlineSize),
+ height: Math.floor(contentBoxSize.blockSize),
+ });
+ }
+ }
+ });
+ resizeObserver.observe(targetNode);
+
+ return () => {
+ resizeObserver.disconnect();
+ };
+ }, []);
+
+ return [size, ref];
+};
diff --git a/src/utils/index.js b/src/utils/index.js
new file mode 100644
index 000000000..8b7e48fa7
--- /dev/null
+++ b/src/utils/index.js
@@ -0,0 +1,249 @@
+import {
+ workPriceData,
+ workPriceDesign,
+ workPriceDesignLegacy,
+ workPriceFindData,
+ workPriceProblem,
+} from '../../src-ts'
+import * as dataExplorationConfigs from "../constants/products/DataExploration";
+import * as findMeDataConfigs from "../constants/products/FindMeData";
+import * as websiteDesignConfigs from "../constants/products/WebsiteDesign";
+import * as dataAdvisoryConfigs from "../constants/products/DataAdvisory";
+import * as websiteDesignLegacyConfigs from "../constants/products/WebsiteDesignLegacy";
+import _ from "lodash";
+
+/**
+ * Scroll to top of page
+ */
+export function scrollToTop() {
+ window.scrollTo(0, 0);
+}
+
+/**
+ * Function used to sort objects that have "sortOrder" values.
+ *
+ * @param {Object} objA object A
+ * @param {number} objA.sortOrder object A sort order
+ * @param {Object} objB object B
+ * @param {number} objB.sortOrder object B sort order
+ * @returns {number}
+ */
+export function sortBySortOrder(objA, objB) {
+ return objA.sortOrder - objB.sortOrder;
+}
+
+export function triggerDownload(fileName, blob) {
+ const url = window.URL.createObjectURL(new Blob([blob]));
+ const link = document.createElement("a");
+ link.href = url;
+ link.setAttribute("download", fileName);
+ document.body.appendChild(link);
+ link.click();
+ link.parentNode.removeChild(link);
+}
+
+/**
+ * Pad a number with leading zeros.
+ */
+export function padStart(target, targetLength = 2) {
+ if (target === 0) {
+ return target;
+ }
+
+ return String.prototype.padStart.call(target, targetLength, "0");
+}
+
+export function getDataAdvisoryPriceAndTimelineEstimate() {
+ const total = workPriceProblem.getPrice(workPriceProblem);
+ return {
+ total,
+ stickerPrice: workPriceProblem.base,
+ submissionDuration: 3,
+ totalDuration: dataAdvisoryConfigs.DEFAULT_DURATION,
+ prizeSets: [
+ {
+ prizes: [
+ ..._.map(dataAdvisoryConfigs.PRIZES_PAYMENT_BREAKDOWN, (p) => ({
+ type: "USD",
+ value: _.round(p * total),
+ })),
+ ],
+ description: "Challenge Prizes",
+ type: "placement",
+ },
+ {
+ prizes: [
+ ..._.map(dataAdvisoryConfigs.REVIEWER_PAYMENT_BREAKDOWN, (p) => ({
+ type: "USD",
+ value: _.round(p * total),
+ })),
+ ],
+ description: "Reviewer Payment",
+ type: "reviewer",
+ },
+ ],
+ };
+}
+
+export function getDataExplorationPriceAndTimelineEstimate() {
+ const total = workPriceData.getPrice(workPriceData)
+ return {
+ total,
+ stickerPrice: workPriceData.base,
+ submissionDuration: 3,
+ totalDuration: dataExplorationConfigs.DEFAULT_DURATION,
+ prizeSets: [
+ {
+ prizes: [
+ ..._.map(dataExplorationConfigs.PRIZES_PAYMENT_BREAKDOWN, (p) => ({
+ type: "USD",
+ value: _.round(p * total),
+ })),
+ ],
+ description: "Challenge Prizes",
+ type: "placement",
+ },
+ {
+ prizes: [
+ ..._.map(dataExplorationConfigs.REVIEWER_PAYMENT_BREAKDOWN, (p) => ({
+ type: "USD",
+ value: _.round(p * total),
+ })),
+ ],
+ description: "Reviewer Payment",
+ type: "reviewer",
+ },
+ ],
+ };
+}
+
+export function getWebsiteDesignPriceAndTimelineEstimate() {
+ const total = workPriceDesign.getPrice(workPriceDesign);
+ return {
+ total,
+ // stickerPrice: workPriceDesign.base,
+ submissionDuration: 4,
+ totalDuration: websiteDesignConfigs.DEFAULT_DURATION,
+ prizeSets: [
+ {
+ prizes: [
+ ..._.map(websiteDesignConfigs.PRIZES_PAYMENT_BREAKDOWN, (p) => ({
+ type: "USD",
+ value: _.round(p * total),
+ })),
+ ],
+ description: "Challenge Prizes",
+ type: "placement",
+ },
+ {
+ prizes: [
+ ..._.map(websiteDesignConfigs.REVIEWER_PAYMENT_BREAKDOWN, (p) => ({
+ type: "USD",
+ value: _.round(p * total),
+ })),
+ ],
+ description: "Reviewer Payment",
+ type: "reviewer",
+ },
+ ],
+ };
+}
+
+export function getFindMeDataPriceAndTimelineEstimate() {
+
+ const total = workPriceFindData.getPrice(workPriceFindData);
+
+ const placementPercentages = workPriceFindData.usePromo
+ ? findMeDataConfigs.PROMOTIONAL_PRIZES_PAYMENT_BREAKDOWN
+ : findMeDataConfigs.BASE_PRIZES_PAYMENT_BREAKDOWN;
+ const reviewerPercentages = workPriceFindData.usePromo
+ ? findMeDataConfigs.PROMOTIONAL_REVIEWER_PAYMENT_BREAKDOWN
+ : findMeDataConfigs.BASE_REVIEWER_PAYMENT_BREAKDOWN;
+
+ return {
+ total,
+ stickerPrice: workPriceFindData.base,
+ submissionDuration: 3,
+ totalDuration: findMeDataConfigs.DEFAULT_DURATION,
+ prizeSets: [
+ {
+ prizes: placementPercentages.map((percentage) => ({
+ type: "USD",
+ value: _.round(percentage * total),
+ })),
+ description: "Challenge Prizes",
+ type: "placement",
+ },
+ {
+ prizes: reviewerPercentages.map((percentage) => ({
+ type: "USD",
+ value: _.round(percentage * total),
+ })),
+ description: "Reviewer Payment",
+ type: "reviewer",
+ },
+ ],
+ };
+}
+
+export function getDynamicPriceAndTimelineEstimate(formData) {
+ const numOfPages = formData?.pageDetails?.pages?.length || 1
+ const numOfDevices = formData?.basicInfo?.selectedDevice.option.length || 1
+ return getDynamicPriceAndTimeline(numOfPages, numOfDevices);
+}
+
+/**
+ * Get dynamic price
+ * @param {Number} pages the number of pages
+ * @param {Number} devices the number of devices
+ */
+export function getDynamicPriceAndTimeline(pages, devices) {
+
+ const total = workPriceDesignLegacy.getPrice(workPriceDesignLegacy, pages, devices);
+
+ const pricing = {
+ total,
+ stickerPrice: total * 2,
+ ...websiteDesignLegacyConfigs.DURATION_MAPPING[pages - 1][devices - 1],
+ costPerAdditionalPage: devices * websiteDesignLegacyConfigs.PER_PAGE_COST,
+ prizeSets: [
+ {
+ prizes: [
+ ..._.map(
+ websiteDesignLegacyConfigs.PRIZES_PAYMENT_BREAKDOWN,
+ (p) => ({
+ type: "USD",
+ value: _.round(p * total),
+ })
+ ),
+ ],
+ description: "Challenge Prizes",
+ type: "placement",
+ },
+ {
+ prizes: [
+ ..._.map(
+ websiteDesignLegacyConfigs.REVIEWER_PAYMENT_BREAKDOWN,
+ (p) => ({
+ type: "USD",
+ value: _.round(p * total),
+ })
+ ),
+ ],
+ description: "Reviewer Payment",
+ type: "reviewer",
+ },
+ ],
+ };
+
+ return pricing;
+}
+
+/**
+ * Format number to currency
+ * @param {Number} num number
+ * @returns the formated string
+ */
+export function currencyFormat(num) {
+ return "$" + _.toString(num).replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,");
+}
diff --git a/src/utils/products/WebDesignLegacy/index.js b/src/utils/products/WebDesignLegacy/index.js
new file mode 100644
index 000000000..c53df350d
--- /dev/null
+++ b/src/utils/products/WebDesignLegacy/index.js
@@ -0,0 +1,308 @@
+import _ from "lodash";
+import {
+ CHALLENGE_FIELD_VALUES,
+ DEVICE_TYPE_DETAILS,
+ DEFAULT_TIMELINE,
+} from "../../../constants/products/WebsiteDesignLegacy";
+import { getDynamicPriceAndTimeline } from "utils/";
+import templateDataLegacy from "../../../assets/data/spec-templates/website-design-legacy.json";
+
+export function formatChallengeCreationBody() {
+ return {
+ typeId: CHALLENGE_FIELD_VALUES.typeId,
+ trackId: CHALLENGE_FIELD_VALUES.trackId,
+ timelineTemplateId: CHALLENGE_FIELD_VALUES.timelineTemplateId,
+ name: "new-self-service-project",
+ ...templateDataLegacy,
+ legacy: {
+ selfService: true,
+ },
+ tags: ["Website Design"],
+ discussions: [
+ {
+ name: "new-self-service-project",
+ type: "challenge",
+ provider: "vanilla",
+ },
+ ],
+ };
+}
+
+export function formatChallengeUpdateBodyLegacy(intakeForm) {
+ const jsonData = JSON.parse(intakeForm);
+ const name = _.get(jsonData, "form.basicInfo.projectTitle.value");
+
+ const intakeMetadata = [];
+
+ const numOfPages = _.get(jsonData, "form.pageDetails.pages.length", 1);
+ const numOfDevices = _.get(
+ jsonData,
+ "form.basicInfo.selectedDevice.option.length",
+ 1
+ );
+
+ intakeMetadata.push({
+ name: "websitePurpose.description",
+ required: true,
+ value: _.get(jsonData, "form.websitePurpose.description.value"),
+ });
+
+ intakeMetadata.push({
+ name: "basicInfo.numberOfPages",
+ required: true,
+ value: numOfPages === 1 ? "1 Screen" : `${numOfPages} Screens`,
+ });
+
+ intakeMetadata.push({
+ name: "basicInfo.numberOfDevices",
+ required: true,
+ value: numOfDevices === 1 ? "1 Device" : `${numOfDevices} Devices`,
+ });
+
+ intakeMetadata.push({
+ name: "basicInfo.supportedDevices",
+ required: true,
+ value: _.map(
+ _.get(jsonData, "form.basicInfo.selectedDevice.option", []),
+ (device) => `- **${device}**: ${DEVICE_TYPE_DETAILS[_.toLower(device)]}`
+ ).join(" \n\n "),
+ });
+
+ intakeMetadata.push({
+ name: "websitePurpose.industry",
+ required: true,
+ value: _.get(jsonData, "form.websitePurpose.industry.value.label"),
+ });
+
+ intakeMetadata.push({
+ name: "websitePurpose.userStory",
+ required: true,
+ value: _.get(jsonData, "form.websitePurpose.userStory.value"),
+ });
+
+ const existingWebsite = _.get(
+ jsonData,
+ "form.websitePurpose.existingWebsite.value"
+ );
+
+ const existingWebsiteInfo = _.get(
+ jsonData,
+ "form.websitePurpose.existingWebsiteInfo.value",
+ "None"
+ );
+
+ intakeMetadata.push({
+ name: "websitePurpose.existingWebsite",
+ value: existingWebsite
+ ? `[${existingWebsite}](${existingWebsite}) \n\n ${existingWebsiteInfo}`
+ : "None",
+ });
+
+ intakeMetadata.push({
+ name: "pageDetails",
+ required: true,
+ value: _.map(
+ _.get(jsonData, "form.pageDetails.pages", []),
+ (p, i) =>
+ `### PAGE ${i + 1} NAME:\n\n ${
+ p.pageName
+ } \n\n#### Requirements & Details:\n\n ${p.pageDetails}`
+ ).join("\n\n"),
+ });
+
+ intakeMetadata.push({
+ name: "branding.theme",
+ required: true,
+ value: _.get(jsonData, "form.branding.theme.value"),
+ });
+
+ const webSitesForInspiration = _.get(jsonData, "form.branding.inspiration");
+
+ if (
+ webSitesForInspiration &&
+ webSitesForInspiration.length > 0 &&
+ _.filter(webSitesForInspiration, (w) => !_.isEmpty(w.website.value))
+ .length > 0
+ ) {
+ intakeMetadata.push({
+ name: "branding.websitesForInspiration",
+ value: `### INSPIRATION: \n\n ${_.map(
+ webSitesForInspiration,
+ (w) =>
+ `Website Address: [${w.website.value}](${w.website.value})\n - ${w.feedback.value}`
+ )}`,
+ });
+ } else {
+ intakeMetadata.push({
+ name: "branding.websitesForInspiration",
+ value: "\n",
+ });
+ }
+
+ const anythingToAvoid = _.get(
+ jsonData,
+ "form.branding.anythingToAvoid.value",
+ "None"
+ );
+
+ intakeMetadata.push({
+ name: "branding.anythingToAvoid",
+ value: anythingToAvoid !== "" ? anythingToAvoid : "None",
+ });
+
+ intakeMetadata.push({
+ name: "branding.colorOption",
+ value: _.get(jsonData, "form.branding.colorOption.option", ["None"]).join(
+ ", "
+ ),
+ });
+
+ intakeMetadata.push({
+ name: "branding.specificColor",
+ value: _.get(jsonData, "form.branding.specificColor.value", "None"),
+ });
+
+ intakeMetadata.push({
+ name: "branding.fontOption",
+ value: _.get(jsonData, "form.branding.fontOption.option", "None"),
+ });
+
+ const fontUrl = _.get(jsonData, "form.branding.fontUrl.option");
+
+ intakeMetadata.push({
+ name: "branding.fontUrl",
+ value: fontUrl ? `[${fontUrl}](${fontUrl})` : "None",
+ });
+
+ const fontUsage = _.get(
+ jsonData,
+ "form.branding.fontUsageDescription.option",
+ "None"
+ );
+
+ intakeMetadata.push({
+ name: "branding.fontUsageDescription",
+ value: fontUsage,
+ });
+
+ const assetsUrl = _.get(jsonData, "form.branding.assetsUrl.option");
+
+ intakeMetadata.push({
+ name: "branding.assetsUrl",
+ value: assetsUrl ? `[${assetsUrl}](${assetsUrl})` : "None",
+ });
+
+ const stockPhotos = _.get(
+ jsonData,
+ "form.branding.allowStockOption.option",
+ "Yes, allow stock photos"
+ );
+
+ const stockPhotosText =
+ stockPhotos === "" || stockPhotos === "Yes, allow stock photos"
+ ? "Yes, stock photos allowed. [See this page for more details.](https://www.topcoder.com/thrive/articles/stock-artwork-font-and-icon-policies)"
+ : "No, stock photos not allowed";
+
+ intakeMetadata.push({
+ name: "branding.stockPhotos",
+ value: stockPhotosText,
+ });
+
+ intakeMetadata.push({
+ name: "allowStockArt",
+ value: _.toString(
+ (stockPhotos !== "" ? stockPhotos : "Yes, allow stock photos") ===
+ "Yes, allow stock photos"
+ ),
+ });
+
+ const selectedDeliverableOption = _.get(
+ jsonData,
+ "form.branding.selectedDeliverableOption.option"
+ );
+ let selectedDeliverableOptionFormatted;
+ switch (selectedDeliverableOption) {
+ case "Any (recommended for best participation)":
+ selectedDeliverableOptionFormatted =
+ "Design source files must be created with AdobeXD, Figma or Sketch applications";
+ break;
+ case "Adobe XD":
+ selectedDeliverableOptionFormatted =
+ "Design source files must be created with AdobeXD application.";
+ break;
+ case "Figma":
+ selectedDeliverableOptionFormatted =
+ "Design source files must be created with Figma application.";
+ break;
+ case "Sketch":
+ selectedDeliverableOptionFormatted =
+ "Design source files must be created with Sketch application.";
+ break;
+ case "Other":
+ selectedDeliverableOptionFormatted = `Design source files must be created with ${_.get(
+ jsonData,
+ "form.branding.customDeliverable.option"
+ )} application.`;
+ break;
+ default:
+ selectedDeliverableOptionFormatted =
+ "Design source files must be created with AdobeXD, Figma or Sketch applications";
+ }
+
+ intakeMetadata.push({
+ name: "branding.selectedDeliverableOption",
+ value: selectedDeliverableOptionFormatted,
+ });
+
+ intakeMetadata.push({
+ name: "submissionLimit",
+ value: JSON.stringify({ unlimited: "true", limit: "false", count: "" }),
+ });
+
+ intakeMetadata.push({
+ name: "submissionsViewable",
+ value: "false",
+ });
+
+ const dynamicPriceAndTimeline = getDynamicPriceAndTimeline(
+ numOfPages,
+ numOfDevices
+ );
+
+ const body = {
+ ...(name ? { name } : {}),
+ ...templateDataLegacy,
+ metadata: [
+ ..._.map(intakeMetadata, (e) => ({
+ name: e.name,
+ value:
+ _.toString(e.value).trim() === ""
+ ? e.required
+ ? ""
+ : "None"
+ : _.toString(e.value),
+ })),
+ {
+ name: "intake-form",
+ value: intakeForm,
+ },
+ ],
+ };
+ if (dynamicPriceAndTimeline) {
+ body.prizeSets = dynamicPriceAndTimeline.prizeSets;
+ body.phases = [
+ {
+ // Submission
+ phaseId: "6950164f-3c5e-4bdc-abc8-22aaf5a1bd49",
+ duration: (dynamicPriceAndTimeline.totalDuration - 2) * 86400,
+ },
+ {
+ // Registration
+ phaseId: "a93544bc-c165-4af4-b55e-18f3593b457a",
+ duration: (dynamicPriceAndTimeline.totalDuration - 2) * 86400,
+ },
+ ...DEFAULT_TIMELINE,
+ ];
+ }
+ return body;
+}
diff --git a/src/utils/products/index.js b/src/utils/products/index.js
new file mode 100644
index 000000000..8b63d604a
--- /dev/null
+++ b/src/utils/products/index.js
@@ -0,0 +1,170 @@
+import { WorkType, workFactoryMapFormData } from "../../../src-ts";
+import {
+ getFindMeDataPriceAndTimelineEstimate,
+ getDataAdvisoryPriceAndTimelineEstimate,
+ getDataExplorationPriceAndTimelineEstimate,
+ getWebsiteDesignPriceAndTimelineEstimate,
+} from "../../utils/";
+import {
+ DEFAULT_TIMELINE as findMeDataTimeline,
+ CHALLENGE_FIELD_VALUES as findMeDataChallengeValues,
+} from "../../constants/products/FindMeData";
+import {
+ DEFAULT_TIMELINE as dataAdvisoryTimeline,
+ CHALLENGE_FIELD_VALUES as dataAdvisoryChallengeValues,
+} from "../../constants/products/DataAdvisory";
+import {
+ DEFAULT_TIMELINE as dataExplorationTimeline,
+ CHALLENGE_FIELD_VALUES as dataExplorationChallengeValues,
+} from "../../constants/products/DataExploration";
+import {
+ DEFAULT_TIMELINE as websiteDesignTimeline,
+ CHALLENGE_FIELD_VALUES as websiteDesignChallengeValues,
+} from "../../constants/products/WebsiteDesign";
+
+export function formatChallengeCreationBody(workType) {
+ const [challengeFieldValues, tags] = getCreationConfigs(workType);
+ return {
+ description: "Information not provided",
+ discussions: [
+ {
+ name: "new-self-service-project",
+ type: "challenge",
+ provider: "vanilla",
+ },
+ ],
+ legacy: {
+ selfService: true,
+ },
+ name: "new-self-service-project",
+ tags,
+ timelineTemplateId: challengeFieldValues.timelineTemplateId,
+ trackId: challengeFieldValues.trackId,
+ typeId: challengeFieldValues.typeId,
+ };
+}
+
+export function formatChallengeUpdateBody(intakeForm, workType) {
+ const form = JSON.parse(intakeForm)?.form;
+ const data = workFactoryMapFormData(
+ form?.workType?.selectedWorkType,
+ form?.basicInfo
+ );
+
+ const intakeMetadata = [
+ {
+ name: "intake-form",
+ value: intakeForm,
+ },
+ ];
+
+ //This is the Markdown string that gets displayed in Work Manager app and others
+ const templateString = [];
+
+ data.forEach((formDetail) => {
+ if (Object.keys(formDetail).length <= 0) return;
+
+ const formattedValue = formatOption(formDetail.value);
+
+ intakeMetadata.push({
+ name: formDetail.key,
+ value: formattedValue,
+ });
+ templateString.push(`### ${formDetail.title}\n\n${formattedValue}\n\n`);
+ });
+
+ if (isDataScience(workType)) {
+ templateString.push(
+ "## Final Submission Guidelines \n\n Please submit a zip file containing your analysis/solution."
+ );
+ }
+
+ const [prizes, timeline] = getPrizesAndTimeline(workType);
+
+ const body = {
+ description: templateString.join(""),
+ metadata: intakeMetadata,
+ name: form?.basicInfo?.projectTitle?.value,
+ };
+
+ if (prizes) {
+ body.prizeSets = prizes.prizeSets;
+ body.phases = timeline;
+ }
+
+ return body;
+}
+
+function formatOption(detail) {
+ const noInfoProvidedText = "Not provided";
+ const isEmpty = checkIsEmpty(detail);
+
+ if (isEmpty) {
+ return noInfoProvidedText;
+ }
+ if (_.isArray(detail)) {
+ return detail.join("\n\n");
+ }
+ if (_.isObject(detail)) {
+ return Object.keys(detail)
+ .map((key) => {
+ const value = detail[key] || noInfoProvidedText;
+ return `${key}: ${value}`;
+ })
+ .join("\n\n");
+ }
+ return detail;
+}
+
+function checkIsEmpty(detail) {
+ return (
+ !detail ||
+ (typeof detail === "string" && detail.trim().length === 0) ||
+ (_.isArray(detail) && detail.length === 0) ||
+ (_.isObject(detail) &&
+ Object.values(detail).filter((val) => val && val.trim().length !== 0)
+ .length === 0)
+ );
+}
+
+const getCreationConfigs = (workType) => {
+ switch (workType) {
+ case WorkType.data:
+ return [dataExplorationChallengeValues, ["Data Science"]];
+ case WorkType.design:
+ return [websiteDesignChallengeValues, ["Website Design"]];
+ case WorkType.findData:
+ return [findMeDataChallengeValues, ["Find Me Data", "Data Science"]];
+ case WorkType.problem:
+ return [dataAdvisoryChallengeValues, ["Data Science"]];
+ default:
+ return [];
+ }
+};
+
+const getPrizesAndTimeline = (workType) => {
+ switch (workType) {
+ case WorkType.data:
+ return [
+ getDataExplorationPriceAndTimelineEstimate(),
+ dataExplorationTimeline,
+ ];
+ case WorkType.design:
+ return [
+ getWebsiteDesignPriceAndTimelineEstimate(),
+ websiteDesignTimeline,
+ ];
+ case WorkType.findData:
+ return [getFindMeDataPriceAndTimelineEstimate(), findMeDataTimeline];
+ case WorkType.problem:
+ return [getDataAdvisoryPriceAndTimelineEstimate(), dataAdvisoryTimeline];
+ default:
+ return [];
+ }
+};
+
+const isDataScience = (workType) => {
+ return [WorkType.data, WorkType.findData, WorkType.problem].includes(
+ workType
+ );
+};
diff --git a/src/utils/work.js b/src/utils/work.js
new file mode 100644
index 000000000..026cd7759
--- /dev/null
+++ b/src/utils/work.js
@@ -0,0 +1,61 @@
+import { WORK_STATUS_ORDER, WORK_STATUSES, CHALLENGE_STATUS } from "constants";
+import _ from "lodash";
+import moment from "moment";
+
+export const getStatus = (work) => {
+ const workStatus = _.find(WORK_STATUSES, { value: work.status });
+ return workStatus ? workStatus.name : work.status;
+};
+
+export const isReviewPhaseEnded = (work) => {
+ const allPhases = work.phases || [];
+
+ for (let i = allPhases.length - 1; i >= 0; i -= 1) {
+ const phase = allPhases[i];
+ if (
+ (phase.name === "Review" || phase.name === "Iterative Review") &&
+ !phase.isOpen &&
+ moment(phase.scheduledStartDate).isBefore() &&
+ WORK_STATUS_ORDER[work.status] >=
+ WORK_STATUS_ORDER[WORK_STATUSES.InProgress.value]
+ ) {
+ return true;
+ }
+ }
+
+ return false;
+};
+
+export const phaseEndDate = (phase) => {
+ if (phase.isOpen || moment(phase.scheduledStartDate).isAfter()) {
+ return phase.scheduledEndDate;
+ }
+
+ return phase.actualEndDate || phase.scheduledEndDate;
+};
+
+export const phaseStartDate = (phase) => {
+ if (phase.isOpen !== true && moment(phase.scheduledStartDate).isAfter()) {
+ return phase.scheduledStartDate;
+ }
+
+ return phase.actualStartDate;
+};
+
+export const isMessagesDisabled = (work) => {
+ const { status } = work || {};
+ return (
+ status === CHALLENGE_STATUS.NEW ||
+ status === CHALLENGE_STATUS.DRAFT ||
+ status === CHALLENGE_STATUS.CANCELLED ||
+ status === CHALLENGE_STATUS.APPROVED
+ );
+};
+
+export default {
+ getStatus,
+ isReviewPhaseEnded,
+ phaseEndDate,
+ phaseStartDate,
+ isMessagesDisabled,
+};
diff --git a/start-ssl-bsouza.sh b/start-ssl-bsouza.sh
index 314736ad4..1c1721fd6 100644
--- a/start-ssl-bsouza.sh
+++ b/start-ssl-bsouza.sh
@@ -1,4 +1,11 @@
-export HTTPS=true&&SSL_CRT_FILE=ssl/cert.pem&&SSL_KEY_FILE=ssl/key.pem
-export HOST=local.topcoder-dev.com
-export REACT_APP_HOST_ENV=bsouza
-yarn react-scripts start
+# TODO: revert to use non-mfe start script
+#export HTTPS=true&&SSL_CRT_FILE=ssl/cert.pem&&SSL_KEY_FILE=ssl/key.pem
+#export HOST=local.topcoder-dev.com
+#export REACT_APP_HOST_ENV=bsouza
+#yarn react-scripts start
+
+export APPMODE=development
+export APPENV=bsouza
+
+yarn install
+yarn dev
diff --git a/webpack.config.js b/webpack.config.js
new file mode 100644
index 000000000..2614fda2a
--- /dev/null
+++ b/webpack.config.js
@@ -0,0 +1,135 @@
+/* global __dirname process */
+const webpack = require("webpack");
+const webpackMerge = require("webpack-merge");
+const singleSpaDefaults = require("webpack-config-single-spa-react");
+const path = require("path");
+const autoprefixer = require("autoprefixer");
+const _ = require("lodash");
+const config = require("config");
+
+const cssLocalIdent =
+ process.env.APPMODE === "production"
+ ? "[hash:base64:6]"
+ : "self_service_[path][name]___[local]___[hash:base64:6]";
+
+module.exports = (webpackConfigEnv) => {
+ const defaultConfig = singleSpaDefaults({
+ orgName: "topcoder",
+ projectName: "mfe-customer-work",
+ webpackConfigEnv,
+ });
+
+ return webpackMerge.smart(defaultConfig, {
+ // to reduce size of bundle
+ externals: {
+ "@topcoder/mfe-header": "@topcoder/mfe-header",
+ "react": "react",
+ "react-dom": "react-dom",
+ },
+ output: {
+ // path: path.resolve(__dirname, 'dist'),
+ publicPath: "self-service-app",
+ },
+ // modify the webpack config however you'd like to by adding to this object
+ module: {
+ rules: [
+ {
+ /* Loads SCSS stylesheets. */
+ test: /\.scss/,
+ use: [
+ "style-loader",
+ {
+ loader: "css-loader",
+ options: {
+ modules: {
+ localIdentName: cssLocalIdent,
+ auto: true,
+ },
+ },
+ },
+ {
+ loader: "postcss-loader",
+ options: {
+ postcssOptions: {
+ plugins: [autoprefixer],
+ },
+ },
+ },
+ "resolve-url-loader",
+ {
+ loader: "sass-loader",
+ options: {
+ sourceMap: true,
+ },
+ },
+ ],
+ },
+ {
+ test: /\.svg$/,
+ oneOf: [
+ {
+ exclude: [/node_modules/],
+ loader: "babel-loader",
+ },
+ {
+ exclude: [/node_modules/],
+ loader: require.resolve("file-loader", { paths: [__dirname] }),
+ },
+ ],
+ },
+ {
+ /* Loads raster images */
+ test: /\.(gif|jpe?g|png|pdf)$/,
+ exclude: [/node_modules/, /[/\\]assets[/\\]fonts/],
+ loader: "file-loader",
+ options: {
+ outputPath: "icons",
+ },
+ },
+ {
+ test: /\.(js|jsx|ts|tsx)$/,
+ exclude: /(node_modules|bower_components)/,
+ loader: "babel-loader",
+ options: {
+ presets: [
+ "@babel/env",
+ "@babel/preset-react",
+ "@babel/preset-typescript",
+ ]
+ }
+ },
+ ],
+ },
+ resolve: {
+ alias: {
+ styles: path.resolve(__dirname, "src/styles"),
+ actions: path.resolve(__dirname, "src/actions"),
+ assets: path.resolve(__dirname, "src/assets"),
+ components: path.resolve(__dirname, "src/components"),
+ hooks: path.resolve(__dirname, "src/hooks"),
+ utils: path.resolve(__dirname, "src/utils"),
+ constants: path.resolve(__dirname, "src/constants"),
+ selectors: path.resolve(__dirname, "src/selectors"),
+ services: path.resolve(__dirname, "src/services"),
+ thunks: path.resolve(__dirname, "src/thunks"),
+ hoc: path.resolve(__dirname, "src/hoc"),
+ },
+ extensions: [".ts", ".tsx", ".js", ".jsx"]
+ },
+ plugins: [
+ new webpack.DefinePlugin({
+ "process.env": {
+ ..._.mapValues(config, (value) => JSON.stringify(value)),
+ APPENV: JSON.stringify(process.env.APPENV),
+ APPMODE: JSON.stringify(process.env.APPMODE),
+ },
+ }),
+ // ignore moment locales to reduce bundle size by 64kb gzipped
+ // see solution details https://stackoverflow.com/questions/25384360/how-to-prevent-moment-js-from-loading-locales-with-webpack/25426019#25426019
+ new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),
+ new webpack.ProvidePlugin({
+ "React": "react",
+ })
+ ],
+ });
+};
diff --git a/yarn.lock b/yarn.lock
index 290c5a220..6a914ce40 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -31,7 +31,7 @@
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.5.tgz#acac0c839e317038c73137fbb6ef71a1d6238471"
integrity sha512-BxhE40PVCBxVEJsSBhB6UWyAuqJRxGsAw8BdHMJ3AKGydcwuWW4kOO3HmqBQAdcq/OP+/DlTVxLvsCzRTnZuGg==
-"@babel/core@^7.1.0", "@babel/core@^7.11.1", "@babel/core@^7.12.3", "@babel/core@^7.16.0", "@babel/core@^7.7.2", "@babel/core@^7.8.0":
+"@babel/core@^7.1.0", "@babel/core@^7.11.1", "@babel/core@^7.12.3", "@babel/core@^7.16.0", "@babel/core@^7.7.2", "@babel/core@^7.7.5", "@babel/core@^7.8.0":
version "7.18.5"
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.5.tgz#c597fa680e58d571c28dda9827669c78cdd7f000"
integrity sha512-MGY8vg3DxMnctw0LdvSEojOsumc70g0t18gNyUdAZqB1Rpd1Bqo/svHGvt+UJ6JcGX+DIekGFDxxIWofBxLCnQ==
@@ -61,7 +61,7 @@
eslint-visitor-keys "^2.1.0"
semver "^6.3.0"
-"@babel/generator@^7.18.2", "@babel/generator@^7.7.2":
+"@babel/generator@^7.18.2", "@babel/generator@^7.4.0", "@babel/generator@^7.7.2":
version "7.18.2"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.2.tgz#33873d6f89b21efe2da63fe554460f3df1c5880d"
integrity sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==
@@ -70,7 +70,7 @@
"@jridgewell/gen-mapping" "^0.3.0"
jsesc "^2.5.1"
-"@babel/helper-annotate-as-pure@^7.16.7":
+"@babel/helper-annotate-as-pure@^7.16.0", "@babel/helper-annotate-as-pure@^7.16.7":
version "7.16.7"
resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862"
integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==
@@ -164,7 +164,7 @@
dependencies:
"@babel/types" "^7.17.0"
-"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.7":
+"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.0", "@babel/helper-module-imports@^7.16.7":
version "7.16.7"
resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437"
integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==
@@ -276,7 +276,7 @@
chalk "^2.0.0"
js-tokens "^4.0.0"
-"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.16.7", "@babel/parser@^7.18.5":
+"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.16.7", "@babel/parser@^7.18.5", "@babel/parser@^7.4.3":
version "7.18.5"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.5.tgz#337062363436a893a2d22faa60be5bb37091c83c"
integrity sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw==
@@ -514,7 +514,7 @@
dependencies:
"@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-syntax-jsx@^7.17.12":
+"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.12.13", "@babel/plugin-syntax-jsx@^7.17.12":
version "7.17.12"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.17.12.tgz#834035b45061983a491f60096f61a2e7c5674a47"
integrity sha512-spyY3E3AURfxh/RHtjx5j6hs8am5NbUBGfcZ2vB3uShSpZdQyXSf5rR5Mk76vbtlAZOelyVQ71Fg0x9SG4fsog==
@@ -542,7 +542,7 @@
dependencies:
"@babel/helper-plugin-utils" "^7.10.4"
-"@babel/plugin-syntax-object-rest-spread@^7.8.3":
+"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3":
version "7.8.3"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871"
integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==
@@ -833,7 +833,7 @@
dependencies:
"@babel/helper-plugin-utils" "^7.17.12"
-"@babel/plugin-transform-runtime@^7.16.4":
+"@babel/plugin-transform-runtime@^7.16.4", "@babel/plugin-transform-runtime@^7.8.3":
version "7.18.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.5.tgz#f4d3188ba6a8815793993c71c2c225d0ee1d7743"
integrity sha512-Q17hHxXr2fplrE+5BSC1j1Fo5cOA8YeP8XW3/1paI8MzF/faZGh0MaH1KC4jLAvqLPamQWHB5/B7KqSLY1kuHA==
@@ -905,7 +905,7 @@
"@babel/helper-create-regexp-features-plugin" "^7.16.7"
"@babel/helper-plugin-utils" "^7.16.7"
-"@babel/preset-env@^7.11.0", "@babel/preset-env@^7.12.1", "@babel/preset-env@^7.16.4":
+"@babel/preset-env@^7.11.0", "@babel/preset-env@^7.12.1", "@babel/preset-env@^7.16.4", "@babel/preset-env@^7.7.6":
version "7.18.2"
resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.18.2.tgz#f47d3000a098617926e674c945d95a28cb90977a"
integrity sha512-PfpdxotV6afmXMU47S08F9ZKIm2bJIQ0YbAAtDfIENX7G1NUAXigLREh69CWDjtgUy7dYn7bsMzkgdtAlmS68Q==
@@ -997,7 +997,7 @@
"@babel/types" "^7.4.4"
esutils "^2.0.2"
-"@babel/preset-react@^7.12.5", "@babel/preset-react@^7.16.0":
+"@babel/preset-react@^7.12.5", "@babel/preset-react@^7.16.0", "@babel/preset-react@^7.7.4":
version "7.17.12"
resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.17.12.tgz#62adbd2d1870c0de3893095757ed5b00b492ab3d"
integrity sha512-h5U+rwreXtZaRBEQhW1hOJLMq8XNJBQ/9oymXiCXTuT/0uOwpbT0gUt+sXeOqoXBgNuUKI7TaObVwoEyWkpFgA==
@@ -1009,7 +1009,7 @@
"@babel/plugin-transform-react-jsx-development" "^7.16.7"
"@babel/plugin-transform-react-pure-annotations" "^7.16.7"
-"@babel/preset-typescript@^7.16.0":
+"@babel/preset-typescript@^7.16.0", "@babel/preset-typescript@^7.16.7":
version "7.17.12"
resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.17.12.tgz#40269e0a0084d56fc5731b6c40febe1c9a4a3e8c"
integrity sha512-S1ViF8W2QwAKUGJXxP9NAfNaqGDdEBJKpYkxHf5Yy2C4NPPzXGeR3Lhk7G8xJaaLcFTRfNjVbtbVtm8Gb0mqvg==
@@ -1026,14 +1026,14 @@
core-js-pure "^3.20.2"
regenerator-runtime "^0.13.4"
-"@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.18.3", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2":
+"@babel/runtime@^7.10.1", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.16.3", "@babel/runtime@^7.18.3", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2":
version "7.18.3"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.3.tgz#c7b654b57f6f63cf7f8b418ac9ca04408c4579f4"
integrity sha512-38Y8f7YUhce/K7RMwTp7m0uCumpv9hZkitCbBClqQIow1qSbCvGkcegKOXpEWCQLfWmevgRiWokZ1GkpfhbZug==
dependencies:
regenerator-runtime "^0.13.4"
-"@babel/template@^7.16.7", "@babel/template@^7.3.3":
+"@babel/template@^7.16.7", "@babel/template@^7.3.3", "@babel/template@^7.4.0":
version "7.16.7"
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155"
integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==
@@ -1042,7 +1042,7 @@
"@babel/parser" "^7.16.7"
"@babel/types" "^7.16.7"
-"@babel/traverse@^7.13.0", "@babel/traverse@^7.16.8", "@babel/traverse@^7.18.0", "@babel/traverse@^7.18.2", "@babel/traverse@^7.18.5", "@babel/traverse@^7.7.2":
+"@babel/traverse@^7.1.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.16.8", "@babel/traverse@^7.18.0", "@babel/traverse@^7.18.2", "@babel/traverse@^7.18.5", "@babel/traverse@^7.4.3", "@babel/traverse@^7.4.5", "@babel/traverse@^7.7.2":
version "7.18.5"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.5.tgz#94a8195ad9642801837988ab77f36e992d9a20cd"
integrity sha512-aKXj1KT66sBj0vVzk6rEeAO6Z9aiiQ68wfDgge3nHhA/my6xMM/7HGQUNumKZaoa2qUPQ5whJG9aAifsxUKfLA==
@@ -1058,7 +1058,7 @@
debug "^4.1.0"
globals "^11.1.0"
-"@babel/types@^7.0.0", "@babel/types@^7.12.6", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.17.12", "@babel/types@^7.18.0", "@babel/types@^7.18.2", "@babel/types@^7.18.4", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4":
+"@babel/types@^7.0.0", "@babel/types@^7.12.6", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.17.12", "@babel/types@^7.18.0", "@babel/types@^7.18.2", "@babel/types@^7.18.4", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.0", "@babel/types@^7.4.4":
version "7.18.4"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.4.tgz#27eae9b9fd18e9dccc3f9d6ad051336f307be354"
integrity sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==
@@ -1083,6 +1083,14 @@
resolved "https://registry.yarnpkg.com/@bedrock-layout/use-stateful-ref/-/use-stateful-ref-1.2.1.tgz#d6263771e5d64e54d8e3d052f042114bfa439636"
integrity sha512-FH9EX8Avxw46ty+BURyTpf7T3rad5faLg6iX1retSNRK/qmftoLSDIoTShJDxomnKgHz+9UNmQ4PQXhA0LeA9Q==
+"@cnakazawa/watch@^1.0.3":
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a"
+ integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==
+ dependencies:
+ exec-sh "^0.3.2"
+ minimist "^1.2.0"
+
"@csstools/normalize.css@*":
version "12.0.0"
resolved "https://registry.yarnpkg.com/@csstools/normalize.css/-/normalize.css-12.0.0.tgz#a9583a75c3f150667771f30b60d9f059473e62c4"
@@ -1192,6 +1200,101 @@
dependencies:
"@datadog/browser-core" "4.13.0"
+"@emotion/babel-plugin@^11.7.1":
+ version "11.9.2"
+ resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.9.2.tgz#723b6d394c89fb2ef782229d92ba95a740576e95"
+ integrity sha512-Pr/7HGH6H6yKgnVFNEj2MVlreu3ADqftqjqwUvDy/OJzKFgxKeTQ+eeUf20FOTuHVkDON2iNa25rAXVYtWJCjw==
+ dependencies:
+ "@babel/helper-module-imports" "^7.12.13"
+ "@babel/plugin-syntax-jsx" "^7.12.13"
+ "@babel/runtime" "^7.13.10"
+ "@emotion/hash" "^0.8.0"
+ "@emotion/memoize" "^0.7.5"
+ "@emotion/serialize" "^1.0.2"
+ babel-plugin-macros "^2.6.1"
+ convert-source-map "^1.5.0"
+ escape-string-regexp "^4.0.0"
+ find-root "^1.1.0"
+ source-map "^0.5.7"
+ stylis "4.0.13"
+
+"@emotion/cache@^11.4.0", "@emotion/cache@^11.9.3":
+ version "11.9.3"
+ resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.9.3.tgz#96638449f6929fd18062cfe04d79b29b44c0d6cb"
+ integrity sha512-0dgkI/JKlCXa+lEXviaMtGBL0ynpx4osh7rjOXE71q9bIF8G+XhJgvi+wDu0B0IdCVx37BffiwXlN9I3UuzFvg==
+ dependencies:
+ "@emotion/memoize" "^0.7.4"
+ "@emotion/sheet" "^1.1.1"
+ "@emotion/utils" "^1.0.0"
+ "@emotion/weak-memoize" "^0.2.5"
+ stylis "4.0.13"
+
+"@emotion/hash@^0.8.0":
+ version "0.8.0"
+ resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413"
+ integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==
+
+"@emotion/is-prop-valid@^1.1.0":
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.1.3.tgz#f0907a416368cf8df9e410117068e20fe87c0a3a"
+ integrity sha512-RFg04p6C+1uO19uG8N+vqanzKqiM9eeV1LDOG3bmkYmuOj7NbKNlFC/4EZq5gnwAIlcC/jOT24f8Td0iax2SXA==
+ dependencies:
+ "@emotion/memoize" "^0.7.4"
+
+"@emotion/memoize@^0.7.4", "@emotion/memoize@^0.7.5":
+ version "0.7.5"
+ resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.5.tgz#2c40f81449a4e554e9fc6396910ed4843ec2be50"
+ integrity sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ==
+
+"@emotion/react@^11.8.1":
+ version "11.9.3"
+ resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.9.3.tgz#f4f4f34444f6654a2e550f5dab4f2d360c101df9"
+ integrity sha512-g9Q1GcTOlzOEjqwuLF/Zd9LC+4FljjPjDfxSM7KmEakm+hsHXk+bYZ2q+/hTJzr0OUNkujo72pXLQvXj6H+GJQ==
+ dependencies:
+ "@babel/runtime" "^7.13.10"
+ "@emotion/babel-plugin" "^11.7.1"
+ "@emotion/cache" "^11.9.3"
+ "@emotion/serialize" "^1.0.4"
+ "@emotion/utils" "^1.1.0"
+ "@emotion/weak-memoize" "^0.2.5"
+ hoist-non-react-statics "^3.3.1"
+
+"@emotion/serialize@^1.0.2", "@emotion/serialize@^1.0.4":
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.0.4.tgz#ff31fd11bb07999611199c2229e152faadc21a3c"
+ integrity sha512-1JHamSpH8PIfFwAMryO2bNka+y8+KA5yga5Ocf2d7ZEiJjb7xlLW7aknBGZqJLajuLOvJ+72vN+IBSwPlXD1Pg==
+ dependencies:
+ "@emotion/hash" "^0.8.0"
+ "@emotion/memoize" "^0.7.4"
+ "@emotion/unitless" "^0.7.5"
+ "@emotion/utils" "^1.0.0"
+ csstype "^3.0.2"
+
+"@emotion/sheet@^1.1.1":
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.1.1.tgz#015756e2a9a3c7c5f11d8ec22966a8dbfbfac787"
+ integrity sha512-J3YPccVRMiTZxYAY0IOq3kd+hUP8idY8Kz6B/Cyo+JuXq52Ek+zbPbSQUrVQp95aJ+lsAW7DPL1P2Z+U1jGkKA==
+
+"@emotion/stylis@^0.8.4":
+ version "0.8.5"
+ resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.8.5.tgz#deacb389bd6ee77d1e7fcaccce9e16c5c7e78e04"
+ integrity sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==
+
+"@emotion/unitless@^0.7.4", "@emotion/unitless@^0.7.5":
+ version "0.7.5"
+ resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed"
+ integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==
+
+"@emotion/utils@^1.0.0", "@emotion/utils@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.1.0.tgz#86b0b297f3f1a0f2bdb08eeac9a2f49afd40d0cf"
+ integrity sha512-iRLa/Y4Rs5H/f2nimczYmS5kFJEbpiVvgN3XVfZ022IYhuNA1IRSHEizcof88LtCTXtl9S2Cxt32KgaXEu72JQ==
+
+"@emotion/weak-memoize@^0.2.5":
+ version "0.2.5"
+ resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46"
+ integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==
+
"@eslint/eslintrc@^1.3.0":
version "1.3.0"
resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.0.tgz#29f92c30bb3e771e4a2048c95fa6855392dfac4f"
@@ -1242,6 +1345,26 @@
resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98"
integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==
+"@jest/console@^24.9.0":
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.9.0.tgz#79b1bc06fb74a8cfb01cbdedf945584b1b9707f0"
+ integrity sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==
+ dependencies:
+ "@jest/source-map" "^24.9.0"
+ chalk "^2.0.1"
+ slash "^2.0.0"
+
+"@jest/console@^25.5.0":
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/@jest/console/-/console-25.5.0.tgz#770800799d510f37329c508a9edd0b7b447d9abb"
+ integrity sha512-T48kZa6MK1Y6k4b89sexwmSF4YLeZS/Udqg3Jj3jG/cHH+N/sLFCEoXEDMOKugJQ9FxPN1osxIknvKkxt6MKyw==
+ dependencies:
+ "@jest/types" "^25.5.0"
+ chalk "^3.0.0"
+ jest-message-util "^25.5.0"
+ jest-util "^25.5.0"
+ slash "^3.0.0"
+
"@jest/console@^27.5.1":
version "27.5.1"
resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.5.1.tgz#260fe7239602fe5130a94f1aa386eff54b014bba"
@@ -1266,6 +1389,40 @@
jest-util "^28.1.1"
slash "^3.0.0"
+"@jest/core@^25.5.4":
+ version "25.5.4"
+ resolved "https://registry.yarnpkg.com/@jest/core/-/core-25.5.4.tgz#3ef7412f7339210f003cdf36646bbca786efe7b4"
+ integrity sha512-3uSo7laYxF00Dg/DMgbn4xMJKmDdWvZnf89n8Xj/5/AeQ2dOQmn6b6Hkj/MleyzZWXpwv+WSdYWl4cLsy2JsoA==
+ dependencies:
+ "@jest/console" "^25.5.0"
+ "@jest/reporters" "^25.5.1"
+ "@jest/test-result" "^25.5.0"
+ "@jest/transform" "^25.5.1"
+ "@jest/types" "^25.5.0"
+ ansi-escapes "^4.2.1"
+ chalk "^3.0.0"
+ exit "^0.1.2"
+ graceful-fs "^4.2.4"
+ jest-changed-files "^25.5.0"
+ jest-config "^25.5.4"
+ jest-haste-map "^25.5.1"
+ jest-message-util "^25.5.0"
+ jest-regex-util "^25.2.6"
+ jest-resolve "^25.5.1"
+ jest-resolve-dependencies "^25.5.4"
+ jest-runner "^25.5.4"
+ jest-runtime "^25.5.4"
+ jest-snapshot "^25.5.1"
+ jest-util "^25.5.0"
+ jest-validate "^25.5.0"
+ jest-watcher "^25.5.0"
+ micromatch "^4.0.2"
+ p-each-series "^2.1.0"
+ realpath-native "^2.0.0"
+ rimraf "^3.0.0"
+ slash "^3.0.0"
+ strip-ansi "^6.0.0"
+
"@jest/core@^27.5.1":
version "27.5.1"
resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.5.1.tgz#267ac5f704e09dc52de2922cbf3af9edcd64b626"
@@ -1300,6 +1457,15 @@
slash "^3.0.0"
strip-ansi "^6.0.0"
+"@jest/environment@^25.5.0":
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-25.5.0.tgz#aa33b0c21a716c65686638e7ef816c0e3a0c7b37"
+ integrity sha512-U2VXPEqL07E/V7pSZMSQCvV5Ea4lqOlT+0ZFijl/i316cRMHvZ4qC+jBdryd+lmRetjQo0YIQr6cVPNxxK87mA==
+ dependencies:
+ "@jest/fake-timers" "^25.5.0"
+ "@jest/types" "^25.5.0"
+ jest-mock "^25.5.0"
+
"@jest/environment@^27.5.1":
version "27.5.1"
resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.5.1.tgz#d7425820511fe7158abbecc010140c3fd3be9c74"
@@ -1310,6 +1476,26 @@
"@types/node" "*"
jest-mock "^27.5.1"
+"@jest/fake-timers@^24.9.0":
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-24.9.0.tgz#ba3e6bf0eecd09a636049896434d306636540c93"
+ integrity sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==
+ dependencies:
+ "@jest/types" "^24.9.0"
+ jest-message-util "^24.9.0"
+ jest-mock "^24.9.0"
+
+"@jest/fake-timers@^25.5.0":
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-25.5.0.tgz#46352e00533c024c90c2bc2ad9f2959f7f114185"
+ integrity sha512-9y2+uGnESw/oyOI3eww9yaxdZyHq7XvprfP/eeoCsjqKYts2yRlsHS/SgjPDV8FyMfn2nbMy8YzUk6nyvdLOpQ==
+ dependencies:
+ "@jest/types" "^25.5.0"
+ jest-message-util "^25.5.0"
+ jest-mock "^25.5.0"
+ jest-util "^25.5.0"
+ lolex "^5.0.0"
+
"@jest/fake-timers@^27.5.1":
version "27.5.1"
resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.5.1.tgz#76979745ce0579c8a94a4678af7a748eda8ada74"
@@ -1322,6 +1508,15 @@
jest-mock "^27.5.1"
jest-util "^27.5.1"
+"@jest/globals@^25.5.2":
+ version "25.5.2"
+ resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-25.5.2.tgz#5e45e9de8d228716af3257eeb3991cc2e162ca88"
+ integrity sha512-AgAS/Ny7Q2RCIj5kZ+0MuKM1wbF0WMLxbCVl/GOMoCNbODRdJ541IxJ98xnZdVSZXivKpJlNPIWa3QmY0l4CXA==
+ dependencies:
+ "@jest/environment" "^25.5.0"
+ "@jest/types" "^25.5.0"
+ expect "^25.5.0"
+
"@jest/globals@^27.5.1":
version "27.5.1"
resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.5.1.tgz#7ac06ce57ab966566c7963431cef458434601b2b"
@@ -1331,6 +1526,38 @@
"@jest/types" "^27.5.1"
expect "^27.5.1"
+"@jest/reporters@^25.5.1":
+ version "25.5.1"
+ resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-25.5.1.tgz#cb686bcc680f664c2dbaf7ed873e93aa6811538b"
+ integrity sha512-3jbd8pPDTuhYJ7vqiHXbSwTJQNavczPs+f1kRprRDxETeE3u6srJ+f0NPuwvOmk+lmunZzPkYWIFZDLHQPkviw==
+ dependencies:
+ "@bcoe/v8-coverage" "^0.2.3"
+ "@jest/console" "^25.5.0"
+ "@jest/test-result" "^25.5.0"
+ "@jest/transform" "^25.5.1"
+ "@jest/types" "^25.5.0"
+ chalk "^3.0.0"
+ collect-v8-coverage "^1.0.0"
+ exit "^0.1.2"
+ glob "^7.1.2"
+ graceful-fs "^4.2.4"
+ istanbul-lib-coverage "^3.0.0"
+ istanbul-lib-instrument "^4.0.0"
+ istanbul-lib-report "^3.0.0"
+ istanbul-lib-source-maps "^4.0.0"
+ istanbul-reports "^3.0.2"
+ jest-haste-map "^25.5.1"
+ jest-resolve "^25.5.1"
+ jest-util "^25.5.0"
+ jest-worker "^25.5.0"
+ slash "^3.0.0"
+ source-map "^0.6.0"
+ string-length "^3.1.0"
+ terminal-link "^2.0.0"
+ v8-to-istanbul "^4.1.3"
+ optionalDependencies:
+ node-notifier "^6.0.0"
+
"@jest/reporters@^27.5.1":
version "27.5.1"
resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.5.1.tgz#ceda7be96170b03c923c37987b64015812ffec04"
@@ -1369,6 +1596,24 @@
dependencies:
"@sinclair/typebox" "^0.23.3"
+"@jest/source-map@^24.9.0":
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-24.9.0.tgz#0e263a94430be4b41da683ccc1e6bffe2a191714"
+ integrity sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==
+ dependencies:
+ callsites "^3.0.0"
+ graceful-fs "^4.1.15"
+ source-map "^0.6.0"
+
+"@jest/source-map@^25.5.0":
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-25.5.0.tgz#df5c20d6050aa292c2c6d3f0d2c7606af315bd1b"
+ integrity sha512-eIGx0xN12yVpMcPaVpjXPnn3N30QGJCJQSkEDUt9x1fI1Gdvb07Ml6K5iN2hG7NmMP6FDmtPEssE3z6doOYUwQ==
+ dependencies:
+ callsites "^3.0.0"
+ graceful-fs "^4.2.4"
+ source-map "^0.6.0"
+
"@jest/source-map@^27.5.1":
version "27.5.1"
resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.5.1.tgz#6608391e465add4205eae073b55e7f279e04e8cf"
@@ -1378,6 +1623,25 @@
graceful-fs "^4.2.9"
source-map "^0.6.0"
+"@jest/test-result@^24.9.0":
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-24.9.0.tgz#11796e8aa9dbf88ea025757b3152595ad06ba0ca"
+ integrity sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==
+ dependencies:
+ "@jest/console" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ "@types/istanbul-lib-coverage" "^2.0.0"
+
+"@jest/test-result@^25.5.0":
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-25.5.0.tgz#139a043230cdeffe9ba2d8341b27f2efc77ce87c"
+ integrity sha512-oV+hPJgXN7IQf/fHWkcS99y0smKLU2czLBJ9WA0jHITLst58HpQMtzSYxzaBvYc6U5U6jfoMthqsUlUlbRXs0A==
+ dependencies:
+ "@jest/console" "^25.5.0"
+ "@jest/types" "^25.5.0"
+ "@types/istanbul-lib-coverage" "^2.0.0"
+ collect-v8-coverage "^1.0.0"
+
"@jest/test-result@^27.5.1":
version "27.5.1"
resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.5.1.tgz#56a6585fa80f7cdab72b8c5fc2e871d03832f5bb"
@@ -1398,6 +1662,17 @@
"@types/istanbul-lib-coverage" "^2.0.0"
collect-v8-coverage "^1.0.0"
+"@jest/test-sequencer@^25.5.4":
+ version "25.5.4"
+ resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-25.5.4.tgz#9b4e685b36954c38d0f052e596d28161bdc8b737"
+ integrity sha512-pTJGEkSeg1EkCO2YWq6hbFvKNXk8ejqlxiOg1jBNLnWrgXOkdY6UmqZpwGFXNnRt9B8nO1uWMzLLZ4eCmhkPNA==
+ dependencies:
+ "@jest/test-result" "^25.5.0"
+ graceful-fs "^4.2.4"
+ jest-haste-map "^25.5.1"
+ jest-runner "^25.5.4"
+ jest-runtime "^25.5.4"
+
"@jest/test-sequencer@^27.5.1":
version "27.5.1"
resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz#4057e0e9cea4439e544c6353c6affe58d095745b"
@@ -1408,6 +1683,50 @@
jest-haste-map "^27.5.1"
jest-runtime "^27.5.1"
+"@jest/transform@^24.9.0":
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-24.9.0.tgz#4ae2768b296553fadab09e9ec119543c90b16c56"
+ integrity sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==
+ dependencies:
+ "@babel/core" "^7.1.0"
+ "@jest/types" "^24.9.0"
+ babel-plugin-istanbul "^5.1.0"
+ chalk "^2.0.1"
+ convert-source-map "^1.4.0"
+ fast-json-stable-stringify "^2.0.0"
+ graceful-fs "^4.1.15"
+ jest-haste-map "^24.9.0"
+ jest-regex-util "^24.9.0"
+ jest-util "^24.9.0"
+ micromatch "^3.1.10"
+ pirates "^4.0.1"
+ realpath-native "^1.1.0"
+ slash "^2.0.0"
+ source-map "^0.6.1"
+ write-file-atomic "2.4.1"
+
+"@jest/transform@^25.5.1":
+ version "25.5.1"
+ resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-25.5.1.tgz#0469ddc17699dd2bf985db55fa0fb9309f5c2db3"
+ integrity sha512-Y8CEoVwXb4QwA6Y/9uDkn0Xfz0finGkieuV0xkdF9UtZGJeLukD5nLkaVrVsODB1ojRWlaoD0AJZpVHCSnJEvg==
+ dependencies:
+ "@babel/core" "^7.1.0"
+ "@jest/types" "^25.5.0"
+ babel-plugin-istanbul "^6.0.0"
+ chalk "^3.0.0"
+ convert-source-map "^1.4.0"
+ fast-json-stable-stringify "^2.0.0"
+ graceful-fs "^4.2.4"
+ jest-haste-map "^25.5.1"
+ jest-regex-util "^25.2.6"
+ jest-util "^25.5.0"
+ micromatch "^4.0.2"
+ pirates "^4.0.1"
+ realpath-native "^2.0.0"
+ slash "^3.0.0"
+ source-map "^0.6.1"
+ write-file-atomic "^3.0.0"
+
"@jest/transform@^27.5.1":
version "27.5.1"
resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.5.1.tgz#6c3501dcc00c4c08915f292a600ece5ecfe1f409"
@@ -1429,6 +1748,25 @@
source-map "^0.6.1"
write-file-atomic "^3.0.0"
+"@jest/types@^24.9.0":
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.9.0.tgz#63cb26cb7500d069e5a389441a7c6ab5e909fc59"
+ integrity sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==
+ dependencies:
+ "@types/istanbul-lib-coverage" "^2.0.0"
+ "@types/istanbul-reports" "^1.1.1"
+ "@types/yargs" "^13.0.0"
+
+"@jest/types@^25.5.0":
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.5.0.tgz#4d6a4793f7b9599fc3680877b856a97dbccf2a9d"
+ integrity sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==
+ dependencies:
+ "@types/istanbul-lib-coverage" "^2.0.0"
+ "@types/istanbul-reports" "^1.1.1"
+ "@types/yargs" "^15.0.0"
+ chalk "^3.0.0"
+
"@jest/types@^27.5.1":
version "27.5.1"
resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80"
@@ -1541,6 +1879,16 @@
schema-utils "^3.0.0"
source-map "^0.7.3"
+"@reach/router@^1.3.4":
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/@reach/router/-/router-1.3.4.tgz#d2574b19370a70c80480ed91f3da840136d10f8c"
+ integrity sha512-+mtn9wjlB9NN2CNnnC/BRYtwdKBfSyyasPYraNAyvaV1occr/5NnB4CVzjEZipNHwYebQwcndGUmpFzxAUoqSA==
+ dependencies:
+ create-react-context "0.3.0"
+ invariant "^2.2.3"
+ prop-types "^15.6.1"
+ react-lifecycles-compat "^3.0.4"
+
"@rollup/plugin-babel@^5.2.0":
version "5.3.1"
resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz#04bc0608f4aa4b2e4b1aebf284344d0f68fda283"
@@ -1602,6 +1950,18 @@
dependencies:
"@sinonjs/commons" "^1.7.0"
+"@stripe/react-stripe-js@1.7.2":
+ version "1.7.2"
+ resolved "https://registry.yarnpkg.com/@stripe/react-stripe-js/-/react-stripe-js-1.7.2.tgz#87cc5464378fb28bc7390702415cf70f13a46bcd"
+ integrity sha512-IAVg2nPUPoSwI//XDRCO7D8mGeK4+N3Xg63fYZHmlfEWAuFVcuaqJKTT67uzIdKYZhHZ/NMdZw/ttz+GOjP/rQ==
+ dependencies:
+ prop-types "^15.7.2"
+
+"@stripe/stripe-js@1.29.0":
+ version "1.29.0"
+ resolved "https://registry.yarnpkg.com/@stripe/stripe-js/-/stripe-js-1.29.0.tgz#f41e46aee711d1eabcb3bbc77376016a250ec962"
+ integrity sha512-OsUxk0VLlum8E2d6onlEdKuQcvLMs7qTrOXCnl/BGV3fAm65qr6h3e1IZ5AX4lgUlPRrzRcddSOA5DvkKKYLvg==
+
"@surma/rollup-plugin-off-main-thread@^2.2.3":
version "2.2.3"
resolved "https://registry.yarnpkg.com/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz#ee34985952ca21558ab0d952f00298ad2190c053"
@@ -1782,7 +2142,7 @@
dependencies:
axios "*"
-"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14":
+"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.0", "@types/babel__core@^7.1.14", "@types/babel__core@^7.1.7":
version "7.1.19"
resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.19.tgz#7b497495b7d1b4812bdb9d02804d0576f43ee460"
integrity sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==
@@ -1895,6 +2255,14 @@
"@types/qs" "*"
"@types/serve-static" "*"
+"@types/glob@^7.1.1":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb"
+ integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==
+ dependencies:
+ "@types/minimatch" "*"
+ "@types/node" "*"
+
"@types/graceful-fs@^4.1.2":
version "4.1.5"
resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15"
@@ -1907,6 +2275,19 @@
resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.11.tgz#56588b17ae8f50c53983a524fc3cc47437969d64"
integrity sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==
+"@types/hoist-non-react-statics@^3.3.1":
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f"
+ integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==
+ dependencies:
+ "@types/react" "*"
+ hoist-non-react-statics "^3.3.0"
+
+"@types/html-minifier-terser@^5.0.0":
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz#693b316ad323ea97eed6b38ed1a3cc02b1672b57"
+ integrity sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==
+
"@types/html-minifier-terser@^6.0.0":
version "6.1.0"
resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35"
@@ -1931,6 +2312,14 @@
dependencies:
"@types/istanbul-lib-coverage" "*"
+"@types/istanbul-reports@^1.1.1":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2"
+ integrity sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==
+ dependencies:
+ "@types/istanbul-lib-coverage" "*"
+ "@types/istanbul-lib-report" "*"
+
"@types/istanbul-reports@^3.0.0":
version "3.0.1"
resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff"
@@ -1964,11 +2353,21 @@
resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==
+"@types/lodash@^4.14.182":
+ version "4.14.182"
+ resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.182.tgz#05301a4d5e62963227eaafe0ce04dd77c54ea5c2"
+ integrity sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q==
+
"@types/mime@^1":
version "1.3.2"
resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a"
integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==
+"@types/minimatch@*", "@types/minimatch@^3.0.3":
+ version "3.0.5"
+ resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40"
+ integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==
+
"@types/node@*":
version "18.0.0"
resolved "https://registry.yarnpkg.com/@types/node/-/node-18.0.0.tgz#67c7b724e1bcdd7a8821ce0d5ee184d3b4dd525a"
@@ -1979,11 +2378,21 @@
resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.41.tgz#88eb485b1bfdb4c224d878b7832239536aa2f813"
integrity sha512-mqoYK2TnVjdkGk8qXAVGc/x9nSaTpSrFaGFm43BUH3IdoBV0nta6hYaGmdOvIMlbHJbUEVen3gvwpwovAZKNdQ==
+"@types/normalize-package-data@^2.4.0":
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301"
+ integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==
+
"@types/parse-json@^4.0.0":
version "4.0.0"
resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0"
integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==
+"@types/prettier@^1.19.0":
+ version "1.19.1"
+ resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-1.19.1.tgz#33509849f8e679e4add158959fdb086440e9553f"
+ integrity sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ==
+
"@types/prettier@^2.1.5":
version "2.6.3"
resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.6.3.tgz#68ada76827b0010d0db071f739314fa429943d0a"
@@ -2009,6 +2418,13 @@
resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc"
integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==
+"@types/reach__router@^1.3.10":
+ version "1.3.10"
+ resolved "https://registry.yarnpkg.com/@types/reach__router/-/reach__router-1.3.10.tgz#141d500213a452d9d9d71d5ad96c4104094f55a3"
+ integrity sha512-iHAFGaVOrWi00/q7oBybggGsz5TOmwOW4M1H9sT7i9lly4qFC8XOgsdf6jUsoaOz2sknFHALEtZqCoDbokdJ2Q==
+ dependencies:
+ "@types/react" "*"
+
"@types/react-dom@<18.0.0", "@types/react-dom@^17.0.9":
version "17.0.17"
resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.17.tgz#2e3743277a793a96a99f1bf87614598289da68a1"
@@ -2021,6 +2437,14 @@
resolved "https://registry.yarnpkg.com/@types/react-gtm-module/-/react-gtm-module-2.0.1.tgz#b2c6cd14ec251d6ae7fa576edf1d43825908a378"
integrity sha512-T/DN9gAbCYk5wJ1nxf4pSwmXz4d1iVjM++OoG+mwMfz9STMAotGjSb65gJHOS5bPvl6vLSsJnuC+y/43OQrltg==
+"@types/react-redux-toastr@^7.6.2":
+ version "7.6.2"
+ resolved "https://registry.yarnpkg.com/@types/react-redux-toastr/-/react-redux-toastr-7.6.2.tgz#e2860ee3712ef4bd0c3edc069bb6d37998700d58"
+ integrity sha512-gVc5wn49OwkG6nh64iUXchNXWZ1A5vEhz6UyqcWgbL4VyNNp7u+K7GBPbYxmT3W/FcEY/OKLis2s8XM3B7zG1w==
+ dependencies:
+ "@types/react" "*"
+ redux "^3.6.0 || ^4.0.0"
+
"@types/react-router-dom@^5.3.3":
version "5.3.3"
resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-5.3.3.tgz#e9d6b4a66fcdbd651a5f106c2656a30088cc1e83"
@@ -2038,6 +2462,13 @@
"@types/history" "^4.7.11"
"@types/react" "*"
+"@types/react-transition-group@^4.4.0":
+ version "4.4.5"
+ resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.5.tgz#aae20dcf773c5aa275d5b9f7cdbca638abc5e416"
+ integrity sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA==
+ dependencies:
+ "@types/react" "*"
+
"@types/react@*":
version "18.0.14"
resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.14.tgz#e016616ffff51dba01b04945610fe3671fdbe06d"
@@ -2095,11 +2526,31 @@
dependencies:
"@types/node" "*"
+"@types/source-list-map@*":
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9"
+ integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==
+
+"@types/stack-utils@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e"
+ integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==
+
"@types/stack-utils@^2.0.0":
version "2.0.1"
resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c"
integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==
+"@types/systemjs@^6.1.0":
+ version "6.1.1"
+ resolved "https://registry.yarnpkg.com/@types/systemjs/-/systemjs-6.1.1.tgz#eae17f2a080e867d01a2dd614f524ab227cf5a41"
+ integrity sha512-d1M6eDKBGWx7RbYy295VEFoOF9YDJkPI959QYnmzcmeaV+SP4D0xV7dEh3sN5XF3GvO3PhGzm+17Z598nvHQuQ==
+
+"@types/tapable@^1", "@types/tapable@^1.0.5":
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.8.tgz#b94a4391c85666c7b73299fd3ad79d4faa435310"
+ integrity sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==
+
"@types/testing-library__jest-dom@^5.9.1":
version "5.14.5"
resolved "https://registry.yarnpkg.com/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.5.tgz#d113709c90b3c75fdb127ec338dad7d5f86c974f"
@@ -2112,6 +2563,39 @@
resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.2.tgz#fc25ad9943bcac11cceb8168db4f275e0e72e756"
integrity sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==
+"@types/uglify-js@*":
+ version "3.16.0"
+ resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.16.0.tgz#2cf74a0e6ebb6cd54c0d48e509d5bd91160a9602"
+ integrity sha512-0yeUr92L3r0GLRnBOvtYK1v2SjqMIqQDHMl7GLb+l2L8+6LSFWEEWEIgVsPdMn5ImLM8qzWT8xFPtQYpp8co0g==
+ dependencies:
+ source-map "^0.6.1"
+
+"@types/use-sync-external-store@^0.0.3":
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz#b6725d5f4af24ace33b36fafd295136e75509f43"
+ integrity sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==
+
+"@types/webpack-sources@*":
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-3.2.0.tgz#16d759ba096c289034b26553d2df1bf45248d38b"
+ integrity sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==
+ dependencies:
+ "@types/node" "*"
+ "@types/source-list-map" "*"
+ source-map "^0.7.3"
+
+"@types/webpack@^4.4.31", "@types/webpack@^4.41.8":
+ version "4.41.32"
+ resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.32.tgz#a7bab03b72904070162b2f169415492209e94212"
+ integrity sha512-cb+0ioil/7oz5//7tZUSwbrSAN/NWHrQylz5cW8G0dWTcF/g+/dSdMlKVZspBYuMAN1+WnwHrkxiRrLcwd0Heg==
+ dependencies:
+ "@types/node" "*"
+ "@types/tapable" "^1"
+ "@types/uglify-js" "*"
+ "@types/webpack-sources" "*"
+ anymatch "^3.0.0"
+ source-map "^0.6.0"
+
"@types/ws@^8.5.1":
version "8.5.3"
resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.3.tgz#7d25a1ffbecd3c4f2d35068d0b283c037003274d"
@@ -2124,6 +2608,20 @@
resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b"
integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==
+"@types/yargs@^13.0.0":
+ version "13.0.12"
+ resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.12.tgz#d895a88c703b78af0465a9de88aa92c61430b092"
+ integrity sha512-qCxJE1qgz2y0hA4pIxjBR+PelCH0U5CK1XJXFwCNqfmliatKp47UCXXE9Dyk1OXBDLvsCF57TqQEJaeLfDYEOQ==
+ dependencies:
+ "@types/yargs-parser" "*"
+
+"@types/yargs@^15.0.0":
+ version "15.0.14"
+ resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.14.tgz#26d821ddb89e70492160b66d10a0eb6df8f6fb06"
+ integrity sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==
+ dependencies:
+ "@types/yargs-parser" "*"
+
"@types/yargs@^16.0.0":
version "16.0.4"
resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.4.tgz#26aad98dd2c2a38e421086ea9ad42b9e51642977"
@@ -2233,21 +2731,64 @@
"@webassemblyjs/helper-numbers" "1.11.1"
"@webassemblyjs/helper-wasm-bytecode" "1.11.1"
+"@webassemblyjs/ast@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964"
+ integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==
+ dependencies:
+ "@webassemblyjs/helper-module-context" "1.9.0"
+ "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+ "@webassemblyjs/wast-parser" "1.9.0"
+
"@webassemblyjs/floating-point-hex-parser@1.11.1":
version "1.11.1"
resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz#f6c61a705f0fd7a6aecaa4e8198f23d9dc179e4f"
integrity sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==
+"@webassemblyjs/floating-point-hex-parser@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4"
+ integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==
+
"@webassemblyjs/helper-api-error@1.11.1":
version "1.11.1"
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz#1a63192d8788e5c012800ba6a7a46c705288fd16"
integrity sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==
+"@webassemblyjs/helper-api-error@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2"
+ integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==
+
"@webassemblyjs/helper-buffer@1.11.1":
version "1.11.1"
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz#832a900eb444884cde9a7cad467f81500f5e5ab5"
integrity sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==
+"@webassemblyjs/helper-buffer@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00"
+ integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==
+
+"@webassemblyjs/helper-code-frame@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27"
+ integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==
+ dependencies:
+ "@webassemblyjs/wast-printer" "1.9.0"
+
+"@webassemblyjs/helper-fsm@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8"
+ integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==
+
+"@webassemblyjs/helper-module-context@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07"
+ integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+
"@webassemblyjs/helper-numbers@1.11.1":
version "1.11.1"
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz#64d81da219fbbba1e3bd1bfc74f6e8c4e10a62ae"
@@ -2262,6 +2803,11 @@
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz#f328241e41e7b199d0b20c18e88429c4433295e1"
integrity sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==
+"@webassemblyjs/helper-wasm-bytecode@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790"
+ integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==
+
"@webassemblyjs/helper-wasm-section@1.11.1":
version "1.11.1"
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz#21ee065a7b635f319e738f0dd73bfbda281c097a"
@@ -2272,6 +2818,16 @@
"@webassemblyjs/helper-wasm-bytecode" "1.11.1"
"@webassemblyjs/wasm-gen" "1.11.1"
+"@webassemblyjs/helper-wasm-section@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346"
+ integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/helper-buffer" "1.9.0"
+ "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+ "@webassemblyjs/wasm-gen" "1.9.0"
+
"@webassemblyjs/ieee754@1.11.1":
version "1.11.1"
resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz#963929e9bbd05709e7e12243a099180812992614"
@@ -2279,6 +2835,13 @@
dependencies:
"@xtuc/ieee754" "^1.2.0"
+"@webassemblyjs/ieee754@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4"
+ integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==
+ dependencies:
+ "@xtuc/ieee754" "^1.2.0"
+
"@webassemblyjs/leb128@1.11.1":
version "1.11.1"
resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.1.tgz#ce814b45574e93d76bae1fb2644ab9cdd9527aa5"
@@ -2286,11 +2849,23 @@
dependencies:
"@xtuc/long" "4.2.2"
+"@webassemblyjs/leb128@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95"
+ integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==
+ dependencies:
+ "@xtuc/long" "4.2.2"
+
"@webassemblyjs/utf8@1.11.1":
version "1.11.1"
resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.1.tgz#d1f8b764369e7c6e6bae350e854dec9a59f0a3ff"
integrity sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==
+"@webassemblyjs/utf8@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab"
+ integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==
+
"@webassemblyjs/wasm-edit@1.11.1":
version "1.11.1"
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz#ad206ebf4bf95a058ce9880a8c092c5dec8193d6"
@@ -2305,6 +2880,20 @@
"@webassemblyjs/wasm-parser" "1.11.1"
"@webassemblyjs/wast-printer" "1.11.1"
+"@webassemblyjs/wasm-edit@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf"
+ integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/helper-buffer" "1.9.0"
+ "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+ "@webassemblyjs/helper-wasm-section" "1.9.0"
+ "@webassemblyjs/wasm-gen" "1.9.0"
+ "@webassemblyjs/wasm-opt" "1.9.0"
+ "@webassemblyjs/wasm-parser" "1.9.0"
+ "@webassemblyjs/wast-printer" "1.9.0"
+
"@webassemblyjs/wasm-gen@1.11.1":
version "1.11.1"
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz#86c5ea304849759b7d88c47a32f4f039ae3c8f76"
@@ -2316,6 +2905,17 @@
"@webassemblyjs/leb128" "1.11.1"
"@webassemblyjs/utf8" "1.11.1"
+"@webassemblyjs/wasm-gen@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c"
+ integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+ "@webassemblyjs/ieee754" "1.9.0"
+ "@webassemblyjs/leb128" "1.9.0"
+ "@webassemblyjs/utf8" "1.9.0"
+
"@webassemblyjs/wasm-opt@1.11.1":
version "1.11.1"
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz#657b4c2202f4cf3b345f8a4c6461c8c2418985f2"
@@ -2326,6 +2926,16 @@
"@webassemblyjs/wasm-gen" "1.11.1"
"@webassemblyjs/wasm-parser" "1.11.1"
+"@webassemblyjs/wasm-opt@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61"
+ integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/helper-buffer" "1.9.0"
+ "@webassemblyjs/wasm-gen" "1.9.0"
+ "@webassemblyjs/wasm-parser" "1.9.0"
+
"@webassemblyjs/wasm-parser@1.11.1":
version "1.11.1"
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz#86ca734534f417e9bd3c67c7a1c75d8be41fb199"
@@ -2338,6 +2948,30 @@
"@webassemblyjs/leb128" "1.11.1"
"@webassemblyjs/utf8" "1.11.1"
+"@webassemblyjs/wasm-parser@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e"
+ integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/helper-api-error" "1.9.0"
+ "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
+ "@webassemblyjs/ieee754" "1.9.0"
+ "@webassemblyjs/leb128" "1.9.0"
+ "@webassemblyjs/utf8" "1.9.0"
+
+"@webassemblyjs/wast-parser@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914"
+ integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/floating-point-hex-parser" "1.9.0"
+ "@webassemblyjs/helper-api-error" "1.9.0"
+ "@webassemblyjs/helper-code-frame" "1.9.0"
+ "@webassemblyjs/helper-fsm" "1.9.0"
+ "@xtuc/long" "4.2.2"
+
"@webassemblyjs/wast-printer@1.11.1":
version "1.11.1"
resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz#d0c73beda8eec5426f10ae8ef55cee5e7084c2f0"
@@ -2346,6 +2980,15 @@
"@webassemblyjs/ast" "1.11.1"
"@xtuc/long" "4.2.2"
+"@webassemblyjs/wast-printer@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899"
+ integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/wast-parser" "1.9.0"
+ "@xtuc/long" "4.2.2"
+
"@xtuc/ieee754@^1.2.0":
version "1.2.0"
resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790"
@@ -2356,7 +2999,7 @@
resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
-abab@^2.0.3, abab@^2.0.5:
+abab@^2.0.0, abab@^2.0.3, abab@^2.0.5:
version "2.0.6"
resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291"
integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==
@@ -2369,6 +3012,14 @@ accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8:
mime-types "~2.1.34"
negotiator "0.6.3"
+acorn-globals@^4.3.2:
+ version "4.3.4"
+ resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7"
+ integrity sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==
+ dependencies:
+ acorn "^6.0.1"
+ acorn-walk "^6.0.1"
+
acorn-globals@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45"
@@ -2382,7 +3033,7 @@ acorn-import-assertions@^1.7.6:
resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9"
integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==
-acorn-jsx@^5.3.2:
+acorn-jsx@^5.2.0, acorn-jsx@^5.3.2:
version "5.3.2"
resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
@@ -2396,12 +3047,22 @@ acorn-node@^1.8.2:
acorn-walk "^7.0.0"
xtend "^4.0.2"
+acorn-walk@^6.0.1:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c"
+ integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==
+
acorn-walk@^7.0.0, acorn-walk@^7.1.1:
version "7.2.0"
resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc"
integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==
-acorn@^7.0.0, acorn@^7.1.1:
+acorn@^6.0.1, acorn@^6.4.1:
+ version "6.4.2"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6"
+ integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==
+
+acorn@^7.0.0, acorn@^7.1.0, acorn@^7.1.1:
version "7.4.1"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
@@ -2416,6 +3077,14 @@ address@^1.0.1, address@^1.1.2:
resolved "https://registry.yarnpkg.com/address/-/address-1.2.0.tgz#d352a62c92fee90f89a693eccd2a8b2139ab02d9"
integrity sha512-tNEZYz5G/zYunxFm7sfhAxkXEuLj3K6BKwv6ZURlsF6yiUQ65z0Q2wZW9L5cPUl9ocofGvXOdFYbFHp0+6MOig==
+adjust-sourcemap-loader@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/adjust-sourcemap-loader/-/adjust-sourcemap-loader-3.0.0.tgz#5ae12fb5b7b1c585e80bbb5a63ec163a1a45e61e"
+ integrity sha512-YBrGyT2/uVQ/c6Rr+t6ZJXniY03YtHGMJQYal368burRGYKqhx9qGTWqcBU5s1CwYY9E/ri63RYyG1IacMZtqw==
+ dependencies:
+ loader-utils "^2.0.0"
+ regex-parser "^2.2.11"
+
adjust-sourcemap-loader@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz#fc4a0fd080f7d10471f30a7320f25560ade28c99"
@@ -2431,6 +3100,11 @@ agent-base@6:
dependencies:
debug "4"
+ajv-errors@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d"
+ integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==
+
ajv-formats@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520"
@@ -2438,7 +3112,7 @@ ajv-formats@^2.1.1:
dependencies:
ajv "^8.0.0"
-ajv-keywords@^3.4.1, ajv-keywords@^3.5.2:
+ajv-keywords@^3.1.0, ajv-keywords@^3.2.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2:
version "3.5.2"
resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==
@@ -2450,7 +3124,7 @@ ajv-keywords@^5.0.0:
dependencies:
fast-deep-equal "^3.1.3"
-ajv@^6.10.0, ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5:
+ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5, ajv@^6.5.3:
version "6.12.6"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
@@ -2470,6 +3144,11 @@ ajv@^8.0.0, ajv@^8.6.0, ajv@^8.8.0:
require-from-string "^2.0.2"
uri-js "^4.2.2"
+ansi-colors@^3.0.0:
+ version "3.2.4"
+ resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf"
+ integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==
+
ansi-escapes@^4.2.1, ansi-escapes@^4.3.1:
version "4.3.2"
resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e"
@@ -2477,12 +3156,22 @@ ansi-escapes@^4.2.1, ansi-escapes@^4.3.1:
dependencies:
type-fest "^0.21.3"
-ansi-html-community@^0.0.8:
+ansi-html-community@0.0.8, ansi-html-community@^0.0.8:
version "0.0.8"
resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41"
integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==
-ansi-regex@^5.0.1:
+ansi-regex@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
+ integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==
+
+ansi-regex@^4.1.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed"
+ integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==
+
+ansi-regex@^5.0.0, ansi-regex@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
@@ -2492,7 +3181,12 @@ ansi-regex@^6.0.1:
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a"
integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==
-ansi-styles@^3.2.1:
+ansi-styles@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
+ integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==
+
+ansi-styles@^3.2.0, ansi-styles@^3.2.1:
version "3.2.1"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
@@ -2511,7 +3205,15 @@ ansi-styles@^5.0.0:
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b"
integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==
-anymatch@^3.0.3, anymatch@~3.1.2:
+anymatch@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
+ integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==
+ dependencies:
+ micromatch "^3.1.4"
+ normalize-path "^2.1.1"
+
+anymatch@^3.0.0, anymatch@^3.0.3, anymatch@~3.1.2:
version "3.1.2"
resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716"
integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==
@@ -2519,6 +3221,23 @@ anymatch@^3.0.3, anymatch@~3.1.2:
normalize-path "^3.0.0"
picomatch "^2.0.4"
+apexcharts@^3.35.3:
+ version "3.35.3"
+ resolved "https://registry.yarnpkg.com/apexcharts/-/apexcharts-3.35.3.tgz#8025e85971c4695be124aa67c21f66d5787f9c51"
+ integrity sha512-UDlxslJr3DG63I/SgoiivIu4lpP25GMaKFK8NvCHmTksTQshx4ng3oPPrYvdsBFOvD/ajPYIh/p7rNB0jq8vXg==
+ dependencies:
+ svg.draggable.js "^2.2.2"
+ svg.easing.js "^2.0.0"
+ svg.filter.js "^2.0.2"
+ svg.pathmorphing.js "^0.1.3"
+ svg.resize.js "^1.4.3"
+ svg.select.js "^3.0.1"
+
+aproba@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
+ integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
+
arg@^5.0.2:
version "5.0.2"
resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c"
@@ -2549,12 +3268,42 @@ aria-query@^5.0.0:
resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.0.0.tgz#210c21aaf469613ee8c9a62c7f86525e058db52c"
integrity sha512-V+SM7AbUwJ+EBnB8+DXs0hPZHO0W6pqBcc0dW90OwtVG02PswOu/teuARoLQjdDOH+t9pJgGnW5/Qmouf3gPJg==
+arity-n@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/arity-n/-/arity-n-1.0.4.tgz#d9e76b11733e08569c0847ae7b39b2860b30b745"
+ integrity sha512-fExL2kFDC1Q2DUOx3whE/9KoN66IzkY4b4zUHUBFM1ojEYjZZYDcUW3bek/ufGionX9giIKDC5redH2IlGqcQQ==
+
+arr-diff@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
+ integrity sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==
+
+arr-flatten@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
+ integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
+
+arr-union@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
+ integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==
+
+array-differ@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b"
+ integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==
+
+array-equal@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93"
+ integrity sha512-H3LU5RLiSsGXPhN+Nipar0iR0IofH+8r89G2y1tBKxQ/agagKyAjhkAFDRBfodP2caPrNKHpAWNIM/c9yeL7uA==
+
array-flatten@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==
-array-flatten@^2.1.2:
+array-flatten@^2.1.0, array-flatten@^2.1.2:
version "2.1.2"
resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099"
integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==
@@ -2570,11 +3319,28 @@ array-includes@^3.1.4, array-includes@^3.1.5:
get-intrinsic "^1.1.1"
is-string "^1.0.7"
+array-union@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
+ integrity sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==
+ dependencies:
+ array-uniq "^1.0.1"
+
array-union@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
+array-uniq@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
+ integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==
+
+array-unique@^0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
+ integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==
+
array.prototype.flat@^1.2.5:
version "1.3.0"
resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz#0b0c1567bf57b38b56b4c97b8aa72ab45e4adc7b"
@@ -2606,22 +3372,84 @@ array.prototype.reduce@^1.0.4:
es-array-method-boxes-properly "^1.0.0"
is-string "^1.0.7"
+arrify@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa"
+ integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==
+
asap@~2.0.6:
version "2.0.6"
resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==
-ast-types-flow@^0.0.7:
- version "0.0.7"
- resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad"
- integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==
+asn1.js@^5.2.0:
+ version "5.4.1"
+ resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07"
+ integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==
+ dependencies:
+ bn.js "^4.0.0"
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+ safer-buffer "^2.1.0"
-async@^3.2.3:
- version "3.2.4"
- resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c"
- integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==
+asn1@~0.2.3:
+ version "0.2.6"
+ resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d"
+ integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==
+ dependencies:
+ safer-buffer "~2.1.0"
-asynckit@^0.4.0:
+assert-plus@1.0.0, assert-plus@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
+ integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==
+
+assert@^1.1.1:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb"
+ integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==
+ dependencies:
+ object-assign "^4.1.1"
+ util "0.10.3"
+
+assign-symbols@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
+ integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==
+
+ast-types-flow@^0.0.7:
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad"
+ integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==
+
+astral-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"
+ integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==
+
+async-each@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf"
+ integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==
+
+async-limiter@~1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd"
+ integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==
+
+async@^2.6.2:
+ version "2.6.4"
+ resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221"
+ integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==
+ dependencies:
+ lodash "^4.17.14"
+
+async@^3.2.3:
+ version "3.2.4"
+ resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c"
+ integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==
+
+asynckit@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
@@ -2648,6 +3476,29 @@ autoprefixer@^10.4.7:
picocolors "^1.0.0"
postcss-value-parser "^4.2.0"
+autoprefixer@^9.8.6:
+ version "9.8.8"
+ resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.8.tgz#fd4bd4595385fa6f06599de749a4d5f7a474957a"
+ integrity sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==
+ dependencies:
+ browserslist "^4.12.0"
+ caniuse-lite "^1.0.30001109"
+ normalize-range "^0.1.2"
+ num2fraction "^1.2.2"
+ picocolors "^0.2.1"
+ postcss "^7.0.32"
+ postcss-value-parser "^4.1.0"
+
+aws-sign2@~0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
+ integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==
+
+aws4@^1.8.0:
+ version "1.11.0"
+ resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59"
+ integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==
+
axe-core@^4.4.2:
version "4.4.2"
resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.4.2.tgz#dcf7fb6dea866166c3eab33d68208afe4d5f670c"
@@ -2673,6 +3524,42 @@ axobject-query@^2.2.0:
resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be"
integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==
+babel-eslint@^11.0.0-beta.2:
+ version "11.0.0-beta.2"
+ resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-11.0.0-beta.2.tgz#de1f06795aa0d8cedcf6ac943e63056f5b4a7048"
+ integrity sha512-D2tunrOu04XloEdU2XVUminUu25FILlGruZmffqH5OSnLDhCheKNvUoM1ihrexdUvhizlix8bjqRnsss4V/UIQ==
+ dependencies:
+ eslint-scope "5.0.0"
+ eslint-visitor-keys "^1.1.0"
+ semver "^6.3.0"
+
+babel-jest@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.9.0.tgz#3fc327cb8467b89d14d7bc70e315104a783ccd54"
+ integrity sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==
+ dependencies:
+ "@jest/transform" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ "@types/babel__core" "^7.1.0"
+ babel-plugin-istanbul "^5.1.0"
+ babel-preset-jest "^24.9.0"
+ chalk "^2.4.2"
+ slash "^2.0.0"
+
+babel-jest@^25.5.1:
+ version "25.5.1"
+ resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-25.5.1.tgz#bc2e6101f849d6f6aec09720ffc7bc5332e62853"
+ integrity sha512-9dA9+GmMjIzgPnYtkhBg73gOo/RHqPmLruP3BaGL4KEX3Dwz6pI8auSN8G8+iuEG90+GSswyKvslN+JYSaacaQ==
+ dependencies:
+ "@jest/transform" "^25.5.1"
+ "@jest/types" "^25.5.0"
+ "@types/babel__core" "^7.1.7"
+ babel-plugin-istanbul "^6.0.0"
+ babel-preset-jest "^25.5.0"
+ chalk "^3.0.0"
+ graceful-fs "^4.2.4"
+ slash "^3.0.0"
+
babel-jest@^27.4.2, babel-jest@^27.5.1:
version "27.5.1"
resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.5.1.tgz#a1bf8d61928edfefd21da27eb86a695bfd691444"
@@ -2687,7 +3574,7 @@ babel-jest@^27.4.2, babel-jest@^27.5.1:
graceful-fs "^4.2.9"
slash "^3.0.0"
-babel-loader@^8.2.3:
+babel-loader@^8.1.0, babel-loader@^8.2.3:
version "8.2.5"
resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.5.tgz#d45f585e654d5a5d90f5350a779d7647c5ed512e"
integrity sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==
@@ -2704,7 +3591,28 @@ babel-plugin-dynamic-import-node@^2.3.3:
dependencies:
object.assign "^4.1.0"
-babel-plugin-istanbul@^6.1.1:
+babel-plugin-inline-react-svg@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/babel-plugin-inline-react-svg/-/babel-plugin-inline-react-svg-1.1.2.tgz#f2090de7404982deaeb5d7ac9c16078a61ca6486"
+ integrity sha512-oDR/eraFbMtvg4bDxv4W8bQWTDxLVkKpIYKx0cey/J2QqFyogyQOvEz9SjSYmNK3jI+yZdVMAshTwkKnj6J/Aw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/parser" "^7.0.0"
+ lodash.isplainobject "^4.0.6"
+ resolve "^1.10.0"
+ svgo "^0.7.2"
+
+babel-plugin-istanbul@^5.1.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz#df4ade83d897a92df069c4d9a25cf2671293c854"
+ integrity sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ find-up "^3.0.0"
+ istanbul-lib-instrument "^3.3.0"
+ test-exclude "^5.2.3"
+
+babel-plugin-istanbul@^6.0.0, babel-plugin-istanbul@^6.1.1:
version "6.1.1"
resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73"
integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==
@@ -2715,6 +3623,22 @@ babel-plugin-istanbul@^6.1.1:
istanbul-lib-instrument "^5.0.4"
test-exclude "^6.0.0"
+babel-plugin-jest-hoist@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz#4f837091eb407e01447c8843cbec546d0002d756"
+ integrity sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw==
+ dependencies:
+ "@types/babel__traverse" "^7.0.6"
+
+babel-plugin-jest-hoist@^25.5.0:
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-25.5.0.tgz#129c80ba5c7fc75baf3a45b93e2e372d57ca2677"
+ integrity sha512-u+/W+WAjMlvoocYGTwthAiQSxDcJAyHpQ6oWlHdFZaaN+Rlk8Q7iiwDPg2lN/FyJtAYnKjFxbn7xus4HCFkg5g==
+ dependencies:
+ "@babel/template" "^7.3.3"
+ "@babel/types" "^7.3.3"
+ "@types/babel__traverse" "^7.0.6"
+
babel-plugin-jest-hoist@^27.5.1:
version "27.5.1"
resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz#9be98ecf28c331eb9f5df9c72d6f89deb8181c2e"
@@ -2725,6 +3649,15 @@ babel-plugin-jest-hoist@^27.5.1:
"@types/babel__core" "^7.0.0"
"@types/babel__traverse" "^7.0.6"
+babel-plugin-macros@^2.6.1:
+ version "2.8.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138"
+ integrity sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ cosmiconfig "^6.0.0"
+ resolve "^1.12.0"
+
babel-plugin-macros@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1"
@@ -2734,6 +3667,17 @@ babel-plugin-macros@^3.1.0:
cosmiconfig "^7.0.0"
resolve "^1.19.0"
+babel-plugin-module-resolver@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-4.1.0.tgz#22a4f32f7441727ec1fbf4967b863e1e3e9f33e2"
+ integrity sha512-MlX10UDheRr3lb3P0WcaIdtCSRlxdQsB1sBqL7W0raF070bGl1HQQq5K3T2vf2XAYie+ww+5AKC/WrkjRO2knA==
+ dependencies:
+ find-babel-config "^1.2.0"
+ glob "^7.1.6"
+ pkg-up "^3.1.0"
+ reselect "^4.0.0"
+ resolve "^1.13.1"
+
babel-plugin-named-asset-import@^0.3.8:
version "0.3.8"
resolved "https://registry.yarnpkg.com/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz#6b7fa43c59229685368683c28bc9734f24524cc2"
@@ -2763,11 +3707,62 @@ babel-plugin-polyfill-regenerator@^0.3.0:
dependencies:
"@babel/helper-define-polyfill-provider" "^0.3.1"
+babel-plugin-react-css-modules@^5.2.6:
+ version "5.2.6"
+ resolved "https://registry.yarnpkg.com/babel-plugin-react-css-modules/-/babel-plugin-react-css-modules-5.2.6.tgz#176663dae4add31af780f1ec86d3a93115875c83"
+ integrity sha512-jBU/oVgoEg/58Dcu0tjyNvaXBllxJXip7hlpiX+e0CYTmDADWB484P4pJb7d0L6nWKSzyEqtePcBaq3SKalG/g==
+ dependencies:
+ "@babel/plugin-syntax-jsx" "^7.0.0"
+ "@babel/types" "^7.0.0"
+ ajv "^6.5.3"
+ ajv-keywords "^3.2.0"
+ generic-names "^2.0.1"
+ postcss "^7.0.2"
+ postcss-modules "^1.3.2"
+ postcss-modules-extract-imports "^1.2.0"
+ postcss-modules-local-by-default "^1.2.0"
+ postcss-modules-parser "^1.1.1"
+ postcss-modules-scope "^1.1.0"
+ postcss-modules-values "^1.3.0"
+
+"babel-plugin-styled-components@>= 1.12.0":
+ version "2.0.7"
+ resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-2.0.7.tgz#c81ef34b713f9da2b7d3f5550df0d1e19e798086"
+ integrity sha512-i7YhvPgVqRKfoQ66toiZ06jPNA3p6ierpfUuEWxNF+fV27Uv5gxBkf8KZLHUCc1nFA9j6+80pYoIpqCeyW3/bA==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.16.0"
+ "@babel/helper-module-imports" "^7.16.0"
+ babel-plugin-syntax-jsx "^6.18.0"
+ lodash "^4.17.11"
+ picomatch "^2.3.0"
+
+babel-plugin-syntax-jsx@^6.18.0:
+ version "6.18.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946"
+ integrity sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw==
+
babel-plugin-transform-react-remove-prop-types@^0.4.24:
version "0.4.24"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz#f2edaf9b4c6a5fbe5c1d678bfb531078c1555f3a"
integrity sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==
+babel-preset-current-node-syntax@^0.1.2:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.4.tgz#826f1f8e7245ad534714ba001f84f7e906c3b615"
+ integrity sha512-5/INNCYhUGqw7VbVjT/hb3ucjgkVHKXY7lX3ZjlN4gm565VyFmJUrJ/h+h16ECVB38R/9SF6aACydpKMLZ/c9w==
+ dependencies:
+ "@babel/plugin-syntax-async-generators" "^7.8.4"
+ "@babel/plugin-syntax-bigint" "^7.8.3"
+ "@babel/plugin-syntax-class-properties" "^7.8.3"
+ "@babel/plugin-syntax-import-meta" "^7.8.3"
+ "@babel/plugin-syntax-json-strings" "^7.8.3"
+ "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3"
+ "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
+ "@babel/plugin-syntax-numeric-separator" "^7.8.3"
+ "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
+ "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
+ "@babel/plugin-syntax-optional-chaining" "^7.8.3"
+
babel-preset-current-node-syntax@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b"
@@ -2786,6 +3781,22 @@ babel-preset-current-node-syntax@^1.0.0:
"@babel/plugin-syntax-optional-chaining" "^7.8.3"
"@babel/plugin-syntax-top-level-await" "^7.8.3"
+babel-preset-jest@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz#192b521e2217fb1d1f67cf73f70c336650ad3cdc"
+ integrity sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg==
+ dependencies:
+ "@babel/plugin-syntax-object-rest-spread" "^7.0.0"
+ babel-plugin-jest-hoist "^24.9.0"
+
+babel-preset-jest@^25.5.0:
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-25.5.0.tgz#c1d7f191829487a907764c65307faa0e66590b49"
+ integrity sha512-8ZczygctQkBU+63DtSOKGh7tFL0CeCuz+1ieud9lJ1WPQ9O6A1a/r+LGn6Y705PA6whHQ3T1XuB/PmpfNYf8Fw==
+ dependencies:
+ babel-plugin-jest-hoist "^25.5.0"
+ babel-preset-current-node-syntax "^0.1.2"
+
babel-preset-jest@^27.5.1:
version "27.5.1"
resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz#91f10f58034cb7989cb4f962b69fa6eef6a6bc81"
@@ -2816,16 +3827,59 @@ babel-preset-react-app@^10.0.1:
babel-plugin-macros "^3.1.0"
babel-plugin-transform-react-remove-prop-types "^0.4.24"
+babel-runtime@^7.0.0-beta.3:
+ version "7.0.0-beta.3"
+ resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-7.0.0-beta.3.tgz#7c750de5514452c27612172506b49085a4a630f2"
+ integrity sha512-jlzZ8RACjt0QGxq+wqsw5bCQE9RcUyWpw987mDY3GYxTpOQT2xoyNoG++oVCHzr/nACLBIprfVBNvv/If1ZYcg==
+ dependencies:
+ core-js "^2.4.0"
+ regenerator-runtime "^0.11.0"
+
balanced-match@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+base64-js@^1.0.2:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
+ integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
+
+base@^0.11.1:
+ version "0.11.2"
+ resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
+ integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==
+ dependencies:
+ cache-base "^1.0.1"
+ class-utils "^0.3.5"
+ component-emitter "^1.2.1"
+ define-property "^1.0.0"
+ isobject "^3.0.1"
+ mixin-deep "^1.2.0"
+ pascalcase "^0.1.1"
+
batch@0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16"
integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==
+bcrypt-pbkdf@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
+ integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==
+ dependencies:
+ tweetnacl "^0.14.3"
+
+bfj@^6.1.1:
+ version "6.1.2"
+ resolved "https://registry.yarnpkg.com/bfj/-/bfj-6.1.2.tgz#325c861a822bcb358a41c78a33b8e6e2086dde7f"
+ integrity sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw==
+ dependencies:
+ bluebird "^3.5.5"
+ check-types "^8.0.3"
+ hoopy "^0.1.4"
+ tryer "^1.0.1"
+
bfj@^7.0.2:
version "7.0.2"
resolved "https://registry.yarnpkg.com/bfj/-/bfj-7.0.2.tgz#1988ce76f3add9ac2913fd8ba47aad9e651bfbb2"
@@ -2841,16 +3895,38 @@ big.js@^5.2.2:
resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==
+binary-extensions@^1.0.0:
+ version "1.13.1"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65"
+ integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==
+
binary-extensions@^2.0.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
+bindings@^1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df"
+ integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==
+ dependencies:
+ file-uri-to-path "1.0.0"
+
bluebird@^3.5.5:
version "3.7.2"
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
+bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9:
+ version "4.12.0"
+ resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88"
+ integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==
+
+bn.js@^5.0.0, bn.js@^5.1.1:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70"
+ integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==
+
body-parser@1.20.0:
version "1.20.0"
resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.0.tgz#3de69bd89011c11573d7bfee6a64f11b6bd27cc5"
@@ -2884,6 +3960,18 @@ bonjour-service@^1.0.11:
fast-deep-equal "^3.1.3"
multicast-dns "^7.2.5"
+bonjour@^3.5.0:
+ version "3.5.0"
+ resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5"
+ integrity sha512-RaVTblr+OnEli0r/ud8InrU7D+G0y6aJhlxaLa6Pwty4+xoxboF1BsUI45tujvRpbj9dQVoglChqonGAsjEBYg==
+ dependencies:
+ array-flatten "^2.1.0"
+ deep-equal "^1.0.1"
+ dns-equal "^1.0.0"
+ dns-txt "^2.0.2"
+ multicast-dns "^6.0.1"
+ multicast-dns-service-types "^1.1.0"
+
boolbase@^1.0.0, boolbase@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
@@ -2904,6 +3992,22 @@ brace-expansion@^2.0.1:
dependencies:
balanced-match "^1.0.0"
+braces@^2.3.1, braces@^2.3.2:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
+ integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
+ dependencies:
+ arr-flatten "^1.1.0"
+ array-unique "^0.3.2"
+ extend-shallow "^2.0.1"
+ fill-range "^4.0.0"
+ isobject "^3.0.1"
+ repeat-element "^1.1.2"
+ snapdragon "^0.8.1"
+ snapdragon-node "^2.0.1"
+ split-string "^3.0.2"
+ to-regex "^3.0.1"
+
braces@^3.0.2, braces@~3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
@@ -2911,6 +4015,11 @@ braces@^3.0.2, braces@~3.0.2:
dependencies:
fill-range "^7.0.1"
+brorand@^1.0.1, brorand@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
+ integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==
+
browser-cookies@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/browser-cookies/-/browser-cookies-1.2.0.tgz#fca3ffb9b6a63aadc4d8c0999c6b57d0fa7d29b5"
@@ -2921,7 +4030,75 @@ browser-process-hrtime@^1.0.0:
resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626"
integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==
-browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.16.6, browserslist@^4.18.1, browserslist@^4.20.2, browserslist@^4.20.3, browserslist@^4.21.0:
+browser-resolve@^1.11.3:
+ version "1.11.3"
+ resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6"
+ integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==
+ dependencies:
+ resolve "1.1.7"
+
+browserify-aes@^1.0.0, browserify-aes@^1.0.4:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48"
+ integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==
+ dependencies:
+ buffer-xor "^1.0.3"
+ cipher-base "^1.0.0"
+ create-hash "^1.1.0"
+ evp_bytestokey "^1.0.3"
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+browserify-cipher@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0"
+ integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==
+ dependencies:
+ browserify-aes "^1.0.4"
+ browserify-des "^1.0.0"
+ evp_bytestokey "^1.0.0"
+
+browserify-des@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c"
+ integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==
+ dependencies:
+ cipher-base "^1.0.1"
+ des.js "^1.0.0"
+ inherits "^2.0.1"
+ safe-buffer "^5.1.2"
+
+browserify-rsa@^4.0.0, browserify-rsa@^4.0.1:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d"
+ integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==
+ dependencies:
+ bn.js "^5.0.0"
+ randombytes "^2.0.1"
+
+browserify-sign@^4.0.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3"
+ integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==
+ dependencies:
+ bn.js "^5.1.1"
+ browserify-rsa "^4.0.1"
+ create-hash "^1.2.0"
+ create-hmac "^1.1.7"
+ elliptic "^6.5.3"
+ inherits "^2.0.4"
+ parse-asn1 "^5.1.5"
+ readable-stream "^3.6.0"
+ safe-buffer "^5.2.0"
+
+browserify-zlib@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f"
+ integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==
+ dependencies:
+ pako "~1.0.5"
+
+browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.16.6, browserslist@^4.18.1, browserslist@^4.20.2, browserslist@^4.20.3, browserslist@^4.21.0:
version "4.21.0"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.0.tgz#7ab19572361a140ecd1e023e2c1ed95edda0cefe"
integrity sha512-UQxE0DIhRB5z/zDz9iA03BOfxaN2+GQdBYH/2WrSIWEUrnpzTPJbhqt+umq6r3acaPRTW1FNTkrcp0PXgtFkvA==
@@ -2943,11 +4120,35 @@ buffer-from@^1.0.0:
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
+buffer-indexof@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c"
+ integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==
+
+buffer-xor@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
+ integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==
+
+buffer@^4.3.0:
+ version "4.9.2"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8"
+ integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==
+ dependencies:
+ base64-js "^1.0.2"
+ ieee754 "^1.1.4"
+ isarray "^1.0.0"
+
builtin-modules@^3.1.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6"
integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==
+builtin-status-codes@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
+ integrity sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==
+
bytes@3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
@@ -2958,6 +4159,42 @@ bytes@3.1.2:
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5"
integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==
+cacache@^12.0.2:
+ version "12.0.4"
+ resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c"
+ integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==
+ dependencies:
+ bluebird "^3.5.5"
+ chownr "^1.1.1"
+ figgy-pudding "^3.5.1"
+ glob "^7.1.4"
+ graceful-fs "^4.1.15"
+ infer-owner "^1.0.3"
+ lru-cache "^5.1.1"
+ mississippi "^3.0.0"
+ mkdirp "^0.5.1"
+ move-concurrently "^1.0.1"
+ promise-inflight "^1.0.1"
+ rimraf "^2.6.3"
+ ssri "^6.0.1"
+ unique-filename "^1.1.1"
+ y18n "^4.0.0"
+
+cache-base@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
+ integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==
+ dependencies:
+ collection-visit "^1.0.0"
+ component-emitter "^1.2.1"
+ get-value "^2.0.6"
+ has-value "^1.0.0"
+ isobject "^3.0.1"
+ set-value "^2.0.0"
+ to-object-path "^0.3.0"
+ union-value "^1.0.0"
+ unset-value "^1.0.0"
+
call-bind@^1.0.0, call-bind@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
@@ -2971,7 +4208,7 @@ callsites@^3.0.0:
resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
-camel-case@^4.1.2:
+camel-case@^4.1.1, camel-case@^4.1.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a"
integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==
@@ -2984,7 +4221,7 @@ camelcase-css@^2.0.1:
resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5"
integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==
-camelcase@^5.3.1:
+camelcase@5.3.1, camelcase@^5.0.0, camelcase@^5.3.1:
version "5.3.1"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
@@ -2994,6 +4231,11 @@ camelcase@^6.2.0, camelcase@^6.2.1:
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a"
integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
+camelize@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b"
+ integrity sha512-W2lPwkBkMZwFlPCXhIlYgxu+7gC/NUlCtdK652DAJ1JdgV0sTrvuPFshNPrFa1TY2JOkLhgdeEBplB4ezEa+xg==
+
caniuse-api@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0"
@@ -3004,17 +4246,40 @@ caniuse-api@^3.0.0:
lodash.memoize "^4.1.2"
lodash.uniq "^4.5.0"
-caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001335, caniuse-lite@^1.0.30001358:
+caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001335, caniuse-lite@^1.0.30001358:
version "1.0.30001359"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001359.tgz#a1c1cbe1c2da9e689638813618b4219acbd4925e"
integrity sha512-Xln/BAsPzEuiVLgJ2/45IaqD9jShtk3Y33anKb4+yLwQzws3+v6odKfpgES/cDEaZMLzSChpIGdbOYtH9MyuHw==
+capture-exit@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4"
+ integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==
+ dependencies:
+ rsvp "^4.8.4"
+
case-sensitive-paths-webpack-plugin@^2.4.0:
version "2.4.0"
resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz#db64066c6422eed2e08cc14b986ca43796dbc6d4"
integrity sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==
-chalk@^2.0.0, chalk@^2.4.1:
+caseless@~0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
+ integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==
+
+chalk@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
+ integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==
+ dependencies:
+ ansi-styles "^2.2.1"
+ escape-string-regexp "^1.0.2"
+ has-ansi "^2.0.0"
+ strip-ansi "^3.0.0"
+ supports-color "^2.0.0"
+
+chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2:
version "2.4.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
@@ -3054,12 +4319,22 @@ charcodes@^0.2.0:
resolved "https://registry.yarnpkg.com/charcodes/-/charcodes-0.2.0.tgz#5208d327e6cc05f99eb80ffc814707572d1f14e4"
integrity sha512-Y4kiDb+AM4Ecy58YkuZrrSRJBDQdQ2L+NyS1vHHFtNtUjgutcZfx3yp1dAONI/oPaPmyGfCLx5CxL+zauIMyKQ==
+chardet@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
+ integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
+
check-types@^11.1.1:
version "11.1.2"
resolved "https://registry.yarnpkg.com/check-types/-/check-types-11.1.2.tgz#86a7c12bf5539f6324eb0e70ca8896c0e38f3e2f"
integrity sha512-tzWzvgePgLORb9/3a0YenggReLKAIb2owL03H2Xdoe5pKcUyWRSEQ8xfCar8t2SIAuEDwtmx2da1YB52YuHQMQ==
-"chokidar@>=3.0.0 <4.0.0", chokidar@^3.4.2, chokidar@^3.5.3:
+check-types@^8.0.3:
+ version "8.0.3"
+ resolved "https://registry.yarnpkg.com/check-types/-/check-types-8.0.3.tgz#3356cca19c889544f2d7a95ed49ce508a0ecf552"
+ integrity sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ==
+
+"chokidar@>=3.0.0 <4.0.0", chokidar@^3.4.1, chokidar@^3.4.2, chokidar@^3.5.3:
version "3.5.3"
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
@@ -3074,26 +4349,87 @@ check-types@^11.1.1:
optionalDependencies:
fsevents "~2.3.2"
+chokidar@^2.1.8:
+ version "2.1.8"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917"
+ integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==
+ dependencies:
+ anymatch "^2.0.0"
+ async-each "^1.0.1"
+ braces "^2.3.2"
+ glob-parent "^3.1.0"
+ inherits "^2.0.3"
+ is-binary-path "^1.0.0"
+ is-glob "^4.0.0"
+ normalize-path "^3.0.0"
+ path-is-absolute "^1.0.0"
+ readdirp "^2.2.1"
+ upath "^1.1.1"
+ optionalDependencies:
+ fsevents "^1.2.7"
+
+chownr@^1.1.1:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
+ integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
+
chrome-trace-event@^1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac"
integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==
+ci-info@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46"
+ integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==
+
ci-info@^3.2.0:
version "3.3.2"
resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.3.2.tgz#6d2967ffa407466481c6c90b6e16b3098f080128"
integrity sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==
+cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"
+ integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
cjs-module-lexer@^1.0.0:
version "1.2.2"
resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40"
integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==
-classnames@^2.2.6, classnames@^2.3.1:
+clap@^1.0.9:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51"
+ integrity sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==
+ dependencies:
+ chalk "^1.1.3"
+
+class-utils@^0.3.5:
+ version "0.3.6"
+ resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
+ integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==
+ dependencies:
+ arr-union "^3.1.0"
+ define-property "^0.2.5"
+ isobject "^3.0.0"
+ static-extend "^0.1.1"
+
+classnames@^2.2.1, classnames@^2.2.3, classnames@^2.2.6, classnames@^2.3.1:
version "2.3.1"
resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.1.tgz#dfcfa3891e306ec1dad105d0e88f4417b8535e8e"
integrity sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==
+clean-css@^4.2.3:
+ version "4.2.4"
+ resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.4.tgz#733bf46eba4e607c6891ea57c24a989356831178"
+ integrity sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==
+ dependencies:
+ source-map "~0.6.0"
+
clean-css@^5.2.2:
version "5.3.0"
resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.0.tgz#ad3d8238d5f3549e83d5f87205189494bc7cbb59"
@@ -3101,6 +4437,44 @@ clean-css@^5.2.2:
dependencies:
source-map "~0.6.0"
+clean-webpack-plugin@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/clean-webpack-plugin/-/clean-webpack-plugin-3.0.0.tgz#a99d8ec34c1c628a4541567aa7b457446460c62b"
+ integrity sha512-MciirUH5r+cYLGCOL5JX/ZLzOZbVr1ot3Fw+KcvbhUb6PM+yycqd9ZhIlcigQ5gl+XhppNmw3bEFuaaMNyLj3A==
+ dependencies:
+ "@types/webpack" "^4.4.31"
+ del "^4.1.1"
+
+cli-cursor@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"
+ integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==
+ dependencies:
+ restore-cursor "^3.1.0"
+
+cli-width@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6"
+ integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==
+
+cliui@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5"
+ integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==
+ dependencies:
+ string-width "^3.1.0"
+ strip-ansi "^5.2.0"
+ wrap-ansi "^5.1.0"
+
+cliui@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1"
+ integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==
+ dependencies:
+ string-width "^4.2.0"
+ strip-ansi "^6.0.0"
+ wrap-ansi "^6.2.0"
+
cliui@^7.0.2:
version "7.0.4"
resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f"
@@ -3129,11 +4503,26 @@ coa@^2.0.2:
chalk "^2.4.1"
q "^1.1.2"
+coa@~1.0.1:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd"
+ integrity sha512-KAGck/eNAmCL0dcT3BiuYwLbExK6lduR8DxM3C1TyDzaXhZHyZ8ooX5I5+na2e3dPFuibfxrGdorr0/Lr7RYCQ==
+ dependencies:
+ q "^1.1.2"
+
collect-v8-coverage@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59"
integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==
+collection-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
+ integrity sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==
+ dependencies:
+ map-visit "^1.0.0"
+ object-visit "^1.0.0"
+
color-convert@^1.9.0:
version "1.9.3"
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
@@ -3168,18 +4557,28 @@ colorette@^2.0.10:
resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798"
integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==
-combined-stream@^1.0.8:
+colors@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63"
+ integrity sha512-ENwblkFQpqqia6b++zLD/KUWafYlVY/UNnAp7oz7LY7E924wmpye416wBOmvv/HMWzl8gL1kJlfvId/1Dg176w==
+
+combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6:
version "1.0.8"
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
dependencies:
delayed-stream "~1.0.0"
-commander@^2.20.0:
+commander@^2.18.0, commander@^2.20.0:
version "2.20.3"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
+commander@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068"
+ integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==
+
commander@^7.2.0:
version "7.2.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
@@ -3205,6 +4604,18 @@ commondir@^1.0.1:
resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==
+component-emitter@^1.2.1:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
+ integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==
+
+compose-function@3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/compose-function/-/compose-function-3.0.3.tgz#9ed675f13cc54501d30950a486ff6a7ba3ab185f"
+ integrity sha512-xzhzTJ5eC+gmIzvZq+C3kCJHsp9os6tJkrigDRZclyGtOKINbZtE8n1Tzmeh32jW+BUDPbvZpibwvJHBLGMVwg==
+ dependencies:
+ arity-n "^1.0.4"
+
compressible@~2.0.16:
version "2.0.18"
resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba"
@@ -3230,6 +4641,38 @@ concat-map@0.0.1:
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
+concat-stream@^1.5.0:
+ version "1.6.2"
+ resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
+ integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
+ dependencies:
+ buffer-from "^1.0.0"
+ inherits "^2.0.3"
+ readable-stream "^2.2.2"
+ typedarray "^0.0.6"
+
+concurrently@^5.0.1:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-5.3.0.tgz#7500de6410d043c912b2da27de3202cb489b1e7b"
+ integrity sha512-8MhqOB6PWlBfA2vJ8a0bSFKATOdWlHiQlk11IfmQBPaHVP8oP2gsh2MObE6UR3hqDHqvaIvLTyceNW6obVuFHQ==
+ dependencies:
+ chalk "^2.4.2"
+ date-fns "^2.0.1"
+ lodash "^4.17.15"
+ read-pkg "^4.0.1"
+ rxjs "^6.5.2"
+ spawn-command "^0.0.2-1"
+ supports-color "^6.1.0"
+ tree-kill "^1.2.2"
+ yargs "^13.3.0"
+
+config@^3.3.6:
+ version "3.3.7"
+ resolved "https://registry.yarnpkg.com/config/-/config-3.3.7.tgz#4310410dc2bf4e0effdca21a12a4035860a24ee4"
+ integrity sha512-mX/n7GKDYZMqvvkY6e6oBY49W8wxdmQt+ho/5lhwFDXqQW9gI+Ahp8EKp8VAbISPnmf2+Bv5uZK7lKXZ6pf1aA==
+ dependencies:
+ json5 "^2.1.1"
+
confusing-browser-globals@^1.0.11:
version "1.0.11"
resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81"
@@ -3240,6 +4683,16 @@ connect-history-api-fallback@^1.6.0:
resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc"
integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==
+console-browserify@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336"
+ integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==
+
+constants-browserify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
+ integrity sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==
+
content-disposition@0.5.4:
version "0.5.4"
resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe"
@@ -3252,7 +4705,19 @@ content-type@~1.0.4:
resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
-convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0:
+convert-source-map@1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442"
+ integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==
+ dependencies:
+ safe-buffer "~5.1.1"
+
+convert-source-map@^0.3.3:
+ version "0.3.5"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-0.3.5.tgz#f1d802950af7dd2631a1febe0596550c86ab3190"
+ integrity sha512-+4nRk0k3oEpwUB7/CalD7xE2z4VmtEnnq0GO2IPTkrooTrAhEsWvuLF5iWP1dXrwluki/azwXV1ve7gtYuPldg==
+
+convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0:
version "1.8.0"
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369"
integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==
@@ -3269,6 +4734,23 @@ cookie@0.5.0:
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b"
integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==
+copy-concurrently@^1.0.0:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0"
+ integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==
+ dependencies:
+ aproba "^1.1.1"
+ fs-write-stream-atomic "^1.0.8"
+ iferr "^0.1.5"
+ mkdirp "^0.5.1"
+ rimraf "^2.5.4"
+ run-queue "^1.0.0"
+
+copy-descriptor@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
+ integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==
+
core-js-compat@^3.21.0, core-js-compat@^3.22.1:
version "3.23.3"
resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.23.3.tgz#7d8503185be76bb6d8d592c291a4457a8e440aa9"
@@ -3282,11 +4764,21 @@ core-js-pure@^3.20.2, core-js-pure@^3.8.1:
resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.23.3.tgz#bcd02d3d8ec68ad871ef50d5ccbb248ddb54f401"
integrity sha512-XpoouuqIj4P+GWtdyV8ZO3/u4KftkeDVMfvp+308eGMhCrA3lVDSmAxO0c6GGOcmgVlaKDrgWVMo49h2ab/TDA==
+core-js@^2.4.0:
+ version "2.6.12"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec"
+ integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==
+
core-js@^3.19.2:
version "3.23.3"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.23.3.tgz#3b977612b15da6da0c9cc4aec487e8d24f371112"
integrity sha512-oAKwkj9xcWNBAvGbT//WiCdOMpb9XQG92/Fe3ABFM/R16BsHgePG00mFOgKf7IsCtfj8tA1kHtf/VwErhriz5Q==
+core-util-is@1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+ integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==
+
core-util-is@~1.0.0:
version "1.0.3"
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85"
@@ -3314,7 +4806,64 @@ cosmiconfig@^7.0.0:
path-type "^4.0.0"
yaml "^1.10.0"
-cross-spawn@^7.0.2, cross-spawn@^7.0.3:
+create-ecdh@^4.0.0:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e"
+ integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==
+ dependencies:
+ bn.js "^4.1.0"
+ elliptic "^6.5.3"
+
+create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196"
+ integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==
+ dependencies:
+ cipher-base "^1.0.1"
+ inherits "^2.0.1"
+ md5.js "^1.3.4"
+ ripemd160 "^2.0.1"
+ sha.js "^2.4.0"
+
+create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff"
+ integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==
+ dependencies:
+ cipher-base "^1.0.3"
+ create-hash "^1.1.0"
+ inherits "^2.0.1"
+ ripemd160 "^2.0.0"
+ safe-buffer "^5.0.1"
+ sha.js "^2.4.8"
+
+create-react-context@0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/create-react-context/-/create-react-context-0.3.0.tgz#546dede9dc422def0d3fc2fe03afe0bc0f4f7d8c"
+ integrity sha512-dNldIoSuNSvlTJ7slIKC/ZFGKexBMBrrcc+TTe1NdmROnaASuLPvqpwj9v4XS4uXZ8+YPu0sNmShX2rXI5LNsw==
+ dependencies:
+ gud "^1.0.0"
+ warning "^4.0.3"
+
+cross-env@^7.0.2:
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf"
+ integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==
+ dependencies:
+ cross-spawn "^7.0.1"
+
+cross-spawn@^6.0.0, cross-spawn@^6.0.5:
+ version "6.0.5"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
+ integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
+ dependencies:
+ nice-try "^1.0.4"
+ path-key "^2.0.1"
+ semver "^5.5.0"
+ shebang-command "^1.2.0"
+ which "^1.2.9"
+
+cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3:
version "7.0.3"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
@@ -3323,6 +4872,28 @@ cross-spawn@^7.0.2, cross-spawn@^7.0.3:
shebang-command "^2.0.0"
which "^2.0.1"
+crypto-browserify@^3.11.0:
+ version "3.12.0"
+ resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec"
+ integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==
+ dependencies:
+ browserify-cipher "^1.0.0"
+ browserify-sign "^4.0.0"
+ create-ecdh "^4.0.0"
+ create-hash "^1.1.0"
+ create-hmac "^1.1.0"
+ diffie-hellman "^5.0.0"
+ inherits "^2.0.1"
+ pbkdf2 "^3.0.3"
+ public-encrypt "^4.0.0"
+ randombytes "^2.0.0"
+ randomfill "^1.0.3"
+
+crypto-js@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.1.1.tgz#9e485bcf03521041bd85844786b83fb7619736cf"
+ integrity sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==
+
crypto-random-string@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5"
@@ -3335,6 +4906,11 @@ css-blank-pseudo@^3.0.3:
dependencies:
postcss-selector-parser "^6.0.9"
+css-color-keywords@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05"
+ integrity sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==
+
css-declaration-sorter@^6.3.0:
version "6.3.0"
resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.3.0.tgz#72ebd995c8f4532ff0036631f7365cce9759df14"
@@ -3347,6 +4923,25 @@ css-has-pseudo@^3.0.4:
dependencies:
postcss-selector-parser "^6.0.9"
+css-loader@^3.5.3:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.6.0.tgz#2e4b2c7e6e2d27f8c8f28f61bffcd2e6c91ef645"
+ integrity sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==
+ dependencies:
+ camelcase "^5.3.1"
+ cssesc "^3.0.0"
+ icss-utils "^4.1.1"
+ loader-utils "^1.2.3"
+ normalize-path "^3.0.0"
+ postcss "^7.0.32"
+ postcss-modules-extract-imports "^2.0.0"
+ postcss-modules-local-by-default "^3.0.2"
+ postcss-modules-scope "^2.2.0"
+ postcss-modules-values "^3.0.0"
+ postcss-value-parser "^4.1.0"
+ schema-utils "^2.7.0"
+ semver "^6.3.0"
+
css-loader@^6.5.1:
version "6.7.1"
resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.7.1.tgz#e98106f154f6e1baf3fc3bc455cb9981c1d5fd2e"
@@ -3373,6 +4968,18 @@ css-minimizer-webpack-plugin@^3.2.0:
serialize-javascript "^6.0.0"
source-map "^0.6.1"
+css-modules-loader-core@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/css-modules-loader-core/-/css-modules-loader-core-1.1.0.tgz#5908668294a1becd261ae0a4ce21b0b551f21d16"
+ integrity sha512-XWOBwgy5nwBn76aA+6ybUGL/3JBnCtBX9Ay9/OWIpzKYWlVHMazvJ+WtHumfi+xxdPF440cWK7JCYtt8xDifew==
+ dependencies:
+ icss-replace-symbols "1.1.0"
+ postcss "6.0.1"
+ postcss-modules-extract-imports "1.1.0"
+ postcss-modules-local-by-default "1.2.0"
+ postcss-modules-scope "1.1.0"
+ postcss-modules-values "1.3.0"
+
css-prefers-color-scheme@^6.0.3:
version "6.0.3"
resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz#ca8a22e5992c10a5b9d315155e7caee625903349"
@@ -3404,6 +5011,23 @@ css-select@^4.1.3:
domutils "^2.8.0"
nth-check "^2.0.1"
+css-selector-tokenizer@^0.7.0:
+ version "0.7.3"
+ resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz#735f26186e67c749aaf275783405cf0661fae8f1"
+ integrity sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==
+ dependencies:
+ cssesc "^3.0.0"
+ fastparse "^1.1.2"
+
+css-to-react-native@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-3.0.0.tgz#62dbe678072a824a689bcfee011fc96e02a7d756"
+ integrity sha512-Ro1yETZA813eoyUp2GDBhG2j+YggidUmzO1/v9eYBKR2EHVEniE2MI/NqpTQ954BMpTPZFsGNPm46qFB9dpaPQ==
+ dependencies:
+ camelize "^1.0.0"
+ css-color-keywords "^1.0.0"
+ postcss-value-parser "^4.0.2"
+
css-tree@1.0.0-alpha.37:
version "1.0.0-alpha.37"
resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22"
@@ -3435,6 +5059,16 @@ css.escape@^1.5.1:
resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb"
integrity sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==
+css@^2.0.0:
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929"
+ integrity sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==
+ dependencies:
+ inherits "^2.0.3"
+ source-map "^0.6.1"
+ source-map-resolve "^0.5.2"
+ urix "^0.1.0"
+
css@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/css/-/css-3.0.0.tgz#4447a4d58fdd03367c516ca9f64ae365cee4aa5d"
@@ -3510,7 +5144,15 @@ csso@^4.0.2, csso@^4.2.0:
dependencies:
css-tree "^1.1.2"
-cssom@^0.4.4:
+csso@~2.3.1:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85"
+ integrity sha512-FmCI/hmqDeHHLaIQckMhMZneS84yzUZdrWDAvJVVxOwcKE1P1LF9FGmzr1ktIQSxOw6fl3PaQsmfg+GN+VvR3w==
+ dependencies:
+ clap "^1.0.9"
+ source-map "^0.5.3"
+
+cssom@^0.4.1, cssom@^0.4.4:
version "0.4.4"
resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10"
integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==
@@ -3520,7 +5162,7 @@ cssom@~0.3.6:
resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a"
integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==
-cssstyle@^2.3.0:
+cssstyle@^2.0.0, cssstyle@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852"
integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==
@@ -3532,11 +5174,40 @@ csstype@^3.0.2:
resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.0.tgz#4ddcac3718d787cf9df0d1b7d15033925c8f29f2"
integrity sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==
+cyclist@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9"
+ integrity sha512-NJGVKPS81XejHcLhaLJS7plab0fK3slPh11mESeeDq2W4ZI5kUKK/LRRdVDvjJseojbPB7ZwjnyOybg3Igea/A==
+
+d@1, d@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a"
+ integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==
+ dependencies:
+ es5-ext "^0.10.50"
+ type "^1.0.1"
+
damerau-levenshtein@^1.0.8:
version "1.0.8"
resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7"
integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==
+dashdash@^1.12.0:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
+ integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==
+ dependencies:
+ assert-plus "^1.0.0"
+
+data-urls@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe"
+ integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==
+ dependencies:
+ abab "^2.0.0"
+ whatwg-mimetype "^2.2.0"
+ whatwg-url "^7.0.0"
+
data-urls@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b"
@@ -3546,27 +5217,37 @@ data-urls@^2.0.0:
whatwg-mimetype "^2.3.0"
whatwg-url "^8.0.0"
-debug@2.6.9, debug@^2.6.0, debug@^2.6.9:
+date-fns@^2.0.1:
+ version "2.28.0"
+ resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.28.0.tgz#9570d656f5fc13143e50c975a3b6bbeb46cd08b2"
+ integrity sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw==
+
+debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.9:
version "2.6.9"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
dependencies:
ms "2.0.0"
-debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4:
+debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4:
version "4.3.4"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
dependencies:
ms "2.1.2"
-debug@^3.2.7:
+debug@^3.1.1, debug@^3.2.7:
version "3.2.7"
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
dependencies:
ms "^2.1.1"
+decamelize@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+ integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==
+
decimal.js@^10.2.1:
version "10.3.1"
resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783"
@@ -3582,6 +5263,23 @@ dedent@^0.7.0:
resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c"
integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==
+deep-diff@^0.3.5:
+ version "0.3.8"
+ resolved "https://registry.yarnpkg.com/deep-diff/-/deep-diff-0.3.8.tgz#c01de63efb0eec9798801d40c7e0dae25b582c84"
+ integrity sha512-yVn6RZmHiGnxRKR9sJb3iVV2XTF1Ghh2DiWRZ3dMnGc43yUdWWF/kX6lQyk3+P84iprfWKU/8zFTrlkvtFm1ug==
+
+deep-equal@^1.0.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a"
+ integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==
+ dependencies:
+ is-arguments "^1.0.4"
+ is-date-object "^1.0.1"
+ is-regex "^1.0.4"
+ object-is "^1.0.1"
+ object-keys "^1.1.1"
+ regexp.prototype.flags "^1.2.0"
+
deep-is@^0.1.3, deep-is@~0.1.3:
version "0.1.4"
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
@@ -3592,6 +5290,14 @@ deepmerge@^4.2.2:
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955"
integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==
+default-gateway@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b"
+ integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==
+ dependencies:
+ execa "^1.0.0"
+ ip-regex "^2.1.0"
+
default-gateway@^6.0.3:
version "6.0.3"
resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71"
@@ -3604,7 +5310,7 @@ define-lazy-prop@^2.0.0:
resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f"
integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==
-define-properties@^1.1.3, define-properties@^1.1.4:
+define-properties@^1.1.2, define-properties@^1.1.3, define-properties@^1.1.4:
version "1.1.4"
resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1"
integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==
@@ -3612,11 +5318,46 @@ define-properties@^1.1.3, define-properties@^1.1.4:
has-property-descriptors "^1.0.0"
object-keys "^1.1.1"
+define-property@^0.2.5:
+ version "0.2.5"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
+ integrity sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==
+ dependencies:
+ is-descriptor "^0.1.0"
+
+define-property@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
+ integrity sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==
+ dependencies:
+ is-descriptor "^1.0.0"
+
+define-property@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
+ integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==
+ dependencies:
+ is-descriptor "^1.0.2"
+ isobject "^3.0.1"
+
defined@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
integrity sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==
+del@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4"
+ integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==
+ dependencies:
+ "@types/glob" "^7.1.1"
+ globby "^6.1.0"
+ is-path-cwd "^2.0.0"
+ is-path-in-cwd "^2.0.0"
+ p-map "^2.0.0"
+ pify "^4.0.1"
+ rimraf "^2.6.3"
+
delayed-stream@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
@@ -3632,11 +5373,24 @@ depd@~1.1.2:
resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==
+des.js@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843"
+ integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==
+ dependencies:
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+
destroy@1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015"
integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==
+detect-file@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7"
+ integrity sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==
+
detect-newline@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651"
@@ -3669,6 +5423,11 @@ didyoumean@^1.2.2:
resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037"
integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==
+diff-sequences@^25.2.6:
+ version "25.2.6"
+ resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd"
+ integrity sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg==
+
diff-sequences@^27.5.1:
version "27.5.1"
resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327"
@@ -3679,6 +5438,15 @@ diff-sequences@^28.1.1:
resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-28.1.1.tgz#9989dc731266dc2903457a70e996f3a041913ac6"
integrity sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==
+diffie-hellman@^5.0.0:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875"
+ integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==
+ dependencies:
+ bn.js "^4.1.0"
+ miller-rabin "^4.0.0"
+ randombytes "^2.0.0"
+
dir-glob@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
@@ -3696,6 +5464,14 @@ dns-equal@^1.0.0:
resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d"
integrity sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==
+dns-packet@^1.3.1:
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.4.tgz#e3455065824a2507ba886c55a89963bb107dec6f"
+ integrity sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==
+ dependencies:
+ ip "^1.1.0"
+ safe-buffer "^5.0.1"
+
dns-packet@^5.2.2:
version "5.4.0"
resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.4.0.tgz#1f88477cf9f27e78a213fb6d118ae38e759a879b"
@@ -3703,6 +5479,13 @@ dns-packet@^5.2.2:
dependencies:
"@leichtgewicht/ip-codec" "^2.0.1"
+dns-txt@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6"
+ integrity sha512-Ix5PrWjphuSoUXV/Zv5gaFHjnaJtb02F2+Si3Ht9dyJ87+Z/lMmy+dpNHtTGraNK958ndXq2i+GLkWsWHcKaBQ==
+ dependencies:
+ buffer-indexof "^1.0.0"
+
doctrine@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
@@ -3729,6 +5512,14 @@ dom-converter@^0.2.0:
dependencies:
utila "~0.4"
+dom-helpers@^5.0.1:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902"
+ integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==
+ dependencies:
+ "@babel/runtime" "^7.8.7"
+ csstype "^3.0.2"
+
dom-serializer@0:
version "0.2.2"
resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51"
@@ -3746,6 +5537,11 @@ dom-serializer@^1.0.1:
domhandler "^4.2.0"
entities "^2.0.0"
+domain-browser@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda"
+ integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==
+
domelementtype@1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f"
@@ -3756,6 +5552,13 @@ domelementtype@^2.0.1, domelementtype@^2.2.0:
resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d"
integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==
+domexception@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90"
+ integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==
+ dependencies:
+ webidl-conversions "^4.0.2"
+
domexception@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304"
@@ -3805,16 +5608,39 @@ dotenv@^10.0.0:
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81"
integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==
-duplexer@^0.1.2:
+duplexer@^0.1.1, duplexer@^0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6"
integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==
+duplexify@^3.4.2, duplexify@^3.6.0:
+ version "3.7.1"
+ resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309"
+ integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==
+ dependencies:
+ end-of-stream "^1.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.0.0"
+ stream-shift "^1.0.0"
+
+ecc-jsbn@~0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
+ integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==
+ dependencies:
+ jsbn "~0.1.0"
+ safer-buffer "^2.1.0"
+
ee-first@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==
+ejs@^2.6.1:
+ version "2.7.4"
+ resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba"
+ integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==
+
ejs@^3.1.6:
version "3.1.8"
resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.8.tgz#758d32910c78047585c7ef1f92f9ee041c1c190b"
@@ -3827,6 +5653,19 @@ electron-to-chromium@^1.4.164:
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.170.tgz#0415fc489402e09bfbe1f0c99bbf4d73f31d48d4"
integrity sha512-rZ8PZLhK4ORPjFqLp9aqC4/S1j4qWFsPPz13xmWdrbBkU/LlxMcok+f+6f8YnQ57MiZwKtOaW15biZZsY5Igvw==
+elliptic@^6.5.3:
+ version "6.5.4"
+ resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb"
+ integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==
+ dependencies:
+ bn.js "^4.11.9"
+ brorand "^1.1.0"
+ hash.js "^1.0.0"
+ hmac-drbg "^1.0.1"
+ inherits "^2.0.4"
+ minimalistic-assert "^1.0.1"
+ minimalistic-crypto-utils "^1.0.1"
+
emittery@^0.10.2:
version "0.10.2"
resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.10.2.tgz#902eec8aedb8c41938c46e9385e9db7e03182933"
@@ -3837,6 +5676,11 @@ emittery@^0.8.1:
resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860"
integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==
+emoji-regex@^7.0.1:
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
+ integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
+
emoji-regex@^8.0.0:
version "8.0.0"
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
@@ -3847,6 +5691,11 @@ emoji-regex@^9.2.2:
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
+emojis-list@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
+ integrity sha512-knHEZMgs8BB+MInokmNTg/OyPlAddghe1YBgNwJBc5zsJi/uyIcXoSDsL/W9ymOsBoBGdPIHXYJ9+qKFwRwDng==
+
emojis-list@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78"
@@ -3857,6 +5706,22 @@ encodeurl@~1.0.2:
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==
+end-of-stream@^1.0.0, end-of-stream@^1.1.0:
+ version "1.4.4"
+ resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
+ integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
+ dependencies:
+ once "^1.4.0"
+
+enhanced-resolve@^4.1.1, enhanced-resolve@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec"
+ integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==
+ dependencies:
+ graceful-fs "^4.1.2"
+ memory-fs "^0.5.0"
+ tapable "^1.0.0"
+
enhanced-resolve@^5.9.3:
version "5.9.3"
resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz#44a342c012cbc473254af5cc6ae20ebd0aae5d88"
@@ -3870,6 +5735,13 @@ entities@^2.0.0:
resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55"
integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==
+errno@^0.1.3, errno@~0.1.7:
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f"
+ integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==
+ dependencies:
+ prr "~1.0.1"
+
error-ex@^1.3.1:
version "1.3.2"
resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
@@ -3939,6 +5811,32 @@ es-to-primitive@^1.2.1:
is-date-object "^1.0.1"
is-symbol "^1.0.2"
+es5-ext@^0.10.35, es5-ext@^0.10.50:
+ version "0.10.61"
+ resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.61.tgz#311de37949ef86b6b0dcea894d1ffedb909d3269"
+ integrity sha512-yFhIqQAzu2Ca2I4SE2Au3rxVfmohU9Y7wqGR+s7+H7krk26NXhIRAZDgqd6xqjCEFUomDEA3/Bo/7fKmIkW1kA==
+ dependencies:
+ es6-iterator "^2.0.3"
+ es6-symbol "^3.1.3"
+ next-tick "^1.1.0"
+
+es6-iterator@2.0.3, es6-iterator@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7"
+ integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==
+ dependencies:
+ d "1"
+ es5-ext "^0.10.35"
+ es6-symbol "^3.1.1"
+
+es6-symbol@^3.1.1, es6-symbol@^3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18"
+ integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==
+ dependencies:
+ d "^1.0.1"
+ ext "^1.1.2"
+
escalade@^3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
@@ -3949,7 +5847,7 @@ escape-html@~1.0.3:
resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==
-escape-string-regexp@^1.0.5:
+escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
@@ -3964,6 +5862,18 @@ escape-string-regexp@^4.0.0:
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
+escodegen@^1.11.1:
+ version "1.14.3"
+ resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503"
+ integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==
+ dependencies:
+ esprima "^4.0.1"
+ estraverse "^4.2.0"
+ esutils "^2.0.2"
+ optionator "^0.8.1"
+ optionalDependencies:
+ source-map "~0.6.1"
+
escodegen@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd"
@@ -3976,6 +5886,18 @@ escodegen@^2.0.0:
optionalDependencies:
source-map "~0.6.1"
+eslint-config-important-stuff@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/eslint-config-important-stuff/-/eslint-config-important-stuff-1.1.0.tgz#f7ed8c33216964faf680f8969dfe0b196c84e6e2"
+ integrity sha512-CsV6QFsjNDTZTDEgE1XxhTKph4YJUh5XFMdsWv3p+9DuMyvfy40fsnZiwqXZHBVEUNMHf+zfPGk6s6b4fS9Erw==
+
+eslint-config-prettier@^6.7.0:
+ version "6.15.0"
+ resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz#7f93f6cb7d45a92f1537a70ecc06366e1ac6fed9"
+ integrity sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==
+ dependencies:
+ get-stdin "^6.0.0"
+
eslint-config-react-app@^7.0.0:
version "7.0.1"
resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz#73ba3929978001c5c86274c017ea57eb5fa644b4"
@@ -3996,6 +5918,15 @@ eslint-config-react-app@^7.0.0:
eslint-plugin-react-hooks "^4.3.0"
eslint-plugin-testing-library "^5.0.1"
+eslint-config-react-important-stuff@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/eslint-config-react-important-stuff/-/eslint-config-react-important-stuff-2.0.0.tgz#7eb96fdbbc7739113eec6565a0316091cc4cd99b"
+ integrity sha512-xXQYqzt0W2mDdsLW049ekn9OkHvQsutRFC/H9g7mOcK8MF+BNWUIanfkGcUD1wSBbXBiczgEs7zV/JzxzRM1UA==
+ dependencies:
+ eslint-config-important-stuff "^1.1.0"
+ eslint-plugin-jsx-a11y "^6.2.3"
+ eslint-plugin-react-hooks "^2.2.0"
+
eslint-import-resolver-node@^0.3.6:
version "0.3.6"
resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd"
@@ -4046,7 +5977,7 @@ eslint-plugin-jest@^25.3.0:
dependencies:
"@typescript-eslint/experimental-utils" "^5.0.0"
-eslint-plugin-jsx-a11y@^6.5.1:
+eslint-plugin-jsx-a11y@^6.2.3, eslint-plugin-jsx-a11y@^6.5.1:
version "6.6.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.0.tgz#2c5ac12e013eb98337b9aa261c3b355275cc6415"
integrity sha512-kTeLuIzpNhXL2CwLlc8AHI0aFRwWHcg483yepO9VQiHzM9bZwJdzTkzBszbuPrbgGmq2rlX/FaT2fJQsjUSHsw==
@@ -4065,6 +5996,18 @@ eslint-plugin-jsx-a11y@^6.5.1:
minimatch "^3.1.2"
semver "^6.3.0"
+eslint-plugin-prettier@^3.1.1:
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz#e9ddb200efb6f3d05ffe83b1665a716af4a387e5"
+ integrity sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==
+ dependencies:
+ prettier-linter-helpers "^1.0.0"
+
+eslint-plugin-react-hooks@^2.2.0:
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-2.5.1.tgz#4ef5930592588ce171abeb26f400c7fbcbc23cd0"
+ integrity sha512-Y2c4b55R+6ZzwtTppKwSmK/Kar8AdLiC2f9NADCuxbcTgPPg41Gyqa6b9GppgXSvCtkRw43ZE86CT5sejKC6/g==
+
eslint-plugin-react-hooks@^4.3.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3"
@@ -4097,7 +6040,15 @@ eslint-plugin-testing-library@^5.0.1:
dependencies:
"@typescript-eslint/utils" "^5.13.0"
-eslint-scope@5.1.1, eslint-scope@^5.1.1:
+eslint-scope@5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9"
+ integrity sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==
+ dependencies:
+ esrecurse "^4.1.0"
+ estraverse "^4.1.1"
+
+eslint-scope@5.1.1, eslint-scope@^5.0.0, eslint-scope@^5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
@@ -4105,6 +6056,14 @@ eslint-scope@5.1.1, eslint-scope@^5.1.1:
esrecurse "^4.3.0"
estraverse "^4.1.1"
+eslint-scope@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848"
+ integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==
+ dependencies:
+ esrecurse "^4.1.0"
+ estraverse "^4.1.1"
+
eslint-scope@^7.1.1:
version "7.1.1"
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642"
@@ -4113,6 +6072,13 @@ eslint-scope@^7.1.1:
esrecurse "^4.3.0"
estraverse "^5.2.0"
+eslint-utils@^1.4.3:
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f"
+ integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==
+ dependencies:
+ eslint-visitor-keys "^1.1.0"
+
eslint-utils@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672"
@@ -4120,6 +6086,11 @@ eslint-utils@^3.0.0:
dependencies:
eslint-visitor-keys "^2.0.0"
+eslint-visitor-keys@^1.1.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e"
+ integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==
+
eslint-visitor-keys@^2.0.0, eslint-visitor-keys@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303"
@@ -4141,6 +6112,49 @@ eslint-webpack-plugin@^3.1.1:
normalize-path "^3.0.0"
schema-utils "^4.0.0"
+eslint@^6.7.2:
+ version "6.8.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb"
+ integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ ajv "^6.10.0"
+ chalk "^2.1.0"
+ cross-spawn "^6.0.5"
+ debug "^4.0.1"
+ doctrine "^3.0.0"
+ eslint-scope "^5.0.0"
+ eslint-utils "^1.4.3"
+ eslint-visitor-keys "^1.1.0"
+ espree "^6.1.2"
+ esquery "^1.0.1"
+ esutils "^2.0.2"
+ file-entry-cache "^5.0.1"
+ functional-red-black-tree "^1.0.1"
+ glob-parent "^5.0.0"
+ globals "^12.1.0"
+ ignore "^4.0.6"
+ import-fresh "^3.0.0"
+ imurmurhash "^0.1.4"
+ inquirer "^7.0.0"
+ is-glob "^4.0.0"
+ js-yaml "^3.13.1"
+ json-stable-stringify-without-jsonify "^1.0.1"
+ levn "^0.3.0"
+ lodash "^4.17.14"
+ minimatch "^3.0.4"
+ mkdirp "^0.5.1"
+ natural-compare "^1.4.0"
+ optionator "^0.8.3"
+ progress "^2.0.0"
+ regexpp "^2.0.1"
+ semver "^6.1.2"
+ strip-ansi "^5.2.0"
+ strip-json-comments "^3.0.1"
+ table "^5.2.3"
+ text-table "^0.2.0"
+ v8-compile-cache "^2.0.3"
+
eslint@^8.3.0:
version "8.18.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.18.0.tgz#78d565d16c993d0b73968c523c0446b13da784fd"
@@ -4182,6 +6196,15 @@ eslint@^8.3.0:
text-table "^0.2.0"
v8-compile-cache "^2.0.3"
+espree@^6.1.2:
+ version "6.2.1"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a"
+ integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==
+ dependencies:
+ acorn "^7.1.1"
+ acorn-jsx "^5.2.0"
+ eslint-visitor-keys "^1.1.0"
+
espree@^9.3.2:
version "9.3.2"
resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.2.tgz#f58f77bd334731182801ced3380a8cc859091596"
@@ -4191,26 +6214,31 @@ espree@^9.3.2:
acorn-jsx "^5.3.2"
eslint-visitor-keys "^3.3.0"
+esprima@^2.6.0:
+ version "2.7.3"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581"
+ integrity sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==
+
esprima@^4.0.0, esprima@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
-esquery@^1.4.0:
+esquery@^1.0.1, esquery@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5"
integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==
dependencies:
estraverse "^5.1.0"
-esrecurse@^4.3.0:
+esrecurse@^4.1.0, esrecurse@^4.3.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
dependencies:
estraverse "^5.2.0"
-estraverse@^4.1.1:
+estraverse@^4.1.1, estraverse@^4.2.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
@@ -4235,16 +6263,83 @@ etag@~1.8.1:
resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==
+eventemitter3@^3.1.0:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7"
+ integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==
+
eventemitter3@^4.0.0:
version "4.0.7"
resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f"
integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==
-events@^3.2.0:
+events@^3.0.0, events@^3.2.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"
integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
+eventsource@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-2.0.2.tgz#76dfcc02930fb2ff339520b6d290da573a9e8508"
+ integrity sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==
+
+evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02"
+ integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==
+ dependencies:
+ md5.js "^1.3.4"
+ safe-buffer "^5.1.1"
+
+exec-sh@^0.3.2:
+ version "0.3.6"
+ resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc"
+ integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==
+
+execa@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8"
+ integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==
+ dependencies:
+ cross-spawn "^6.0.0"
+ get-stream "^4.0.0"
+ is-stream "^1.1.0"
+ npm-run-path "^2.0.0"
+ p-finally "^1.0.0"
+ signal-exit "^3.0.0"
+ strip-eof "^1.0.0"
+
+execa@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-2.1.0.tgz#e5d3ecd837d2a60ec50f3da78fd39767747bbe99"
+ integrity sha512-Y/URAVapfbYy2Xp/gb6A0E7iR8xeqOCXsuuaoMn7A5PzrXUK84E1gyiEfq0wQd/GHA6GsoHWwhNq8anb0mleIw==
+ dependencies:
+ cross-spawn "^7.0.0"
+ get-stream "^5.0.0"
+ is-stream "^2.0.0"
+ merge-stream "^2.0.0"
+ npm-run-path "^3.0.0"
+ onetime "^5.1.0"
+ p-finally "^2.0.0"
+ signal-exit "^3.0.2"
+ strip-final-newline "^2.0.0"
+
+execa@^3.2.0:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89"
+ integrity sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==
+ dependencies:
+ cross-spawn "^7.0.0"
+ get-stream "^5.0.0"
+ human-signals "^1.1.1"
+ is-stream "^2.0.0"
+ merge-stream "^2.0.0"
+ npm-run-path "^4.0.0"
+ onetime "^5.1.0"
+ p-finally "^2.0.0"
+ signal-exit "^3.0.2"
+ strip-final-newline "^2.0.0"
+
execa@^5.0.0:
version "5.1.1"
resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd"
@@ -4265,6 +6360,38 @@ exit@^0.1.2:
resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==
+expand-brackets@^2.1.4:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
+ integrity sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==
+ dependencies:
+ debug "^2.3.3"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ posix-character-classes "^0.1.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+expand-tilde@^2.0.0, expand-tilde@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502"
+ integrity sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==
+ dependencies:
+ homedir-polyfill "^1.0.1"
+
+expect@^25.5.0:
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/expect/-/expect-25.5.0.tgz#f07f848712a2813bb59167da3fb828ca21f58bba"
+ integrity sha512-w7KAXo0+6qqZZhovCaBVPSIqQp7/UTcx4M9uKt2m6pd2VB1voyC8JizLRqeEqud3AAVP02g+hbErDu5gu64tlA==
+ dependencies:
+ "@jest/types" "^25.5.0"
+ ansi-styles "^4.0.0"
+ jest-get-type "^25.2.6"
+ jest-matcher-utils "^25.5.0"
+ jest-message-util "^25.5.0"
+ jest-regex-util "^25.2.6"
+
expect@^27.5.1:
version "27.5.1"
resolved "https://registry.yarnpkg.com/expect/-/expect-27.5.1.tgz#83ce59f1e5bdf5f9d2b94b61d2050db48f3fef74"
@@ -4275,7 +6402,7 @@ expect@^27.5.1:
jest-matcher-utils "^27.5.1"
jest-message-util "^27.5.1"
-express@^4.17.3:
+express@^4.16.3, express@^4.17.1, express@^4.17.3:
version "4.18.1"
resolved "https://registry.yarnpkg.com/express/-/express-4.18.1.tgz#7797de8b9c72c857b9cd0e14a5eea80666267caf"
integrity sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==
@@ -4312,11 +6439,76 @@ express@^4.17.3:
utils-merge "1.0.1"
vary "~1.1.2"
+ext@^1.1.2:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/ext/-/ext-1.6.0.tgz#3871d50641e874cc172e2b53f919842d19db4c52"
+ integrity sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==
+ dependencies:
+ type "^2.5.0"
+
+extend-shallow@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
+ integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==
+ dependencies:
+ is-extendable "^0.1.0"
+
+extend-shallow@^3.0.0, extend-shallow@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
+ integrity sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==
+ dependencies:
+ assign-symbols "^1.0.0"
+ is-extendable "^1.0.1"
+
+extend@~3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
+ integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
+
+external-editor@^3.0.3:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495"
+ integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==
+ dependencies:
+ chardet "^0.7.0"
+ iconv-lite "^0.4.24"
+ tmp "^0.0.33"
+
+extglob@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
+ integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==
+ dependencies:
+ array-unique "^0.3.2"
+ define-property "^1.0.0"
+ expand-brackets "^2.1.4"
+ extend-shallow "^2.0.1"
+ fragment-cache "^0.2.1"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
+extsprintf@1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
+ integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==
+
+extsprintf@^1.2.0:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07"
+ integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==
+
fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
version "3.1.3"
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
+fast-diff@^1.1.2:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03"
+ integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==
+
fast-glob@^3.2.11, fast-glob@^3.2.9:
version "3.2.11"
resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9"
@@ -4338,6 +6530,11 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6:
resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==
+fastparse@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9"
+ integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==
+
fastq@^1.6.0:
version "1.13.0"
resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c"
@@ -4345,7 +6542,7 @@ fastq@^1.6.0:
dependencies:
reusify "^1.0.4"
-faye-websocket@^0.11.3:
+faye-websocket@^0.11.3, faye-websocket@^0.11.4:
version "0.11.4"
resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da"
integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==
@@ -4357,7 +6554,26 @@ fb-watchman@^2.0.0:
resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85"
integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==
dependencies:
- bser "2.1.1"
+ bser "2.1.1"
+
+figgy-pudding@^3.5.1:
+ version "3.5.2"
+ resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e"
+ integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==
+
+figures@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af"
+ integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==
+ dependencies:
+ escape-string-regexp "^1.0.5"
+
+file-entry-cache@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c"
+ integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==
+ dependencies:
+ flat-cache "^2.0.1"
file-entry-cache@^6.0.1:
version "6.0.1"
@@ -4374,6 +6590,11 @@ file-loader@^6.2.0:
loader-utils "^2.0.0"
schema-utils "^3.0.0"
+file-uri-to-path@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
+ integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
+
filelist@^1.0.1:
version "1.0.4"
resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5"
@@ -4381,11 +6602,26 @@ filelist@^1.0.1:
dependencies:
minimatch "^5.0.1"
+filesize@^3.6.1:
+ version "3.6.1"
+ resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317"
+ integrity sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==
+
filesize@^8.0.6:
version "8.0.7"
resolved "https://registry.yarnpkg.com/filesize/-/filesize-8.0.7.tgz#695e70d80f4e47012c132d57a059e80c6b580bd8"
integrity sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==
+fill-range@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
+ integrity sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+ to-regex-range "^2.1.0"
+
fill-range@^7.0.1:
version "7.0.1"
resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
@@ -4406,6 +6642,23 @@ finalhandler@1.2.0:
statuses "2.0.1"
unpipe "~1.0.0"
+find-babel-config@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-1.2.0.tgz#a9b7b317eb5b9860cda9d54740a8c8337a2283a2"
+ integrity sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA==
+ dependencies:
+ json5 "^0.5.1"
+ path-exists "^3.0.0"
+
+find-cache-dir@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7"
+ integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==
+ dependencies:
+ commondir "^1.0.1"
+ make-dir "^2.0.0"
+ pkg-dir "^3.0.0"
+
find-cache-dir@^3.3.1:
version "3.3.2"
resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b"
@@ -4415,6 +6668,11 @@ find-cache-dir@^3.3.1:
make-dir "^3.0.2"
pkg-dir "^4.1.0"
+find-root@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4"
+ integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==
+
find-up@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
@@ -4445,6 +6703,25 @@ find-up@^5.0.0:
locate-path "^6.0.0"
path-exists "^4.0.0"
+findup-sync@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1"
+ integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==
+ dependencies:
+ detect-file "^1.0.0"
+ is-glob "^4.0.0"
+ micromatch "^3.0.4"
+ resolve-dir "^1.0.1"
+
+flat-cache@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0"
+ integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==
+ dependencies:
+ flatted "^2.0.0"
+ rimraf "2.6.3"
+ write "1.0.3"
+
flat-cache@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11"
@@ -4453,16 +6730,46 @@ flat-cache@^3.0.4:
flatted "^3.1.0"
rimraf "^3.0.2"
+flatted@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138"
+ integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==
+
flatted@^3.1.0:
version "3.2.6"
resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.6.tgz#022e9218c637f9f3fc9c35ab9c9193f05add60b2"
integrity sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==
+flush-write-stream@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8"
+ integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==
+ dependencies:
+ inherits "^2.0.3"
+ readable-stream "^2.3.6"
+
follow-redirects@^1.0.0, follow-redirects@^1.14.8, follow-redirects@^1.14.9:
version "1.15.1"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5"
integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==
+for-each@^0.3.3:
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e"
+ integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==
+ dependencies:
+ is-callable "^1.1.3"
+
+for-in@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
+ integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==
+
+forever-agent@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
+ integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==
+
fork-ts-checker-webpack-plugin@^6.5.0:
version "6.5.2"
resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz#4f67183f2f9eb8ba7df7177ce3cf3e75cdafb340"
@@ -4500,6 +6807,15 @@ form-data@^4.0.0:
combined-stream "^1.0.8"
mime-types "^2.1.12"
+form-data@~2.3.2:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
+ integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.6"
+ mime-types "^2.1.12"
+
forwarded@0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811"
@@ -4510,11 +6826,26 @@ fraction.js@^4.2.0:
resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950"
integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==
+fragment-cache@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
+ integrity sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==
+ dependencies:
+ map-cache "^0.2.2"
+
fresh@0.5.2:
version "0.5.2"
resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==
+from2@^2.1.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af"
+ integrity sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==
+ dependencies:
+ inherits "^2.0.1"
+ readable-stream "^2.0.0"
+
fs-extra@^10.0.0:
version "10.1.0"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf"
@@ -4539,12 +6870,30 @@ fs-monkey@^1.0.3:
resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3"
integrity sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==
+fs-write-stream-atomic@^1.0.8:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9"
+ integrity sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==
+ dependencies:
+ graceful-fs "^4.1.2"
+ iferr "^0.1.5"
+ imurmurhash "^0.1.4"
+ readable-stream "1 || 2"
+
fs.realpath@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
-fsevents@^2.3.2, fsevents@~2.3.2:
+fsevents@^1.2.7:
+ version "1.2.13"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38"
+ integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==
+ dependencies:
+ bindings "^1.5.0"
+ nan "^2.12.1"
+
+fsevents@^2.1.2, fsevents@^2.3.2, fsevents@~2.3.2:
version "2.3.2"
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
@@ -4574,12 +6923,19 @@ functions-have-names@^1.2.2:
resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834"
integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==
+generic-names@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/generic-names/-/generic-names-2.0.1.tgz#f8a378ead2ccaa7a34f0317b05554832ae41b872"
+ integrity sha512-kPCHWa1m9wGG/OwQpeweTwM/PYiQLrUIxXbt/P4Nic3LbGjCP0YwrALHW1uNLKZ0LIMg+RF+XRlj2ekT9ZlZAQ==
+ dependencies:
+ loader-utils "^1.1.0"
+
gensync@^1.0.0-beta.2:
version "1.0.0-beta.2"
resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
-get-caller-file@^2.0.5:
+get-caller-file@^2.0.1, get-caller-file@^2.0.5:
version "2.0.5"
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
@@ -4603,6 +6959,25 @@ get-package-type@^0.1.0:
resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a"
integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==
+get-stdin@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b"
+ integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==
+
+get-stream@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
+ integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==
+ dependencies:
+ pump "^3.0.0"
+
+get-stream@^5.0.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3"
+ integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==
+ dependencies:
+ pump "^3.0.0"
+
get-stream@^6.0.0:
version "6.0.1"
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
@@ -4616,7 +6991,35 @@ get-symbol-description@^1.0.0:
call-bind "^1.0.2"
get-intrinsic "^1.1.1"
-glob-parent@^5.1.2, glob-parent@~5.1.2:
+get-value@^2.0.3, get-value@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
+ integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==
+
+getpass@^0.1.1:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
+ integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==
+ dependencies:
+ assert-plus "^1.0.0"
+
+glob-all@^3.1.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/glob-all/-/glob-all-3.3.0.tgz#2019896fbaeb37bc451809cf0cb1e5d2b3e345b2"
+ integrity sha512-30gCh9beSb+YSAh0vsoIlBRm4bSlyMa+5nayax1EJhjwYrCohX0aDxcxvWVe3heOrJikbHgRs75Af6kPLcumew==
+ dependencies:
+ glob "^7.1.2"
+ yargs "^15.3.1"
+
+glob-parent@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae"
+ integrity sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==
+ dependencies:
+ is-glob "^3.1.0"
+ path-dirname "^1.0.0"
+
+glob-parent@^5.0.0, glob-parent@^5.1.2, glob-parent@~5.1.2:
version "5.1.2"
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
@@ -4635,7 +7038,7 @@ glob-to-regexp@^0.4.1:
resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e"
integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==
-glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
+glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
version "7.2.3"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
@@ -4647,6 +7050,15 @@ glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
once "^1.3.0"
path-is-absolute "^1.0.0"
+global-modules@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea"
+ integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==
+ dependencies:
+ global-prefix "^1.0.1"
+ is-windows "^1.0.1"
+ resolve-dir "^1.0.0"
+
global-modules@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780"
@@ -4654,6 +7066,17 @@ global-modules@^2.0.0:
dependencies:
global-prefix "^3.0.0"
+global-prefix@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe"
+ integrity sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==
+ dependencies:
+ expand-tilde "^2.0.2"
+ homedir-polyfill "^1.0.1"
+ ini "^1.3.4"
+ is-windows "^1.0.1"
+ which "^1.2.14"
+
global-prefix@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97"
@@ -4668,6 +7091,13 @@ globals@^11.1.0:
resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
+globals@^12.1.0:
+ version "12.4.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8"
+ integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==
+ dependencies:
+ type-fest "^0.8.1"
+
globals@^13.15.0:
version "13.15.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-13.15.0.tgz#38113218c907d2f7e98658af246cef8b77e90bac"
@@ -4687,11 +7117,40 @@ globby@^11.0.4, globby@^11.1.0:
merge2 "^1.4.1"
slash "^3.0.0"
-graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9:
+globby@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c"
+ integrity sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==
+ dependencies:
+ array-union "^1.0.1"
+ glob "^7.0.3"
+ object-assign "^4.0.1"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9:
version "4.2.10"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c"
integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==
+growly@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"
+ integrity sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==
+
+gud@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0"
+ integrity sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==
+
+gzip-size@^5.0.0:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274"
+ integrity sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==
+ dependencies:
+ duplexer "^0.1.1"
+ pify "^4.0.1"
+
gzip-size@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462"
@@ -4704,16 +7163,41 @@ handle-thing@^2.0.0:
resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e"
integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==
+har-schema@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
+ integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==
+
+har-validator@~5.1.3:
+ version "5.1.5"
+ resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd"
+ integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==
+ dependencies:
+ ajv "^6.12.3"
+ har-schema "^2.0.0"
+
harmony-reflect@^1.4.6:
version "1.6.2"
resolved "https://registry.yarnpkg.com/harmony-reflect/-/harmony-reflect-1.6.2.tgz#31ecbd32e648a34d030d86adb67d4d47547fe710"
integrity sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==
+has-ansi@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
+ integrity sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==
+ dependencies:
+ ansi-regex "^2.0.0"
+
has-bigints@^1.0.1, has-bigints@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa"
integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==
+has-flag@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
+ integrity sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==
+
has-flag@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
@@ -4743,6 +7227,37 @@ has-tostringtag@^1.0.0:
dependencies:
has-symbols "^1.0.2"
+has-value@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
+ integrity sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==
+ dependencies:
+ get-value "^2.0.3"
+ has-values "^0.1.4"
+ isobject "^2.0.0"
+
+has-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
+ integrity sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==
+ dependencies:
+ get-value "^2.0.6"
+ has-values "^1.0.0"
+ isobject "^3.0.0"
+
+has-values@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
+ integrity sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==
+
+has-values@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
+ integrity sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==
+ dependencies:
+ is-number "^3.0.0"
+ kind-of "^4.0.0"
+
has@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
@@ -4750,6 +7265,23 @@ has@^1.0.3:
dependencies:
function-bind "^1.1.1"
+hash-base@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33"
+ integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==
+ dependencies:
+ inherits "^2.0.4"
+ readable-stream "^3.6.0"
+ safe-buffer "^5.2.0"
+
+hash.js@^1.0.0, hash.js@^1.0.3:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42"
+ integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==
+ dependencies:
+ inherits "^2.0.3"
+ minimalistic-assert "^1.0.1"
+
he@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
@@ -4762,11 +7294,39 @@ history@^5.2.0:
dependencies:
"@babel/runtime" "^7.7.6"
+hmac-drbg@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
+ integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==
+ dependencies:
+ hash.js "^1.0.3"
+ minimalistic-assert "^1.0.0"
+ minimalistic-crypto-utils "^1.0.1"
+
+hoist-non-react-statics@^3.0.0, hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.1, hoist-non-react-statics@^3.3.2:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45"
+ integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==
+ dependencies:
+ react-is "^16.7.0"
+
+homedir-polyfill@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8"
+ integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==
+ dependencies:
+ parse-passwd "^1.0.0"
+
hoopy@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d"
integrity sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==
+hosted-git-info@^2.1.4:
+ version "2.8.9"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9"
+ integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==
+
hpack.js@^2.1.6:
version "2.1.6"
resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2"
@@ -4777,6 +7337,13 @@ hpack.js@^2.1.6:
readable-stream "^2.0.1"
wbuf "^1.1.0"
+html-encoding-sniffer@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8"
+ integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==
+ dependencies:
+ whatwg-encoding "^1.0.1"
+
html-encoding-sniffer@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3"
@@ -4784,6 +7351,11 @@ html-encoding-sniffer@^2.0.1:
dependencies:
whatwg-encoding "^1.0.5"
+html-entities@^1.3.1:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.4.0.tgz#cfbd1b01d2afaf9adca1b10ae7dffab98c71d2dc"
+ integrity sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==
+
html-entities@^2.1.0, html-entities@^2.3.2:
version "2.3.3"
resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.3.tgz#117d7626bece327fc8baace8868fa6f5ef856e46"
@@ -4794,6 +7366,19 @@ html-escaper@^2.0.0:
resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453"
integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==
+html-minifier-terser@^5.0.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#922e96f1f3bb60832c2634b79884096389b1f054"
+ integrity sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==
+ dependencies:
+ camel-case "^4.1.1"
+ clean-css "^4.2.3"
+ commander "^4.1.1"
+ he "^1.2.0"
+ param-case "^3.0.3"
+ relateurl "^0.2.7"
+ terser "^4.6.3"
+
html-minifier-terser@^6.0.2:
version "6.1.0"
resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab"
@@ -4807,6 +7392,21 @@ html-minifier-terser@^6.0.2:
relateurl "^0.2.7"
terser "^5.10.0"
+html-webpack-plugin@^4.5.0:
+ version "4.5.2"
+ resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz#76fc83fa1a0f12dd5f7da0404a54e2699666bc12"
+ integrity sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A==
+ dependencies:
+ "@types/html-minifier-terser" "^5.0.0"
+ "@types/tapable" "^1.0.5"
+ "@types/webpack" "^4.41.8"
+ html-minifier-terser "^5.0.1"
+ loader-utils "^1.2.3"
+ lodash "^4.17.20"
+ pretty-error "^2.1.1"
+ tapable "^1.1.3"
+ util.promisify "1.0.0"
+
html-webpack-plugin@^5.5.0:
version "5.5.0"
resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz#c3911936f57681c1f9f4d8b68c158cd9dfe52f50"
@@ -4868,6 +7468,16 @@ http-proxy-agent@^4.0.1:
agent-base "6"
debug "4"
+http-proxy-middleware@0.19.1:
+ version "0.19.1"
+ resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a"
+ integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==
+ dependencies:
+ http-proxy "^1.17.0"
+ is-glob "^4.0.0"
+ lodash "^4.17.11"
+ micromatch "^3.1.10"
+
http-proxy-middleware@^2.0.3:
version "2.0.6"
resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz#e1a4dd6979572c7ab5a4e4b55095d1f32a74963f"
@@ -4879,7 +7489,7 @@ http-proxy-middleware@^2.0.3:
is-plain-obj "^3.0.0"
micromatch "^4.0.2"
-http-proxy@^1.18.1:
+http-proxy@^1.17.0, http-proxy@^1.18.1:
version "1.18.1"
resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549"
integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==
@@ -4888,6 +7498,20 @@ http-proxy@^1.18.1:
follow-redirects "^1.0.0"
requires-port "^1.0.0"
+http-signature@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
+ integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==
+ dependencies:
+ assert-plus "^1.0.0"
+ jsprim "^1.2.2"
+ sshpk "^1.7.0"
+
+https-browserify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
+ integrity sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==
+
https-proxy-agent@^5.0.0:
version "5.0.1"
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6"
@@ -4896,12 +7520,17 @@ https-proxy-agent@^5.0.0:
agent-base "6"
debug "4"
+human-signals@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3"
+ integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==
+
human-signals@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
-iconv-lite@0.4.24:
+iconv-lite@0.4.24, iconv-lite@^0.4.24:
version "0.4.24"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
@@ -4915,6 +7544,18 @@ iconv-lite@^0.6.3:
dependencies:
safer-buffer ">= 2.1.2 < 3.0.0"
+icss-replace-symbols@1.1.0, icss-replace-symbols@^1.0.2, icss-replace-symbols@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded"
+ integrity sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==
+
+icss-utils@^4.0.0, icss-utils@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467"
+ integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==
+ dependencies:
+ postcss "^7.0.14"
+
icss-utils@^5.0.0, icss-utils@^5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae"
@@ -4932,7 +7573,22 @@ identity-obj-proxy@^3.0.0:
dependencies:
harmony-reflect "^1.4.6"
-ignore@^5.2.0:
+ieee754@^1.1.4:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
+ integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
+
+iferr@^0.1.5:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501"
+ integrity sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==
+
+ignore@^4.0.6:
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
+ integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
+
+ignore@^5.1.4, ignore@^5.2.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a"
integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==
@@ -4955,6 +7611,14 @@ import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1:
parent-module "^1.0.0"
resolve-from "^4.0.0"
+import-local@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d"
+ integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==
+ dependencies:
+ pkg-dir "^3.0.0"
+ resolve-cwd "^2.0.0"
+
import-local@^3.0.2:
version "3.1.0"
resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4"
@@ -4973,6 +7637,11 @@ indent-string@^4.0.0:
resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
+infer-owner@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467"
+ integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==
+
inflight@^1.0.4:
version "1.0.6"
resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
@@ -4981,21 +7650,53 @@ inflight@^1.0.4:
once "^1.3.0"
wrappy "1"
-inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3:
+inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3:
version "2.0.4"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+inherits@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
+ integrity sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==
+
inherits@2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==
-ini@^1.3.5:
+ini@^1.3.4, ini@^1.3.5:
version "1.3.8"
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
+inquirer@^7.0.0:
+ version "7.3.3"
+ resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003"
+ integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==
+ dependencies:
+ ansi-escapes "^4.2.1"
+ chalk "^4.1.0"
+ cli-cursor "^3.1.0"
+ cli-width "^3.0.0"
+ external-editor "^3.0.3"
+ figures "^3.0.0"
+ lodash "^4.17.19"
+ mute-stream "0.0.8"
+ run-async "^2.4.0"
+ rxjs "^6.6.0"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
+ through "^2.3.6"
+
+internal-ip@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907"
+ integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==
+ dependencies:
+ default-gateway "^4.2.0"
+ ipaddr.js "^1.9.0"
+
internal-slot@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c"
@@ -5005,7 +7706,29 @@ internal-slot@^1.0.3:
has "^1.0.3"
side-channel "^1.0.4"
-ipaddr.js@1.9.1:
+interpret@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e"
+ integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==
+
+invariant@^2.2.3, invariant@^2.2.4:
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
+ integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==
+ dependencies:
+ loose-envify "^1.0.0"
+
+ip-regex@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9"
+ integrity sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==
+
+ip@^1.1.0, ip@^1.1.5:
+ version "1.1.8"
+ resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.8.tgz#ae05948f6b075435ed3307acce04629da8cdbf48"
+ integrity sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==
+
+ipaddr.js@1.9.1, ipaddr.js@^1.9.0:
version "1.9.1"
resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
@@ -5015,6 +7738,33 @@ ipaddr.js@^2.0.1:
resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.0.1.tgz#eca256a7a877e917aeb368b0a7497ddf42ef81c0"
integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==
+is-absolute-url@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698"
+ integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==
+
+is-accessor-descriptor@^0.1.6:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
+ integrity sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==
+ dependencies:
+ kind-of "^3.0.2"
+
+is-accessor-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
+ integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==
+ dependencies:
+ kind-of "^6.0.0"
+
+is-arguments@^1.0.4:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b"
+ integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==
+ dependencies:
+ call-bind "^1.0.2"
+ has-tostringtag "^1.0.0"
+
is-arrayish@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
@@ -5027,6 +7777,13 @@ is-bigint@^1.0.1:
dependencies:
has-bigints "^1.0.1"
+is-binary-path@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
+ integrity sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==
+ dependencies:
+ binary-extensions "^1.0.0"
+
is-binary-path@~2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
@@ -5042,11 +7799,23 @@ is-boolean-object@^1.1.0:
call-bind "^1.0.2"
has-tostringtag "^1.0.0"
-is-callable@^1.1.4, is-callable@^1.2.4:
+is-buffer@^1.1.5:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
+ integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
+
+is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.4:
version "1.2.4"
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945"
integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==
+is-ci@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c"
+ integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==
+ dependencies:
+ ci-info "^2.0.0"
+
is-core-module@^2.8.1, is-core-module@^2.9.0:
version "2.9.0"
resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69"
@@ -5054,6 +7823,20 @@ is-core-module@^2.8.1, is-core-module@^2.9.0:
dependencies:
has "^1.0.3"
+is-data-descriptor@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
+ integrity sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==
+ dependencies:
+ kind-of "^3.0.2"
+
+is-data-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
+ integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==
+ dependencies:
+ kind-of "^6.0.0"
+
is-date-object@^1.0.1:
version "1.0.5"
resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f"
@@ -5061,16 +7844,51 @@ is-date-object@^1.0.1:
dependencies:
has-tostringtag "^1.0.0"
+is-descriptor@^0.1.0:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
+ integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==
+ dependencies:
+ is-accessor-descriptor "^0.1.6"
+ is-data-descriptor "^0.1.4"
+ kind-of "^5.0.0"
+
+is-descriptor@^1.0.0, is-descriptor@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
+ integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==
+ dependencies:
+ is-accessor-descriptor "^1.0.0"
+ is-data-descriptor "^1.0.0"
+ kind-of "^6.0.2"
+
is-docker@^2.0.0, is-docker@^2.1.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa"
integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==
-is-extglob@^2.1.1:
+is-extendable@^0.1.0, is-extendable@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+ integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==
+
+is-extendable@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
+ integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==
+ dependencies:
+ is-plain-object "^2.0.4"
+
+is-extglob@^2.1.0, is-extglob@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
+is-fullwidth-code-point@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
+ integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==
+
is-fullwidth-code-point@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
@@ -5081,6 +7899,13 @@ is-generator-fn@^2.0.0:
resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118"
integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==
+is-glob@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
+ integrity sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==
+ dependencies:
+ is-extglob "^2.1.0"
+
is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1:
version "4.0.3"
resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
@@ -5105,6 +7930,13 @@ is-number-object@^1.0.4:
dependencies:
has-tostringtag "^1.0.0"
+is-number@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
+ integrity sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==
+ dependencies:
+ kind-of "^3.0.2"
+
is-number@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
@@ -5115,17 +7947,43 @@ is-obj@^1.0.1:
resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==
+is-path-cwd@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb"
+ integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==
+
+is-path-in-cwd@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb"
+ integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==
+ dependencies:
+ is-path-inside "^2.1.0"
+
+is-path-inside@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2"
+ integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==
+ dependencies:
+ path-is-inside "^1.0.2"
+
is-plain-obj@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7"
integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==
+is-plain-object@^2.0.3, is-plain-object@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
+ integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
+ dependencies:
+ isobject "^3.0.1"
+
is-potential-custom-element-name@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5"
integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==
-is-regex@^1.1.4:
+is-regex@^1.0.4, is-regex@^1.1.4:
version "1.1.4"
resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958"
integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==
@@ -5150,6 +8008,11 @@ is-shared-array-buffer@^1.0.2:
dependencies:
call-bind "^1.0.2"
+is-stream@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+ integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==
+
is-stream@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077"
@@ -5169,7 +8032,7 @@ is-symbol@^1.0.2, is-symbol@^1.0.3:
dependencies:
has-symbols "^1.0.2"
-is-typedarray@^1.0.0:
+is-typedarray@^1.0.0, is-typedarray@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==
@@ -5181,14 +8044,24 @@ is-weakref@^1.0.2:
dependencies:
call-bind "^1.0.2"
-is-wsl@^2.2.0:
+is-windows@^1.0.1, is-windows@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
+ integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
+
+is-wsl@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d"
+ integrity sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==
+
+is-wsl@^2.1.1, is-wsl@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==
dependencies:
is-docker "^2.0.0"
-isarray@~1.0.0:
+isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==
@@ -5198,11 +8071,56 @@ isexe@^2.0.0:
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
+isobject@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
+ integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==
+ dependencies:
+ isarray "1.0.0"
+
+isobject@^3.0.0, isobject@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
+ integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==
+
+isstream@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+ integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==
+
+istanbul-lib-coverage@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz#675f0ab69503fad4b1d849f736baaca803344f49"
+ integrity sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==
+
istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3"
integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==
+istanbul-lib-instrument@^3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz#a5f63d91f0bbc0c3e479ef4c5de027335ec6d630"
+ integrity sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==
+ dependencies:
+ "@babel/generator" "^7.4.0"
+ "@babel/parser" "^7.4.3"
+ "@babel/template" "^7.4.0"
+ "@babel/traverse" "^7.4.3"
+ "@babel/types" "^7.4.0"
+ istanbul-lib-coverage "^2.0.5"
+ semver "^6.0.0"
+
+istanbul-lib-instrument@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d"
+ integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==
+ dependencies:
+ "@babel/core" "^7.7.5"
+ "@istanbuljs/schema" "^0.1.2"
+ istanbul-lib-coverage "^3.0.0"
+ semver "^6.3.0"
+
istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz#31d18bdd127f825dd02ea7bfdfd906f8ab840e9f"
@@ -5232,7 +8150,7 @@ istanbul-lib-source-maps@^4.0.0:
istanbul-lib-coverage "^3.0.0"
source-map "^0.6.1"
-istanbul-reports@^3.1.3:
+istanbul-reports@^3.0.2, istanbul-reports@^3.1.3:
version "3.1.4"
resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.4.tgz#1b6f068ecbc6c331040aab5741991273e609e40c"
integrity sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==
@@ -5250,6 +8168,15 @@ jake@^10.8.5:
filelist "^1.0.1"
minimatch "^3.0.4"
+jest-changed-files@^25.5.0:
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-25.5.0.tgz#141cc23567ceb3f534526f8614ba39421383634c"
+ integrity sha512-EOw9QEqapsDT7mKF162m8HFzRPbmP8qJQny6ldVOdOVBz3ACgPm/1nAn5fPQ/NDaYhX/AHkrGwwkCncpAVSXcw==
+ dependencies:
+ "@jest/types" "^25.5.0"
+ execa "^3.2.0"
+ throat "^5.0.0"
+
jest-changed-files@^27.5.1:
version "27.5.1"
resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.5.1.tgz#a348aed00ec9bf671cc58a66fcbe7c3dfd6a68f5"
@@ -5284,6 +8211,26 @@ jest-circus@^27.5.1:
stack-utils "^2.0.3"
throat "^6.0.1"
+jest-cli@^25.2.7, jest-cli@^25.5.4:
+ version "25.5.4"
+ resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-25.5.4.tgz#b9f1a84d1301a92c5c217684cb79840831db9f0d"
+ integrity sha512-rG8uJkIiOUpnREh1768/N3n27Cm+xPFkSNFO91tgg+8o2rXeVLStz+vkXkGr4UtzH6t1SNbjwoiswd7p4AhHTw==
+ dependencies:
+ "@jest/core" "^25.5.4"
+ "@jest/test-result" "^25.5.0"
+ "@jest/types" "^25.5.0"
+ chalk "^3.0.0"
+ exit "^0.1.2"
+ graceful-fs "^4.2.4"
+ import-local "^3.0.2"
+ is-ci "^2.0.0"
+ jest-config "^25.5.4"
+ jest-util "^25.5.0"
+ jest-validate "^25.5.0"
+ prompts "^2.0.1"
+ realpath-native "^2.0.0"
+ yargs "^15.3.1"
+
jest-cli@^27.5.1:
version "27.5.1"
resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.5.1.tgz#278794a6e6458ea8029547e6c6cbf673bd30b145"
@@ -5302,6 +8249,31 @@ jest-cli@^27.5.1:
prompts "^2.0.1"
yargs "^16.2.0"
+jest-config@^25.5.4:
+ version "25.5.4"
+ resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-25.5.4.tgz#38e2057b3f976ef7309b2b2c8dcd2a708a67f02c"
+ integrity sha512-SZwR91SwcdK6bz7Gco8qL7YY2sx8tFJYzvg216DLihTWf+LKY/DoJXpM9nTzYakSyfblbqeU48p/p7Jzy05Atg==
+ dependencies:
+ "@babel/core" "^7.1.0"
+ "@jest/test-sequencer" "^25.5.4"
+ "@jest/types" "^25.5.0"
+ babel-jest "^25.5.1"
+ chalk "^3.0.0"
+ deepmerge "^4.2.2"
+ glob "^7.1.1"
+ graceful-fs "^4.2.4"
+ jest-environment-jsdom "^25.5.0"
+ jest-environment-node "^25.5.0"
+ jest-get-type "^25.2.6"
+ jest-jasmine2 "^25.5.4"
+ jest-regex-util "^25.2.6"
+ jest-resolve "^25.5.1"
+ jest-util "^25.5.0"
+ jest-validate "^25.5.0"
+ micromatch "^4.0.2"
+ pretty-format "^25.5.0"
+ realpath-native "^2.0.0"
+
jest-config@^27.5.1:
version "27.5.1"
resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.5.1.tgz#5c387de33dca3f99ad6357ddeccd91bf3a0e4a41"
@@ -5332,6 +8304,16 @@ jest-config@^27.5.1:
slash "^3.0.0"
strip-json-comments "^3.1.1"
+jest-diff@^25.5.0:
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.5.0.tgz#1dd26ed64f96667c068cef026b677dfa01afcfa9"
+ integrity sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A==
+ dependencies:
+ chalk "^3.0.0"
+ diff-sequences "^25.2.6"
+ jest-get-type "^25.2.6"
+ pretty-format "^25.5.0"
+
jest-diff@^27.5.1:
version "27.5.1"
resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.5.1.tgz#a07f5011ac9e6643cf8a95a462b7b1ecf6680def"
@@ -5352,6 +8334,13 @@ jest-diff@^28.1.1:
jest-get-type "^28.0.2"
pretty-format "^28.1.1"
+jest-docblock@^25.3.0:
+ version "25.3.0"
+ resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-25.3.0.tgz#8b777a27e3477cd77a168c05290c471a575623ef"
+ integrity sha512-aktF0kCar8+zxRHxQZwxMy70stc9R1mOmrLsT5VO3pIT0uzGRSDAXxSlz4NqQWpuLjPpuMhPRl7H+5FRsvIQAg==
+ dependencies:
+ detect-newline "^3.0.0"
+
jest-docblock@^27.5.1:
version "27.5.1"
resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.5.1.tgz#14092f364a42c6108d42c33c8cf30e058e25f6c0"
@@ -5359,6 +8348,17 @@ jest-docblock@^27.5.1:
dependencies:
detect-newline "^3.0.0"
+jest-each@^25.5.0:
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-25.5.0.tgz#0c3c2797e8225cb7bec7e4d249dcd96b934be516"
+ integrity sha512-QBogUxna3D8vtiItvn54xXde7+vuzqRrEeaw8r1s+1TG9eZLVJE5ZkKoSUlqFwRjnlaA4hyKGiu9OlkFIuKnjA==
+ dependencies:
+ "@jest/types" "^25.5.0"
+ chalk "^3.0.0"
+ jest-get-type "^25.2.6"
+ jest-util "^25.5.0"
+ pretty-format "^25.5.0"
+
jest-each@^27.5.1:
version "27.5.1"
resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.5.1.tgz#5bc87016f45ed9507fed6e4702a5b468a5b2c44e"
@@ -5370,6 +8370,18 @@ jest-each@^27.5.1:
jest-util "^27.5.1"
pretty-format "^27.5.1"
+jest-environment-jsdom@^25.5.0:
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-25.5.0.tgz#dcbe4da2ea997707997040ecf6e2560aec4e9834"
+ integrity sha512-7Jr02ydaq4jaWMZLY+Skn8wL5nVIYpWvmeatOHL3tOcV3Zw8sjnPpx+ZdeBfc457p8jCR9J6YCc+Lga0oIy62A==
+ dependencies:
+ "@jest/environment" "^25.5.0"
+ "@jest/fake-timers" "^25.5.0"
+ "@jest/types" "^25.5.0"
+ jest-mock "^25.5.0"
+ jest-util "^25.5.0"
+ jsdom "^15.2.1"
+
jest-environment-jsdom@^27.5.1:
version "27.5.1"
resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz#ea9ccd1fc610209655a77898f86b2b559516a546"
@@ -5383,6 +8395,18 @@ jest-environment-jsdom@^27.5.1:
jest-util "^27.5.1"
jsdom "^16.6.0"
+jest-environment-node@^25.5.0:
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-25.5.0.tgz#0f55270d94804902988e64adca37c6ce0f7d07a1"
+ integrity sha512-iuxK6rQR2En9EID+2k+IBs5fCFd919gVVK5BeND82fYeLWPqvRcFNPKu9+gxTwfB5XwBGBvZ0HFQa+cHtIoslA==
+ dependencies:
+ "@jest/environment" "^25.5.0"
+ "@jest/fake-timers" "^25.5.0"
+ "@jest/types" "^25.5.0"
+ jest-mock "^25.5.0"
+ jest-util "^25.5.0"
+ semver "^6.3.0"
+
jest-environment-node@^27.5.1:
version "27.5.1"
resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.5.1.tgz#dedc2cfe52fab6b8f5714b4808aefa85357a365e"
@@ -5395,6 +8419,11 @@ jest-environment-node@^27.5.1:
jest-mock "^27.5.1"
jest-util "^27.5.1"
+jest-get-type@^25.2.6:
+ version "25.2.6"
+ resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-25.2.6.tgz#0b0a32fab8908b44d508be81681487dbabb8d877"
+ integrity sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==
+
jest-get-type@^27.5.1:
version "27.5.1"
resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1"
@@ -5405,6 +8434,45 @@ jest-get-type@^28.0.2:
resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-28.0.2.tgz#34622e628e4fdcd793d46db8a242227901fcf203"
integrity sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==
+jest-haste-map@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.9.0.tgz#b38a5d64274934e21fa417ae9a9fbeb77ceaac7d"
+ integrity sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==
+ dependencies:
+ "@jest/types" "^24.9.0"
+ anymatch "^2.0.0"
+ fb-watchman "^2.0.0"
+ graceful-fs "^4.1.15"
+ invariant "^2.2.4"
+ jest-serializer "^24.9.0"
+ jest-util "^24.9.0"
+ jest-worker "^24.9.0"
+ micromatch "^3.1.10"
+ sane "^4.0.3"
+ walker "^1.0.7"
+ optionalDependencies:
+ fsevents "^1.2.7"
+
+jest-haste-map@^25.5.1:
+ version "25.5.1"
+ resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-25.5.1.tgz#1df10f716c1d94e60a1ebf7798c9fb3da2620943"
+ integrity sha512-dddgh9UZjV7SCDQUrQ+5t9yy8iEgKc1AKqZR9YDww8xsVOtzPQSMVLDChc21+g29oTRexb9/B0bIlZL+sWmvAQ==
+ dependencies:
+ "@jest/types" "^25.5.0"
+ "@types/graceful-fs" "^4.1.2"
+ anymatch "^3.0.3"
+ fb-watchman "^2.0.0"
+ graceful-fs "^4.2.4"
+ jest-serializer "^25.5.0"
+ jest-util "^25.5.0"
+ jest-worker "^25.5.0"
+ micromatch "^4.0.2"
+ sane "^4.0.3"
+ walker "^1.0.7"
+ which "^2.0.2"
+ optionalDependencies:
+ fsevents "^2.1.2"
+
jest-haste-map@^27.5.1:
version "27.5.1"
resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.5.1.tgz#9fd8bd7e7b4fa502d9c6164c5640512b4e811e7f"
@@ -5425,6 +8493,29 @@ jest-haste-map@^27.5.1:
optionalDependencies:
fsevents "^2.3.2"
+jest-jasmine2@^25.5.4:
+ version "25.5.4"
+ resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-25.5.4.tgz#66ca8b328fb1a3c5364816f8958f6970a8526968"
+ integrity sha512-9acbWEfbmS8UpdcfqnDO+uBUgKa/9hcRh983IHdM+pKmJPL77G0sWAAK0V0kr5LK3a8cSBfkFSoncXwQlRZfkQ==
+ dependencies:
+ "@babel/traverse" "^7.1.0"
+ "@jest/environment" "^25.5.0"
+ "@jest/source-map" "^25.5.0"
+ "@jest/test-result" "^25.5.0"
+ "@jest/types" "^25.5.0"
+ chalk "^3.0.0"
+ co "^4.6.0"
+ expect "^25.5.0"
+ is-generator-fn "^2.0.0"
+ jest-each "^25.5.0"
+ jest-matcher-utils "^25.5.0"
+ jest-message-util "^25.5.0"
+ jest-runtime "^25.5.4"
+ jest-snapshot "^25.5.1"
+ jest-util "^25.5.0"
+ pretty-format "^25.5.0"
+ throat "^5.0.0"
+
jest-jasmine2@^27.5.1:
version "27.5.1"
resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz#a037b0034ef49a9f3d71c4375a796f3b230d1ac4"
@@ -5448,6 +8539,14 @@ jest-jasmine2@^27.5.1:
pretty-format "^27.5.1"
throat "^6.0.1"
+jest-leak-detector@^25.5.0:
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-25.5.0.tgz#2291c6294b0ce404241bb56fe60e2d0c3e34f0bb"
+ integrity sha512-rV7JdLsanS8OkdDpZtgBf61L5xZ4NnYLBq72r6ldxahJWWczZjXawRsoHyXzibM5ed7C2QRjpp6ypgwGdKyoVA==
+ dependencies:
+ jest-get-type "^25.2.6"
+ pretty-format "^25.5.0"
+
jest-leak-detector@^27.5.1:
version "27.5.1"
resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz#6ec9d54c3579dd6e3e66d70e3498adf80fde3fb8"
@@ -5456,6 +8555,16 @@ jest-leak-detector@^27.5.1:
jest-get-type "^27.5.1"
pretty-format "^27.5.1"
+jest-matcher-utils@^25.5.0:
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-25.5.0.tgz#fbc98a12d730e5d2453d7f1ed4a4d948e34b7867"
+ integrity sha512-VWI269+9JS5cpndnpCwm7dy7JtGQT30UHfrnM3mXl22gHGt/b7NkjBqXfbhZ8V4B7ANUsjK18PlSBmG0YH7gjw==
+ dependencies:
+ chalk "^3.0.0"
+ jest-diff "^25.5.0"
+ jest-get-type "^25.2.6"
+ pretty-format "^25.5.0"
+
jest-matcher-utils@^27.0.0, jest-matcher-utils@^27.5.1:
version "27.5.1"
resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab"
@@ -5476,6 +8585,34 @@ jest-matcher-utils@^28.0.0:
jest-get-type "^28.0.2"
pretty-format "^28.1.1"
+jest-message-util@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.9.0.tgz#527f54a1e380f5e202a8d1149b0ec872f43119e3"
+ integrity sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ "@jest/test-result" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ "@types/stack-utils" "^1.0.1"
+ chalk "^2.0.1"
+ micromatch "^3.1.10"
+ slash "^2.0.0"
+ stack-utils "^1.0.1"
+
+jest-message-util@^25.5.0:
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-25.5.0.tgz#ea11d93204cc7ae97456e1d8716251185b8880ea"
+ integrity sha512-ezddz3YCT/LT0SKAmylVyWWIGYoKHOFOFXx3/nA4m794lfVUskMcwhip6vTgdVrOtYdjeQeis2ypzes9mZb4EA==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ "@jest/types" "^25.5.0"
+ "@types/stack-utils" "^1.0.1"
+ chalk "^3.0.0"
+ graceful-fs "^4.2.4"
+ micromatch "^4.0.2"
+ slash "^3.0.0"
+ stack-utils "^1.0.1"
+
jest-message-util@^27.5.1:
version "27.5.1"
resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.5.1.tgz#bdda72806da10d9ed6425e12afff38cd1458b6cf"
@@ -5506,6 +8643,20 @@ jest-message-util@^28.1.1:
slash "^3.0.0"
stack-utils "^2.0.3"
+jest-mock@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-24.9.0.tgz#c22835541ee379b908673ad51087a2185c13f1c6"
+ integrity sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==
+ dependencies:
+ "@jest/types" "^24.9.0"
+
+jest-mock@^25.5.0:
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-25.5.0.tgz#a91a54dabd14e37ecd61665d6b6e06360a55387a"
+ integrity sha512-eXWuTV8mKzp/ovHc5+3USJMYsTBhyQ+5A1Mak35dey/RG8GlM4YWVylZuGgVXinaW6tpvk/RSecmF37FKUlpXA==
+ dependencies:
+ "@jest/types" "^25.5.0"
+
jest-mock@^27.5.1:
version "27.5.1"
resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.5.1.tgz#19948336d49ef4d9c52021d34ac7b5f36ff967d6"
@@ -5514,11 +8665,21 @@ jest-mock@^27.5.1:
"@jest/types" "^27.5.1"
"@types/node" "*"
-jest-pnp-resolver@^1.2.2:
+jest-pnp-resolver@^1.2.1, jest-pnp-resolver@^1.2.2:
version "1.2.2"
resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c"
integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==
+jest-regex-util@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-24.9.0.tgz#c13fb3380bde22bf6575432c493ea8fe37965636"
+ integrity sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==
+
+jest-regex-util@^25.2.6:
+ version "25.2.6"
+ resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-25.2.6.tgz#d847d38ba15d2118d3b06390056028d0f2fd3964"
+ integrity sha512-KQqf7a0NrtCkYmZZzodPftn7fL1cq3GQAFVMn5Hg8uKx/fIenLEobNanUxb7abQ1sjADHBseG/2FGpsv/wr+Qw==
+
jest-regex-util@^27.5.1:
version "27.5.1"
resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95"
@@ -5529,6 +8690,15 @@ jest-regex-util@^28.0.0:
resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-28.0.2.tgz#afdc377a3b25fb6e80825adcf76c854e5bf47ead"
integrity sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==
+jest-resolve-dependencies@^25.5.4:
+ version "25.5.4"
+ resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-25.5.4.tgz#85501f53957c8e3be446e863a74777b5a17397a7"
+ integrity sha512-yFmbPd+DAQjJQg88HveObcGBA32nqNZ02fjYmtL16t1xw9bAttSn5UGRRhzMHIQbsep7znWvAvnD4kDqOFM0Uw==
+ dependencies:
+ "@jest/types" "^25.5.0"
+ jest-regex-util "^25.2.6"
+ jest-snapshot "^25.5.1"
+
jest-resolve-dependencies@^27.5.1:
version "27.5.1"
resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz#d811ecc8305e731cc86dd79741ee98fed06f1da8"
@@ -5538,6 +8708,21 @@ jest-resolve-dependencies@^27.5.1:
jest-regex-util "^27.5.1"
jest-snapshot "^27.5.1"
+jest-resolve@^25.5.1:
+ version "25.5.1"
+ resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-25.5.1.tgz#0e6fbcfa7c26d2a5fe8f456088dc332a79266829"
+ integrity sha512-Hc09hYch5aWdtejsUZhA+vSzcotf7fajSlPA6EZPE1RmPBAD39XtJhvHWFStid58iit4IPDLI/Da4cwdDmAHiQ==
+ dependencies:
+ "@jest/types" "^25.5.0"
+ browser-resolve "^1.11.3"
+ chalk "^3.0.0"
+ graceful-fs "^4.2.4"
+ jest-pnp-resolver "^1.2.1"
+ read-pkg-up "^7.0.1"
+ realpath-native "^2.0.0"
+ resolve "^1.17.0"
+ slash "^3.0.0"
+
jest-resolve@^27.4.2, jest-resolve@^27.5.1:
version "27.5.1"
resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.5.1.tgz#a2f1c5a0796ec18fe9eb1536ac3814c23617b384"
@@ -5554,6 +8739,31 @@ jest-resolve@^27.4.2, jest-resolve@^27.5.1:
resolve.exports "^1.1.0"
slash "^3.0.0"
+jest-runner@^25.5.4:
+ version "25.5.4"
+ resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-25.5.4.tgz#ffec5df3875da5f5c878ae6d0a17b8e4ecd7c71d"
+ integrity sha512-V/2R7fKZo6blP8E9BL9vJ8aTU4TH2beuqGNxHbxi6t14XzTb+x90B3FRgdvuHm41GY8ch4xxvf0ATH4hdpjTqg==
+ dependencies:
+ "@jest/console" "^25.5.0"
+ "@jest/environment" "^25.5.0"
+ "@jest/test-result" "^25.5.0"
+ "@jest/types" "^25.5.0"
+ chalk "^3.0.0"
+ exit "^0.1.2"
+ graceful-fs "^4.2.4"
+ jest-config "^25.5.4"
+ jest-docblock "^25.3.0"
+ jest-haste-map "^25.5.1"
+ jest-jasmine2 "^25.5.4"
+ jest-leak-detector "^25.5.0"
+ jest-message-util "^25.5.0"
+ jest-resolve "^25.5.1"
+ jest-runtime "^25.5.4"
+ jest-util "^25.5.0"
+ jest-worker "^25.5.0"
+ source-map-support "^0.5.6"
+ throat "^5.0.0"
+
jest-runner@^27.5.1:
version "27.5.1"
resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.5.1.tgz#071b27c1fa30d90540805c5645a0ec167c7b62e5"
@@ -5581,6 +8791,38 @@ jest-runner@^27.5.1:
source-map-support "^0.5.6"
throat "^6.0.1"
+jest-runtime@^25.5.4:
+ version "25.5.4"
+ resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-25.5.4.tgz#dc981fe2cb2137abcd319e74ccae7f7eeffbfaab"
+ integrity sha512-RWTt8LeWh3GvjYtASH2eezkc8AehVoWKK20udV6n3/gC87wlTbE1kIA+opCvNWyyPeBs6ptYsc6nyHUb1GlUVQ==
+ dependencies:
+ "@jest/console" "^25.5.0"
+ "@jest/environment" "^25.5.0"
+ "@jest/globals" "^25.5.2"
+ "@jest/source-map" "^25.5.0"
+ "@jest/test-result" "^25.5.0"
+ "@jest/transform" "^25.5.1"
+ "@jest/types" "^25.5.0"
+ "@types/yargs" "^15.0.0"
+ chalk "^3.0.0"
+ collect-v8-coverage "^1.0.0"
+ exit "^0.1.2"
+ glob "^7.1.3"
+ graceful-fs "^4.2.4"
+ jest-config "^25.5.4"
+ jest-haste-map "^25.5.1"
+ jest-message-util "^25.5.0"
+ jest-mock "^25.5.0"
+ jest-regex-util "^25.2.6"
+ jest-resolve "^25.5.1"
+ jest-snapshot "^25.5.1"
+ jest-util "^25.5.0"
+ jest-validate "^25.5.0"
+ realpath-native "^2.0.0"
+ slash "^3.0.0"
+ strip-bom "^4.0.0"
+ yargs "^15.3.1"
+
jest-runtime@^27.5.1:
version "27.5.1"
resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.5.1.tgz#4896003d7a334f7e8e4a53ba93fb9bcd3db0a1af"
@@ -5609,6 +8851,18 @@ jest-runtime@^27.5.1:
slash "^3.0.0"
strip-bom "^4.0.0"
+jest-serializer@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.9.0.tgz#e6d7d7ef96d31e8b9079a714754c5d5c58288e73"
+ integrity sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==
+
+jest-serializer@^25.5.0:
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-25.5.0.tgz#a993f484e769b4ed54e70e0efdb74007f503072b"
+ integrity sha512-LxD8fY1lByomEPflwur9o4e2a5twSQ7TaVNLlFUuToIdoJuBt8tzHfCsZ42Ok6LkKXWzFWf3AGmheuLAA7LcCA==
+ dependencies:
+ graceful-fs "^4.2.4"
+
jest-serializer@^27.5.1:
version "27.5.1"
resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.5.1.tgz#81438410a30ea66fd57ff730835123dea1fb1f64"
@@ -5617,6 +8871,27 @@ jest-serializer@^27.5.1:
"@types/node" "*"
graceful-fs "^4.2.9"
+jest-snapshot@^25.5.1:
+ version "25.5.1"
+ resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-25.5.1.tgz#1a2a576491f9961eb8d00c2e5fd479bc28e5ff7f"
+ integrity sha512-C02JE1TUe64p2v1auUJ2ze5vcuv32tkv9PyhEb318e8XOKF7MOyXdJ7kdjbvrp3ChPLU2usI7Rjxs97Dj5P0uQ==
+ dependencies:
+ "@babel/types" "^7.0.0"
+ "@jest/types" "^25.5.0"
+ "@types/prettier" "^1.19.0"
+ chalk "^3.0.0"
+ expect "^25.5.0"
+ graceful-fs "^4.2.4"
+ jest-diff "^25.5.0"
+ jest-get-type "^25.2.6"
+ jest-matcher-utils "^25.5.0"
+ jest-message-util "^25.5.0"
+ jest-resolve "^25.5.1"
+ make-dir "^3.0.0"
+ natural-compare "^1.4.0"
+ pretty-format "^25.5.0"
+ semver "^6.3.0"
+
jest-snapshot@^27.5.1:
version "27.5.1"
resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.5.1.tgz#b668d50d23d38054a51b42c4039cab59ae6eb6a1"
@@ -5645,6 +8920,35 @@ jest-snapshot@^27.5.1:
pretty-format "^27.5.1"
semver "^7.3.2"
+jest-util@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.9.0.tgz#7396814e48536d2e85a37de3e4c431d7cb140162"
+ integrity sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==
+ dependencies:
+ "@jest/console" "^24.9.0"
+ "@jest/fake-timers" "^24.9.0"
+ "@jest/source-map" "^24.9.0"
+ "@jest/test-result" "^24.9.0"
+ "@jest/types" "^24.9.0"
+ callsites "^3.0.0"
+ chalk "^2.0.1"
+ graceful-fs "^4.1.15"
+ is-ci "^2.0.0"
+ mkdirp "^0.5.1"
+ slash "^2.0.0"
+ source-map "^0.6.0"
+
+jest-util@^25.5.0:
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-25.5.0.tgz#31c63b5d6e901274d264a4fec849230aa3fa35b0"
+ integrity sha512-KVlX+WWg1zUTB9ktvhsg2PXZVdkI1NBevOJSkTKYAyXyH4QSvh+Lay/e/v+bmaFfrkfx43xD8QTfgobzlEXdIA==
+ dependencies:
+ "@jest/types" "^25.5.0"
+ chalk "^3.0.0"
+ graceful-fs "^4.2.4"
+ is-ci "^2.0.0"
+ make-dir "^3.0.0"
+
jest-util@^27.5.1:
version "27.5.1"
resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.5.1.tgz#3ba9771e8e31a0b85da48fe0b0891fb86c01c2f9"
@@ -5669,6 +8973,18 @@ jest-util@^28.1.1:
graceful-fs "^4.2.9"
picomatch "^2.2.3"
+jest-validate@^25.5.0:
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-25.5.0.tgz#fb4c93f332c2e4cf70151a628e58a35e459a413a"
+ integrity sha512-okUFKqhZIpo3jDdtUXUZ2LxGUZJIlfdYBvZb1aczzxrlyMlqdnnws9MOxezoLGhSaFc2XYaHNReNQfj5zPIWyQ==
+ dependencies:
+ "@jest/types" "^25.5.0"
+ camelcase "^5.3.1"
+ chalk "^3.0.0"
+ jest-get-type "^25.2.6"
+ leven "^3.1.0"
+ pretty-format "^25.5.0"
+
jest-validate@^27.5.1:
version "27.5.1"
resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.5.1.tgz#9197d54dc0bdb52260b8db40b46ae668e04df067"
@@ -5694,6 +9010,18 @@ jest-watch-typeahead@^1.0.0:
string-length "^5.0.1"
strip-ansi "^7.0.1"
+jest-watcher@^25.5.0:
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-25.5.0.tgz#d6110d101df98badebe435003956fd4a465e8456"
+ integrity sha512-XrSfJnVASEl+5+bb51V0Q7WQx65dTSk7NL4yDdVjPnRNpM0hG+ncFmDYJo9O8jaSRcAitVbuVawyXCRoxGrT5Q==
+ dependencies:
+ "@jest/test-result" "^25.5.0"
+ "@jest/types" "^25.5.0"
+ ansi-escapes "^4.2.1"
+ chalk "^3.0.0"
+ jest-util "^25.5.0"
+ string-length "^3.1.0"
+
jest-watcher@^27.5.1:
version "27.5.1"
resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.5.1.tgz#71bd85fb9bde3a2c2ec4dc353437971c43c642a2"
@@ -5721,6 +9049,22 @@ jest-watcher@^28.0.0:
jest-util "^28.1.1"
string-length "^4.0.1"
+jest-worker@^24.9.0:
+ version "24.9.0"
+ resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5"
+ integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==
+ dependencies:
+ merge-stream "^2.0.0"
+ supports-color "^6.1.0"
+
+jest-worker@^25.5.0:
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-25.5.0.tgz#2611d071b79cea0f43ee57a3d118593ac1547db1"
+ integrity sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw==
+ dependencies:
+ merge-stream "^2.0.0"
+ supports-color "^7.0.0"
+
jest-worker@^26.2.1:
version "26.6.2"
resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed"
@@ -5748,6 +9092,15 @@ jest-worker@^28.0.2:
merge-stream "^2.0.0"
supports-color "^8.0.0"
+jest@^25.2.7:
+ version "25.5.4"
+ resolved "https://registry.yarnpkg.com/jest/-/jest-25.5.4.tgz#f21107b6489cfe32b076ce2adcadee3587acb9db"
+ integrity sha512-hHFJROBTqZahnO+X+PMtT6G2/ztqAZJveGqz//FnWWHurizkD05PQGzRZOhF3XP6z7SJmL+5tCfW8qV06JypwQ==
+ dependencies:
+ "@jest/core" "^25.5.4"
+ import-local "^3.0.2"
+ jest-cli "^25.5.4"
+
jest@^27.4.3:
version "27.5.1"
resolved "https://registry.yarnpkg.com/jest/-/jest-27.5.1.tgz#dadf33ba70a779be7a6fc33015843b51494f63fc"
@@ -5757,6 +9110,11 @@ jest@^27.4.3:
import-local "^3.0.2"
jest-cli "^27.5.1"
+js-base64@^2.1.9:
+ version "2.6.4"
+ resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.6.4.tgz#f4e686c5de1ea1f867dbcad3d46d969428df98c4"
+ integrity sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==
+
"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
@@ -5777,6 +9135,51 @@ js-yaml@^4.1.0:
dependencies:
argparse "^2.0.1"
+js-yaml@~3.7.0:
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80"
+ integrity sha512-eIlkGty7HGmntbV6P/ZlAsoncFLGsNoM27lkTzS+oneY/EiNhj+geqD9ezg/ip+SW6Var0BJU2JtV0vEUZpWVQ==
+ dependencies:
+ argparse "^1.0.7"
+ esprima "^2.6.0"
+
+jsbn@~0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
+ integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==
+
+jsdom@^15.2.1:
+ version "15.2.1"
+ resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-15.2.1.tgz#d2feb1aef7183f86be521b8c6833ff5296d07ec5"
+ integrity sha512-fAl1W0/7T2G5vURSyxBzrJ1LSdQn6Tr5UX/xD4PXDx/PDgwygedfW6El/KIj3xJ7FU61TTYnc/l/B7P49Eqt6g==
+ dependencies:
+ abab "^2.0.0"
+ acorn "^7.1.0"
+ acorn-globals "^4.3.2"
+ array-equal "^1.0.0"
+ cssom "^0.4.1"
+ cssstyle "^2.0.0"
+ data-urls "^1.1.0"
+ domexception "^1.0.1"
+ escodegen "^1.11.1"
+ html-encoding-sniffer "^1.0.2"
+ nwsapi "^2.2.0"
+ parse5 "5.1.0"
+ pn "^1.1.0"
+ request "^2.88.0"
+ request-promise-native "^1.0.7"
+ saxes "^3.1.9"
+ symbol-tree "^3.2.2"
+ tough-cookie "^3.0.1"
+ w3c-hr-time "^1.0.1"
+ w3c-xmlserializer "^1.1.2"
+ webidl-conversions "^4.0.2"
+ whatwg-encoding "^1.0.5"
+ whatwg-mimetype "^2.3.0"
+ whatwg-url "^7.0.0"
+ ws "^7.0.0"
+ xml-name-validator "^3.0.0"
+
jsdom@^16.6.0:
version "16.7.0"
resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710"
@@ -5820,6 +9223,11 @@ jsesc@~0.5.0:
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==
+json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
+ integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
+
json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1:
version "2.3.1"
resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
@@ -5835,7 +9243,7 @@ json-schema-traverse@^1.0.0:
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2"
integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
-json-schema@^0.4.0:
+json-schema@0.4.0, json-schema@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5"
integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==
@@ -5845,6 +9253,16 @@ json-stable-stringify-without-jsonify@^1.0.1:
resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==
+json-stringify-safe@~5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+ integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==
+
+json5@^0.5.1:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
+ integrity sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw==
+
json5@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"
@@ -5852,7 +9270,7 @@ json5@^1.0.1:
dependencies:
minimist "^1.2.0"
-json5@^2.1.2, json5@^2.2.0, json5@^2.2.1:
+json5@^2.1.1, json5@^2.1.2, json5@^2.2.0, json5@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c"
integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==
@@ -5871,6 +9289,16 @@ jsonpointer@^5.0.0:
resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.0.tgz#f802669a524ec4805fa7389eadbc9921d5dc8072"
integrity sha512-PNYZIdMjVIvVgDSYKTT63Y+KZ6IZvGRNNWcxwD+GNnUz1MKPfv30J8ueCjdwcN0nDx2SlshgyB7Oy0epAzVRRg==
+jsprim@^1.2.2:
+ version "1.4.2"
+ resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb"
+ integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==
+ dependencies:
+ assert-plus "1.0.0"
+ extsprintf "1.3.0"
+ json-schema "0.4.0"
+ verror "1.10.0"
+
"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.1:
version "3.3.1"
resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.1.tgz#a3e0f1cb7e230954eab4dcbce9f6288a78f8ba44"
@@ -5879,7 +9307,31 @@ jsonpointer@^5.0.0:
array-includes "^3.1.5"
object.assign "^4.1.2"
-kind-of@^6.0.2:
+killable@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892"
+ integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==
+
+kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
+ integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==
+ dependencies:
+ is-buffer "^1.1.5"
+
+kind-of@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
+ integrity sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==
+ dependencies:
+ is-buffer "^1.1.5"
+
+kind-of@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
+ integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==
+
+kind-of@^6.0.0, kind-of@^6.0.2:
version "6.0.3"
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
@@ -5911,6 +9363,14 @@ leven@^3.1.0:
resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2"
integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==
+levn@^0.3.0, levn@~0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
+ integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==
+ dependencies:
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+
levn@^0.4.1:
version "0.4.1"
resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
@@ -5919,14 +9379,6 @@ levn@^0.4.1:
prelude-ls "^1.2.1"
type-check "~0.4.0"
-levn@~0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
- integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==
- dependencies:
- prelude-ls "~1.1.2"
- type-check "~0.3.2"
-
lilconfig@^2.0.3, lilconfig@^2.0.5:
version "2.0.5"
resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.5.tgz#19e57fd06ccc3848fd1891655b5a447092225b25"
@@ -5937,11 +9389,44 @@ lines-and-columns@^1.1.6:
resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
+load-json-file@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b"
+ integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^4.0.0"
+ pify "^3.0.0"
+ strip-bom "^3.0.0"
+
+loader-runner@^2.4.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357"
+ integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==
+
loader-runner@^4.2.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1"
integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==
+loader-utils@1.2.3:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7"
+ integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==
+ dependencies:
+ big.js "^5.2.2"
+ emojis-list "^2.0.0"
+ json5 "^1.0.1"
+
+loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613"
+ integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==
+ dependencies:
+ big.js "^5.2.2"
+ emojis-list "^3.0.0"
+ json5 "^1.0.1"
+
loader-utils@^2.0.0:
version "2.0.2"
resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.2.tgz#d6e3b4fb81870721ae4e0868ab11dd638368c129"
@@ -5986,11 +9471,72 @@ locate-path@^6.0.0:
dependencies:
p-locate "^5.0.0"
+lodash._arrayeach@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz#bab156b2a90d3f1bbd5c653403349e5e5933ef9e"
+ integrity sha512-Mn7HidOVcl3mkQtbPsuKR0Fj0N6Q6DQB77CtYncZcJc0bx5qv2q4Gl6a0LC1AN+GSxpnBDNnK3CKEm9XNA4zqQ==
+
+lodash._baseeach@^3.0.0:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/lodash._baseeach/-/lodash._baseeach-3.0.4.tgz#cf8706572ca144e8d9d75227c990da982f932af3"
+ integrity sha512-IqUZ9MQo2UT1XPGuBntInqTOlc+oV+bCo0kMp+yuKGsfvRSNgUW0YjWVZUrG/gs+8z/Eyuc0jkJjOBESt9BXxg==
+ dependencies:
+ lodash.keys "^3.0.0"
+
+lodash._bindcallback@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e"
+ integrity sha512-2wlI0JRAGX8WEf4Gm1p/mv/SZ+jLijpj0jyaE/AXeuQphzCgD8ZQW4oSpoN8JAopujOFGU3KMuq7qfHBWlGpjQ==
+
+lodash._getnative@^3.0.0:
+ version "3.9.1"
+ resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5"
+ integrity sha512-RrL9VxMEPyDMHOd9uFbvMe8X55X16/cGM5IgOKgRElQZutpX89iS6vwl64duTV1/16w5JY7tuFNXqoekmh1EmA==
+
+lodash.camelcase@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
+ integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==
+
lodash.debounce@^4.0.8:
version "4.0.8"
resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==
+lodash.foreach@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-3.0.3.tgz#6fd7efb79691aecd67fdeac2761c98e701d6c39a"
+ integrity sha512-PA7Lp7pe2HMJBoB1vELegEIF3waUFnM0fWDKJVYolwZ4zHh6WTmnq0xmzfQksD66gx2quhDNyBdyaE2T8/DP3Q==
+ dependencies:
+ lodash._arrayeach "^3.0.0"
+ lodash._baseeach "^3.0.0"
+ lodash._bindcallback "^3.0.0"
+ lodash.isarray "^3.0.0"
+
+lodash.isarguments@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a"
+ integrity sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==
+
+lodash.isarray@^3.0.0:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55"
+ integrity sha512-JwObCrNJuT0Nnbuecmqr5DgtuBppuCvGD9lxjFpAzwnVtdGoDQ1zig+5W8k5/6Gcn0gZ3936HDAlGd28i7sOGQ==
+
+lodash.isplainobject@^4.0.6:
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb"
+ integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==
+
+lodash.keys@^3.0.0:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a"
+ integrity sha512-CuBsapFjcubOGMn3VD+24HOAPxM79tH+V6ivJL3CHYjtrawauDJHUk//Yew9Hvc6e9rbCrURGk8z6PC+8WJBfQ==
+ dependencies:
+ lodash._getnative "^3.0.0"
+ lodash.isarguments "^3.0.0"
+ lodash.isarray "^3.0.0"
+
lodash.memoize@^4.1.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
@@ -6011,12 +9557,24 @@ lodash.uniq@^4.5.0:
resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==
-lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.7.0:
+lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.7.0:
version "4.17.21"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
-loose-envify@^1.1.0, loose-envify@^1.4.0:
+loglevel@^1.6.8:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.8.0.tgz#e7ec73a57e1e7b419cb6c6ac06bf050b67356114"
+ integrity sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA==
+
+lolex@^5.0.0:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/lolex/-/lolex-5.1.2.tgz#953694d098ce7c07bc5ed6d0e42bc6c0c6d5a367"
+ integrity sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A==
+ dependencies:
+ "@sinonjs/commons" "^1.7.0"
+
+loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
@@ -6030,6 +9588,13 @@ lower-case@^2.0.2:
dependencies:
tslib "^2.0.3"
+lru-cache@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
+ integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
+ dependencies:
+ yallist "^3.0.2"
+
lru-cache@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
@@ -6049,6 +9614,14 @@ magic-string@^0.25.0, magic-string@^0.25.7:
dependencies:
sourcemap-codec "^1.4.8"
+make-dir@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
+ integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==
+ dependencies:
+ pify "^4.0.1"
+ semver "^5.6.0"
+
make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
@@ -6063,6 +9636,27 @@ makeerror@1.0.12:
dependencies:
tmpl "1.0.5"
+map-cache@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
+ integrity sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==
+
+map-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
+ integrity sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==
+ dependencies:
+ object-visit "^1.0.0"
+
+md5.js@^1.3.4:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"
+ integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==
+ dependencies:
+ hash-base "^3.0.0"
+ inherits "^2.0.1"
+ safe-buffer "^5.1.2"
+
mdn-data@2.0.14:
version "2.0.14"
resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50"
@@ -6085,6 +9679,27 @@ memfs@^3.1.2, memfs@^3.4.3:
dependencies:
fs-monkey "^1.0.3"
+memoize-one@^5.0.0:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e"
+ integrity sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==
+
+memory-fs@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552"
+ integrity sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==
+ dependencies:
+ errno "^0.1.3"
+ readable-stream "^2.0.1"
+
+memory-fs@^0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c"
+ integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==
+ dependencies:
+ errno "^0.1.3"
+ readable-stream "^2.0.1"
+
merge-descriptors@1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
@@ -6105,6 +9720,25 @@ methods@~1.1.2:
resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==
+micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4:
+ version "3.1.10"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
+ integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ braces "^2.3.1"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ extglob "^2.0.4"
+ fragment-cache "^0.2.1"
+ kind-of "^6.0.2"
+ nanomatch "^1.2.9"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.2"
+
micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5:
version "4.0.5"
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
@@ -6113,12 +9747,20 @@ micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5:
braces "^3.0.2"
picomatch "^2.3.1"
+miller-rabin@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d"
+ integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==
+ dependencies:
+ bn.js "^4.0.0"
+ brorand "^1.0.1"
+
mime-db@1.52.0, "mime-db@>= 1.43.0 < 2":
version "1.52.0"
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
-mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34:
+mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34:
version "2.1.35"
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
@@ -6130,6 +9772,11 @@ mime@1.6.0:
resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
+mime@^2.4.4:
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367"
+ integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==
+
mimic-fn@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
@@ -6147,11 +9794,16 @@ mini-css-extract-plugin@^2.4.5:
dependencies:
schema-utils "^4.0.0"
-minimalistic-assert@^1.0.0:
+minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
+minimalistic-crypto-utils@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
+ integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==
+
minimatch@3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
@@ -6173,18 +9825,71 @@ minimatch@^5.0.1:
dependencies:
brace-expansion "^2.0.1"
-minimist@^1.2.0, minimist@^1.2.6:
+minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.6:
version "1.2.6"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44"
integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==
-mkdirp@~0.5.1:
+mississippi@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022"
+ integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==
+ dependencies:
+ concat-stream "^1.5.0"
+ duplexify "^3.4.2"
+ end-of-stream "^1.1.0"
+ flush-write-stream "^1.0.0"
+ from2 "^2.1.0"
+ parallel-transform "^1.1.0"
+ pump "^3.0.0"
+ pumpify "^1.3.3"
+ stream-each "^1.1.0"
+ through2 "^2.0.0"
+
+mixin-deep@^1.2.0:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"
+ integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==
+ dependencies:
+ for-in "^1.0.2"
+ is-extendable "^1.0.1"
+
+mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.1:
version "0.5.6"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6"
integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==
dependencies:
minimist "^1.2.6"
+moment-timezone@^0.5.34:
+ version "0.5.34"
+ resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.34.tgz#a75938f7476b88f155d3504a9343f7519d9a405c"
+ integrity sha512-3zAEHh2hKUs3EXLESx/wsgw6IQdusOT8Bxm3D9UrHPQR7zlMmzwybC8zHEM1tQ4LJwP7fcxrWr8tuBg05fFCbg==
+ dependencies:
+ moment ">= 2.9.0"
+
+"moment@>= 2.9.0", moment@^2.29.3:
+ version "2.29.3"
+ resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.3.tgz#edd47411c322413999f7a5940d526de183c031f3"
+ integrity sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw==
+
+move-concurrently@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92"
+ integrity sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==
+ dependencies:
+ aproba "^1.1.1"
+ copy-concurrently "^1.0.0"
+ fs-write-stream-atomic "^1.0.8"
+ mkdirp "^0.5.1"
+ rimraf "^2.5.4"
+ run-queue "^1.0.3"
+
+mri@^1.1.4:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b"
+ integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==
+
ms@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
@@ -6200,6 +9905,19 @@ ms@2.1.3, ms@^2.1.1:
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
+multicast-dns-service-types@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901"
+ integrity sha512-cnAsSVxIDsYt0v7HmC0hWZFwwXSh+E6PgCrREDuN/EsjgLwA5XRmlMHhSiDPrt6HxY1gTivEa/Zh7GtODoLevQ==
+
+multicast-dns@^6.0.1:
+ version "6.2.3"
+ resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229"
+ integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==
+ dependencies:
+ dns-packet "^1.3.1"
+ thunky "^1.0.2"
+
multicast-dns@^7.2.5:
version "7.2.5"
resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.5.tgz#77eb46057f4d7adbd16d9290fa7299f6fa64cced"
@@ -6208,11 +9926,49 @@ multicast-dns@^7.2.5:
dns-packet "^5.2.2"
thunky "^1.0.2"
+multimatch@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-4.0.0.tgz#8c3c0f6e3e8449ada0af3dd29efb491a375191b3"
+ integrity sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==
+ dependencies:
+ "@types/minimatch" "^3.0.3"
+ array-differ "^3.0.0"
+ array-union "^2.1.0"
+ arrify "^2.0.1"
+ minimatch "^3.0.4"
+
+mute-stream@0.0.8:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
+ integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
+
+nan@^2.12.1:
+ version "2.16.0"
+ resolved "https://registry.yarnpkg.com/nan/-/nan-2.16.0.tgz#664f43e45460fb98faf00edca0bb0d7b8dce7916"
+ integrity sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==
+
nanoid@^3.3.4:
version "3.3.4"
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab"
integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==
+nanomatch@^1.2.9:
+ version "1.2.13"
+ resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
+ integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ fragment-cache "^0.2.1"
+ is-windows "^1.0.2"
+ kind-of "^6.0.2"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
natural-compare@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
@@ -6223,11 +9979,21 @@ negotiator@0.6.3:
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd"
integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==
-neo-async@^2.6.2:
+neo-async@^2.5.0, neo-async@^2.6.1, neo-async@^2.6.2:
version "2.6.2"
resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
+next-tick@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb"
+ integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==
+
+nice-try@^1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
+ integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
+
no-case@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d"
@@ -6236,6 +10002,11 @@ no-case@^3.0.4:
lower-case "^2.0.2"
tslib "^2.0.3"
+node-forge@^0.10.0:
+ version "0.10.0"
+ resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3"
+ integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==
+
node-forge@^1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3"
@@ -6246,11 +10017,68 @@ node-int64@^0.4.0:
resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==
+node-libs-browser@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425"
+ integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==
+ dependencies:
+ assert "^1.1.1"
+ browserify-zlib "^0.2.0"
+ buffer "^4.3.0"
+ console-browserify "^1.1.0"
+ constants-browserify "^1.0.0"
+ crypto-browserify "^3.11.0"
+ domain-browser "^1.1.1"
+ events "^3.0.0"
+ https-browserify "^1.0.0"
+ os-browserify "^0.3.0"
+ path-browserify "0.0.1"
+ process "^0.11.10"
+ punycode "^1.2.4"
+ querystring-es3 "^0.2.0"
+ readable-stream "^2.3.3"
+ stream-browserify "^2.0.1"
+ stream-http "^2.7.2"
+ string_decoder "^1.0.0"
+ timers-browserify "^2.0.4"
+ tty-browserify "0.0.0"
+ url "^0.11.0"
+ util "^0.11.0"
+ vm-browserify "^1.0.1"
+
+node-notifier@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-6.0.0.tgz#cea319e06baa16deec8ce5cd7f133c4a46b68e12"
+ integrity sha512-SVfQ/wMw+DesunOm5cKqr6yDcvUTDl/yc97ybGHMrteNEY6oekXpNpS3lZwgLlwz0FLgHoiW28ZpmBHUDg37cw==
+ dependencies:
+ growly "^1.3.0"
+ is-wsl "^2.1.1"
+ semver "^6.3.0"
+ shellwords "^0.1.1"
+ which "^1.3.1"
+
node-releases@^2.0.5:
version "2.0.5"
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.5.tgz#280ed5bc3eba0d96ce44897d8aee478bfb3d9666"
integrity sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==
+normalize-package-data@^2.3.2, normalize-package-data@^2.5.0:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
+ integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
+ dependencies:
+ hosted-git-info "^2.1.4"
+ resolve "^1.10.0"
+ semver "2 || 3 || 4 || 5"
+ validate-npm-package-license "^3.0.1"
+
+normalize-path@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
+ integrity sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==
+ dependencies:
+ remove-trailing-separator "^1.0.1"
+
normalize-path@^3.0.0, normalize-path@~3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
@@ -6266,7 +10094,21 @@ normalize-url@^6.0.1:
resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a"
integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==
-npm-run-path@^4.0.1:
+npm-run-path@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
+ integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==
+ dependencies:
+ path-key "^2.0.0"
+
+npm-run-path@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-3.1.0.tgz#7f91be317f6a466efed3c9f2980ad8a4ee8b0fa5"
+ integrity sha512-Dbl4A/VfiVGLgQv29URL9xshU8XDY1GeLy+fsaZ1AA8JDSfjvr5P5+pzRbWqRSBxk6/DW7MIh8lTM/PaGnP2kg==
+ dependencies:
+ path-key "^3.0.0"
+
+npm-run-path@^4.0.0, npm-run-path@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==
@@ -6287,16 +10129,35 @@ nth-check@^2.0.1:
dependencies:
boolbase "^1.0.0"
+num2fraction@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede"
+ integrity sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==
+
nwsapi@^2.2.0:
version "2.2.1"
resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.1.tgz#10a9f268fbf4c461249ebcfe38e359aa36e2577c"
integrity sha512-JYOWTeFoS0Z93587vRJgASD5Ut11fYl5NyihP3KrYBvMe1FRRs6RN7m20SA/16GM4P6hTnZjT+UmDOt38UeXNg==
-object-assign@^4.1.1:
+oauth-sign@~0.9.0:
+ version "0.9.0"
+ resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
+ integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
+
+object-assign@^4.0.1, object-assign@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
+object-copy@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
+ integrity sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==
+ dependencies:
+ copy-descriptor "^0.1.0"
+ define-property "^0.2.5"
+ kind-of "^3.0.3"
+
object-hash@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9"
@@ -6307,11 +10168,26 @@ object-inspect@^1.12.0, object-inspect@^1.9.0:
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea"
integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==
+object-is@^1.0.1:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac"
+ integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==
+ dependencies:
+ call-bind "^1.0.2"
+ define-properties "^1.1.3"
+
object-keys@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
+object-visit@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
+ integrity sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==
+ dependencies:
+ isobject "^3.0.0"
+
object.assign@^4.1.0, object.assign@^4.1.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940"
@@ -6340,7 +10216,7 @@ object.fromentries@^2.0.5:
define-properties "^1.1.3"
es-abstract "^1.19.1"
-object.getownpropertydescriptors@^2.1.0:
+object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0, object.getownpropertydescriptors@^2.1.1:
version "2.1.4"
resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.4.tgz#7965e6437a57278b587383831a9b829455a4bc37"
integrity sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ==
@@ -6358,6 +10234,13 @@ object.hasown@^1.1.1:
define-properties "^1.1.4"
es-abstract "^1.19.5"
+object.pick@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
+ integrity sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==
+ dependencies:
+ isobject "^3.0.1"
+
object.values@^1.1.0, object.values@^1.1.5:
version "1.1.5"
resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac"
@@ -6384,14 +10267,14 @@ on-headers@~1.0.2:
resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f"
integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==
-once@^1.3.0:
+once@^1.3.0, once@^1.3.1, once@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
dependencies:
wrappy "1"
-onetime@^5.1.2:
+onetime@^5.1.0, onetime@^5.1.2:
version "5.1.2"
resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
@@ -6407,7 +10290,19 @@ open@^8.0.9, open@^8.4.0:
is-docker "^2.1.1"
is-wsl "^2.2.0"
-optionator@^0.8.1:
+opener@^1.5.1:
+ version "1.5.2"
+ resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598"
+ integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==
+
+opn@^5.5.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc"
+ integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==
+ dependencies:
+ is-wsl "^1.1.0"
+
+optionator@^0.8.1, optionator@^0.8.3:
version "0.8.3"
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==
@@ -6431,6 +10326,31 @@ optionator@^0.9.1:
type-check "^0.4.0"
word-wrap "^1.2.3"
+os-browserify@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27"
+ integrity sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==
+
+os-tmpdir@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
+ integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==
+
+p-each-series@^2.1.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a"
+ integrity sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==
+
+p-finally@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
+ integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==
+
+p-finally@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561"
+ integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==
+
p-limit@^1.1.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
@@ -6480,6 +10400,18 @@ p-locate@^5.0.0:
dependencies:
p-limit "^3.0.2"
+p-map@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175"
+ integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==
+
+p-retry@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328"
+ integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==
+ dependencies:
+ retry "^0.12.0"
+
p-retry@^4.5.0:
version "4.6.2"
resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16"
@@ -6498,7 +10430,21 @@ p-try@^2.0.0:
resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
-param-case@^3.0.4:
+pako@~1.0.5:
+ version "1.0.11"
+ resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf"
+ integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==
+
+parallel-transform@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc"
+ integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==
+ dependencies:
+ cyclist "^1.0.1"
+ inherits "^2.0.3"
+ readable-stream "^2.1.5"
+
+param-case@^3.0.3, param-case@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5"
integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==
@@ -6513,6 +10459,25 @@ parent-module@^1.0.0:
dependencies:
callsites "^3.0.0"
+parse-asn1@^5.0.0, parse-asn1@^5.1.5:
+ version "5.1.6"
+ resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4"
+ integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==
+ dependencies:
+ asn1.js "^5.2.0"
+ browserify-aes "^1.0.0"
+ evp_bytestokey "^1.0.0"
+ pbkdf2 "^3.0.3"
+ safe-buffer "^5.1.1"
+
+parse-json@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
+ integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==
+ dependencies:
+ error-ex "^1.3.1"
+ json-parse-better-errors "^1.0.1"
+
parse-json@^5.0.0, parse-json@^5.2.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd"
@@ -6523,6 +10488,16 @@ parse-json@^5.0.0, parse-json@^5.2.0:
json-parse-even-better-errors "^2.3.0"
lines-and-columns "^1.1.6"
+parse-passwd@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6"
+ integrity sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==
+
+parse5@5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2"
+ integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==
+
parse5@6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b"
@@ -6541,6 +10516,21 @@ pascal-case@^3.1.2:
no-case "^3.0.4"
tslib "^2.0.3"
+pascalcase@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
+ integrity sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==
+
+path-browserify@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a"
+ integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==
+
+path-dirname@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0"
+ integrity sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==
+
path-exists@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
@@ -6556,6 +10546,16 @@ path-is-absolute@^1.0.0:
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
+path-is-inside@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
+ integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==
+
+path-key@^2.0.0, path-key@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
+ integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==
+
path-key@^3.0.0, path-key@^3.1.0:
version "3.1.1"
resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
@@ -6571,11 +10571,29 @@ path-to-regexp@0.1.7:
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==
+path-type@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f"
+ integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==
+ dependencies:
+ pify "^3.0.0"
+
path-type@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
+pbkdf2@^3.0.3:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075"
+ integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==
+ dependencies:
+ create-hash "^1.1.2"
+ create-hmac "^1.1.4"
+ ripemd160 "^2.0.1"
+ safe-buffer "^5.0.1"
+ sha.js "^2.4.8"
+
performance-now@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
@@ -6591,21 +10609,50 @@ picocolors@^1.0.0:
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
-picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3, picomatch@^2.3.1:
+picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3, picomatch@^2.3.0, picomatch@^2.3.1:
version "2.3.1"
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
-pify@^2.3.0:
+pify@^2.0.0, pify@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==
-pirates@^4.0.4:
+pify@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
+ integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==
+
+pify@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
+ integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
+
+pinkie-promise@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
+ integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==
+ dependencies:
+ pinkie "^2.0.0"
+
+pinkie@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
+ integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==
+
+pirates@^4.0.1, pirates@^4.0.4:
version "4.0.5"
resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b"
integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==
+pkg-dir@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3"
+ integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==
+ dependencies:
+ find-up "^3.0.0"
+
pkg-dir@^4.1.0, pkg-dir@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
@@ -6620,6 +10667,25 @@ pkg-up@^3.1.0:
dependencies:
find-up "^3.0.0"
+pn@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb"
+ integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==
+
+portfinder@^1.0.26:
+ version "1.0.28"
+ resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778"
+ integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==
+ dependencies:
+ async "^2.6.2"
+ debug "^3.1.1"
+ mkdirp "^0.5.5"
+
+posix-character-classes@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
+ integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==
+
postcss-attribute-case-insensitive@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.1.tgz#86d323c77ab8896ed90500071c2c8329fba64fda"
@@ -6822,6 +10888,17 @@ postcss-load-config@^3.1.4:
lilconfig "^2.0.5"
yaml "^1.10.2"
+postcss-loader@^4.0.4:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-4.3.0.tgz#2c4de9657cd4f07af5ab42bd60a673004da1b8cc"
+ integrity sha512-M/dSoIiNDOo8Rk0mUqoj4kpGq91gcxCfb9PoyZVdZ76/AuhxylHDYZblNE8o+EQ9AMSASeMFEKxZf5aU6wlx1Q==
+ dependencies:
+ cosmiconfig "^7.0.0"
+ klona "^2.0.4"
+ loader-utils "^2.0.0"
+ schema-utils "^3.0.0"
+ semver "^7.3.4"
+
postcss-loader@^6.2.1:
version "6.2.1"
resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-6.2.1.tgz#0895f7346b1702103d30fdc66e4d494a93c008ef"
@@ -6891,11 +10968,50 @@ postcss-minify-selectors@^5.2.1:
dependencies:
postcss-selector-parser "^6.0.5"
+postcss-modules-extract-imports@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz#b614c9720be6816eaee35fb3a5faa1dba6a05ddb"
+ integrity sha512-zF9+UIEvtpeqMGxhpeT9XaIevQSrBBCz9fi7SwfkmjVacsSj8DY5eFVgn+wY8I9vvdDDwK5xC8Myq4UkoLFIkA==
+ dependencies:
+ postcss "^6.0.1"
+
+postcss-modules-extract-imports@^1.2.0:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz#dc87e34148ec7eab5f791f7cd5849833375b741a"
+ integrity sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw==
+ dependencies:
+ postcss "^6.0.1"
+
+postcss-modules-extract-imports@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e"
+ integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==
+ dependencies:
+ postcss "^7.0.5"
+
postcss-modules-extract-imports@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d"
integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==
+postcss-modules-local-by-default@1.2.0, postcss-modules-local-by-default@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069"
+ integrity sha512-X4cquUPIaAd86raVrBwO8fwRfkIdbwFu7CTfEOjiZQHVQwlHRSkTgH5NLDmMm5+1hQO8u6dZ+TOOJDbay1hYpA==
+ dependencies:
+ css-selector-tokenizer "^0.7.0"
+ postcss "^6.0.1"
+
+postcss-modules-local-by-default@^3.0.2:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz#bb14e0cc78279d504dbdcbfd7e0ca28993ffbbb0"
+ integrity sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==
+ dependencies:
+ icss-utils "^4.1.1"
+ postcss "^7.0.32"
+ postcss-selector-parser "^6.0.2"
+ postcss-value-parser "^4.1.0"
+
postcss-modules-local-by-default@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c"
@@ -6905,6 +11021,31 @@ postcss-modules-local-by-default@^4.0.0:
postcss-selector-parser "^6.0.2"
postcss-value-parser "^4.1.0"
+postcss-modules-parser@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/postcss-modules-parser/-/postcss-modules-parser-1.1.1.tgz#95f71ad7916f0f39207bb81c401336c8d245738c"
+ integrity sha512-UQbh3X/SIEOVtZWllzYm+gb+v3TukgMZJK9cUtb3kFwzWkgYQVb/N0zTUNOrodIVXox9wo7yuzmaOMJKYYndtA==
+ dependencies:
+ icss-replace-symbols "^1.0.2"
+ lodash.foreach "^3.0.3"
+ postcss "^5.0.10"
+
+postcss-modules-scope@1.1.0, postcss-modules-scope@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90"
+ integrity sha512-LTYwnA4C1He1BKZXIx1CYiHixdSe9LWYVKadq9lK5aCCMkoOkFyZ7aigt+srfjlRplJY3gIol6KUNefdMQJdlw==
+ dependencies:
+ css-selector-tokenizer "^0.7.0"
+ postcss "^6.0.1"
+
+postcss-modules-scope@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee"
+ integrity sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==
+ dependencies:
+ postcss "^7.0.6"
+ postcss-selector-parser "^6.0.0"
+
postcss-modules-scope@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06"
@@ -6912,6 +11053,22 @@ postcss-modules-scope@^3.0.0:
dependencies:
postcss-selector-parser "^6.0.4"
+postcss-modules-values@1.3.0, postcss-modules-values@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20"
+ integrity sha512-i7IFaR9hlQ6/0UgFuqM6YWaCfA1Ej8WMg8A5DggnH1UGKJvTV/ugqq/KaULixzzOi3T/tF6ClBXcHGCzdd5unA==
+ dependencies:
+ icss-replace-symbols "^1.1.0"
+ postcss "^6.0.1"
+
+postcss-modules-values@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz#5b5000d6ebae29b4255301b4a3a54574423e7f10"
+ integrity sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==
+ dependencies:
+ icss-utils "^4.0.0"
+ postcss "^7.0.6"
+
postcss-modules-values@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c"
@@ -6919,6 +11076,17 @@ postcss-modules-values@^4.0.0:
dependencies:
icss-utils "^5.0.0"
+postcss-modules@^1.3.2:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/postcss-modules/-/postcss-modules-1.5.0.tgz#08da6ce43fcfadbc685a021fe6ed30ef929f0bcc"
+ integrity sha512-KiAihzcV0TxTTNA5OXreyIXctuHOfR50WIhqBpc8pe0Q5dcs/Uap9EVlifOI9am7zGGdGOJQ6B1MPYKo2UxgOg==
+ dependencies:
+ css-modules-loader-core "^1.1.0"
+ generic-names "^2.0.1"
+ lodash.camelcase "^4.3.0"
+ postcss "^7.0.1"
+ string-hash "^1.1.1"
+
postcss-nested@5.0.6:
version "5.0.6"
resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-5.0.6.tgz#466343f7fc8d3d46af3e7dba3fcd47d052a945bc"
@@ -7116,6 +11284,13 @@ postcss-replace-overflow-wrap@^4.0.0:
resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz#d2df6bed10b477bf9c52fab28c568b4b29ca4319"
integrity sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==
+postcss-scss@^3.0.2:
+ version "3.0.5"
+ resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-3.0.5.tgz#bd484faf05890e48a6f5e097acb3d104cc7b9ac7"
+ integrity sha512-3e0qYk87eczfzg5P73ZVuuxEGCBfatRhPze6KrSaIbEKVtmnFI1RYp1Fv+AyZi+w8kcNRSPeNX6ap4b65zEkiA==
+ dependencies:
+ postcss "^8.2.7"
+
postcss-selector-not@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-6.0.0.tgz#d100f273d345917246762300411b4d2e24905047"
@@ -7123,7 +11298,7 @@ postcss-selector-not@^6.0.0:
dependencies:
postcss-selector-parser "^6.0.10"
-postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.6, postcss-selector-parser@^6.0.9:
+postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.6, postcss-selector-parser@^6.0.9:
version "6.0.10"
resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz#79b61e2c0d1bfc2602d549e11d0876256f8df88d"
integrity sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==
@@ -7146,12 +11321,49 @@ postcss-unique-selectors@^5.1.1:
dependencies:
postcss-selector-parser "^6.0.5"
-postcss-value-parser@^4.0.0, postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0:
+postcss-value-parser@^4.0.0, postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"
integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
-postcss@^7.0.35:
+postcss@6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.1.tgz#000dbd1f8eef217aa368b9a212c5fc40b2a8f3f2"
+ integrity sha512-VbGX1LQgQbf9l3cZ3qbUuC3hGqIEOGQFHAEHQ/Diaeo0yLgpgK5Rb8J+OcamIfQ9PbAU/fzBjVtQX3AhJHUvZw==
+ dependencies:
+ chalk "^1.1.3"
+ source-map "^0.5.6"
+ supports-color "^3.2.3"
+
+postcss@7.0.36:
+ version "7.0.36"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.36.tgz#056f8cffa939662a8f5905950c07d5285644dfcb"
+ integrity sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==
+ dependencies:
+ chalk "^2.4.2"
+ source-map "^0.6.1"
+ supports-color "^6.1.0"
+
+postcss@^5.0.10:
+ version "5.2.18"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5"
+ integrity sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==
+ dependencies:
+ chalk "^1.1.3"
+ js-base64 "^2.1.9"
+ source-map "^0.5.6"
+ supports-color "^3.2.3"
+
+postcss@^6.0.1:
+ version "6.0.23"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324"
+ integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==
+ dependencies:
+ chalk "^2.4.1"
+ source-map "^0.6.1"
+ supports-color "^5.4.0"
+
+postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.2, postcss@^7.0.32, postcss@^7.0.35, postcss@^7.0.5, postcss@^7.0.6:
version "7.0.39"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.39.tgz#9624375d965630e2e1f2c02a935c82a59cb48309"
integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==
@@ -7159,7 +11371,7 @@ postcss@^7.0.35:
picocolors "^0.2.1"
source-map "^0.6.1"
-postcss@^8.3.5, postcss@^8.4.14, postcss@^8.4.4, postcss@^8.4.7:
+postcss@^8.2.7, postcss@^8.3.5, postcss@^8.4.14, postcss@^8.4.4, postcss@^8.4.7:
version "8.4.14"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf"
integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==
@@ -7178,11 +11390,31 @@ prelude-ls@~1.1.2:
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==
+prettier-linter-helpers@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b"
+ integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==
+ dependencies:
+ fast-diff "^1.1.2"
+
+prettier@^2.0.4:
+ version "2.7.1"
+ resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64"
+ integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==
+
pretty-bytes@^5.3.0, pretty-bytes@^5.4.1:
version "5.6.0"
resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb"
integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==
+pretty-error@^2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.2.tgz#be89f82d81b1c86ec8fdfbc385045882727f93b6"
+ integrity sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==
+ dependencies:
+ lodash "^4.17.20"
+ renderkid "^2.0.4"
+
pretty-error@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6"
@@ -7191,6 +11423,16 @@ pretty-error@^4.0.0:
lodash "^4.17.20"
renderkid "^3.0.0"
+pretty-format@^25.5.0:
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.5.0.tgz#7873c1d774f682c34b8d48b6743a2bf2ac55791a"
+ integrity sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==
+ dependencies:
+ "@jest/types" "^25.5.0"
+ ansi-regex "^5.0.0"
+ ansi-styles "^4.0.0"
+ react-is "^16.12.0"
+
pretty-format@^27.0.0, pretty-format@^27.0.2, pretty-format@^27.5.1:
version "27.5.1"
resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e"
@@ -7210,11 +11452,38 @@ pretty-format@^28.0.0, pretty-format@^28.1.1:
ansi-styles "^5.0.0"
react-is "^18.0.0"
+pretty-quick@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/pretty-quick/-/pretty-quick-2.0.2.tgz#4e44d6489ed513ef111bee501f63688d854584e6"
+ integrity sha512-aLb6vtOTEfJDwi1w+MBTeE20GwPVUYyn6IqNg6TtGpiOB1W3y6vKcsGFjqGeaaEtQgMLSPXTWONqh33UBuwG8A==
+ dependencies:
+ chalk "^2.4.2"
+ execa "^2.1.0"
+ find-up "^4.1.0"
+ ignore "^5.1.4"
+ mri "^1.1.4"
+ multimatch "^4.0.0"
+
process-nextick-args@~2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
+process@^0.11.10:
+ version "0.11.10"
+ resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
+ integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==
+
+progress@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
+ integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
+
+promise-inflight@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
+ integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==
+
promise@^8.1.0:
version "8.1.0"
resolved "https://registry.yarnpkg.com/promise/-/promise-8.1.0.tgz#697c25c3dfe7435dd79fcd58c38a135888eaf05e"
@@ -7230,7 +11499,7 @@ prompts@^2.0.1, prompts@^2.4.2:
kleur "^3.0.3"
sisteransi "^1.0.5"
-prop-types@^15.8.1:
+prop-types@^15.5.7, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1:
version "15.8.1"
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
@@ -7247,11 +11516,63 @@ proxy-addr@~2.0.7:
forwarded "0.2.0"
ipaddr.js "1.9.1"
-psl@^1.1.33:
+prr@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
+ integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==
+
+psl@^1.1.28, psl@^1.1.33:
version "1.8.0"
resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24"
integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==
+public-encrypt@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0"
+ integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==
+ dependencies:
+ bn.js "^4.1.0"
+ browserify-rsa "^4.0.0"
+ create-hash "^1.1.0"
+ parse-asn1 "^5.0.0"
+ randombytes "^2.0.1"
+ safe-buffer "^5.1.2"
+
+pump@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909"
+ integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+pump@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
+ integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+pumpify@^1.3.3:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce"
+ integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==
+ dependencies:
+ duplexify "^3.6.0"
+ inherits "^2.0.3"
+ pump "^2.0.0"
+
+punycode@1.3.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
+ integrity sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==
+
+punycode@^1.2.4:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+ integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==
+
punycode@^2.1.0, punycode@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
@@ -7269,6 +11590,26 @@ qs@6.10.3:
dependencies:
side-channel "^1.0.4"
+qs@~6.5.2:
+ version "6.5.3"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad"
+ integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==
+
+querystring-es3@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
+ integrity sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==
+
+querystring@0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
+ integrity sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==
+
+querystringify@^2.1.1:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6"
+ integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==
+
queue-microtask@^1.2.2:
version "1.2.3"
resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
@@ -7286,13 +11627,21 @@ raf@^3.4.1:
dependencies:
performance-now "^2.1.0"
-randombytes@^2.1.0:
+randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
dependencies:
safe-buffer "^5.1.0"
+randomfill@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458"
+ integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==
+ dependencies:
+ randombytes "^2.0.5"
+ safe-buffer "^5.1.0"
+
range-parser@^1.2.1, range-parser@~1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
@@ -7308,6 +11657,21 @@ raw-body@2.5.1:
iconv-lite "0.4.24"
unpipe "1.0.0"
+rc-checkbox@^2.3.2:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/rc-checkbox/-/rc-checkbox-2.3.2.tgz#f91b3678c7edb2baa8121c9483c664fa6f0aefc1"
+ integrity sha512-afVi1FYiGv1U0JlpNH/UaEXdh6WUJjcWokj/nUN2TgG80bfG+MDdbfHKlLcNNba94mbjy2/SXJ1HDgrOkXGAjg==
+ dependencies:
+ "@babel/runtime" "^7.10.1"
+ classnames "^2.2.1"
+
+react-apexcharts@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/react-apexcharts/-/react-apexcharts-1.4.0.tgz#e3619104b34750da67a2ca80289dc87085c2aa27"
+ integrity sha512-DrcMV4aAMrUG+n6412yzyATWEyCDWlpPBBhVbpzBC4PDeuYU6iF84SmExbck+jx5MUm4U5PM3/T307Mc3kzc9Q==
+ dependencies:
+ prop-types "^15.5.7"
+
react-app-polyfill@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/react-app-polyfill/-/react-app-polyfill-3.0.0.tgz#95221e0a9bd259e5ca6b177c7bb1cb6768f68fd7"
@@ -7359,6 +11723,16 @@ react-dom@^17.0.2:
object-assign "^4.1.1"
scheduler "^0.20.2"
+react-elastic-carousel@^0.11.5:
+ version "0.11.5"
+ resolved "https://registry.yarnpkg.com/react-elastic-carousel/-/react-elastic-carousel-0.11.5.tgz#4be027ea047c4f7678273caa844e83d91f3784dc"
+ integrity sha512-//k1IWUiUNXXNE8LHw4bLdP+8YCXLQHbeSOPiZo/+sTkUBp/YB/hjGKWH4RqSJ59AjF8PoxB+SUbqhdPTcwAuw==
+ dependencies:
+ classnames "^2.2.6"
+ react-only-when "^1.0.2"
+ react-swipeable "^5.5.1"
+ resize-observer-polyfill "1.5.0"
+
react-error-overlay@^6.0.11:
version "6.0.11"
resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.11.tgz#92835de5841c5cf08ba00ddd2d677b6d17ff9adb"
@@ -7369,7 +11743,7 @@ react-gtm-module@^2.0.11:
resolved "https://registry.yarnpkg.com/react-gtm-module/-/react-gtm-module-2.0.11.tgz#14484dac8257acd93614e347c32da9c5ac524206"
integrity sha512-8gyj4TTxeP7eEyc2QKawEuQoAZdjKvMY4pgWfycGmqGByhs17fR+zEBs0JUDq4US/l+vbTl+6zvUIx27iDo/Vw==
-react-is@^16.13.1:
+react-is@^16.12.0, react-is@^16.13.1, react-is@^16.7.0:
version "16.13.1"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
@@ -7384,6 +11758,36 @@ react-is@^18.0.0:
resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b"
integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==
+react-lifecycles-compat@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362"
+ integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==
+
+react-only-when@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/react-only-when/-/react-only-when-1.0.2.tgz#a8a79b48dd6cfbd91ddc710674a94153e88039d3"
+ integrity sha512-agE6l3L6bqaVuwNtjihTQ36M+VBfPS63KOzcNL4ZTmlwSxQPvhzIqmBWfiol0/wLYmKxCcBqgXkEJpvj5Kob8Q==
+
+react-redux-toastr@^7.6.8:
+ version "7.6.8"
+ resolved "https://registry.yarnpkg.com/react-redux-toastr/-/react-redux-toastr-7.6.8.tgz#da6265844497a81191f16b5d1d9b054480aa4b97"
+ integrity sha512-ex2MzJG/SjPk2PQZCuhxZXoZbqGY/orxEgajgL3fXiYoBaKmjLrI2SiR5z5+fDFgL+aEzgqVl+ZAQK3Fgshf4Q==
+ dependencies:
+ classnames "^2.2.3"
+ eventemitter3 "^3.1.0"
+
+react-redux@^8.0.2:
+ version "8.0.2"
+ resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-8.0.2.tgz#bc2a304bb21e79c6808e3e47c50fe1caf62f7aad"
+ integrity sha512-nBwiscMw3NoP59NFCXFf02f8xdo+vSHT/uZ1ldDwF7XaTpzm+Phk97VT4urYBl5TYAPNVaFm12UHAEyzkpNzRA==
+ dependencies:
+ "@babel/runtime" "^7.12.1"
+ "@types/hoist-non-react-statics" "^3.3.1"
+ "@types/use-sync-external-store" "^0.0.3"
+ hoist-non-react-statics "^3.3.2"
+ react-is "^18.0.0"
+ use-sync-external-store "^1.0.0"
+
react-refresh@^0.11.0:
version "0.11.0"
resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.11.0.tgz#77198b944733f0f1f1a90e791de4541f9f074046"
@@ -7468,6 +11872,31 @@ react-scripts@5.0.0:
optionalDependencies:
fsevents "^2.3.2"
+react-select@^5.3.2:
+ version "5.3.2"
+ resolved "https://registry.yarnpkg.com/react-select/-/react-select-5.3.2.tgz#ecee0d5c59ed4acb7f567f7de3c75a488d93dacb"
+ integrity sha512-W6Irh7U6Ha7p5uQQ2ZnemoCQ8mcfgOtHfw3wuMzG6FAu0P+CYicgofSLOq97BhjMx8jS+h+wwWdCBeVVZ9VqlQ==
+ dependencies:
+ "@babel/runtime" "^7.12.0"
+ "@emotion/cache" "^11.4.0"
+ "@emotion/react" "^11.8.1"
+ "@types/react-transition-group" "^4.4.0"
+ memoize-one "^5.0.0"
+ prop-types "^15.6.0"
+ react-transition-group "^4.3.0"
+
+react-spinners@^0.13.1:
+ version "0.13.1"
+ resolved "https://registry.yarnpkg.com/react-spinners/-/react-spinners-0.13.1.tgz#c485ff9020d6840c0d6d3639d74e4fb4348bbc1e"
+ integrity sha512-iWeSx0kwJoHu5bgEdGcG5q8NYklX2jraJ+WacoidH9GUx5XeFqBXCbG6W37ciy0VahioDS9N6KK9DUoZ6m6Zlg==
+
+react-swipeable@^5.5.1:
+ version "5.5.1"
+ resolved "https://registry.yarnpkg.com/react-swipeable/-/react-swipeable-5.5.1.tgz#48ae6182deaf62f21d4b87469b60281dbd7c4a76"
+ integrity sha512-EQObuU3Qg3JdX3WxOn5reZvOSCpU4fwpUAs+NlXSN3y+qtsO2r8VGkVnOQzmByt3BSYj9EWYdUOUfi7vaMdZZw==
+ dependencies:
+ prop-types "^15.6.2"
+
react-toastify@^8.2.0:
version "8.2.0"
resolved "https://registry.yarnpkg.com/react-toastify/-/react-toastify-8.2.0.tgz#ef7d56bdfdc6272ca6b228368ab564721c3a3244"
@@ -7475,6 +11904,24 @@ react-toastify@^8.2.0:
dependencies:
clsx "^1.1.1"
+react-tooltip@^4.2.21:
+ version "4.2.21"
+ resolved "https://registry.yarnpkg.com/react-tooltip/-/react-tooltip-4.2.21.tgz#840123ed86cf33d50ddde8ec8813b2960bfded7f"
+ integrity sha512-zSLprMymBDowknr0KVDiJ05IjZn9mQhhg4PRsqln0OZtURAJ1snt1xi5daZfagsh6vfsziZrc9pErPTDY1ACig==
+ dependencies:
+ prop-types "^15.7.2"
+ uuid "^7.0.3"
+
+react-transition-group@^4.3.0:
+ version "4.4.2"
+ resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.2.tgz#8b59a56f09ced7b55cbd53c36768b922890d5470"
+ integrity sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg==
+ dependencies:
+ "@babel/runtime" "^7.5.5"
+ dom-helpers "^5.0.1"
+ loose-envify "^1.4.0"
+ prop-types "^15.6.2"
+
react@^17.0.2:
version "17.0.2"
resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037"
@@ -7490,7 +11937,52 @@ read-cache@^1.0.0:
dependencies:
pify "^2.3.0"
-readable-stream@^2.0.1:
+read-pkg-up@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978"
+ integrity sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==
+ dependencies:
+ find-up "^3.0.0"
+ read-pkg "^3.0.0"
+
+read-pkg-up@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507"
+ integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==
+ dependencies:
+ find-up "^4.1.0"
+ read-pkg "^5.2.0"
+ type-fest "^0.8.1"
+
+read-pkg@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389"
+ integrity sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==
+ dependencies:
+ load-json-file "^4.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^3.0.0"
+
+read-pkg@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-4.0.1.tgz#963625378f3e1c4d48c85872b5a6ec7d5d093237"
+ integrity sha512-+UBirHHDm5J+3WDmLBZYSklRYg82nMlz+enn+GMZ22nSR2f4bzxmhso6rzQW/3mT2PVzpzDTiYIZahk8UmZ44w==
+ dependencies:
+ normalize-package-data "^2.3.2"
+ parse-json "^4.0.0"
+ pify "^3.0.0"
+
+read-pkg@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc"
+ integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==
+ dependencies:
+ "@types/normalize-package-data" "^2.4.0"
+ normalize-package-data "^2.5.0"
+ parse-json "^5.0.0"
+ type-fest "^0.6.0"
+
+"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6:
version "2.3.7"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
@@ -7503,7 +11995,7 @@ readable-stream@^2.0.1:
string_decoder "~1.1.1"
util-deprecate "~1.0.1"
-readable-stream@^3.0.6:
+readable-stream@^3.0.6, readable-stream@^3.6.0:
version "3.6.0"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
@@ -7512,6 +12004,15 @@ readable-stream@^3.0.6:
string_decoder "^1.1.1"
util-deprecate "^1.0.1"
+readdirp@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525"
+ integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==
+ dependencies:
+ graceful-fs "^4.1.11"
+ micromatch "^3.1.10"
+ readable-stream "^2.0.2"
+
readdirp@~3.6.0:
version "3.6.0"
resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
@@ -7519,6 +12020,18 @@ readdirp@~3.6.0:
dependencies:
picomatch "^2.2.1"
+realpath-native@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.1.0.tgz#2003294fea23fb0672f2476ebe22fcf498a2d65c"
+ integrity sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==
+ dependencies:
+ util.promisify "^1.0.0"
+
+realpath-native@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-2.0.0.tgz#7377ac429b6e1fd599dc38d08ed942d0d7beb866"
+ integrity sha512-v1SEYUOXXdbBZK8ZuNgO4TBjamPsiSgcFr0aP+tEKpQZK8vooEUqV6nm6Cv502mX4NF2EfsnVqtNAHG+/6Ur1Q==
+
recursive-readdir@^2.2.2:
version "2.2.2"
resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f"
@@ -7534,6 +12047,30 @@ redent@^3.0.0:
indent-string "^4.0.0"
strip-indent "^3.0.0"
+redux-logger@^3.0.6:
+ version "3.0.6"
+ resolved "https://registry.yarnpkg.com/redux-logger/-/redux-logger-3.0.6.tgz#f7555966f3098f3c88604c449cf0baf5778274bf"
+ integrity sha512-JoCIok7bg/XpqA1JqCqXFypuqBbQzGQySrhFzewB7ThcnysTO30l4VCst86AuB9T9tuT03MAA56Jw2PNhRSNCg==
+ dependencies:
+ deep-diff "^0.3.5"
+
+redux-promise-middleware@^6.1.2:
+ version "6.1.2"
+ resolved "https://registry.yarnpkg.com/redux-promise-middleware/-/redux-promise-middleware-6.1.2.tgz#1c14222686934be243cbb292e348ef7d5b20d6d2"
+ integrity sha512-ZqZu/nnSzGgwTtNbGoGVontpk7LjTOv0kigtt3CcgXI9gpq+8WlfXTXRZD0WTD5yaohRq0q2nYmJXSTjwXs83Q==
+
+redux-thunk@^2.4.1:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.4.1.tgz#0dd8042cf47868f4b29699941de03c9301a75714"
+ integrity sha512-OOYGNY5Jy2TWvTL1KgAlVy6dcx3siPJ1wTq741EPyUKfn6W6nChdICjZwCd0p8AZBs5kWpZlbkXW2nE/zjUa+Q==
+
+"redux@^3.6.0 || ^4.0.0", redux@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/redux/-/redux-4.2.0.tgz#46f10d6e29b6666df758780437651eeb2b969f13"
+ integrity sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA==
+ dependencies:
+ "@babel/runtime" "^7.9.2"
+
regenerate-unicode-properties@^10.0.1:
version "10.0.1"
resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz#7f442732aa7934a3740c779bb9b3340dccc1fb56"
@@ -7546,6 +12083,11 @@ regenerate@^1.4.2:
resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a"
integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==
+regenerator-runtime@^0.11.0:
+ version "0.11.1"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
+ integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==
+
regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.9:
version "0.13.9"
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52"
@@ -7558,12 +12100,20 @@ regenerator-transform@^0.15.0:
dependencies:
"@babel/runtime" "^7.8.4"
+regex-not@^1.0.0, regex-not@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
+ integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==
+ dependencies:
+ extend-shallow "^3.0.2"
+ safe-regex "^1.1.0"
+
regex-parser@^2.2.11:
version "2.2.11"
resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.11.tgz#3b37ec9049e19479806e878cabe7c1ca83ccfe58"
integrity sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==
-regexp.prototype.flags@^1.4.1, regexp.prototype.flags@^1.4.3:
+regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.4.1, regexp.prototype.flags@^1.4.3:
version "1.4.3"
resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac"
integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==
@@ -7572,6 +12122,11 @@ regexp.prototype.flags@^1.4.1, regexp.prototype.flags@^1.4.3:
define-properties "^1.1.3"
functions-have-names "^1.2.2"
+regexpp@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f"
+ integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==
+
regexpp@^3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2"
@@ -7606,6 +12161,22 @@ relateurl@^0.2.7:
resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9"
integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==
+remove-trailing-separator@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
+ integrity sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==
+
+renderkid@^2.0.4:
+ version "2.0.7"
+ resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.7.tgz#464f276a6bdcee606f4a15993f9b29fc74ca8609"
+ integrity sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==
+ dependencies:
+ css-select "^4.1.3"
+ dom-converter "^0.2.0"
+ htmlparser2 "^6.1.0"
+ lodash "^4.17.21"
+ strip-ansi "^3.0.1"
+
renderkid@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a"
@@ -7617,6 +12188,58 @@ renderkid@^3.0.0:
lodash "^4.17.21"
strip-ansi "^6.0.1"
+repeat-element@^1.1.2:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9"
+ integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==
+
+repeat-string@^1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+ integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==
+
+request-promise-core@1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f"
+ integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==
+ dependencies:
+ lodash "^4.17.19"
+
+request-promise-native@^1.0.7:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28"
+ integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==
+ dependencies:
+ request-promise-core "1.1.4"
+ stealthy-require "^1.1.1"
+ tough-cookie "^2.3.3"
+
+request@^2.88.0:
+ version "2.88.2"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3"
+ integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==
+ dependencies:
+ aws-sign2 "~0.7.0"
+ aws4 "^1.8.0"
+ caseless "~0.12.0"
+ combined-stream "~1.0.6"
+ extend "~3.0.2"
+ forever-agent "~0.6.1"
+ form-data "~2.3.2"
+ har-validator "~5.1.3"
+ http-signature "~1.2.0"
+ is-typedarray "~1.0.0"
+ isstream "~0.1.2"
+ json-stringify-safe "~5.0.1"
+ mime-types "~2.1.19"
+ oauth-sign "~0.9.0"
+ performance-now "^2.1.0"
+ qs "~6.5.2"
+ safe-buffer "^5.1.2"
+ tough-cookie "~2.5.0"
+ tunnel-agent "^0.6.0"
+ uuid "^3.3.2"
+
require-directory@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
@@ -7627,11 +12250,33 @@ require-from-string@^2.0.2:
resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
+require-main-filename@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
+ integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
+
requires-port@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==
+reselect@^4.0.0:
+ version "4.1.6"
+ resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.6.tgz#19ca2d3d0b35373a74dc1c98692cdaffb6602656"
+ integrity sha512-ZovIuXqto7elwnxyXbBtCPo9YFEr3uJqj2rRbcOOog1bmu2Ag85M4hixSwFWyaBMKXNgvPaJ9OSu9SkBPIeJHQ==
+
+resize-observer-polyfill@1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.0.tgz#660ff1d9712a2382baa2cad450a4716209f9ca69"
+ integrity sha512-M2AelyJDVR/oLnToJLtuDJRBBWUGUvvGigj1411hXhAdyFWqMaqHp7TixW3FpiLuVaikIcR1QL+zqoJoZlOgpg==
+
+resolve-cwd@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a"
+ integrity sha512-ccu8zQTrzVr954472aUVPLEcB3YpKSYR3cg/3lo1okzobPBM+1INXBbBZlDbnI/hbEocnf8j0QVo43hQKrbchg==
+ dependencies:
+ resolve-from "^3.0.0"
+
resolve-cwd@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d"
@@ -7639,6 +12284,19 @@ resolve-cwd@^3.0.0:
dependencies:
resolve-from "^5.0.0"
+resolve-dir@^1.0.0, resolve-dir@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43"
+ integrity sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==
+ dependencies:
+ expand-tilde "^2.0.0"
+ global-modules "^1.0.0"
+
+resolve-from@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
+ integrity sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==
+
resolve-from@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
@@ -7649,6 +12307,22 @@ resolve-from@^5.0.0:
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
+resolve-url-loader@^3.1.2:
+ version "3.1.4"
+ resolved "https://registry.yarnpkg.com/resolve-url-loader/-/resolve-url-loader-3.1.4.tgz#3c16caebe0b9faea9c7cc252fa49d2353c412320"
+ integrity sha512-D3sQ04o0eeQEySLrcz4DsX3saHfsr8/N6tfhblxgZKXxMT2Louargg12oGNfoTRLV09GXhVUe5/qgA5vdgNigg==
+ dependencies:
+ adjust-sourcemap-loader "3.0.0"
+ camelcase "5.3.1"
+ compose-function "3.0.3"
+ convert-source-map "1.7.0"
+ es6-iterator "2.0.3"
+ loader-utils "1.2.3"
+ postcss "7.0.36"
+ rework "1.0.1"
+ rework-visit "1.0.0"
+ source-map "0.6.1"
+
resolve-url-loader@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz#d50d4ddc746bb10468443167acf800dcd6c3ad57"
@@ -7660,12 +12334,22 @@ resolve-url-loader@^4.0.0:
postcss "^7.0.35"
source-map "0.6.1"
+resolve-url@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
+ integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==
+
resolve.exports@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.0.tgz#5ce842b94b05146c0e03076985d1d0e7e48c90c9"
integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==
-resolve@^1.1.7, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.0:
+resolve@1.1.7:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
+ integrity sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==
+
+resolve@^1.1.7, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.0:
version "1.22.1"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177"
integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==
@@ -7683,6 +12367,24 @@ resolve@^2.0.0-next.3:
path-parse "^1.0.7"
supports-preserve-symlinks-flag "^1.0.0"
+restore-cursor@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
+ integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==
+ dependencies:
+ onetime "^5.1.0"
+ signal-exit "^3.0.2"
+
+ret@~0.1.10:
+ version "0.1.15"
+ resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
+ integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
+
+retry@^0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b"
+ integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==
+
retry@^0.13.1:
version "0.13.1"
resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658"
@@ -7693,6 +12395,33 @@ reusify@^1.0.4:
resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
+rework-visit@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/rework-visit/-/rework-visit-1.0.0.tgz#9945b2803f219e2f7aca00adb8bc9f640f842c9a"
+ integrity sha512-W6V2fix7nCLUYX1v6eGPrBOZlc03/faqzP4sUxMAJMBMOPYhfV/RyLegTufn5gJKaOITyi+gvf0LXDZ9NzkHnQ==
+
+rework@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/rework/-/rework-1.0.1.tgz#30806a841342b54510aa4110850cd48534144aa7"
+ integrity sha512-eEjL8FdkdsxApd0yWVZgBGzfCQiT8yqSc2H1p4jpZpQdtz7ohETiDMoje5PlM8I9WgkqkreVxFUKYOiJdVWDXw==
+ dependencies:
+ convert-source-map "^0.3.3"
+ css "^2.0.0"
+
+rimraf@2.6.3:
+ version "2.6.3"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
+ integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
+ dependencies:
+ glob "^7.1.3"
+
+rimraf@^2.5.4, rimraf@^2.6.3:
+ version "2.7.1"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
+ integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
+ dependencies:
+ glob "^7.1.3"
+
rimraf@^3.0.0, rimraf@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
@@ -7700,6 +12429,14 @@ rimraf@^3.0.0, rimraf@^3.0.2:
dependencies:
glob "^7.1.3"
+ripemd160@^2.0.0, ripemd160@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"
+ integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==
+ dependencies:
+ hash-base "^3.0.0"
+ inherits "^2.0.1"
+
rollup-plugin-terser@^7.0.0:
version "7.0.2"
resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d"
@@ -7717,6 +12454,16 @@ rollup@^2.43.1:
optionalDependencies:
fsevents "~2.3.2"
+rsvp@^4.8.4:
+ version "4.8.5"
+ resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734"
+ integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==
+
+run-async@^2.4.0:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455"
+ integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==
+
run-parallel@^1.1.9:
version "1.2.0"
resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
@@ -7724,26 +12471,73 @@ run-parallel@^1.1.9:
dependencies:
queue-microtask "^1.2.2"
+run-queue@^1.0.0, run-queue@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47"
+ integrity sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==
+ dependencies:
+ aproba "^1.1.1"
+
+rxjs@^6.5.2, rxjs@^6.6.0:
+ version "6.6.7"
+ resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9"
+ integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==
+ dependencies:
+ tslib "^1.9.0"
+
safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
version "5.1.2"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
-safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0:
+safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0:
version "5.2.1"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
-"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0":
+safe-regex@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
+ integrity sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==
+ dependencies:
+ ret "~0.1.10"
+
+"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
version "2.1.2"
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+sane@^4.0.3:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded"
+ integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==
+ dependencies:
+ "@cnakazawa/watch" "^1.0.3"
+ anymatch "^2.0.0"
+ capture-exit "^2.0.0"
+ exec-sh "^0.3.2"
+ execa "^1.0.0"
+ fb-watchman "^2.0.0"
+ micromatch "^3.1.4"
+ minimist "^1.1.1"
+ walker "~1.0.5"
+
sanitize.css@*:
version "13.0.0"
resolved "https://registry.yarnpkg.com/sanitize.css/-/sanitize.css-13.0.0.tgz#2675553974b27964c75562ade3bd85d79879f173"
integrity sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==
+sass-loader@^10.0.5:
+ version "10.2.1"
+ resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.2.1.tgz#17e51df313f1a7a203889ce8ff91be362651276e"
+ integrity sha512-RRvWl+3K2LSMezIsd008ErK4rk6CulIMSwrcc2aZvjymUgKo/vjXGp1rSWmfTUX7bblEOz8tst4wBwWtCGBqKA==
+ dependencies:
+ klona "^2.0.4"
+ loader-utils "^2.0.0"
+ neo-async "^2.6.2"
+ schema-utils "^3.0.0"
+ semver "^7.3.2"
+
sass-loader@^12.3.0:
version "12.6.0"
resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-12.6.0.tgz#5148362c8e2cdd4b950f3c63ac5d16dbfed37bcb"
@@ -7761,11 +12555,18 @@ sass@^1.49.8:
immutable "^4.0.0"
source-map-js ">=0.6.2 <2.0.0"
-sax@~1.2.4:
+sax@~1.2.1, sax@~1.2.4:
version "1.2.4"
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
+saxes@^3.1.9:
+ version "3.1.11"
+ resolved "https://registry.yarnpkg.com/saxes/-/saxes-3.1.11.tgz#d59d1fd332ec92ad98a2e0b2ee644702384b1c5b"
+ integrity sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==
+ dependencies:
+ xmlchars "^2.1.1"
+
saxes@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d"
@@ -7790,7 +12591,16 @@ schema-utils@2.7.0:
ajv "^6.12.2"
ajv-keywords "^3.4.1"
-schema-utils@^2.6.5:
+schema-utils@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770"
+ integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==
+ dependencies:
+ ajv "^6.1.0"
+ ajv-errors "^1.0.0"
+ ajv-keywords "^3.1.0"
+
+schema-utils@^2.6.5, schema-utils@^2.7.0:
version "2.7.1"
resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7"
integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==
@@ -7823,6 +12633,13 @@ select-hose@^2.0.0:
resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"
integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==
+selfsigned@^1.10.8:
+ version "1.10.14"
+ resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.14.tgz#ee51d84d9dcecc61e07e4aba34f229ab525c1574"
+ integrity sha512-lkjaiAye+wBZDCBsu5BGi0XiLRxeUlsGod5ZP924CRSEoGuZAw/f7y9RKu28rwTfiHVhdavhB0qH0INV6P1lEA==
+ dependencies:
+ node-forge "^0.10.0"
+
selfsigned@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.0.1.tgz#8b2df7fa56bf014d19b6007655fff209c0ef0a56"
@@ -7830,6 +12647,11 @@ selfsigned@^2.0.1:
dependencies:
node-forge "^1"
+"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0:
+ version "5.7.1"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
+ integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
+
semver@7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e"
@@ -7840,7 +12662,7 @@ semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0:
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
-semver@^7.3.2, semver@^7.3.5, semver@^7.3.7:
+semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7:
version "7.3.7"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f"
integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==
@@ -7903,6 +12725,26 @@ serve-static@1.15.0:
parseurl "~1.3.3"
send "0.18.0"
+set-blocking@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+ integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==
+
+set-value@^2.0.0, set-value@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b"
+ integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-extendable "^0.1.1"
+ is-plain-object "^2.0.3"
+ split-string "^3.0.1"
+
+setimmediate@^1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
+ integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==
+
setprototypeof@1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656"
@@ -7913,6 +12755,26 @@ setprototypeof@1.2.0:
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424"
integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==
+sha.js@^2.4.0, sha.js@^2.4.8:
+ version "2.4.11"
+ resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7"
+ integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+shallowequal@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8"
+ integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==
+
+shebang-command@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
+ integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==
+ dependencies:
+ shebang-regex "^1.0.0"
+
shebang-command@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
@@ -7920,6 +12782,11 @@ shebang-command@^2.0.0:
dependencies:
shebang-regex "^3.0.0"
+shebang-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
+ integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==
+
shebang-regex@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
@@ -7930,6 +12797,11 @@ shell-quote@^1.7.3:
resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123"
integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==
+shellwords@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b"
+ integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==
+
side-channel@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
@@ -7939,16 +12811,26 @@ side-channel@^1.0.4:
get-intrinsic "^1.0.2"
object-inspect "^1.9.0"
-signal-exit@^3.0.2, signal-exit@^3.0.3:
+signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3:
version "3.0.7"
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
+single-spa-react@^2.14.0:
+ version "2.14.0"
+ resolved "https://registry.yarnpkg.com/single-spa-react/-/single-spa-react-2.14.0.tgz#4a55ea74a57db06adb41f0de3419a0c378745e1b"
+ integrity sha512-KQ2/y7/JBIquK0WUiwb1/Y7f4qTZITNotw+JwNPesj0WKeCi91u0LOZe2ps56QMJbyB4UrA5IzMBwbYWDr1pIw==
+
sisteransi@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed"
integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==
+slash@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44"
+ integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==
+
slash@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
@@ -7959,7 +12841,57 @@ slash@^4.0.0:
resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7"
integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==
-sockjs@^0.3.24:
+slice-ansi@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636"
+ integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==
+ dependencies:
+ ansi-styles "^3.2.0"
+ astral-regex "^1.0.0"
+ is-fullwidth-code-point "^2.0.0"
+
+snapdragon-node@^2.0.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
+ integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==
+ dependencies:
+ define-property "^1.0.0"
+ isobject "^3.0.0"
+ snapdragon-util "^3.0.1"
+
+snapdragon-util@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
+ integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==
+ dependencies:
+ kind-of "^3.2.0"
+
+snapdragon@^0.8.1:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"
+ integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==
+ dependencies:
+ base "^0.11.1"
+ debug "^2.2.0"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ map-cache "^0.2.2"
+ source-map "^0.5.6"
+ source-map-resolve "^0.5.0"
+ use "^3.1.0"
+
+sockjs-client@^1.5.0:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.6.1.tgz#350b8eda42d6d52ddc030c39943364c11dcad806"
+ integrity sha512-2g0tjOR+fRs0amxENLi/q5TiJTqY+WXFOzb5UwXndlK6TO3U/mirZznpx6w34HVMoc3g7cY24yC/ZMIYnDlfkw==
+ dependencies:
+ debug "^3.2.7"
+ eventsource "^2.0.2"
+ faye-websocket "^0.11.4"
+ inherits "^2.0.4"
+ url-parse "^1.5.10"
+
+sockjs@^0.3.21, sockjs@^0.3.24:
version "0.3.24"
resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce"
integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==
@@ -7987,6 +12919,17 @@ source-map-loader@^3.0.0:
iconv-lite "^0.6.3"
source-map-js "^1.0.1"
+source-map-resolve@^0.5.0, source-map-resolve@^0.5.2:
+ version "0.5.3"
+ resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a"
+ integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==
+ dependencies:
+ atob "^2.1.2"
+ decode-uri-component "^0.2.0"
+ resolve-url "^0.2.1"
+ source-map-url "^0.4.0"
+ urix "^0.1.0"
+
source-map-resolve@^0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.6.0.tgz#3d9df87e236b53f16d01e58150fc7711138e5ed2"
@@ -7995,7 +12938,7 @@ source-map-resolve@^0.6.0:
atob "^2.1.2"
decode-uri-component "^0.2.0"
-source-map-support@^0.5.6, source-map-support@~0.5.20:
+source-map-support@^0.5.6, source-map-support@~0.5.12, source-map-support@~0.5.20:
version "0.5.21"
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
@@ -8003,11 +12946,21 @@ source-map-support@^0.5.6, source-map-support@~0.5.20:
buffer-from "^1.0.0"
source-map "^0.6.0"
+source-map-url@^0.4.0:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56"
+ integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==
+
source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7:
+ version "0.5.7"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
+ integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==
+
source-map@^0.7.3:
version "0.7.4"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656"
@@ -8025,6 +12978,37 @@ sourcemap-codec@^1.4.8:
resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4"
integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==
+spawn-command@^0.0.2-1:
+ version "0.0.2-1"
+ resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2-1.tgz#62f5e9466981c1b796dc5929937e11c9c6921bd0"
+ integrity sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==
+
+spdx-correct@^3.0.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9"
+ integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==
+ dependencies:
+ spdx-expression-parse "^3.0.0"
+ spdx-license-ids "^3.0.0"
+
+spdx-exceptions@^2.1.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d"
+ integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==
+
+spdx-expression-parse@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679"
+ integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==
+ dependencies:
+ spdx-exceptions "^2.1.0"
+ spdx-license-ids "^3.0.0"
+
+spdx-license-ids@^3.0.0:
+ version "3.0.11"
+ resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz#50c0d8c40a14ec1bf449bae69a0ea4685a9d9f95"
+ integrity sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==
+
spdy-transport@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31"
@@ -8048,16 +13032,52 @@ spdy@^4.0.2:
select-hose "^2.0.0"
spdy-transport "^3.0.0"
+split-string@^3.0.1, split-string@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
+ integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==
+ dependencies:
+ extend-shallow "^3.0.0"
+
sprintf-js@~1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==
+sshpk@^1.7.0:
+ version "1.17.0"
+ resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5"
+ integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==
+ dependencies:
+ asn1 "~0.2.3"
+ assert-plus "^1.0.0"
+ bcrypt-pbkdf "^1.0.0"
+ dashdash "^1.12.0"
+ ecc-jsbn "~0.1.1"
+ getpass "^0.1.1"
+ jsbn "~0.1.0"
+ safer-buffer "^2.0.2"
+ tweetnacl "~0.14.0"
+
+ssri@^6.0.1:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5"
+ integrity sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==
+ dependencies:
+ figgy-pudding "^3.5.1"
+
stable@^0.1.8:
version "0.1.8"
resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf"
integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==
+stack-utils@^1.0.1:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.5.tgz#a19b0b01947e0029c8e451d5d61a498f5bb1471b"
+ integrity sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ==
+ dependencies:
+ escape-string-regexp "^2.0.0"
+
stack-utils@^2.0.3:
version "2.0.5"
resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.5.tgz#d25265fca995154659dbbfba3b49254778d2fdd5"
@@ -8070,6 +13090,19 @@ stackframe@^1.3.4:
resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310"
integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==
+standalone-single-spa-webpack-plugin@^1.0.1:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/standalone-single-spa-webpack-plugin/-/standalone-single-spa-webpack-plugin-1.2.2.tgz#cae12845d6021351dbe40a2c25fe51644ceaaa4d"
+ integrity sha512-4K4ub2LHkEvKN+MGA2SDSySw6Wr+CyFnAeJmtOPvz51uLcv05SYBXGYf5qhe7DPjbflPIXwMRUCYyTqC7EXqtA==
+
+static-extend@^0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
+ integrity sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==
+ dependencies:
+ define-property "^0.2.5"
+ object-copy "^0.1.0"
+
statuses@2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63"
@@ -8080,6 +13113,56 @@ statuses@2.0.1:
resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==
+stealthy-require@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b"
+ integrity sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==
+
+stream-browserify@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b"
+ integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==
+ dependencies:
+ inherits "~2.0.1"
+ readable-stream "^2.0.2"
+
+stream-each@^1.1.0:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae"
+ integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==
+ dependencies:
+ end-of-stream "^1.1.0"
+ stream-shift "^1.0.0"
+
+stream-http@^2.7.2:
+ version "2.8.3"
+ resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc"
+ integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==
+ dependencies:
+ builtin-status-codes "^3.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.3.6"
+ to-arraybuffer "^1.0.0"
+ xtend "^4.0.0"
+
+stream-shift@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d"
+ integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==
+
+string-hash@^1.1.1:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b"
+ integrity sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==
+
+string-length@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/string-length/-/string-length-3.1.0.tgz#107ef8c23456e187a8abd4a61162ff4ac6e25837"
+ integrity sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA==
+ dependencies:
+ astral-regex "^1.0.0"
+ strip-ansi "^5.2.0"
+
string-length@^4.0.1:
version "4.0.2"
resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a"
@@ -8101,6 +13184,15 @@ string-natural-compare@^3.0.1:
resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4"
integrity sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==
+string-width@^3.0.0, string-width@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"
+ integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==
+ dependencies:
+ emoji-regex "^7.0.1"
+ is-fullwidth-code-point "^2.0.0"
+ strip-ansi "^5.1.0"
+
string-width@^4.1.0, string-width@^4.2.0:
version "4.2.3"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
@@ -8142,7 +13234,7 @@ string.prototype.trimstart@^1.0.5:
define-properties "^1.1.4"
es-abstract "^1.19.5"
-string_decoder@^1.1.1:
+string_decoder@^1.0.0, string_decoder@^1.1.1:
version "1.3.0"
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
@@ -8165,6 +13257,20 @@ stringify-object@^3.3.0:
is-obj "^1.0.1"
is-regexp "^1.0.0"
+strip-ansi@^3.0.0, strip-ansi@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
+ integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==
+ dependencies:
+ ansi-regex "^2.0.0"
+
+strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
+ integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
+ dependencies:
+ ansi-regex "^4.1.0"
+
strip-ansi@^6.0.0, strip-ansi@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
@@ -8194,6 +13300,11 @@ strip-comments@^2.0.1:
resolved "https://registry.yarnpkg.com/strip-comments/-/strip-comments-2.0.1.tgz#4ad11c3fbcac177a67a40ac224ca339ca1c1ba9b"
integrity sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==
+strip-eof@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
+ integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==
+
strip-final-newline@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
@@ -8206,16 +13317,48 @@ strip-indent@^3.0.0:
dependencies:
min-indent "^1.0.0"
-strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
+strip-json-comments@^3.0.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
+style-loader@^1.2.1:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.3.0.tgz#828b4a3b3b7e7aa5847ce7bae9e874512114249e"
+ integrity sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q==
+ dependencies:
+ loader-utils "^2.0.0"
+ schema-utils "^2.7.0"
+
+style-loader@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-2.0.0.tgz#9669602fd4690740eaaec137799a03addbbc393c"
+ integrity sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==
+ dependencies:
+ loader-utils "^2.0.0"
+ schema-utils "^3.0.0"
+
style-loader@^3.3.1:
version "3.3.1"
resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.1.tgz#057dfa6b3d4d7c7064462830f9113ed417d38575"
integrity sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==
+styled-components@^5.3.5:
+ version "5.3.5"
+ resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-5.3.5.tgz#a750a398d01f1ca73af16a241dec3da6deae5ec4"
+ integrity sha512-ndETJ9RKaaL6q41B69WudeqLzOpY1A/ET/glXkNZ2T7dPjPqpPCXXQjDFYZWwNnE5co0wX+gTCqx9mfxTmSIPg==
+ dependencies:
+ "@babel/helper-module-imports" "^7.0.0"
+ "@babel/traverse" "^7.4.5"
+ "@emotion/is-prop-valid" "^1.1.0"
+ "@emotion/stylis" "^0.8.4"
+ "@emotion/unitless" "^0.7.4"
+ babel-plugin-styled-components ">= 1.12.0"
+ css-to-react-native "^3.0.0"
+ hoist-non-react-statics "^3.0.0"
+ shallowequal "^1.1.0"
+ supports-color "^5.5.0"
+
stylehacks@^5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.1.0.tgz#a40066490ca0caca04e96c6b02153ddc39913520"
@@ -8224,13 +13367,37 @@ stylehacks@^5.1.0:
browserslist "^4.16.6"
postcss-selector-parser "^6.0.4"
-supports-color@^5.3.0:
+stylis@4.0.13:
+ version "4.0.13"
+ resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.0.13.tgz#f5db332e376d13cc84ecfe5dace9a2a51d954c91"
+ integrity sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag==
+
+supports-color@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
+ integrity sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==
+
+supports-color@^3.2.3:
+ version "3.2.3"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6"
+ integrity sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==
+ dependencies:
+ has-flag "^1.0.0"
+
+supports-color@^5.3.0, supports-color@^5.4.0, supports-color@^5.5.0:
version "5.5.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
dependencies:
has-flag "^3.0.0"
+supports-color@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3"
+ integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==
+ dependencies:
+ has-flag "^3.0.0"
+
supports-color@^7.0.0, supports-color@^7.1.0:
version "7.2.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
@@ -8263,6 +13430,74 @@ svg-parser@^2.0.2:
resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5"
integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==
+svg.draggable.js@^2.2.2:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/svg.draggable.js/-/svg.draggable.js-2.2.2.tgz#c514a2f1405efb6f0263e7958f5b68fce50603ba"
+ integrity sha512-JzNHBc2fLQMzYCZ90KZHN2ohXL0BQJGQimK1kGk6AvSeibuKcIdDX9Kr0dT9+UJ5O8nYA0RB839Lhvk4CY4MZw==
+ dependencies:
+ svg.js "^2.0.1"
+
+svg.easing.js@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/svg.easing.js/-/svg.easing.js-2.0.0.tgz#8aa9946b0a8e27857a5c40a10eba4091e5691f12"
+ integrity sha512-//ctPdJMGy22YoYGV+3HEfHbm6/69LJUTAqI2/5qBvaNHZ9uUFVC82B0Pl299HzgH13rKrBgi4+XyXXyVWWthA==
+ dependencies:
+ svg.js ">=2.3.x"
+
+svg.filter.js@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/svg.filter.js/-/svg.filter.js-2.0.2.tgz#91008e151389dd9230779fcbe6e2c9a362d1c203"
+ integrity sha512-xkGBwU+dKBzqg5PtilaTb0EYPqPfJ9Q6saVldX+5vCRy31P6TlRCP3U9NxH3HEufkKkpNgdTLBJnmhDHeTqAkw==
+ dependencies:
+ svg.js "^2.2.5"
+
+svg.js@>=2.3.x, svg.js@^2.0.1, svg.js@^2.2.5, svg.js@^2.4.0, svg.js@^2.6.5:
+ version "2.7.1"
+ resolved "https://registry.yarnpkg.com/svg.js/-/svg.js-2.7.1.tgz#eb977ed4737001eab859949b4a398ee1bb79948d"
+ integrity sha512-ycbxpizEQktk3FYvn/8BH+6/EuWXg7ZpQREJvgacqn46gIddG24tNNe4Son6omdXCnSOaApnpZw6MPCBA1dODA==
+
+svg.pathmorphing.js@^0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/svg.pathmorphing.js/-/svg.pathmorphing.js-0.1.3.tgz#c25718a1cc7c36e852ecabc380e758ac09bb2b65"
+ integrity sha512-49HWI9X4XQR/JG1qXkSDV8xViuTLIWm/B/7YuQELV5KMOPtXjiwH4XPJvr/ghEDibmLQ9Oc22dpWpG0vUDDNww==
+ dependencies:
+ svg.js "^2.4.0"
+
+svg.resize.js@^1.4.3:
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/svg.resize.js/-/svg.resize.js-1.4.3.tgz#885abd248e0cd205b36b973c4b578b9a36f23332"
+ integrity sha512-9k5sXJuPKp+mVzXNvxz7U0uC9oVMQrrf7cFsETznzUDDm0x8+77dtZkWdMfRlmbkEEYvUn9btKuZ3n41oNA+uw==
+ dependencies:
+ svg.js "^2.6.5"
+ svg.select.js "^2.1.2"
+
+svg.select.js@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/svg.select.js/-/svg.select.js-2.1.2.tgz#e41ce13b1acff43a7441f9f8be87a2319c87be73"
+ integrity sha512-tH6ABEyJsAOVAhwcCjF8mw4crjXSI1aa7j2VQR8ZuJ37H2MBUbyeqYr5nEO7sSN3cy9AR9DUwNg0t/962HlDbQ==
+ dependencies:
+ svg.js "^2.2.5"
+
+svg.select.js@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/svg.select.js/-/svg.select.js-3.0.1.tgz#a4198e359f3825739226415f82176a90ea5cc917"
+ integrity sha512-h5IS/hKkuVCbKSieR9uQCj9w+zLHoPh+ce19bBYyqF53g6mnPB8sAtIbe1s9dh2S2fCmYX2xel1Ln3PJBbK4kw==
+ dependencies:
+ svg.js "^2.6.5"
+
+svgo@^0.7.2:
+ version "0.7.2"
+ resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5"
+ integrity sha512-jT/g9FFMoe9lu2IT6HtAxTA7RR2XOrmcrmCtGnyB/+GQnV6ZjNn+KOHZbZ35yL81+1F/aB6OeEsJztzBQ2EEwA==
+ dependencies:
+ coa "~1.0.1"
+ colors "~1.1.2"
+ csso "~2.3.1"
+ js-yaml "~3.7.0"
+ mkdirp "~0.5.1"
+ sax "~1.2.1"
+ whet.extend "~0.9.9"
+
svgo@^1.2.2:
version "1.3.2"
resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167"
@@ -8295,11 +13530,26 @@ svgo@^2.7.0:
picocolors "^1.0.0"
stable "^0.1.8"
-symbol-tree@^3.2.4:
+symbol-tree@^3.2.2, symbol-tree@^3.2.4:
version "3.2.4"
resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==
+systemjs-webpack-interop@^2.1.2, systemjs-webpack-interop@^2.3.1:
+ version "2.3.7"
+ resolved "https://registry.yarnpkg.com/systemjs-webpack-interop/-/systemjs-webpack-interop-2.3.7.tgz#b8ed2a81c371bab3160ac4801776ef61cf8c7959"
+ integrity sha512-9wmhkleKWVjcGfHpc1/YvfADnvzpYMdr2/AM2e7FpMczPYEdluwM3AMXxHGzPUNbWfnSaerrmzqP4nDsTDvBxA==
+
+table@^5.2.3:
+ version "5.4.6"
+ resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e"
+ integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==
+ dependencies:
+ ajv "^6.10.2"
+ lodash "^4.17.14"
+ slice-ansi "^2.1.0"
+ string-width "^3.0.0"
+
tailwindcss@^3.0.2:
version "3.1.4"
resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.1.4.tgz#64b09059805505902139fa805d97046080bd90b9"
@@ -8328,7 +13578,7 @@ tailwindcss@^3.0.2:
quick-lru "^5.1.1"
resolve "^1.22.0"
-tapable@^1.0.0:
+tapable@^1.0.0, tapable@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"
integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==
@@ -8367,6 +13617,21 @@ terminal-link@^2.0.0:
ansi-escapes "^4.2.1"
supports-hyperlinks "^2.0.0"
+terser-webpack-plugin@^1.4.3:
+ version "1.4.5"
+ resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b"
+ integrity sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==
+ dependencies:
+ cacache "^12.0.2"
+ find-cache-dir "^2.1.0"
+ is-wsl "^1.1.0"
+ schema-utils "^1.0.0"
+ serialize-javascript "^4.0.0"
+ source-map "^0.6.1"
+ terser "^4.1.2"
+ webpack-sources "^1.4.0"
+ worker-farm "^1.7.0"
+
terser-webpack-plugin@^5.1.3, terser-webpack-plugin@^5.2.5:
version "5.3.3"
resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.3.tgz#8033db876dd5875487213e87c627bca323e5ed90"
@@ -8378,6 +13643,15 @@ terser-webpack-plugin@^5.1.3, terser-webpack-plugin@^5.2.5:
serialize-javascript "^6.0.0"
terser "^5.7.2"
+terser@^4.1.2, terser@^4.6.3:
+ version "4.8.0"
+ resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17"
+ integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==
+ dependencies:
+ commander "^2.20.0"
+ source-map "~0.6.1"
+ source-map-support "~0.5.12"
+
terser@^5.0.0, terser@^5.10.0, terser@^5.7.2:
version "5.14.1"
resolved "https://registry.yarnpkg.com/terser/-/terser-5.14.1.tgz#7c95eec36436cb11cf1902cc79ac564741d19eca"
@@ -8388,6 +13662,16 @@ terser@^5.0.0, terser@^5.10.0, terser@^5.7.2:
commander "^2.20.0"
source-map-support "~0.5.20"
+test-exclude@^5.2.3:
+ version "5.2.3"
+ resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.2.3.tgz#c3d3e1e311eb7ee405e092dac10aefd09091eac0"
+ integrity sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==
+ dependencies:
+ glob "^7.1.3"
+ minimatch "^3.0.4"
+ read-pkg-up "^4.0.0"
+ require-main-filename "^2.0.0"
+
test-exclude@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e"
@@ -8402,26 +13686,78 @@ text-table@^0.2.0:
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==
+throat@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b"
+ integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==
+
throat@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.1.tgz#d514fedad95740c12c2d7fc70ea863eb51ade375"
integrity sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==
+through2@^2.0.0:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
+ integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==
+ dependencies:
+ readable-stream "~2.3.6"
+ xtend "~4.0.1"
+
+through@^2.3.6:
+ version "2.3.8"
+ resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+ integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==
+
thunky@^1.0.2:
version "1.1.0"
resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d"
integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==
+timers-browserify@^2.0.4:
+ version "2.0.12"
+ resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee"
+ integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==
+ dependencies:
+ setimmediate "^1.0.4"
+
+tmp@^0.0.33:
+ version "0.0.33"
+ resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
+ integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
+ dependencies:
+ os-tmpdir "~1.0.2"
+
tmpl@1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc"
integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==
+to-arraybuffer@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
+ integrity sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==
+
to-fast-properties@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==
+to-object-path@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
+ integrity sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==
+ dependencies:
+ kind-of "^3.0.2"
+
+to-regex-range@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
+ integrity sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==
+ dependencies:
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+
to-regex-range@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
@@ -8429,11 +13765,38 @@ to-regex-range@^5.0.1:
dependencies:
is-number "^7.0.0"
+to-regex@^3.0.1, to-regex@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
+ integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==
+ dependencies:
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ regex-not "^1.0.2"
+ safe-regex "^1.1.0"
+
toidentifier@1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
+tough-cookie@^2.3.3, tough-cookie@~2.5.0:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
+ integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==
+ dependencies:
+ psl "^1.1.28"
+ punycode "^2.1.1"
+
+tough-cookie@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2"
+ integrity sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==
+ dependencies:
+ ip-regex "^2.1.0"
+ psl "^1.1.28"
+ punycode "^2.1.1"
+
tough-cookie@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4"
@@ -8457,6 +13820,11 @@ tr46@^2.1.0:
dependencies:
punycode "^2.1.1"
+tree-kill@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc"
+ integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==
+
tryer@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8"
@@ -8472,7 +13840,7 @@ tsconfig-paths@^3.14.1:
minimist "^1.2.6"
strip-bom "^3.0.0"
-tslib@^1.8.1:
+tslib@^1.8.1, tslib@^1.9.0:
version "1.14.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
@@ -8489,6 +13857,23 @@ tsutils@^3.21.0:
dependencies:
tslib "^1.8.1"
+tty-browserify@0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
+ integrity sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==
+
+tunnel-agent@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
+ integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==
+ dependencies:
+ safe-buffer "^5.0.1"
+
+tweetnacl@^0.14.3, tweetnacl@~0.14.0:
+ version "0.14.5"
+ resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+ integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==
+
type-check@^0.4.0, type-check@~0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
@@ -8523,6 +13908,16 @@ type-fest@^0.21.3:
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37"
integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==
+type-fest@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b"
+ integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==
+
+type-fest@^0.8.1:
+ version "0.8.1"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"
+ integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==
+
type-is@~1.6.18:
version "1.6.18"
resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
@@ -8531,6 +13926,16 @@ type-is@~1.6.18:
media-typer "0.3.0"
mime-types "~2.1.24"
+type@^1.0.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0"
+ integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==
+
+type@^2.5.0:
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/type/-/type-2.6.0.tgz#3ca6099af5981d36ca86b78442973694278a219f"
+ integrity sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==
+
typedarray-to-buffer@^3.1.5:
version "3.1.5"
resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"
@@ -8538,6 +13943,11 @@ typedarray-to-buffer@^3.1.5:
dependencies:
is-typedarray "^1.0.0"
+typedarray@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+ integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==
+
typescript@^4.4.2:
version "4.7.4"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235"
@@ -8576,6 +13986,30 @@ unicode-property-aliases-ecmascript@^2.0.0:
resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8"
integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==
+union-value@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847"
+ integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==
+ dependencies:
+ arr-union "^3.1.0"
+ get-value "^2.0.6"
+ is-extendable "^0.1.1"
+ set-value "^2.0.1"
+
+unique-filename@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230"
+ integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==
+ dependencies:
+ unique-slug "^2.0.0"
+
+unique-slug@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c"
+ integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==
+ dependencies:
+ imurmurhash "^0.1.4"
+
unique-string@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d"
@@ -8603,7 +14037,26 @@ unquote@~1.1.1:
resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544"
integrity sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==
-upath@^1.2.0:
+unset-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
+ integrity sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==
+ dependencies:
+ has-value "^0.3.1"
+ isobject "^3.0.0"
+
+unused-files-webpack-plugin@^3.4.0:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/unused-files-webpack-plugin/-/unused-files-webpack-plugin-3.4.0.tgz#adc67a3b5549d028818d3119cbf2b5c88aea8670"
+ integrity sha512-cmukKOBdIqaM1pqThY0+jp+mYgCVyzrD8uRbKEucQwIGZcLIRn+gSRiQ7uLjcDd3Zba9NUxVGyYa7lWM4UCGeg==
+ dependencies:
+ babel-runtime "^7.0.0-beta.3"
+ glob-all "^3.1.0"
+ semver "^5.5.0"
+ util.promisify "^1.0.0"
+ warning "^3.0.0"
+
+upath@^1.1.1, upath@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894"
integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==
@@ -8623,11 +14076,61 @@ uri-js@^4.2.2:
dependencies:
punycode "^2.1.0"
+urix@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
+ integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==
+
+url-parse@^1.5.10:
+ version "1.5.10"
+ resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1"
+ integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==
+ dependencies:
+ querystringify "^2.1.1"
+ requires-port "^1.0.0"
+
+url@^0.11.0:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
+ integrity sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==
+ dependencies:
+ punycode "1.3.2"
+ querystring "0.2.0"
+
+use-sync-external-store@^1.0.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a"
+ integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==
+
+use@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
+ integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
+
util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
+util.promisify@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030"
+ integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==
+ dependencies:
+ define-properties "^1.1.2"
+ object.getownpropertydescriptors "^2.0.3"
+
+util.promisify@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.1.1.tgz#77832f57ced2c9478174149cae9b96e9918cd54b"
+ integrity sha512-/s3UsZUrIfa6xDhr7zZhnE9SLQ5RIXyYfiVnMMyMDzOc8WhWN4Nbh36H842OyurKbCDAesZOJaVyvmSl6fhGQw==
+ dependencies:
+ call-bind "^1.0.0"
+ define-properties "^1.1.3"
+ for-each "^0.3.3"
+ has-symbols "^1.0.1"
+ object.getownpropertydescriptors "^2.1.1"
+
util.promisify@~1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee"
@@ -8638,6 +14141,20 @@ util.promisify@~1.0.0:
has-symbols "^1.0.1"
object.getownpropertydescriptors "^2.1.0"
+util@0.10.3:
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
+ integrity sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==
+ dependencies:
+ inherits "2.0.1"
+
+util@^0.11.0:
+ version "0.11.1"
+ resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61"
+ integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==
+ dependencies:
+ inherits "2.0.3"
+
utila@~0.4:
version "0.4.0"
resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c"
@@ -8648,16 +14165,35 @@ utils-merge@1.0.1:
resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==
+uuid@^3.3.2:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
+ integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
+
+uuid@^7.0.3:
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-7.0.3.tgz#c5c9f2c8cf25dc0a372c4df1441c41f5bd0c680b"
+ integrity sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==
+
uuid@^8.3.2:
version "8.3.2"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
-v8-compile-cache@^2.0.3:
+v8-compile-cache@^2.0.3, v8-compile-cache@^2.1.1:
version "2.3.0"
resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee"
integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==
+v8-to-istanbul@^4.1.3:
+ version "4.1.4"
+ resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-4.1.4.tgz#b97936f21c0e2d9996d4985e5c5156e9d4e49cd6"
+ integrity sha512-Rw6vJHj1mbdK8edjR7+zuJrpDtKIgNdAvTSAcpYfgMIw+u2dPDntD3dgN4XQFLU2/fvFQdzj+EeSGfd/jnY5fQ==
+ dependencies:
+ "@types/istanbul-lib-coverage" "^2.0.1"
+ convert-source-map "^1.6.0"
+ source-map "^0.7.3"
+
v8-to-istanbul@^8.1.0:
version "8.1.1"
resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz#77b752fd3975e31bbcef938f85e9bd1c7a8d60ed"
@@ -8667,18 +14203,49 @@ v8-to-istanbul@^8.1.0:
convert-source-map "^1.6.0"
source-map "^0.7.3"
+validate-npm-package-license@^3.0.1:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
+ integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
+ dependencies:
+ spdx-correct "^3.0.0"
+ spdx-expression-parse "^3.0.0"
+
vary@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==
-w3c-hr-time@^1.0.2:
+verror@1.10.0:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
+ integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==
+ dependencies:
+ assert-plus "^1.0.0"
+ core-util-is "1.0.2"
+ extsprintf "^1.2.0"
+
+vm-browserify@^1.0.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0"
+ integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==
+
+w3c-hr-time@^1.0.1, w3c-hr-time@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd"
integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==
dependencies:
browser-process-hrtime "^1.0.0"
+w3c-xmlserializer@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz#30485ca7d70a6fd052420a3d12fd90e6339ce794"
+ integrity sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==
+ dependencies:
+ domexception "^1.0.1"
+ webidl-conversions "^4.0.2"
+ xml-name-validator "^3.0.0"
+
w3c-xmlserializer@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a"
@@ -8686,13 +14253,45 @@ w3c-xmlserializer@^2.0.0:
dependencies:
xml-name-validator "^3.0.0"
-walker@^1.0.7:
+walker@^1.0.7, walker@~1.0.5:
version "1.0.8"
resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f"
integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==
dependencies:
makeerror "1.0.12"
+warning@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c"
+ integrity sha512-jMBt6pUrKn5I+OGgtQ4YZLdhIeJmObddh6CsibPxyQ5yPZm1XExSyzC1LCNX7BzhxWgiHmizBWJTHJIjMjTQYQ==
+ dependencies:
+ loose-envify "^1.0.0"
+
+warning@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3"
+ integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==
+ dependencies:
+ loose-envify "^1.0.0"
+
+watchpack-chokidar2@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957"
+ integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==
+ dependencies:
+ chokidar "^2.1.8"
+
+watchpack@^1.7.4:
+ version "1.7.5"
+ resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453"
+ integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==
+ dependencies:
+ graceful-fs "^4.1.2"
+ neo-async "^2.5.0"
+ optionalDependencies:
+ chokidar "^3.4.1"
+ watchpack-chokidar2 "^2.0.1"
+
watchpack@^2.3.1:
version "2.4.0"
resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d"
@@ -8728,6 +14327,75 @@ webidl-conversions@^6.1.0:
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514"
integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==
+webpack-bundle-analyzer@^3.6.0:
+ version "3.9.0"
+ resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.9.0.tgz#f6f94db108fb574e415ad313de41a2707d33ef3c"
+ integrity sha512-Ob8amZfCm3rMB1ScjQVlbYYUEJyEjdEtQ92jqiFUYt5VkEeO2v5UMbv49P/gnmCZm3A6yaFQzCBvpZqN4MUsdA==
+ dependencies:
+ acorn "^7.1.1"
+ acorn-walk "^7.1.1"
+ bfj "^6.1.1"
+ chalk "^2.4.1"
+ commander "^2.18.0"
+ ejs "^2.6.1"
+ express "^4.16.3"
+ filesize "^3.6.1"
+ gzip-size "^5.0.0"
+ lodash "^4.17.19"
+ mkdirp "^0.5.1"
+ opener "^1.5.1"
+ ws "^6.0.0"
+
+webpack-cli@^3.3.10:
+ version "3.3.12"
+ resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.12.tgz#94e9ada081453cd0aa609c99e500012fd3ad2d4a"
+ integrity sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag==
+ dependencies:
+ chalk "^2.4.2"
+ cross-spawn "^6.0.5"
+ enhanced-resolve "^4.1.1"
+ findup-sync "^3.0.0"
+ global-modules "^2.0.0"
+ import-local "^2.0.0"
+ interpret "^1.4.0"
+ loader-utils "^1.4.0"
+ supports-color "^6.1.0"
+ v8-compile-cache "^2.1.1"
+ yargs "^13.3.2"
+
+webpack-config-single-spa-react@^1.0.3:
+ version "1.18.3"
+ resolved "https://registry.yarnpkg.com/webpack-config-single-spa-react/-/webpack-config-single-spa-react-1.18.3.tgz#c43c2cfd629a2c0332dc883a3e02efa68e12ed71"
+ integrity sha512-k7tkAmjGegHyJiTSSLzY26aKK9sN4oGO7GSNWZMgFyYiwmRz52/HKabOsAJ7ZzZ8iTnoXU7n4hFieBucs8bNbg==
+ dependencies:
+ webpack-config-single-spa "^1.18.3"
+
+webpack-config-single-spa@^1.18.3:
+ version "1.18.3"
+ resolved "https://registry.yarnpkg.com/webpack-config-single-spa/-/webpack-config-single-spa-1.18.3.tgz#aa01617599ef0e2a5270876fde8e65657c8afd77"
+ integrity sha512-akkqshbAwCw9yqfMh0vZbuGOW9BRR49mBKrxn2X0pU8l7n/qBwOXE3rm4Ici77eoqgPKb7HD9u23+BuI8K/6eQ==
+ dependencies:
+ babel-loader "^8.1.0"
+ clean-webpack-plugin "^3.0.0"
+ css-loader "^3.5.3"
+ html-webpack-plugin "^4.5.0"
+ standalone-single-spa-webpack-plugin "^1.0.1"
+ style-loader "^1.2.1"
+ systemjs-webpack-interop "^2.3.1"
+ unused-files-webpack-plugin "^3.4.0"
+ webpack-bundle-analyzer "^3.6.0"
+
+webpack-dev-middleware@^3.7.2:
+ version "3.7.3"
+ resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz#0639372b143262e2b84ab95d3b91a7597061c2c5"
+ integrity sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==
+ dependencies:
+ memory-fs "^0.4.1"
+ mime "^2.4.4"
+ mkdirp "^0.5.1"
+ range-parser "^1.2.1"
+ webpack-log "^2.0.0"
+
webpack-dev-middleware@^5.3.1:
version "5.3.3"
resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz#efae67c2793908e7311f1d9b06f2a08dcc97e51f"
@@ -8739,6 +14407,45 @@ webpack-dev-middleware@^5.3.1:
range-parser "^1.2.1"
schema-utils "^4.0.0"
+webpack-dev-server@^3.9.0:
+ version "3.11.3"
+ resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.3.tgz#8c86b9d2812bf135d3c9bce6f07b718e30f7c3d3"
+ integrity sha512-3x31rjbEQWKMNzacUZRE6wXvUFuGpH7vr0lIEbYpMAG9BOxi0928QU1BBswOAP3kg3H1O4hiS+sq4YyAn6ANnA==
+ dependencies:
+ ansi-html-community "0.0.8"
+ bonjour "^3.5.0"
+ chokidar "^2.1.8"
+ compression "^1.7.4"
+ connect-history-api-fallback "^1.6.0"
+ debug "^4.1.1"
+ del "^4.1.1"
+ express "^4.17.1"
+ html-entities "^1.3.1"
+ http-proxy-middleware "0.19.1"
+ import-local "^2.0.0"
+ internal-ip "^4.3.0"
+ ip "^1.1.5"
+ is-absolute-url "^3.0.3"
+ killable "^1.0.1"
+ loglevel "^1.6.8"
+ opn "^5.5.0"
+ p-retry "^3.0.1"
+ portfinder "^1.0.26"
+ schema-utils "^1.0.0"
+ selfsigned "^1.10.8"
+ semver "^6.3.0"
+ serve-index "^1.9.1"
+ sockjs "^0.3.21"
+ sockjs-client "^1.5.0"
+ spdy "^4.0.2"
+ strip-ansi "^3.0.1"
+ supports-color "^6.1.0"
+ url "^0.11.0"
+ webpack-dev-middleware "^3.7.2"
+ webpack-log "^2.0.0"
+ ws "^6.2.1"
+ yargs "^13.3.2"
+
webpack-dev-server@^4.6.0:
version "4.9.2"
resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.9.2.tgz#c188db28c7bff12f87deda2a5595679ebbc3c9bc"
@@ -8774,6 +14481,14 @@ webpack-dev-server@^4.6.0:
webpack-dev-middleware "^5.3.1"
ws "^8.4.2"
+webpack-log@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f"
+ integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==
+ dependencies:
+ ansi-colors "^3.0.0"
+ uuid "^3.3.2"
+
webpack-manifest-plugin@^4.0.2:
version "4.1.1"
resolved "https://registry.yarnpkg.com/webpack-manifest-plugin/-/webpack-manifest-plugin-4.1.1.tgz#10f8dbf4714ff93a215d5a45bcc416d80506f94f"
@@ -8782,7 +14497,14 @@ webpack-manifest-plugin@^4.0.2:
tapable "^2.0.0"
webpack-sources "^2.2.0"
-webpack-sources@^1.4.3:
+webpack-merge@^4.2.2:
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.2.2.tgz#a27c52ea783d1398afd2087f547d7b9d2f43634d"
+ integrity sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==
+ dependencies:
+ lodash "^4.17.15"
+
+webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3:
version "1.4.3"
resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933"
integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==
@@ -8803,6 +14525,35 @@ webpack-sources@^3.2.3:
resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde"
integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==
+webpack@^4.41.2:
+ version "4.46.0"
+ resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.46.0.tgz#bf9b4404ea20a073605e0a011d188d77cb6ad542"
+ integrity sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==
+ dependencies:
+ "@webassemblyjs/ast" "1.9.0"
+ "@webassemblyjs/helper-module-context" "1.9.0"
+ "@webassemblyjs/wasm-edit" "1.9.0"
+ "@webassemblyjs/wasm-parser" "1.9.0"
+ acorn "^6.4.1"
+ ajv "^6.10.2"
+ ajv-keywords "^3.4.1"
+ chrome-trace-event "^1.0.2"
+ enhanced-resolve "^4.5.0"
+ eslint-scope "^4.0.3"
+ json-parse-better-errors "^1.0.2"
+ loader-runner "^2.4.0"
+ loader-utils "^1.2.3"
+ memory-fs "^0.4.1"
+ micromatch "^3.1.10"
+ mkdirp "^0.5.3"
+ neo-async "^2.6.1"
+ node-libs-browser "^2.2.1"
+ schema-utils "^1.0.0"
+ tapable "^1.1.3"
+ terser-webpack-plugin "^1.4.3"
+ watchpack "^1.7.4"
+ webpack-sources "^1.4.1"
+
webpack@^5.64.4:
version "5.73.0"
resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.73.0.tgz#bbd17738f8a53ee5760ea2f59dce7f3431d35d38"
@@ -8847,7 +14598,7 @@ websocket-extensions@>=0.1.1:
resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42"
integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==
-whatwg-encoding@^1.0.5:
+whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0"
integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==
@@ -8859,7 +14610,7 @@ whatwg-fetch@^3.6.2:
resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz#dced24f37f2624ed0281725d51d0e2e3fe677f8c"
integrity sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==
-whatwg-mimetype@^2.3.0:
+whatwg-mimetype@^2.2.0, whatwg-mimetype@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf"
integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==
@@ -8882,6 +14633,11 @@ whatwg-url@^8.0.0, whatwg-url@^8.5.0:
tr46 "^2.1.0"
webidl-conversions "^6.1.0"
+whet.extend@~0.9.9:
+ version "0.9.9"
+ resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1"
+ integrity sha512-mmIPAft2vTgEILgPeZFqE/wWh24SEsR/k+N9fJ3Jxrz44iDFy9aemCxdksfURSHYFCLmvs/d/7Iso5XjPpNfrA==
+
which-boxed-primitive@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"
@@ -8893,14 +14649,19 @@ which-boxed-primitive@^1.0.2:
is-string "^1.0.5"
is-symbol "^1.0.3"
-which@^1.3.1:
+which-module@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
+ integrity sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==
+
+which@^1.2.14, which@^1.2.9, which@^1.3.1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
dependencies:
isexe "^2.0.0"
-which@^2.0.1:
+which@^2.0.1, which@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
@@ -9081,6 +14842,31 @@ workbox-window@6.5.3:
"@types/trusted-types" "^2.0.2"
workbox-core "6.5.3"
+worker-farm@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8"
+ integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==
+ dependencies:
+ errno "~0.1.7"
+
+wrap-ansi@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09"
+ integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==
+ dependencies:
+ ansi-styles "^3.2.0"
+ string-width "^3.0.0"
+ strip-ansi "^5.0.0"
+
+wrap-ansi@^6.2.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53"
+ integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==
+ dependencies:
+ ansi-styles "^4.0.0"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
+
wrap-ansi@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
@@ -9095,6 +14881,15 @@ wrappy@1:
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
+write-file-atomic@2.4.1:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.1.tgz#d0b05463c188ae804396fd5ab2a370062af87529"
+ integrity sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==
+ dependencies:
+ graceful-fs "^4.1.11"
+ imurmurhash "^0.1.4"
+ signal-exit "^3.0.2"
+
write-file-atomic@^3.0.0:
version "3.0.3"
resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8"
@@ -9105,7 +14900,21 @@ write-file-atomic@^3.0.0:
signal-exit "^3.0.2"
typedarray-to-buffer "^3.1.5"
-ws@^7.4.6:
+write@1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3"
+ integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==
+ dependencies:
+ mkdirp "^0.5.1"
+
+ws@^6.0.0, ws@^6.2.1:
+ version "6.2.2"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.2.tgz#dd5cdbd57a9979916097652d78f1cc5faea0c32e"
+ integrity sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==
+ dependencies:
+ async-limiter "~1.0.0"
+
+ws@^7.0.0, ws@^7.4.6:
version "7.5.8"
resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.8.tgz#ac2729881ab9e7cbaf8787fe3469a48c5c7f636a"
integrity sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw==
@@ -9120,21 +14929,31 @@ xml-name-validator@^3.0.0:
resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a"
integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==
-xmlchars@^2.2.0:
+xmlchars@^2.1.1, xmlchars@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"
integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==
-xtend@^4.0.2:
+xtend@^4.0.0, xtend@^4.0.2, xtend@~4.0.1:
version "4.0.2"
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
+y18n@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf"
+ integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==
+
y18n@^5.0.5:
version "5.0.8"
resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
+yallist@^3.0.2:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
+ integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
+
yallist@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
@@ -9145,11 +14964,60 @@ yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2:
resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"
integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
+yargs-parser@^13.1.2:
+ version "13.1.2"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38"
+ integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==
+ dependencies:
+ camelcase "^5.0.0"
+ decamelize "^1.2.0"
+
+yargs-parser@^18.1.2:
+ version "18.1.3"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0"
+ integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==
+ dependencies:
+ camelcase "^5.0.0"
+ decamelize "^1.2.0"
+
yargs-parser@^20.2.2:
version "20.2.9"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee"
integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==
+yargs@^13.3.0, yargs@^13.3.2:
+ version "13.3.2"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd"
+ integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==
+ dependencies:
+ cliui "^5.0.0"
+ find-up "^3.0.0"
+ get-caller-file "^2.0.1"
+ require-directory "^2.1.1"
+ require-main-filename "^2.0.0"
+ set-blocking "^2.0.0"
+ string-width "^3.0.0"
+ which-module "^2.0.0"
+ y18n "^4.0.0"
+ yargs-parser "^13.1.2"
+
+yargs@^15.3.1:
+ version "15.4.1"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8"
+ integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==
+ dependencies:
+ cliui "^6.0.0"
+ decamelize "^1.2.0"
+ find-up "^4.1.0"
+ get-caller-file "^2.0.1"
+ require-directory "^2.1.1"
+ require-main-filename "^2.0.0"
+ set-blocking "^2.0.0"
+ string-width "^4.2.0"
+ which-module "^2.0.0"
+ y18n "^4.0.0"
+ yargs-parser "^18.1.2"
+
yargs@^16.2.0:
version "16.2.0"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66"