From b6d7470608089cd531d139b4e73fb3eb3fa8fc04 Mon Sep 17 00:00:00 2001 From: birbwatcher Date: Mon, 29 Aug 2022 16:44:08 +0200 Subject: [PATCH 01/55] init: start book store task --- README.md | 1 - index.html | 13 +++++++++++++ style.css | 0 3 files changed, 13 insertions(+), 1 deletion(-) delete mode 100644 README.md create mode 100644 index.html create mode 100644 style.css diff --git a/README.md b/README.md deleted file mode 100644 index c62ee185..00000000 --- a/README.md +++ /dev/null @@ -1 +0,0 @@ -# Book-Shop \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 00000000..92b11422 --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ + + + + + + + Book Shop + + + + + + \ No newline at end of file diff --git a/style.css b/style.css new file mode 100644 index 00000000..e69de29b From 63e0743271e63cf319fa63a049a19394e00ea1de Mon Sep 17 00:00:00 2001 From: birbwatcher Date: Mon, 29 Aug 2022 17:32:41 +0200 Subject: [PATCH 02/55] feat: webpack installed --- .gitignore | 2 + style.css => dist/style.css | 0 index.html | 2 +- package-lock.json | 6878 +++++++++++++++++++++++++++++++++++ package.json | 30 + webpack.config.js | 24 + 6 files changed, 6935 insertions(+), 1 deletion(-) create mode 100644 .gitignore rename style.css => dist/style.css (100%) create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 webpack.config.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..c593fe9d --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/node_modules +/src \ No newline at end of file diff --git a/style.css b/dist/style.css similarity index 100% rename from style.css rename to dist/style.css diff --git a/index.html b/index.html index 92b11422..750e919e 100644 --- a/index.html +++ b/index.html @@ -5,7 +5,7 @@ Book Shop - + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..37a20fe1 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6878 @@ +{ + "name": "book-shop", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "book-shop", + "version": "1.0.0", + "license": "ISC", + "devDependencies": { + "css-loader": "^6.7.1", + "mini-css-extract-plugin": "^2.6.1", + "node-sass": "^7.0.1", + "sass-loader": "^13.0.2", + "webpack": "^5.74.0", + "webpack-cli": "^4.10.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", + "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "dev": true + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.15", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", + "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@npmcli/fs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "dev": true, + "dependencies": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, + "node_modules/@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "dev": true, + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@types/eslint": { + "version": "8.4.6", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.6.tgz", + "integrity": "sha512-/fqTbjxyFUaYNO7VcW5g+4npmqVACz1bB7RTHYuLj+PRjw9hrCwrUXVQFpChUS0JsyEFvMZ7U/PfmvWgxJhI9g==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "node_modules/@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "18.7.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.13.tgz", + "integrity": "sha512-46yIhxSe5xEaJZXWdIBP7GU4HDTG8/eo0qd9atdiL+lFpA03y8KS+lkTN834TWJj5767GbWv4n/P6efyTFt1Dw==", + "dev": true + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webpack-cli/configtest": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", + "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", + "dev": true, + "peerDependencies": { + "webpack": "4.x.x || 5.x.x", + "webpack-cli": "4.x.x" + } + }, + "node_modules/@webpack-cli/info": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz", + "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==", + "dev": true, + "dependencies": { + "envinfo": "^7.7.3" + }, + "peerDependencies": { + "webpack-cli": "4.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", + "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", + "dev": true, + "peerDependencies": { + "webpack-cli": "4.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agentkeepalive": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", + "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true + }, + "node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "dev": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/async-foreach": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", + "integrity": "sha512-VUeSMD8nEGBWaZK4lizI1sf3yEC7pnAQ/mrI7pC2fBz2s/tq5jWWEngTwaf0Gruu/OoXRGLGg1XFqpYBiGTYJA==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "dev": true + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/browserslist": { + "version": "4.21.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz", + "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001370", + "electron-to-chromium": "^1.4.202", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.5" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "dev": true, + "dependencies": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001384", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001384.tgz", + "integrity": "sha512-BBWt57kqWbc0GYZXb47wTXpmAgqr5LSibPzNjk/AWMdmJMQhLqOl3c/Kd4OAU/tu4NLfYkMx8Tlq3RVBkOBolQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true, + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-loader": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.1.tgz", + "integrity": "sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw==", + "dev": true, + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.7", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.5" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==", + "dev": true, + "dependencies": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dev": true, + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.233", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.233.tgz", + "integrity": "sha512-ejwIKXTg1wqbmkcRJh9Ur3hFGHFDZDw1POzdsVrB2WZjgRuRMHIQQKNpe64N/qh3ZtH2otEoRoS+s6arAAuAAw==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", + "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "dev": true, + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "dev": true, + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "dev": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gaze": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "dev": true, + "dependencies": { + "globule": "^1.0.0" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "node_modules/globule": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.4.tgz", + "integrity": "sha512-OPTIfhMBh7JbBYDpa5b+Q5ptmMWKwcNcFSR/0c6t8V4f3ZAVBEsKNY37QdVqmLRYSMhOUGYrY0QhSoEpzGr/Eg==", + "dev": true, + "dependencies": { + "glob": "~7.1.1", + "lodash": "^4.17.21", + "minimatch": "~3.0.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/globule/node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globule/node_modules/minimatch": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", + "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "dev": true, + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true + }, + "node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dev": true, + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "dev": true + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-core-module": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", + "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/js-base64": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", + "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==", + "dev": true + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true + }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dev": true, + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klona": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", + "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", + "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", + "dev": true, + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize": "^1.2.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.1.tgz", + "integrity": "sha512-wd+SD57/K6DiV7jIR34P+s3uckTRuQvx0tKPcvjFlrEylk6P4mQ2KSWk1hblj1Kxaqok7LogKOieygXqBczNlg==", + "dev": true, + "dependencies": { + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/minipass": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", + "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-fetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "dev": true, + "dependencies": { + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "optionalDependencies": { + "encoding": "^0.1.12" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nan": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", + "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/node-gyp": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", + "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", + "dev": true, + "dependencies": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^9.1.0", + "nopt": "^5.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": ">= 10.12.0" + } + }, + "node_modules/node-gyp/node_modules/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "dev": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-gyp/node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "dev": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-gyp/node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "dev": true, + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "dev": true + }, + "node_modules/node-sass": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-7.0.1.tgz", + "integrity": "sha512-uMy+Xt29NlqKCFdFRZyXKOTqGt+QaKHexv9STj2WeLottnlqZEEWx6Bj0MXNthmFRRdM/YwyNo/8Tr46TOM0jQ==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "async-foreach": "^0.1.3", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "gaze": "^1.0.0", + "get-stdin": "^4.0.1", + "glob": "^7.0.3", + "lodash": "^4.17.15", + "meow": "^9.0.0", + "nan": "^2.13.2", + "node-gyp": "^8.4.1", + "npmlog": "^5.0.0", + "request": "^2.88.0", + "sass-graph": "4.0.0", + "stdout-stream": "^1.4.0", + "true-case-path": "^1.0.2" + }, + "bin": { + "node-sass": "bin/node-sass" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "dev": true, + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/postcss": { + "version": "8.4.16", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz", + "integrity": "sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/read-pkg/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/rechoir": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", + "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", + "dev": true, + "dependencies": { + "resolve": "^1.9.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dev": true, + "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" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sass-graph": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-4.0.0.tgz", + "integrity": "sha512-WSO/MfXqKH7/TS8RdkCX3lVkPFQzCgbqdGsmSKq6tlPU+GpGEsa/5aW18JqItnqh+lPtcjifqdZ/VmiILkKckQ==", + "dev": true, + "dependencies": { + "glob": "^7.0.0", + "lodash": "^4.17.11", + "scss-tokenizer": "^0.3.0", + "yargs": "^17.2.1" + }, + "bin": { + "sassgraph": "bin/sassgraph" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/sass-loader": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.0.2.tgz", + "integrity": "sha512-BbiqbVmbfJaWVeOOAu2o7DhYWtcNmTfvroVgFXa6k2hHheMxNAeDHLNoDy/Q5aoaVlz0LH+MbMktKwm9vN/j8Q==", + "dev": true, + "dependencies": { + "klona": "^2.0.4", + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + } + } + }, + "node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/scss-tokenizer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.3.0.tgz", + "integrity": "sha512-14Zl9GcbBvOT9057ZKjpz5yPOyUWG2ojd9D5io28wHRYsOrs7U95Q+KNL87+32p8rc+LvDpbu/i9ZYjM9Q+FsQ==", + "dev": true, + "dependencies": { + "js-base64": "^2.4.3", + "source-map": "^0.7.1" + } + }, + "node_modules/scss-tokenizer/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz", + "integrity": "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==", + "dev": true, + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", + "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", + "dev": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", + "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", + "dev": true + }, + "node_modules/sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "dev": true, + "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" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/stdout-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", + "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.1" + } + }, + "node_modules/stdout-stream/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/stdout-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/stdout-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/terser": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.0.tgz", + "integrity": "sha512-L1BJiXVmheAQQy+as0oF3Pwtlo4s3Wi1X2zNZ2NxOB4wx9bdS9Vk67XQENLFdLYGCK/Z2di53mTj/hBafR+dTA==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.5.tgz", + "integrity": "sha512-AOEDLDxD2zylUGf/wxHxklEkOe2/r+seuyOWujejFrIxHf11brA1/dWQNIgXa1c6/Wkxgu7zvv0JhOWfc2ELEA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.14", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.14.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/true-case-path": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", + "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", + "dev": true, + "dependencies": { + "glob": "^7.1.2" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true + }, + "node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "dependencies": { + "unique-slug": "^2.0.0" + } + }, + "node_modules/unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz", + "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack": { + "version": "5.74.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz", + "integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-cli": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz", + "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==", + "dev": true, + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.2.0", + "@webpack-cli/info": "^1.5.0", + "@webpack-cli/serve": "^1.7.0", + "colorette": "^2.0.14", + "commander": "^7.0.0", + "cross-spawn": "^7.0.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "4.x.x || 5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "@webpack-cli/migrate": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/webpack-cli/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/webpack-merge": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yargs": { + "version": "17.5.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", + "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + } + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", + "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "dev": true + }, + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true + }, + "@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "dev": true + }, + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.15", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", + "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@npmcli/fs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "dev": true, + "requires": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, + "@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "dev": true, + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + } + }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true + }, + "@types/eslint": { + "version": "8.4.6", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.6.tgz", + "integrity": "sha512-/fqTbjxyFUaYNO7VcW5g+4npmqVACz1bB7RTHYuLj+PRjw9hrCwrUXVQFpChUS0JsyEFvMZ7U/PfmvWgxJhI9g==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "dev": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true + }, + "@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true + }, + "@types/node": { + "version": "18.7.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.13.tgz", + "integrity": "sha512-46yIhxSe5xEaJZXWdIBP7GU4HDTG8/eo0qd9atdiL+lFpA03y8KS+lkTN834TWJj5767GbWv4n/P6efyTFt1Dw==", + "dev": true + }, + "@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dev": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "dev": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dev": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@webpack-cli/configtest": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", + "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", + "dev": true, + "requires": {} + }, + "@webpack-cli/info": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz", + "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==", + "dev": true, + "requires": { + "envinfo": "^7.7.3" + } + }, + "@webpack-cli/serve": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", + "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", + "dev": true, + "requires": {} + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "acorn": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "dev": true + }, + "acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "dev": true, + "requires": {} + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + } + }, + "agentkeepalive": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", + "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + } + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "requires": { + "ajv": "^8.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + } + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "requires": {} + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true + }, + "are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + } + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true + }, + "asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true + }, + "async-foreach": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", + "integrity": "sha512-VUeSMD8nEGBWaZK4lizI1sf3yEC7pnAQ/mrI7pC2fBz2s/tq5jWWEngTwaf0Gruu/OoXRGLGg1XFqpYBiGTYJA==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "dev": true + }, + "aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "browserslist": { + "version": "4.21.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz", + "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001370", + "electron-to-chromium": "^1.4.202", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.5" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "dev": true, + "requires": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + } + }, + "caniuse-lite": { + "version": "1.0.30001384", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001384.tgz", + "integrity": "sha512-BBWt57kqWbc0GYZXb47wTXpmAgqr5LSibPzNjk/AWMdmJMQhLqOl3c/Kd4OAU/tu4NLfYkMx8Tlq3RVBkOBolQ==", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true + }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true + }, + "colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "css-loader": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.1.tgz", + "integrity": "sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw==", + "dev": true, + "requires": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.7", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.5" + } + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true + }, + "decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==", + "dev": true, + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "dev": true + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "electron-to-chromium": { + "version": "1.4.233", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.233.tgz", + "integrity": "sha512-ejwIKXTg1wqbmkcRJh9Ur3hFGHFDZDw1POzdsVrB2WZjgRuRMHIQQKNpe64N/qh3ZtH2otEoRoS+s6arAAuAAw==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "optional": true, + "requires": { + "iconv-lite": "^0.6.2" + } + }, + "enhanced-resolve": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", + "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true + }, + "envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "dev": true + }, + "err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "dev": true, + "requires": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + } + }, + "gaze": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "dev": true, + "requires": { + "globule": "^1.0.0" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "globule": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.4.tgz", + "integrity": "sha512-OPTIfhMBh7JbBYDpa5b+Q5ptmMWKwcNcFSR/0c6t8V4f3ZAVBEsKNY37QdVqmLRYSMhOUGYrY0QhSoEpzGr/Eg==", + "dev": true, + "requires": { + "glob": "~7.1.1", + "lodash": "^4.17.21", + "minimatch": "~3.0.2" + }, + "dependencies": { + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "minimatch": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", + "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "dev": true + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "dev": true, + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true + }, + "hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dev": true, + "requires": { + "ms": "^2.0.0" + } + }, + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, + "icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "requires": {} + }, + "import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "dev": true + }, + "ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "is-core-module": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", + "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true + }, + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } + }, + "js-base64": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", + "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true + }, + "jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "klona": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", + "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", + "dev": true + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "dev": true, + "requires": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + } + }, + "map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "dev": true + }, + "meow": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", + "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", + "dev": true, + "requires": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize": "^1.2.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "requires": { + "mime-db": "1.52.0" + } + }, + "min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true + }, + "mini-css-extract-plugin": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.1.tgz", + "integrity": "sha512-wd+SD57/K6DiV7jIR34P+s3uckTRuQvx0tKPcvjFlrEylk6P4mQ2KSWk1hblj1Kxaqok7LogKOieygXqBczNlg==", + "dev": true, + "requires": { + "schema-utils": "^4.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + } + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + } + }, + "minipass": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", + "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-fetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "dev": true, + "requires": { + "encoding": "^0.1.12", + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + } + }, + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "nan": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", + "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==", + "dev": true + }, + "nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "dev": true + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node-gyp": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", + "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", + "dev": true, + "requires": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^9.1.0", + "nopt": "^5.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "dependencies": { + "are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + } + }, + "gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "dev": true, + "requires": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + } + }, + "npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "dev": true, + "requires": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + } + } + } + }, + "node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "dev": true + }, + "node-sass": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-7.0.1.tgz", + "integrity": "sha512-uMy+Xt29NlqKCFdFRZyXKOTqGt+QaKHexv9STj2WeLottnlqZEEWx6Bj0MXNthmFRRdM/YwyNo/8Tr46TOM0jQ==", + "dev": true, + "requires": { + "async-foreach": "^0.1.3", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "gaze": "^1.0.0", + "get-stdin": "^4.0.1", + "glob": "^7.0.3", + "lodash": "^4.17.15", + "meow": "^9.0.0", + "nan": "^2.13.2", + "node-gyp": "^8.4.1", + "npmlog": "^5.0.0", + "request": "^2.88.0", + "sass-graph": "4.0.0", + "stdout-stream": "^1.4.0", + "true-case-path": "^1.0.2" + } + }, + "nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + } + }, + "npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "dev": true, + "requires": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "postcss": { + "version": "8.4.16", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz", + "integrity": "sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==", + "dev": true, + "requires": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "requires": {} + }, + "postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.4" + } + }, + "postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0" + } + }, + "postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true + }, + "promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "requires": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + } + }, + "psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "dev": true + }, + "quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "rechoir": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", + "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", + "dev": true, + "requires": { + "resolve": "^1.9.0" + } + }, + "redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "requires": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + } + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "dev": true, + "requires": { + "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": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sass-graph": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-4.0.0.tgz", + "integrity": "sha512-WSO/MfXqKH7/TS8RdkCX3lVkPFQzCgbqdGsmSKq6tlPU+GpGEsa/5aW18JqItnqh+lPtcjifqdZ/VmiILkKckQ==", + "dev": true, + "requires": { + "glob": "^7.0.0", + "lodash": "^4.17.11", + "scss-tokenizer": "^0.3.0", + "yargs": "^17.2.1" + } + }, + "sass-loader": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.0.2.tgz", + "integrity": "sha512-BbiqbVmbfJaWVeOOAu2o7DhYWtcNmTfvroVgFXa6k2hHheMxNAeDHLNoDy/Q5aoaVlz0LH+MbMktKwm9vN/j8Q==", + "dev": true, + "requires": { + "klona": "^2.0.4", + "neo-async": "^2.6.2" + } + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "scss-tokenizer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.3.0.tgz", + "integrity": "sha512-14Zl9GcbBvOT9057ZKjpz5yPOyUWG2ojd9D5io28wHRYsOrs7U95Q+KNL87+32p8rc+LvDpbu/i9ZYjM9Q+FsQ==", + "dev": true, + "requires": { + "js-base64": "^2.4.3", + "source-map": "^0.7.1" + }, + "dependencies": { + "source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true + } + } + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true + }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true + }, + "socks": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz", + "integrity": "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==", + "dev": true, + "requires": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + } + }, + "socks-proxy-agent": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", + "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", + "dev": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", + "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", + "dev": true + }, + "sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "dev": true, + "requires": { + "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": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "requires": { + "minipass": "^3.1.1" + } + }, + "stdout-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", + "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", + "dev": true, + "requires": { + "readable-stream": "^2.0.1" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "requires": { + "min-indent": "^1.0.0" + } + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true + }, + "tar": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "dev": true, + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + } + }, + "terser": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.0.tgz", + "integrity": "sha512-L1BJiXVmheAQQy+as0oF3Pwtlo4s3Wi1X2zNZ2NxOB4wx9bdS9Vk67XQENLFdLYGCK/Z2di53mTj/hBafR+dTA==", + "dev": true, + "requires": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + } + }, + "terser-webpack-plugin": { + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.5.tgz", + "integrity": "sha512-AOEDLDxD2zylUGf/wxHxklEkOe2/r+seuyOWujejFrIxHf11brA1/dWQNIgXa1c6/Wkxgu7zvv0JhOWfc2ELEA==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.14", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.14.1" + } + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true + }, + "true-case-path": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", + "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", + "dev": true, + "requires": { + "glob": "^7.1.2" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true + }, + "type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true + }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "update-browserslist-db": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz", + "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "webpack": { + "version": "5.74.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz", + "integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + } + }, + "webpack-cli": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz", + "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==", + "dev": true, + "requires": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.2.0", + "@webpack-cli/info": "^1.5.0", + "@webpack-cli/serve": "^1.7.0", + "colorette": "^2.0.14", + "commander": "^7.0.0", + "cross-spawn": "^7.0.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "webpack-merge": "^5.7.3" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true + } + } + }, + "webpack-merge": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + } + }, + "webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yargs": { + "version": "17.5.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", + "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + }, + "dependencies": { + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true + } + } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 00000000..e9bc53b6 --- /dev/null +++ b/package.json @@ -0,0 +1,30 @@ +{ + "name": "book-shop", + "version": "1.0.0", + "description": "", + "private": true, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "build": "webpack", + "start": "webpack --watch" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/birbwatcher/Book-Shop.git" + }, + "keywords": [], + "author": "", + "license": "ISC", + "bugs": { + "url": "https://github.com/birbwatcher/Book-Shop/issues" + }, + "homepage": "https://github.com/birbwatcher/Book-Shop#readme", + "devDependencies": { + "css-loader": "^6.7.1", + "mini-css-extract-plugin": "^2.6.1", + "node-sass": "^7.0.1", + "sass-loader": "^13.0.2", + "webpack": "^5.74.0", + "webpack-cli": "^4.10.0" + } +} diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 00000000..45244ef1 --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,24 @@ +const path = require('path'); +const miniCss = require('mini-css-extract-plugin'); +module.exports = { + entry: './src/index.js', + output: { + filename: 'bundle.js', + path: path.resolve(__dirname, 'dist') + }, + module: { + rules: [{ + test:/\.(s*)css$/, + use: [ + miniCss.loader, + 'css-loader', + 'sass-loader', + ] + }] + }, + plugins: [ + new miniCss({ + filename: 'style.css', + }), + ] +}; \ No newline at end of file From e7eb4cab8b58542ce78ccd74d4cabd6aef4b7aa8 Mon Sep 17 00:00:00 2001 From: birbwatcher Date: Mon, 29 Aug 2022 17:38:14 +0200 Subject: [PATCH 03/55] feat: normalize added --- dist/bundle.js | 0 dist/normalize.css | 349 +++++++++++++++++++++++++++++++++++++++++++++ dist/style.css | 2 + package-lock.json | 13 ++ package.json | 3 + 5 files changed, 367 insertions(+) create mode 100644 dist/bundle.js create mode 100644 dist/normalize.css diff --git a/dist/bundle.js b/dist/bundle.js new file mode 100644 index 00000000..e69de29b diff --git a/dist/normalize.css b/dist/normalize.css new file mode 100644 index 00000000..c45a85f8 --- /dev/null +++ b/dist/normalize.css @@ -0,0 +1,349 @@ +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ + +/* Document + ========================================================================== */ + +/** + * 1. Correct the line height in all browsers. + * 2. Prevent adjustments of font size after orientation changes in iOS. + */ + + html { + line-height: 1.15; /* 1 */ + -webkit-text-size-adjust: 100%; /* 2 */ + } + + /* Sections + ========================================================================== */ + + /** + * Remove the margin in all browsers. + */ + + body { + margin: 0; + } + + /** + * Render the `main` element consistently in IE. + */ + + main { + display: block; + } + + /** + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. + */ + + h1 { + font-size: 2em; + margin: 0.67em 0; + } + + /* Grouping content + ========================================================================== */ + + /** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ + + hr { + box-sizing: content-box; /* 1 */ + height: 0; /* 1 */ + overflow: visible; /* 2 */ + } + + /** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + + pre { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ + } + + /* Text-level semantics + ========================================================================== */ + + /** + * Remove the gray background on active links in IE 10. + */ + + a { + background-color: transparent; + } + + /** + * 1. Remove the bottom border in Chrome 57- + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ + + abbr[title] { + border-bottom: none; /* 1 */ + text-decoration: underline; /* 2 */ + text-decoration: underline dotted; /* 2 */ + } + + /** + * Add the correct font weight in Chrome, Edge, and Safari. + */ + + b, + strong { + font-weight: bolder; + } + + /** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + + code, + kbd, + samp { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ + } + + /** + * Add the correct font size in all browsers. + */ + + small { + font-size: 80%; + } + + /** + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. + */ + + sub, + sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; + } + + sub { + bottom: -0.25em; + } + + sup { + top: -0.5em; + } + + /* Embedded content + ========================================================================== */ + + /** + * Remove the border on images inside links in IE 10. + */ + + img { + border-style: none; + } + + /* Forms + ========================================================================== */ + + /** + * 1. Change the font styles in all browsers. + * 2. Remove the margin in Firefox and Safari. + */ + + button, + input, + optgroup, + select, + textarea { + font-family: inherit; /* 1 */ + font-size: 100%; /* 1 */ + line-height: 1.15; /* 1 */ + margin: 0; /* 2 */ + } + + /** + * Show the overflow in IE. + * 1. Show the overflow in Edge. + */ + + button, + input { /* 1 */ + overflow: visible; + } + + /** + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * 1. Remove the inheritance of text transform in Firefox. + */ + + button, + select { /* 1 */ + text-transform: none; + } + + /** + * Correct the inability to style clickable types in iOS and Safari. + */ + + button, + [type="button"], + [type="reset"], + [type="submit"] { + -webkit-appearance: button; + } + + /** + * Remove the inner border and padding in Firefox. + */ + + button::-moz-focus-inner, + [type="button"]::-moz-focus-inner, + [type="reset"]::-moz-focus-inner, + [type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; + } + + /** + * Restore the focus styles unset by the previous rule. + */ + + button:-moz-focusring, + [type="button"]:-moz-focusring, + [type="reset"]:-moz-focusring, + [type="submit"]:-moz-focusring { + outline: 1px dotted ButtonText; + } + + /** + * Correct the padding in Firefox. + */ + + fieldset { + padding: 0.35em 0.75em 0.625em; + } + + /** + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ + + legend { + box-sizing: border-box; /* 1 */ + color: inherit; /* 2 */ + display: table; /* 1 */ + max-width: 100%; /* 1 */ + padding: 0; /* 3 */ + white-space: normal; /* 1 */ + } + + /** + * Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ + + progress { + vertical-align: baseline; + } + + /** + * Remove the default vertical scrollbar in IE 10+. + */ + + textarea { + overflow: auto; + } + + /** + * 1. Add the correct box sizing in IE 10. + * 2. Remove the padding in IE 10. + */ + + [type="checkbox"], + [type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ + } + + /** + * Correct the cursor style of increment and decrement buttons in Chrome. + */ + + [type="number"]::-webkit-inner-spin-button, + [type="number"]::-webkit-outer-spin-button { + height: auto; + } + + /** + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. + */ + + [type="search"] { + -webkit-appearance: textfield; /* 1 */ + outline-offset: -2px; /* 2 */ + } + + /** + * Remove the inner padding in Chrome and Safari on macOS. + */ + + [type="search"]::-webkit-search-decoration { + -webkit-appearance: none; + } + + /** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ + + ::-webkit-file-upload-button { + -webkit-appearance: button; /* 1 */ + font: inherit; /* 2 */ + } + + /* Interactive + ========================================================================== */ + + /* + * Add the correct display in Edge, IE 10+, and Firefox. + */ + + details { + display: block; + } + + /* + * Add the correct display in all browsers. + */ + + summary { + display: list-item; + } + + /* Misc + ========================================================================== */ + + /** + * Add the correct display in IE 10+. + */ + + template { + display: none; + } + + /** + * Add the correct display in IE 10. + */ + + [hidden] { + display: none; + } \ No newline at end of file diff --git a/dist/style.css b/dist/style.css index e69de29b..836b9d63 100644 --- a/dist/style.css +++ b/dist/style.css @@ -0,0 +1,2 @@ +a{color:red} + diff --git a/package-lock.json b/package-lock.json index 37a20fe1..9c5496e7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,9 @@ "name": "book-shop", "version": "1.0.0", "license": "ISC", + "dependencies": { + "normalize.css": "^8.0.1" + }, "devDependencies": { "css-loader": "^6.7.1", "mini-css-extract-plugin": "^2.6.1", @@ -2429,6 +2432,11 @@ "node": ">=10" } }, + "node_modules/normalize.css": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/normalize.css/-/normalize.css-8.0.1.tgz", + "integrity": "sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==" + }, "node_modules/npmlog": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", @@ -5812,6 +5820,11 @@ "validate-npm-package-license": "^3.0.1" } }, + "normalize.css": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/normalize.css/-/normalize.css-8.0.1.tgz", + "integrity": "sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==" + }, "npmlog": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", diff --git a/package.json b/package.json index e9bc53b6..046f3530 100644 --- a/package.json +++ b/package.json @@ -26,5 +26,8 @@ "sass-loader": "^13.0.2", "webpack": "^5.74.0", "webpack-cli": "^4.10.0" + }, + "dependencies": { + "normalize.css": "^8.0.1" } } From 6ad60df03a9966a3304a6aeb15e4398bd9f3862e Mon Sep 17 00:00:00 2001 From: birbwatcher Date: Mon, 29 Aug 2022 17:39:11 +0200 Subject: [PATCH 04/55] fix: normalize added --- index.html | 1 + 1 file changed, 1 insertion(+) diff --git a/index.html b/index.html index 750e919e..06158543 100644 --- a/index.html +++ b/index.html @@ -6,6 +6,7 @@ Book Shop + From 0df56ef3fe422872e83f186fc94de78f49cc3646 Mon Sep 17 00:00:00 2001 From: birbwatcher Date: Mon, 29 Aug 2022 23:05:22 +0200 Subject: [PATCH 05/55] feat: books added --- assets/effective-js.jpg | Bin 0 -> 17209 bytes assets/js-design-patterns.jpg | Bin 0 -> 25837 bytes assets/js-ninja.jpg | Bin 0 -> 33089 bytes assets/js-the-definitive-guide.jpg | Bin 0 -> 35926 bytes assets/js-the-good-parts.jpg | Bin 0 -> 16022 bytes assets/learning-react.jpg | Bin 0 -> 28133 bytes assets/nodejs-in-action.jpg | Bin 0 -> 24434 bytes assets/programming-js-applications.jpg | Bin 0 -> 63547 bytes assets/programming-typescript.jpg | Bin 0 -> 27885 bytes assets/you-dont-know_js-yet.jpg | Bin 0 -> 21792 bytes books.json | 71 +++++++++++++++++++++++++ dist/style.css | 2 +- index.html | 2 +- script.js | 23 ++++++++ 14 files changed, 96 insertions(+), 2 deletions(-) create mode 100644 assets/effective-js.jpg create mode 100644 assets/js-design-patterns.jpg create mode 100644 assets/js-ninja.jpg create mode 100644 assets/js-the-definitive-guide.jpg create mode 100644 assets/js-the-good-parts.jpg create mode 100644 assets/learning-react.jpg create mode 100644 assets/nodejs-in-action.jpg create mode 100644 assets/programming-js-applications.jpg create mode 100644 assets/programming-typescript.jpg create mode 100644 assets/you-dont-know_js-yet.jpg create mode 100644 books.json create mode 100644 script.js diff --git a/assets/effective-js.jpg b/assets/effective-js.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5c656aab3520d39e59278174aa0ed6161d3f0276 GIT binary patch literal 17209 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 t^UzOj0{M1Gg6m&LF1{4bzsZGr#* literal 0 HcmV?d00001 diff --git a/assets/js-design-patterns.jpg b/assets/js-design-patterns.jpg new file mode 100644 index 0000000000000000000000000000000000000000..18ecd6895f5f44aa8c36541b3c8e85d6d85eff06 GIT binary patch literal 25837 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 literal 0 HcmV?d00001 diff --git a/assets/js-the-definitive-guide.jpg b/assets/js-the-definitive-guide.jpg new file mode 100644 index 0000000000000000000000000000000000000000..74ec6dc94d2d55db568650e61f8289934818525b GIT binary patch literal 35926 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 z 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 literal 0 HcmV?d00001 diff --git a/assets/js-the-good-parts.jpg b/assets/js-the-good-parts.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e00b58f1efe959112f94a77a719e91664413585f GIT binary patch literal 16022 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 literal 0 HcmV?d00001 diff --git a/assets/learning-react.jpg b/assets/learning-react.jpg new file mode 100644 index 0000000000000000000000000000000000000000..df59909c44fe0db94d77148a22661ad8ccf06920 GIT binary patch literal 28133 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 Zt!1708-uH^{RUIRv{l%+x8K{({|}D0XPW>3 literal 0 HcmV?d00001 diff --git a/assets/nodejs-in-action.jpg b/assets/nodejs-in-action.jpg new file mode 100644 index 0000000000000000000000000000000000000000..44e7328b55100b3eeb006047534e95ed8bf98855 GIT binary patch literal 24434 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

xw{+|;KJ+Ep zOuH&28_hJ<-`1k$@0$Xa?$|64tN_;jtS~`l+Fpik6$Zc40=$6n94h8-i;?xWF%M8@ z`quy(NTo8ReK7S7`tRKX7WZG+z3#zn0AMF!Z7vqm(Bo>R`CI=9w~K!^(>lh(vTEse?%?7e5W9vSOEA+WiB-?e zk$%*7l!XbvW-{Doi3StvVlO~n=)lE}2Lr!T8?peM_9jomUz7{!#DuR5Vu$cwK6?TY zyvCpSiLlhm&9oT++bpQrzU7R5OMqc7!6^FlI57K!>w*$#|DiNX%4UF0&G#o*-3CB& zvf|%CXz*=VcaCzso%OfT3^CItICanmEx^>ZS!7X8M{yf7t)^rz19Pp1 zurhc;J-D4MJcIy|uo5!S0B#8nCy+ywFbXatil};6spdWslT&8`Y&!YE4{#vxj{h)E z>AA1poE$n%0s7jB5Xa#%|EDtQI4Z@4!&C^o4?^|g#$YPR4gh0uNT!)q4zB+Xv*eZ? z1rWn{3A4a5aHt<4RaWbEGwnwnmlz6A-3`iT{L6CwFSZI&(c2*rYy$D@JBDse?>sZ@ zPnH`s1Ym9|(k%R!<%Iraj={QZ%NROKlp%)*0L+)@*lpt^_?;7o5j23XRdS90zbq!> zUnc2_Jp}N63ZttLD!@#8W%=JW^Y6a#-!}8j0soJ(8SYPnJ$XYiih4J=r|>>8S(h(N zihAq4E59ghN?2y!jHtFmywfk)6>}ALA(YiJfM8i27376Q+`&MuSD9pLdtd7?-8!bb zk(-6oc_uEdI=>gCcAm+yiHxVl2;d`ALADVI@%G+0N9;AzRt`Nk>rbnH!~6H6xL@ta z=CtEB)OP^HZZP_e0eT!tUT_1x>jFnyA$|hTu@veY0AWjxPXey|<4Q8J7;v^hMLSe2 zZT1Djd1yfasL-Ua1JQx%giw{^7=7tr9F?PdD*i4O_X$U4##Vv2=o#gXV5zGiIMU~BMTvRCo}QGEp? zf+5?(cVu4Me&~umi$Gz=;tfP7IH@aRd68sF7M>vUZ?SA+N=O?JQ)D#lVuIst((dAjKhqNCJF=vza2c1O@yUI({ ziuH!~vjiY6jNx?SX4z(Y5VJ4~eF%e45U!_khOi#XZgkO>4GqOLaK^ya*>=)x`ph zse-bR>6jWRij+uZJVz^v;l?_{uc_^2Hx;{|aO|)MJTUmfoVC=Jty~|iKP;sx@T2{V z7LQxdb{nV&0zu(y*wu>BcfS zUjh~$aBsE%5Z_$+d6uU#HoInkYm2F6l@GpplRc12l_{y~u`jhFCXAG)gtp%AI?TxL z%wFPDn@wGc+EFw`WYH2_eRy8x61#Y3NFZntO+~>FkHk`d=P+4p#Z$rRHQcAUymZ5+ zTIqJpPQybi7XP0Aom2->m5aZ=^SEeNI`1u<{Uw#V$5h85RRL4!cwsGY6Q-!kO#7j> z5Nf2{|l2Lz8cdYq&#*jhG7_ zL>$CIGl^I%7PT<&u<3t3%)H&29p5kPxt70ToMZRy!_iVc-aO0%CRdHm>vMjXyPVAF zf3dT4qTw9{Y-6|jWkq2hV|6YXD9JL+A>n*rZOsO_3O03ZyAql9j#T8ZxkHrI>o+*H z{k5AO>ec7hnxXDJ5?Or+w>45w61>Cm)4+s5J3N2~6-yrhl*raiFB!Cy!NZ6R=$yMV z27gObHSQ_OKRL2$S9<8HFTJSt^4O1fLjzRcnIxc5IplDzE|8LKPQ<%rm~!IFJc^75XETx7VVjvx0p5OXoNE=L1GUq ztZDtqXsYZBpfbmPha-!rg(l+6pjKI-IgL9B-f_o2q(%{Qu^?T6GNXBS9~bisq^j~i z4(P9Rlp+v|Q^tRQl;728 zM2@lR$^PCi#)DeCqOW7=<*{s%@ffKP#v^(1axR^E3yqcTifEF_kkPCashfXGKdk&{ zyCvMg_2w8WmOJ_}tm`sE#=FL*7`;p+2D5xC z0hP6sLwRmM7YOB!R$xP+raBel0w3OfREdX+Z6)F`Lv-B$)Nuy-SkVV7U~MIr)$lb` zlW#BMo-)(yq1|qYZKE+qR3zs#uqTH(&3@1Np&7v7j*o4vEz5en!@%Y z3NbViS#6tTb11_E(vUcKEEc%@q5A?c*UoPw$D&ehwWNSK!{p_~2D&8Br~3SKBhHb* zSSkbL8_fxZX*#LKITVdlHWbS*v<=t!UcGX+;8YL0I6M4mu+LbhK+|=C;pZDONlF+dCcmT1iwj!~nh#P7k-DD1aW?IFQD#la&vlVPun?R}jw;|n( z!X6V8Bd>hLo4}v)>4E0!PUivob{k5O3=dORS{>o@2};c*rSeKGlF}dC%jsFxL2r^7 zBv|@`Fp$AX_qd%Lv@CsLxuo9Xq6gu7EAG?^-7u?krztOd1ae=`@~&xc-AY1$i91M0 z6@5X=+VmIUgEC5w(`#)sbHQ!{~DQ^FhOe+L3?Yt)V ze^;d)HXpvtG49)U#%;iw(ggiD9JYngHFT3N-0V)3gPi5vIBCJ_|BP4(3fn=LA|p_S znyYaFscrBOGYxPnLnSh$cvQ;jt7yd!sblc5cGTwJZf>b|IIlJWbK&$Tv;5k%<0U!v zrQ3dqc`&Xd!h2y;tiICeHF5LZ(HA>q4sAjehrZ8#GrMqmCBq^2KQjIePDGUu(M0ncdeS@x@EvVa{GS+KERd=#d}cVt3Y- z8`u;>wwV?WRjd_`+RT&6nzK(*by2^?C58X)pYTRO8c*0!mX7@GI{S8Ysqi#1&I698 z7NDZsY)n|4D--X!p>94Eq%1VDEv?COm{i;!y_iYdHBUnPy|2}eW6d|5XDK!eDaBOH{-mB zPG%OtD*9;5t;~r9iX{(rbe9UIeCQAKl;*#m6Tzrnn#A*@be=tZfbqkJYb9<)x&!J9 zL=58sdses8bX|rqwToR4i|oprj#wQ&FT@*3#?0Q)fsH-zPQ8;L@2Srr0rZ{+;2ud-GJD@xaa|$ zTlDPX=M;DNR+yDx#U!9d*h8TW#*h!{V25y=w z{d80Nsa#8SB0a%xoakgB91hcXJN?kmQlu6&v@df*{%ZRSY>>r$t9@#+^gs8KDqij=kJ%hJfeP@Q}liwzWg@)hQGMyR>7;Cr7_Q!Oi327Cdke9oi zJD^*{y&$U)OiNIux50ZWAIc&he|bxifR+ln+o9vN=c$3mVRbaky>PPILz0PmW%U%6PzVb5G z)3xGC>u>ScNxBim$l|<$*29dYNF28{+37-&cMgPRVz(>5iJb{Sz*z;fsshF zooZNW8UVGN=WmebZRre*4X5A(6@)+e5Dw#9a5yN;B35F>D#gUGW53-@dywHdH_;GV zuXwzd00yx!z4QL#qV&lLqA5s<(H79HTBwke)pW?mVG#?nGGgfw8uzK|TxG2Zg_W8Y z@(#ET=yNH!xr8{fPNlfocq?F%&!KSf6kg<3RCrF}gSBi#Ki>)UI8CNM z-d}X0Zs$#esmr`8vL*}QeSiT{6Khy@?MRYfJ}9f4Uid{I-yS;huPT5_>WtXh^vc6# z+J@`&$PS>FRsvRWsWvq+W4@DfR+_%S5QTErW6pB<0QWBNPKF6!(YLA8Bac3xdI-zh zzh(NMV8gi!(t(#B9{Ev#*Azvi#dSHxFbTWRmG2pbc5Lj7-yGsEH+S2S*+w@?NS*f_ zl=lWZ-lP=plSPSPE@!UbKViLXZ~qc$>fZXBK1W|us5#mq;nq;#dErR&T4nW%4&iv7 zyUI*E&jOO+xHdo$8|FQWct2MHi-NkSTy=8Zy(=9qqd3KY(NlgYCOR~vBExgZ6Tii) z3kW7hVRY6~)KOBd0D5xaKT0@1N#n{>6SPU;GEDSmn_BCfqGhp z_$kzWuX$z;q;Xfq{8}>*ursyTdz4id*svnlh2ji$ah<<%^9wZ0`~1Ln>;?NEdtytp z&OI}>i(Q5?MY+1s54Eh!%8zBp9B5i@o?uevx_k1sDKIyt!? z_eUv=P$BCwSjO(Guao2lmP-qJ{RVMMVc@yN5xD1qs(q^q@b!CFJ9V2*EuxGj4=FwG9xo{$uTimcZd28d=XED)J7{_8nn_hLd z^sRVxkP%QOaY4)3lf{p&M}#FASfWl}`E~+S0P)Zdutk*PkqB(2z2@3@Z}y!TsZKM| zqN}g2%Bf4pzEf%;KJY8b zW2iy+DZ*qqvjg;^ETB!@A+NJt_Aau$wM=T)P;x9Gfj>bxU6uDCf6Dom z-I0* z$}RoF#F{?oSqL;L5hAH(vYECM)N;O9b06{`fIC|VOH%{xFYUbY5^eyM;K!lmQQ+g3 zFgmUcMuWYq;69dWJS|VMoIN!h6*Pv=d!P9%rf5Dr{;#NlzG%s--kYS1`V6^i8|2)4 zVKIDMI;<#gw~~HJ;h4|4z;@1+)<)=CH8ek`^RgmTDIrVGj!W9!r1{TMS9}BJobv&$0B#zjz!KL-vRL z(YAc0?>3JqTjrC-CjAY#AUBk=*#LcDSwfEt?+gj*0seQY+rI)eH~YA_$IFYdCKz&x zu0`zDaKnk2fVaj78W>agmYKvVEDWudl{$^AFOr2G8SF(4eBK}JPqw^CLc9Y)7&^Iu zkLBQ=yvJ3=j7fxNxH4kw$HtkrMn6_Ge>7e4c^09tcox^6{OtSCjo$e$PJ4s93)6U! z$ghuV-yY`Kpd}nlwOyx?qQmV*`J@|?1`MFkus-r3dof1$!>*xq%IgVdS@w5g&QyOI z_{eT~)7UG-3$8h`qmqkS%HYS4W;Do`E^LNgI&zdxGGlZHsgH9X+oHAG?ER>EA{kDm$=$&RT72b;s{Z_1-HDkB-djR)0f$~=2s`Fp}=zY|K;Gb&;p8Jr{#)50@MNbO-13->ws$B}3 z!b0rxA6%^XP=X&^d8iX(E4&6z|1e^`EW_ohI_0I`1g@io9Bd^nown{fvcxvS*F*@+ zv_@zxpAPo36)h+ipM~iz*hu`xFvN~Mv^!eg_;s^Ja<%I&Z*|lY(I;nV-SwJx0iFB( zO?EJ00e_AbvgR{S@(*+{hF8T*%$#}o?#D3Bk;Gh$)2ixp0>l$;6tI3bHftk)Bzcc; zjZq=?jhLUZw;=RrR(G(cksWkDth4A6OUrzPNRl9gED&Fi%>Vi<`mA6ce_g}Ez*qUB z=K{D)yY)V!(m40K*z716S3O%Gedx#Vo}iXXA=GBp_N ziJphkOOZ!RjlWXMz}%Fb5M8Bn%2qABPWZyNzHTV+{_WBB)1T9;o-1-YS9Hb+bGqN% zD&<*on()00<~j7#xjSo4AG>w{4rOz4paK+bhj*If7iWp@Qo{vhj67Jw{Igp$1M_M3 z;f~)scmM>d108SgZ`xE8y=AOnzi1cyRM!xobZfLUWa%P=MKP#`Wf`t~;a8%c;WVQ@ zf7?o{s27eO$L-S3E$D%hS9CU}Q)E~$ySO|uzT2;LG3sQmn>qWUL;t)9>ebR>c0eD8 zumhB0CjUfMSg=D|&aE$oBbzH?VvbzBR3y*weBMKLBE{S_f(H08Jqg|^oxDV@Pk@o z>r(`3&9`Ez&!)F0L)QVefp_K4s0E-_s3orRhKced(%vZJ0M{&_k)2#mN9r zdKUBasJyr2%;7WFZBo9?Y!Jw9pog;Y@8aA4`NG@enh*`{h6R^6d673LE6lCJpwbpM zOV34-o@)}SkK#++S0&~i+g=A>3(3Rw1f95SYay0FkYZRtCODtyfT_S9UXC9w|0%>!w=3&ql@x`f60YNh@wq>&`U;O351ZVLtLKa$k#xcW>0kjE`a>r#SF|7<*%v4#X8)2gu_&@#o=2w0K1@8u zG9pdKj`7cmwmR+bpKhkzk3-6}-0fh%uGA!|4jK)GJ%>hO4Is*w(?=4{y1AEcZ^V)v zBV+|n2Dg=l?bFf`b$06Kh^0cR#T$0yDKsFQ4!0z4%oVs|YNfP9=&%p5pzN^l_0Qfd z+-4_pS*VyhGEC&y7hoxWK}ZK;i99hVZJ%7t-vRoA-30FsbqVHUO}bO%lx1zdqyI1U z8V}fZTga9b>=o16QdV?buglVrulw{XH~z6J#prCqPiW=E1ma2|XXMB@=K82dU|y-`nI;WFS&ppOs;*!rGm^NIW}FPj zy3F5lcSRD?Cnr6+`$G+1^B8%;9vwcLYCh&z&_ZzFy`tf|v?b{ZJVXIsVWygCK{i|A zmov`1kQ@2Cfl{fbrhcnBH3AARe@&(uq@#BB?So6J?yW9@x=YoSAq+$3w;DLQAhl-- z3(2kM(c|j`&Bo+7;imjrsd5+^O0xE)`Zy{m@EJECTolKP?n%YhW08h~SUA24-qYnY zEyZw3x8X{778V?myA6hWzc%jE{<%3kS?^f*fck31*wrCK+HOngVI)t!@V5tg(~j$2Om zb{wndxoz};q*Mm1eG^u06gxfGxL(Gw51C4}9Rgxb3uJQdzc9jn@=5t4zSq?c21XNa zvtGBf{FnjGw}lK;m7of98`H!qrhH7BNMl(96`7!wm8f zpnqJXZ8rH#x*wXfFWTX+d-zH|H@EPLv8Oh_u)h(~WK5K7b`ku6-3!4UbkMQs%(MJ3 zT|_zi2VHr=J)UIb1Gaw4^W@KPj!VzH8)%YBeIS^dcpz{d5)W4dw7z1&x5Sh(K(M$`u*Id-y8ef1|PD@JJF1 z74~{VM%RIDfFlCS5E>qAd>}mlHOVMjvE%DR3#_3SuhLS)Sp;m`lL$jvAKd6?*pC)y zEbxVb*4NbN+M+c&|G=95D&eTDET7&7Gn--;Rl&V1#qNu)eNSGje7e;Mvh#+AuVfr# zOh!%Iu{x&Ju0Om9RDAqRjJhXWCQ2yuDiL&2ib9=CfzcZ{i9i#5U|ELH2O=&ga+u}U zT@49n(2W4!>a#27igzJ!m5EK@?s&oqE`HWjb_haO%H!MYblDn96+IEM)l8G1T$!BS ziapu8C#cJ%o@r$7f_nsguu-|P31EPCx08Dgna`SY3p=7Ru{`0M`@&R{g2}B{@9ghQ z4lvUqzL9lF_gA>Fn;IJwZg>UWbeTUAeNcAhy5;#O#rUx1i4~3MwT7rB0Px)~p2+n~ z+o}8G*y4;)YI$!YNF@)ES+d@7${xjn%Ek9AP7R9Lv!g=&5s{sE`BXH+i=+bN$x}rp zOpp74Hd|XL3_8c2fo1AOZhTf$^z0f{yhk5#%0FMxxA`Sf>;QL|X|T2d3?2dx+oO|uq)%4qY2d`#k zeSH$WS#T%Zy?Lu_!T#82|HdwtSWeF;)UuqBCoeldS29jUEIi=0@x__1U0Sz~wI8aj zwns-_?(nD7sT6)I?o8N~cJ=Y=Hlj~#Ka*J2yIAEgb^Dp>d8`4Q{sCaV)sYyJa$jo* zE7VK(X`86N<^X;+cKXH&Az(sQ;Tqs1u8MNs=u#+8dyWD}fKoSePq2Iqn?64}ZScFj zFJ-gLr>zwh1SM~InNF#G>I*JGa)+@wnq|08@#keT6^t+QwVXmGvC3Htq?wahaHWX= z{}I3S0Z{i_ens#|Yjso%Rmuch@Z}&O_9}gcRxoVrIt^I!JOuN-7z5f55?)>zR09b5 zBW#Kx0dt#9_4#ALH{q^>ncT})2D`v3-=gqo%*9OGl?6(WwI7${zlA!(L4~RSL^;{( zc7^G?T&=EM+W)NL9fKxd!X?+hX#BgmcKbCCdikL@u@C*cO`nCw!Ui*1=KRvV6Tr#$ zzNKAMvx{JKw?p|o@xEtCh2ni_XL9auTcvMp3t6S-9MT%wK+}wi;4QYZ_?h$q)PAmQ z4&q;s+_%lXBI5p=L@M`HfYKkvhH^f`Pp@Eiwzj&gbZW7KOfhozFOo|eiO~85Q|EBn z<5pf!QV{&D4UaCwl!iX5p8`GyFy7CI0yM`T! z0~MaBEfrL!p4s})m9m~c{gzsjnA0hw=IqI20{gEB26cyI!($$Ua%eHce{esbq>mze zUgV_h!IL@ew_eWxRrG!a5eG>(!DxU2qsSbn=l8F0tt4XMEh|5U4J3mnVvITluWPt@f=a zne>`5PzM}zRqfMfAQ?c_lCA?o=ckP0hbfzFJR1=MACQs4RBFAh39YJ~|_j{FDy(JV4Y{7#>ugKbrAN-N41! zecQkRpKEh9f1Nh?7Jb2MI>e38WU2w^W)YezO09L9pphDe-D&4sJQfuHo102JJZ5g% zO{*CFSV}Gb3;~TcA}%?&uZr??;*ax~PE^!~|`G#c&H zjoQ!q#nr+Sipl&0?wtX(MkNEsX+K(ldA<}a z#)J;_?Dv>^jNuqS@YR{6g6V3&Kkjr$Pxy_5T4N_2Sz?EgaxGa% z<_`F%;0x0BYe-&dVm{|QR6lEn$wcNkYvlmXSm zMnB8YXGN!<%6!PHUuqyIOS_DHTlynw)39CgNIpt@gStJ1p*jG zkdAnzK?$HCNOI)-{QHE&zP^l6wrJq&Fs_;<57@-FkvQgXgImQb2>`9?8vD*aMA7OsY zJMM8>DbwIwzmBc<|8k~4z9Y#C0Au@(-k+TXO#!H$J z;2_)hD6RVILij1}=-Dve5RQO$&Ct}I7DGf+U(A&ouMX8A1z_1@pn~d{s3LAP+P^(z z=k1cHS&@_~%J)^Q9>J9C7`cXUQsOjefqlb2*kz^kywivVms%q1W?S5|=1&w1lG=+iDB_@S zMg-X(E%v$beBR_SQ|Q*D1QuqXSXSBAj)f1--1+5DCTApJwI*T4EK(YoqS2Gm3*-)+ znN}vpm|{)n9ciiXd>T{++H7+>JQ}nfrXu%(Glyu^D;;Txp>HS;kXeTc4p@ht@lvM=Cbkc8awG+#0VY(D<2g+4u||AO%aYoe%bc z108JNFAT;}`Pt2kvvZDKwB_yC2I0`|+?%gbZuSbL)k&PE;2`abdxqzj7Pq2mytSpE z271i$G`uf}*^yK*%I$!myv}Y#5^wv8o%-nkGmt&6pp(*hw;!G>96fo5pg<0VQSKF0 z#OCs!E1~y55c=5wWF)N~N7ZTy<{PEQ3!q$=CpqFud{r3i;NeT}sR4y0=Bb&F{q;tI zf}5qMLXECkdJETZn>-8cdmh;_+NT)Fdzhe$2t->QEE7WZ)GBL*T`o{ZA-^07_WXt5o>wh4QPC?+Ctc~7i&oexJb#p9E2u>*c3&ZIsm-RQ=CAX9V(R?2 zN9Vo)oh;o2axU2X5+iV>gRN8*gjS91hVn~ALr#@4(97)GX&Vs3mtM)|3V1-kC3D3U z3G0ECw>LnoFjIREA4C^&Om)H%;VgQxP&m6S`SI+GGF|dr5C* z{oFC@*Lk4E!x@<*E4ercw7^|a>iUix0i{u9=QU%2#vTvlv+5_K6K5?}(4kF~c)e4jce%Wz>M1<_{F`q&G~Z9= zh{C?Ln@Xm45%AUiHQW9e^>ETRbk5LWRTp($@|^fDC8xa^!<@&g@Iw@cp4h%@eDI(A z|Eb09{|_qPval~{Gw-Q_BK*;|#L&4}54o+yJ45#)0#$U}S;W|Sg|vc``tPicG#rAq z!aGKXL^RnMegO*YVac_>K4Q&OUrVu*-56@r#gZcl*H_0`Q9 z!a|u>pAXJQhwKB#m%&c_g>*AP($U-vT=)w|15)&1YK+7eu7dN}-|<;RK&!1Q0TGsQ zS^r$dAm|zZlP$HupZZ@k$yon55(acDKxUDTlLqINt|`Shbkpe)y^NCWr3R&xrS*qQ zP|g35*nZ>wrdBekuUe;h5W%{0nYfm6EPyIS`m3dXGMW?tm?s`dRVnh;%M;;Hd6T$( zZf@q*E^xDwK&6!Ke_-ad-JfF`Jhv$L>9vzWDG2EeZVqjd*E`$j6ME&JVVk0b$OKjR z?#8XFoX>Vy(*|G5Mi92Nz6?^K6 zxHfV9JV+`9orI1ZalPrag|pS~K@Ch=R@0eH@9w4~+}^m?pCq&RYcLKz5|eYWEoiLLvP60op4|RC86L+=FPq3{{&{cYb8V1&&?&(y zBA(X)^3jXL>-D^I@FvlS>x?#s?ffala_6kl_xf3W)?R&_R)oc@wC-ENI4A(>t#dC& z0Wn=au*dSZVfRpR$OU2{cCAC60N7<=K7MR(TB#u{CWqqWeQQAJ1Uyh7t`nbx^Fxb; z&HA#9@Y|gnHw|~E%##@H1R2?%qP9nJ?yu&p+UhmiDI~1e?loG^ z6HYIWtwbvw#a0he@DhjUu|x8#xM^P$EL zYJ&9Ct{U}wI8Ul{mJhCjy8DWe$rV4>RvodI1s7y z9p}R;rp}oZMhecaWGMQ@sju%XnS9WqMJ7TDftGiSRFSml2^#?C#PbRizC=IbkbK^`2sNarQ+N7GOE{S z`&o|>a4ryxAjRYozCh`qnES1mk-RM@r3F8GQr!;piIEU zYVh%(5|;;`V%uTdm&mv|2l@j8-;Nls{}YwmNR|5bUYky!KSia0rgzKaE~D#ffGrVc z7{l2U1XT)K_<$nGX>^_7ht}rqJ4)^d-Y~k7ENzlg zd49=9y`Y%Y{0v0l%fU|YkcZoEuPyicI`Bn4LGyxI@pHU-ObiZ)@y>SewG;@mT(Gr< zdkY0b`DgabfMZvmWxu31`Tv53Xy^31VN2G`S;}Y?sui2Tx@E&dpvz>dQ z{{dZDaq+lRitYyI{_`}@&rhOa9!OhG=zfS`R8kKN`}K=v{tnKgJg}Mcj0NsEM6D`X zSQXwr-z&*q2sH2Yo!`j1b%`Bl*6}szWuilB9ByUVDH%P|Tl|&(_!1wed2V-E!C=UP z_VnxQk#juebnqfr>ZRYPt0udW>k!-@3Xah{ddCmIt*HiRoHO|c97-R(5fk)PGSRm5 zKTY23!p}wDOZrBGp0XySRyvKnNbvp`qnvKpf^mY#RA>(;K6)fC6>gSHK=n;+mAODD zeG9TB#T!$%aAx)4D~CPq)MtV57WT$oV%L??=}&hKN%{2j{up;-N(nf%LK0*?FA}t= zfR+Low_T{odO(aPGbG*u`9#JT!ci6ER$j@9xZB21bWu_4KuSw(=~-a}-xCCCjdJe9 z;9feA$N96!YZio3<h&xA#^4I_?2*;Bzq#v}xi9g=Ln$Fsh3);aI{TkHJ(`Off1*RrcMdw8CGKlgpz z*LB^1TKX5)M{L|b;n3BUj~273;nPN)ShK2HbD&G0sw-11ay98yTh$vhaddkc2?4Gp zL);qjI`w{Zu(GOiUc7Rg+_$C*>zo~$UsSoNXJ+@vUh|b47Jra+O}{9YMVf?8W)l^x zb*zlHoP zVb`z>Eay^F`8w3*n!Y`sKKHjQ)9S@}s_8N`^h4aHRbukJ6v`jAEiS_SEJ@{ZJJh_a zyW?L
jip9JhWz6mYlg=xzqBRPvjNOSFh-*CI9f0jxGitxNHl5~v8Y<%pY*f%WUVnBQ|p9U#{2B1+^ z(B7R?9^5N`**~0C$A3C z{R#WtSxDjlPO2UjT6Aimw5O6W1F_#kWRaI#UD>*^*4Fwo>?f-+h&5MkgrbuAVMqfM zA#z@Wk;O;C4nKE#obV57&SSYP7+<;;qoy_5 z?_-V}K#2KzSN{tp+&}g3A%Mj1u~KfvngWQg0HDO~YQQpKD-C$)XXrH=1tU1Ygd6lw=8+#w8unz6HM zA$y&Vjo;CQd}ozIk^-9MmB8O=j5&mV3fFgsjxJw6DUj?;qg*#&Ir+lh$7;9)Qjl^N zFTQFU{S)^Mv4M<5l7v2W*iY<6aERZV_w!C!kf8>XFXUIU+ybBJ zN|hdMHNs8jtL=c4&s$P>wC9kiNmcg@-p6Tf&8g!gJw>86>Uw7!z$fqsy8&8Db*UpP zl2YRE7-2r7vZ^<7RWIDols;w1!(WoUU(6}7A_fp!BeoI`A+b?x@`+}H92X!Q=V6_f zK1^dDPE5bTH*3DUbtUbbnSm+-w!~J+H z)t|e*8Ccw64y(e{T7dg?Lz6?_O4V!SP0Y^efz&yLf`TO#-p3^R|Eo9sukT(abt>^y#Oub$36{`9#;8 ze|bK8e^4yW92fmm3C&<2b3i&*Te92Ph0ZTsE24}q_@+fpq-Oyyyxlq_IR zbKhY|4cI12q?+ebH!LEK3k;(-Yn~C-_>-$X(oPC|T$%&-^dP1O+7#6|MH@QY^BG=5 zSO;*QCG|+qFt^V|evA8YJLDS?urHM;!A543-=CNm;EM-Hg_^QqzUD()hq$SrD(Q~w zsV!~Emm@4EXVuf#VY)8jmo`c}8PgKvZe1hTX&oIlpDnq*m#@G{NUWh)TqAGBG(h!z zb#@8?E#$qW zJ$)c9I0w8-*ejn$uEC+#cGQoQgmuasHA<5?WmVWXqvI%TIKeAyI)5 zd7g01If3K4B-Qbn1^(0VAT%DwbIKI2Ps)tbC`d!E!%qKoE+|d~kHmsD>@DUCi`Z*V z6tO4#FCG!)%zr+ixlJID&Jl-V`$5?_jp_x>*1DE+3OkD?TkM>@JI_BcF9}vj0ostr z{T&*5yQ05d<)d~?GfS}5Vf^S@Kn9za2^zo^B+YkbuY=?sARt6g`)f>hw4r!(B=H`?;I6S8gQE()Y+5xwU-Om>uvOP<)=wQu!*+Y}5OaXpU7BupC z<_ZgJP`%#2|6afkdbY%Qx`$2{j}z}2+5aB3jP_~CRv|yn30(^;eYA~=nvut54R*9 zPK;165Ifp@Hx-hv*JRI$ku7d@pmnJdq(=z{Glr2H@0`{K*pWE}`wCpgV8;&t5Xa0? z&}GVsGp!hvg%&0dbNwoGxs|p{xDI@~20eh5H6_|>+(d9zsU?bCPCS@31@D@jzQ=w6 zSFg1#{&+wamf9M)_jUsKu6GRP$2+KL>>lhVRehDgNA)h%Zy?g{g8kniRqH-cA4`Yd zbh5V)qiWHOvFGWtt}22W1Y3fJRo2TDvA>fxstt(pW(no)Ynpw4B*;rz4;FIH$!&LV zc>#ws6bvgbvF1B2M(lTGWJKq?M~BV^@t9ctZCEkB3EdcK9OwdI5rbN$SycxfD?Cw5TJdRb;l%|H0z%^flF*EX z317so|$s~QJrdXp7M z{7}NTm;QiYrd}l-%M~OXm!~4>A=y>A>AjyDucNElwvWgje0HEQ!@1}^C1EtIG#YOZ zs=5MK+Y{ERHzKw#$5R+Us1y@6&;r2F7}MEbFLh462xs$mb2ag0C@jt#*Zd<$@xgaS zWMQs96#>X1ND1KD)}T*A3|#{I32E_PpbYi?@_Y8L=X?OKPlRG{fX+keKO9>wRwb!? zn(ZM&cqr9QUz6&rc?h~)k!|$Rv8>_Jk`$84=X(dYE`Dic;~!Ssp)}B?yOJT{RxdRE zq1L*V=f!(59@4|QoYG=~3z6YaCvl|=9iX`itPmV=`e>fNn?AK)FxpeiUfhcU9g-Ax z_l1itL@Xw8@rjNgnULttFT4c`etjuZ)`(30P_h^~KCD-n z?`MRqedlzLvSoqa#EO_h_fgP%!QZrT;MbTHzIJ{4eeAk8kiEz4ss#byHl_tBjrcH9f0+Iv4)|^gXscJ{*Cury~ ztMqZkvn1@D(Jq@0mT3g#TfRR_(a`vg{SvhEL6cej47fFzq5XV4HCe(_88py;X`4gv z_P_V#gS^-GK->+kBF;J!o*Y)GEQT4q_Vq{658O3XHuNTJiC#S5Dt|ZJveL#%pHd!4 zncBrP3=d%cqV*78nS6{kuCNEYvD(Yztn2y{Qs^XLhG_#t?!gG;_V?^|I+3^${hWc{ z;ec#EWyrkxbmN{I*>^!*j1Yb$sZEti7xGQG`WNxM3#LDHXi3V^>ujJ9yC&bS>Oet~5y9oN zb3vmC6Ll4?{?%rHB4=xIM%#+8cPFzv&rlb?XI*wKHg3*I^8O4oln3N=G5VxI%oTlN z%spw1h^qS?clfq)g7o<|rXFtvB)HeBw$*wUp0$yb(UuF`D?@7&SKP+&q-q0^YCQ}4 z2`>}aRnxT z;q`_OX9FtjJ)kfLn@#k7_6smIa2aknI_K#&Eic?G>bsOeg>N#=$nFG+k?g5*=^%f&r^c%9Jp5fV zw%R%{x8Ag*N1pjNz4=A}ngO%WcO$AtqY8cjShidIQu}JsTH5atbApKkx>NPDdz#&B z;GXU=lig5p8_=RO%!b0|tVSS_x@TkUJ_vvwVDk0PI5jA(YiN0H-?`j9Po;${$XxT` zRLq(cECdIfZFxtftZ5I`_h@f73VgJtDIlj4X4fzhj-1|{AdbUt7`M&;?1$DdeKabn zXU7aBj34{ScSGaK(IXb7-P-`#w~Q zeHi>Wj5e`W!6?b2!qMnH!QEdf!Zpdd{hWD zO)8P_aj9ORUTK~OHFjEx+`8fe+R4+bNwo&xAWyicJ0-7T4!%dXD?yT_A;Rps1OiWG z$*UunciDajWTBqzW8-7{fOps<(dva4hO9)>kEl+|Pe)_6Tump0fnshgpg5;D{FiK! z|8J?MeA~^GIjZt)-_E_aUl;9m0mcL9T(geu-jkfd_PJcg{NqQ;A|CX6?5&)^svc&A zup}?4b^?=tEyxqFX2xuE6ZhG+uG`QZ_yP6o(k*Ps#$8N`LRys>m>W7@ z2hOP+TaL}n3fg}>=bQ#OP($oNZZBK@FHI(Avr3!Zhh0u{1&tIVh`~9y5c+Yh_hM`- zclL~l9IS%78q`A3*3w&aQ4J#wcjzy&kGaU%BBytf^BYow@^Z9f}n7%9+_aiKi zon-2Z=B}@Iz3g={itUvt_;qh0jXCOj*Z>hgBE|B`P{^0j8v<~#KWuk+3(3{+>gVQ) z$7{m!QWvxycL>wpXjlTgL}>np5=5jeO=^f9tP4cK}e(P z6?FJSH)^6j({1Za*R-@U!mYu74>Z{ptNw|751MnX+5!*7OalHq`}`yKotjbS+CFUR z*k8*d&Zw5H3Q%F*YJ*QflZ_sr=fKsQVIL?#&M)$*;W9$Vdh^ZjZOpmcJM-gq=KA8| z6zqT+{Lei!)^%V5kV()1Lc&5)JyxIgFDW(_A1Eo{pOWh3XddQycqt)Yjf~rb$7pzi zZjZ*j)@rhCObAX^`#`K{Ou!zDpYb@;JFy}YmbYwURt{16tn0=p*f=~^nq6n=w!kX= zZjnf_OZ4L&y66qi zhzIdOH>(v>&s|C1Kt%(>8KzWO1Kp-9UgI)p^k)w+sR$YrpRLRv9ZhZ8Tv^{$C7vPt zJ%>S#lh?vul4ys(*{a(E%t?v=@&3}YPTh<6+h-WbW83CJ6fc7`l8QDo)>-VF)SP;x zDiNB&^NzunC!x93U65GTbL~I&=2ozcY^AYioP8Znym}}d(0<45z56985k_B9{Tt_!-VyzwAV-xWR`|tOd@$cWq zsgwSKZ1vs@om(weW%55a{t6HIus(nO>~;3Dm)BXB&`=8{!-iKm5>}ou8P*tEY!TsI z+t-kjJ_+)FyuDqB)p99VgkAdYNdNaQD4+iA%L_YWcX6HSVDSI;Fl-_J?l;{{XrKuY zlbh3aOY@(S#>^dFzr8_y2pZicgJoru`5(`z@b<|^8#Q%dVo2ahI|pdru2O4Ih1-+W zzhVC)QWRvl>0$&a=ijV*y@@t2*aeE5(pD>C_dKjSaVks{TbyuwZ}$fHm%iE7Q2}!R zK(J5aWLf^y+(v?pbW|OdeINAW0hRx5s=nwXH)WREp<;Sh2LI=U82|au#Th(6O183% z#-3~X#^0qpbqFx3!97mN0y%#P@5G?rmQeE)=L_KJ5+>XJJ5N)*(1jI&wDWD@PXN>c z(QwGX0-%~b^`!65G-V^WZwQsvxL6@*FOJW(NkV%wdT@CGVU2fgSR{DYIW*+F_D}q} z=yf@#JTyBAtvE2>2iK$^AkE#ED)d2ryuwB9{^xC6cqK@Od~cq3@3Y#sCi(!Ww^r?= z6$rodz$FKU-k@L=E9ECb>=nsOav#O=wH+Lx=y~?v_}PH@S5WIU*!vP$HU=Y0TJ=m^ zj+Brr`;U~DFjR5YSw!2>>E_1GEu&ox{PIeL^2V3{eCZsqFo9VPocBtZHb}AnT1O?- zO3XgUynGeTW0zgUqiPn^bmrtgJKJKNoYTtm3|oIbnSMJx=II1!>iQwRgnv)%J=Ef& z@~%d=OAT+&Gv?vT9h9+>R1`Jq;;&KvhTIxf=Fi|mhZ*ar-9oE*t33bXgLqicUwO@4 z5sUufi*78FJO$2So}t2c3ti}B*JT1fo3mh&KeF>57A0Xz$lHhd6Hem}X4#)XINW^R zQGK8U-hr+}N>7)?pZD5wf84tFT~!P7EV`Fhh>U>vps7%D=lSL$)CSWJ3D4jUFR;|{ zAozX*Qoz#7Yo9%TO|?GQP1y7V5-j~VFJ5!joIv~d=?sT=C3V35L!5#@9U&n<{1?Y& z)$_-MdzHu`wUuFw@{x9HG|fhE4Ey=X*c{*+|NBPZbv*DFae35=<_DEgrcNZrX}~IN+_Dj3)NTekON7>J{;* zGqI7OT6>v0_qfXNe+Q*={$Bv4pI2tfuXO}RP(W7#moeEF5tExfKrMBNob4N1m7;UU zblg7k&eug|jc9!Y%%)!HlhwEpb|SkZs#?}c!X}pt#6LXXFPg!{Ujo(~C*^3W+KC$SAu#!S9@s^Qtc_0C_K!R@Jp8PI~&xS;(TJr(4$;jSd8)!jem8%!p zgjO+-UI)-6frb+%>+7O(_3&_-;sJ8LTXeX6CcjAaQ+lLpkS2ot(4P7D&e$o804XwTj*5YNv z1B%kLZ2a2#&6qzH?!i&ir+C5PEXrhJ5X!Bh2ey%E)K|PClBEpQLEo?#mPB;6b9
MFrgAB$tv@QjFodF0w)n;hx}{ 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 literal 0 HcmV?d00001 diff --git a/assets/programming-typescript.jpg b/assets/programming-typescript.jpg new file mode 100644 index 0000000000000000000000000000000000000000..71840f409a7e46c373400ec6f1a2e0bab8943d8b GIT binary patch literal 27885 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 - + \ No newline at end of file diff --git a/script.js b/script.js new file mode 100644 index 00000000..79f9b6d0 --- /dev/null +++ b/script.js @@ -0,0 +1,23 @@ +let loadedPage = document.createDocumentFragment(); +let header = document.createElement("header") +let main = document.createElement("main"); +let sidebar = document.createElement("aside"); +let wrapper = document.createElement("div"); +wrapper.classList.add('wrapper') +let headerWrapper = document.createElement("div"); +headerWrapper.classList.add('header-wrapper') + +loadedPage.append(header); +header.append(headerWrapper); +wrapper.append(main); +main.append(sidebar); +loadedPage.append(wrapper); +document.body.append(loadedPage); + +fetch('./books.json') //path to the file with json data + .then(response => { + return response.json(); + }) + .then(data => { + console.log(data); + }); \ No newline at end of file From 8db7db8a19af38cea757b8021977cb3082fe4bc4 Mon Sep 17 00:00:00 2001 From: birbwatcher Date: Tue, 30 Aug 2022 12:27:06 +0200 Subject: [PATCH 06/55] fix: src excluded from gitignore --- .gitignore | 3 +-- dist/style.css | 2 +- script.js | 5 +++++ src/index.js | 1 + src/scss/app.scss | 33 +++++++++++++++++++++++++++++++++ 5 files changed, 41 insertions(+), 3 deletions(-) create mode 100644 src/index.js create mode 100644 src/scss/app.scss diff --git a/.gitignore b/.gitignore index c593fe9d..30bc1627 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1 @@ -/node_modules -/src \ No newline at end of file +/node_modules \ No newline at end of file diff --git a/dist/style.css b/dist/style.css index 5168e0de..df883711 100644 --- a/dist/style.css +++ b/dist/style.css @@ -1,2 +1,2 @@ -.wrapper{background-color:#f8f8f8;margin:0 auto;width:1200px;height:100vh}.header-wrapper{margin:0 auto;width:1200px;height:100%}header{width:100%;height:100px;background-color:#faea68} +.main-wrapper,.wrapper,.header-wrapper,.footer-wrapper{margin:0 auto;width:1200px}.wrapper{background-color:#f8f8f8;height:100vh}.header-wrapper,.footer-wrapper{height:100%}header{width:100%;height:100px;background-color:#faea68}footer{width:100%;height:30px;background-color:#000;color:#fff} diff --git a/script.js b/script.js index 79f9b6d0..2fc8ebbf 100644 --- a/script.js +++ b/script.js @@ -2,16 +2,21 @@ let loadedPage = document.createDocumentFragment(); let header = document.createElement("header") let main = document.createElement("main"); let sidebar = document.createElement("aside"); +let footer = document.createElement("footer"); let wrapper = document.createElement("div"); wrapper.classList.add('wrapper') let headerWrapper = document.createElement("div"); headerWrapper.classList.add('header-wrapper') +let footerWrapper = document.createElement("div"); +footerWrapper.classList.add('footer-wrapper') loadedPage.append(header); header.append(headerWrapper); wrapper.append(main); main.append(sidebar); loadedPage.append(wrapper); +loadedPage.append(footer); +footer.append(footerWrapper); document.body.append(loadedPage); fetch('./books.json') //path to the file with json data diff --git a/src/index.js b/src/index.js new file mode 100644 index 00000000..a40ac9f7 --- /dev/null +++ b/src/index.js @@ -0,0 +1 @@ +import './scss/app.scss'; \ No newline at end of file diff --git a/src/scss/app.scss b/src/scss/app.scss new file mode 100644 index 00000000..2fc56a91 --- /dev/null +++ b/src/scss/app.scss @@ -0,0 +1,33 @@ +$bgcolor: rgb(248, 248, 248); +$headcolor: #faea68; +$footcolor: black; +$footfontcolor: white; + +.main-wrapper { + margin: 0 auto; + width: 1200px; +} + +.wrapper { + @extend .main-wrapper; + background-color: $bgcolor; + height: 100vh; +} + +.header-wrapper, .footer-wrapper{ + @extend .main-wrapper; + height: 100%; +} + +header { + width: 100%; + height: 100px; + background-color: $headcolor; +} + +footer { + width: 100%; + height: 30px; + background-color: $footcolor; + color: $footfontcolor; +} From bc17bf65dfd9a9dff34b83271efa54674c1c462f Mon Sep 17 00:00:00 2001 From: birbwatcher Date: Tue, 30 Aug 2022 12:40:22 +0200 Subject: [PATCH 07/55] feat: layout created --- dist/style.css | 2 +- script.js | 2 +- src/scss/app.scss | 12 ++++++++++++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/dist/style.css b/dist/style.css index df883711..60d77cee 100644 --- a/dist/style.css +++ b/dist/style.css @@ -1,2 +1,2 @@ -.main-wrapper,.wrapper,.header-wrapper,.footer-wrapper{margin:0 auto;width:1200px}.wrapper{background-color:#f8f8f8;height:100vh}.header-wrapper,.footer-wrapper{height:100%}header{width:100%;height:100px;background-color:#faea68}footer{width:100%;height:30px;background-color:#000;color:#fff} +.main-wrapper,.wrapper,.header-wrapper,.footer-wrapper{margin:0 auto;width:1200px}.wrapper{background-color:#f8f8f8;height:100vh;display:flex}.header-wrapper,.footer-wrapper{height:100%}header{width:100%;height:100px;background-color:#faea68}footer{width:100%;height:30px;background-color:#000;color:#fff}main{display:flex;width:70%;height:100%}aside{width:30%;height:100%} diff --git a/script.js b/script.js index 2fc8ebbf..e387cc0f 100644 --- a/script.js +++ b/script.js @@ -13,7 +13,7 @@ footerWrapper.classList.add('footer-wrapper') loadedPage.append(header); header.append(headerWrapper); wrapper.append(main); -main.append(sidebar); +wrapper.append(sidebar); loadedPage.append(wrapper); loadedPage.append(footer); footer.append(footerWrapper); diff --git a/src/scss/app.scss b/src/scss/app.scss index 2fc56a91..34ad43eb 100644 --- a/src/scss/app.scss +++ b/src/scss/app.scss @@ -12,6 +12,7 @@ $footfontcolor: white; @extend .main-wrapper; background-color: $bgcolor; height: 100vh; + display: flex; } .header-wrapper, .footer-wrapper{ @@ -31,3 +32,14 @@ footer { background-color: $footcolor; color: $footfontcolor; } + +main { + display: flex; + width: 70%; + height: 100%; +} + +aside { + width: 30%; + height: 100%; +} \ No newline at end of file From fc72d6942dec5cb9479e25b461325e2228f1ad99 Mon Sep 17 00:00:00 2001 From: birbwatcher Date: Tue, 30 Aug 2022 15:21:04 +0200 Subject: [PATCH 08/55] feat: full layout with books implemented --- dist/style.css | 2 +- script.js | 40 +++++++++++++++++++++++++++++++++------- src/scss/app.scss | 38 +++++++++++++++++++++++++++++++++++++- 3 files changed, 71 insertions(+), 9 deletions(-) diff --git a/dist/style.css b/dist/style.css index 60d77cee..0bd0517d 100644 --- a/dist/style.css +++ b/dist/style.css @@ -1,2 +1,2 @@ -.main-wrapper,.wrapper,.header-wrapper,.footer-wrapper{margin:0 auto;width:1200px}.wrapper{background-color:#f8f8f8;height:100vh;display:flex}.header-wrapper,.footer-wrapper{height:100%}header{width:100%;height:100px;background-color:#faea68}footer{width:100%;height:30px;background-color:#000;color:#fff}main{display:flex;width:70%;height:100%}aside{width:30%;height:100%} +.main-wrapper,.wrapper,.header-wrapper,.footer-wrapper{margin:0 auto;width:1200px}.wrapper{background-color:#f8f8f8;height:100%;display:flex}.header-wrapper,.footer-wrapper{height:100%}.header-wrapper{display:flex;align-items:center}header{width:100%;height:100px;background-color:#faea68}footer{width:100%;height:30px;background-color:#000;color:#fff}main{display:flex;width:70%;height:100%}aside{display:flex;justify-content:center;width:30%;height:100%;padding-top:20px}.logo{width:50px;height:50px;background-color:red;margin-left:20px}.cards-container{display:flex;flex-wrap:wrap;gap:5px;width:100%;height:100%;padding:20px}.card-item{width:200px;height:300px;background-color:blueviolet}.cart{background-color:cadetblue;width:300px;height:400px} diff --git a/script.js b/script.js index e387cc0f..200187b1 100644 --- a/script.js +++ b/script.js @@ -9,6 +9,12 @@ let headerWrapper = document.createElement("div"); headerWrapper.classList.add('header-wrapper') let footerWrapper = document.createElement("div"); footerWrapper.classList.add('footer-wrapper') +let logo = document.createElement("div"); +logo.classList.add('logo'); +let cardContainer = document.createElement("div"); +cardContainer.classList.add('cards-container'); +let cart = document.createElement("div"); +cart.classList.add('cart'); loadedPage.append(header); header.append(headerWrapper); @@ -18,11 +24,31 @@ loadedPage.append(wrapper); loadedPage.append(footer); footer.append(footerWrapper); document.body.append(loadedPage); +headerWrapper.append(logo) +main.append(cardContainer); +sidebar.append(cart) + +function createCard() { + for (i=0;i { - return response.json(); - }) - .then(data => { - console.log(data); - }); \ No newline at end of file diff --git a/src/scss/app.scss b/src/scss/app.scss index 34ad43eb..b009201a 100644 --- a/src/scss/app.scss +++ b/src/scss/app.scss @@ -11,7 +11,7 @@ $footfontcolor: white; .wrapper { @extend .main-wrapper; background-color: $bgcolor; - height: 100vh; + height: 100%; display: flex; } @@ -20,6 +20,11 @@ $footfontcolor: white; height: 100%; } +.header-wrapper { + display: flex; + align-items: center; +} + header { width: 100%; height: 100px; @@ -40,6 +45,37 @@ main { } aside { + display: flex; + justify-content: center; width: 30%; height: 100%; + padding-top: 20px; +} + +.logo { + width: 50px; + height: 50px; + background-color: red; + margin-left: 20px; +} + +.cards-container { + display: flex; + flex-wrap: wrap; + gap: 5px; + width: 100%; + height: 100%; + padding: 20px; +} + +.card-item { + width: 200px; + height: 300px; + background-color: blueviolet +} + +.cart { + background-color:cadetblue; + width: 300px; + height: 400px; } \ No newline at end of file From 174fbdbcc72dcd5fe9ebd9991a17cf6e7c240366 Mon Sep 17 00:00:00 2001 From: birbwatcher Date: Tue, 30 Aug 2022 22:25:27 +0200 Subject: [PATCH 09/55] feat: buttons and price added --- books.json | 8 ++-- dist/style.css | 2 +- script.js | 44 ++++++++++++++++++---- src/scss/app.scss | 94 ++++++++++++++++++++++++++++++++++++----------- 4 files changed, 114 insertions(+), 34 deletions(-) diff --git a/books.json b/books.json index b871ee63..0f607507 100644 --- a/books.json +++ b/books.json @@ -14,13 +14,13 @@ }, { "author": "David Flanagan", - "imageLink": "./assets/js-the-defenitive-guide.jpg", + "imageLink": "./assets/js-the-definitive-guide.jpg", "title": "JavaScript: The Definitive Guide", "price": 40, "description": "This Fifth Edition is completely revised and expanded to cover JavaScript as it is used in today's Web 2.0 applications. This book is both an example-driven programmer's guide and a keep-on-your-desk reference, with new chapters that explain everything you need to know to get the most out of JavaScript" }, { - "author": " Eric Elliott", + "author": "Eric Elliott", "imageLink": "./assets/programming-js-applications.jpg", "title": "Programming JavaScript Applications", "price": 19, @@ -28,8 +28,8 @@ }, { "author": "Addy Osmani", - "imageLink": "add image to your project,put link to it there", - "title": "./assets/js-design-patterns.jpg", + "imageLink": "./assets/js-design-patterns.jpg", + "title": "JavaScript Design Patterns", "price": 32, "description": "With Learning JavaScript Design Patterns, you’ll learn how to write beautiful, structured, and maintainable JavaScript by applying classical and modern design patterns to the language. If you want to keep your code efficient, more manageable, and up-to-date with the latest best practices, this book is for you." }, diff --git a/dist/style.css b/dist/style.css index 0bd0517d..b9b5f4c7 100644 --- a/dist/style.css +++ b/dist/style.css @@ -1,2 +1,2 @@ -.main-wrapper,.wrapper,.header-wrapper,.footer-wrapper{margin:0 auto;width:1200px}.wrapper{background-color:#f8f8f8;height:100%;display:flex}.header-wrapper,.footer-wrapper{height:100%}.header-wrapper{display:flex;align-items:center}header{width:100%;height:100px;background-color:#faea68}footer{width:100%;height:30px;background-color:#000;color:#fff}main{display:flex;width:70%;height:100%}aside{display:flex;justify-content:center;width:30%;height:100%;padding-top:20px}.logo{width:50px;height:50px;background-color:red;margin-left:20px}.cards-container{display:flex;flex-wrap:wrap;gap:5px;width:100%;height:100%;padding:20px}.card-item{width:200px;height:300px;background-color:blueviolet}.cart{background-color:cadetblue;width:300px;height:400px} +body{font-family:'Helvetica Neue',Helvetica,'Lucida Grande','Droid Sans',Tahoma,'Microsoft Sans Serif',sans-serif}.main-wrapper,.wrapper,.header-wrapper,.footer-wrapper{margin:0 auto;width:1200px}.wrapper{height:100%;display:flex}.header-wrapper,.footer-wrapper{height:100%}.header-wrapper{display:flex;align-items:center}header{width:100%;height:100px;background-color:#faea68}header .logo{width:50px;height:50px;background-color:red;margin-left:20px}footer{width:100%;height:30px;background-color:#000;color:#fff}main{display:flex;width:70%;height:100%}aside{display:flex;justify-content:center;width:30%;height:100%;padding-top:20px}aside .cart{background-color:cadetblue;width:300px;height:400px}.cards-container{display:flex;flex-wrap:wrap;justify-content:space-between;row-gap:60px;column-gap:40px;width:100%;height:100%;padding:20px 0}.cards-container .card-item{width:200px;display:flex;position:relative;flex-direction:column;padding:20px;border-radius:20px;cursor:pointer}.cards-container .card-item img{height:300px;width:100%}.cards-container .card-item b{color:grey}.cards-container .card-item h3{font-size:16px;margin-top:10px;margin-bottom:10px}.cards-container .card-item .bar{display:flex;justify-content:space-between;align-items:center;margin:10px 20px}.cards-container .card-item .fast-view{position:absolute;border-radius:20px;background-color:white;color:black;padding:5px 10px;left:50%;top:50%;transform:translate(-50%, -50%)}.cards-container .card-item button{cursor:pointer;border:none;border-radius:20px;background-color:orange;padding:5px 10px}.cards-container .card-item button:hover{background-color:#fbd183}.cards-container .card-item span{font-size:20px}.cards-container .card-item:hover{box-shadow:0px 2px 35px 14px rgba(13,13,13,0.04)} diff --git a/script.js b/script.js index 200187b1..d9943d90 100644 --- a/script.js +++ b/script.js @@ -13,8 +13,6 @@ let logo = document.createElement("div"); logo.classList.add('logo'); let cardContainer = document.createElement("div"); cardContainer.classList.add('cards-container'); -let cart = document.createElement("div"); -cart.classList.add('cart'); loadedPage.append(header); header.append(headerWrapper); @@ -26,16 +24,45 @@ footer.append(footerWrapper); document.body.append(loadedPage); headerWrapper.append(logo) main.append(cardContainer); -sidebar.append(cart) -function createCard() { +function createCard(x) { for (i=0;i Date: Tue, 30 Aug 2022 22:37:45 +0200 Subject: [PATCH 10/55] feat: fast view button added --- dist/style.css | 2 +- src/scss/app.scss | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/dist/style.css b/dist/style.css index b9b5f4c7..38632f07 100644 --- a/dist/style.css +++ b/dist/style.css @@ -1,2 +1,2 @@ -body{font-family:'Helvetica Neue',Helvetica,'Lucida Grande','Droid Sans',Tahoma,'Microsoft Sans Serif',sans-serif}.main-wrapper,.wrapper,.header-wrapper,.footer-wrapper{margin:0 auto;width:1200px}.wrapper{height:100%;display:flex}.header-wrapper,.footer-wrapper{height:100%}.header-wrapper{display:flex;align-items:center}header{width:100%;height:100px;background-color:#faea68}header .logo{width:50px;height:50px;background-color:red;margin-left:20px}footer{width:100%;height:30px;background-color:#000;color:#fff}main{display:flex;width:70%;height:100%}aside{display:flex;justify-content:center;width:30%;height:100%;padding-top:20px}aside .cart{background-color:cadetblue;width:300px;height:400px}.cards-container{display:flex;flex-wrap:wrap;justify-content:space-between;row-gap:60px;column-gap:40px;width:100%;height:100%;padding:20px 0}.cards-container .card-item{width:200px;display:flex;position:relative;flex-direction:column;padding:20px;border-radius:20px;cursor:pointer}.cards-container .card-item img{height:300px;width:100%}.cards-container .card-item b{color:grey}.cards-container .card-item h3{font-size:16px;margin-top:10px;margin-bottom:10px}.cards-container .card-item .bar{display:flex;justify-content:space-between;align-items:center;margin:10px 20px}.cards-container .card-item .fast-view{position:absolute;border-radius:20px;background-color:white;color:black;padding:5px 10px;left:50%;top:50%;transform:translate(-50%, -50%)}.cards-container .card-item button{cursor:pointer;border:none;border-radius:20px;background-color:orange;padding:5px 10px}.cards-container .card-item button:hover{background-color:#fbd183}.cards-container .card-item span{font-size:20px}.cards-container .card-item:hover{box-shadow:0px 2px 35px 14px rgba(13,13,13,0.04)} +body{font-family:'Helvetica Neue',Helvetica,'Lucida Grande','Droid Sans',Tahoma,'Microsoft Sans Serif',sans-serif}.main-wrapper,.wrapper,.header-wrapper,.footer-wrapper{margin:0 auto;width:1200px}.wrapper{height:100%;display:flex}.header-wrapper,.footer-wrapper{height:100%}.header-wrapper{display:flex;align-items:center}header{width:100%;height:100px;background-color:#faea68}header .logo{width:50px;height:50px;background-color:red;margin-left:20px}footer{width:100%;height:30px;background-color:#000;color:#fff}main{display:flex;width:70%;height:100%}aside{display:flex;justify-content:center;width:30%;height:100%;padding-top:20px}aside .cart{background-color:cadetblue;width:300px;height:400px}.cards-container{display:flex;flex-wrap:wrap;justify-content:space-between;row-gap:60px;column-gap:40px;width:100%;height:100%;padding:20px 0}.cards-container .card-item{width:200px;display:flex;position:relative;flex-direction:column;padding:20px;border-radius:20px;cursor:pointer}.cards-container .card-item img{height:300px;width:100%}.cards-container .card-item b{color:grey}.cards-container .card-item h3{font-size:16px;margin-top:10px;margin-bottom:10px}.cards-container .card-item .bar{display:flex;justify-content:space-between;align-items:center;margin:10px 20px}.cards-container .card-item .fast-view{display:none;position:absolute;border-radius:20px;background-color:white;color:black;padding:10px 20px;left:50%;top:50%;transform:translate(-50%, -50%)}.cards-container .card-item button{cursor:pointer;border:none;border-radius:20px;background-color:orange;padding:5px 10px}.cards-container .card-item button:hover{background-color:#fbd183}.cards-container .card-item span{font-size:20px}.cards-container .card-item:hover{box-shadow:0px 2px 35px 14px rgba(13,13,13,0.04)}.cards-container .card-item:hover .fast-view{display:block} diff --git a/src/scss/app.scss b/src/scss/app.scss index 5dd3ff73..55e81080 100644 --- a/src/scss/app.scss +++ b/src/scss/app.scss @@ -103,11 +103,12 @@ aside { margin: 10px 20px; } .fast-view { + display: none; position: absolute; border-radius: 20px; background-color: white; color: black; - padding: 5px 10px; + padding: 10px 20px; left: 50%; top: 50%; transform:translate(-50%, -50%); @@ -129,5 +130,8 @@ aside { .card-item:hover { box-shadow: 0px 2px 35px 14px rgba(13, 13, 13, 0.04); } + .card-item:hover .fast-view { + display: block; + } } From b8610fc37bc9c9c25bae6d20df13bd883bca0544 Mon Sep 17 00:00:00 2001 From: birbwatcher Date: Tue, 30 Aug 2022 23:42:58 +0200 Subject: [PATCH 11/55] feat: logo added --- assets/logo.png | Bin 0 -> 17913 bytes assets/logo.svg | 3 +++ dist/style.css | 2 +- script.js | 7 ++++++- src/scss/app.scss | 13 ++++++++----- 5 files changed, 18 insertions(+), 7 deletions(-) create mode 100644 assets/logo.png create mode 100644 assets/logo.svg diff --git a/assets/logo.png b/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..4ce3bd6271928226749d7ad134cb75ca83e0a5e2 GIT binary patch literal 17913 zcmaI-byQqUvj+;}?hZi)cXxMp3lQAh-Q7L71P{U8b&w#zb#S-f65K9%p7%ZH`_{VW z)*myyXLVJV{JM6}-c`{mO47&(1PEYYV92sE5^7*z;B_BkFF2Tw&yW&s}p2jZbV4`M@CguQHdt*y;HFIM#Z|6~S0WdH~3Tq8*H*G})K2t|~CgZvNJilSTeKn^71mXuraf-F@DToboF*{GxlP1a3%k* z1POCjQx|I|H)}@+z+Z{RCXViIf@B}6{%eE1)BlKdaQ%;;K0L5rvFY< zRQ&&*YH$BPvt8ZP%>P&4|5w4T8s1Lk%xdPYj_xj|ACa>l|GShEpSX*;v74idhNGk1 zf8D5J<>=<)`5U>|kmxDEXLyA>Qf=f)4SBgVYiksuVyb_M4?)K&mZvW*q`(Iw}|C9GG z80?)sR+cb#vGy=GlX7vi2mE6*pY{K(3&;N{??1d||FHq%p z0iVCa{{imD#s5Ix+~EW7E+4>FykwIH0~52Al@QhNS~=B+4buF%Ak?}EYN_vJ`1#!v z4N8I{Dk^HJt~hE4PRdjvj*5Vj^~qLYzKm7Mlr$ZWlMc@`3L6|74ct0}Y?i-stl_MA z^+MRv!1&(YaB01jFW=xU?RjIoo87VJaWa=T(p4W9?;qkL@bW}N3CqiPF*5a2aarIx_nb);Z}!q7TxhmQCjWO@Qj9+<66cRR^--ny2b z@;@sjQO=+0K>lkPdEKJAo?~_P<;xB8#GB8}V&8hlJ@JGrTUZl~3>_+ya*YnGoRN${ zsrBrX%vT9nBzPp1)aAWENMNlGkkxIe*Kzom6!O_VTk!e#u(rc$9AnY{AI}C8slU7| z!a97re>;|Ub#WPf5D=Q?Kt>W1DUx8yY!%_|2Z{!LO#`?rq-H?2?9cWxL5Ze!fz?3a zY;#MhjuwjW5JWUI%xY%jar$gvCayigorwMQeH<`>;8P3H$iswwqCnmGm_0ckHcs4J zF^m%mEQE4u+Af5$l{^}hm>ky<1Z<0as64S2HA@2K5pRg%Iih#mA>bRY0PiMixsSR4 zTk5$`o5|kgo9+8Uq~W@^-)4$dlS40{L^Fn7!8i9FnDf53mKGUoZydC7m(Y0i#Btd?G7)_3=+ zgC1PW{^-eDSaM%hblPX1;#o>v+T0lAs%&MKCIEQb|klfq1UoyWvjd8 zdd%PLh^`&_Ft%yX1O0G1S^+|3!ZX6>gA19r*pDqjiYN>o$O&=>WAeS;4fK7)twc6ZX3oEt5G{nMT1FFYFH1uQ=1IcDqWs6}YWhHAYBMop3fLT783e?XvuQuZ$ zX(!K(H9!AJ164{dC(Wo9UVd*^9q43oGEg8KksZoo)gvc+6>#cV0Wd~AfwJX|&l zf%a3e`e+4wE>hifETd^lGGD{_f7XWiTx-C;G95MwL0VV#S@hn)+87gS88QN2(LupM zF^W)mOieaxCJMVU)Bs+aT5QCY8 z;!iP4TxNhf;9{+>gZoc%hLSSoYq49As&1}r(J)Y?ovU+Wv5U<@!~dIaf`1lNG^7I( zIus)9Wla{wDwV9@v5&532u@7?bq7sXfU*QuINvC_CQ&mi#_d;%TfDsKnpv&7y<{QcWBqLPc2$tlu5roNvg-}|N2>vb9#Q|p z4(YRJ<=wvgJ^c)VSq^wb)<#H*kz8C45APdn+WKZb!zQDnO~sfq4}KEj-ruqB{)?7q znmpsbsuPJ$^@n^zUk6*=2ll;;O585x%0fOCd6HekR0r}Iwo!Es!xl_ z{}Uk=oB5>Xj}*6Cz~7B$=-E&62W36_%8MSBY| zIfG~nzZ(ySRH3;}wE-*x9|2T z4Nv(b$i0uxcwHOxH;-7^LacUk{V3LWOE7%dBb}?#GwL8{3qj5WVq%a=n8X4_{9}81E^s!;BX!TluFD^J`@=!)Ao8+1PRX@f9ZXg z%R8n1$N-n$0Cgja`}$*>zDFL~H{5GNcK(HM`l4I!mZ8x#M zv;Uso^>hpK)oS0Zoh$H~Of1&q_qt>MFzzU-tp3a1#02wISP!A&n_zq~(@IyP}<&P;z`D9?_A>(cp>-x{7QK&F_a_(pBTT+N9=j zI}RXUyC`IxG3I}tEHCS*5YxiQjsWBoU<5HD0=lnT1>L5amB0JPX4H&1-!bJ@X$ZN8 zn);IG?fUYcTK>I_p!a?EImMrP+tRcLmD1Z$L*!M}ffkx%r4|Mq zc>z(ZllJ!ydj9MTXrUgZed|f)u2|gHmVAFm_IB#S_bc>=I1LV)Y{J1R9ysN7;NSB_}&P%{;u-H9cJ8^hfZ!}juAsan} zOgl97Ziic*rzl?X!Nd3>4y5@6pJM7hJ8;q0%nIqnGGILNIlMK`|GMWy8u>&uJDsuX zIlg|TC~(3lgnlR{fnDl=edMPzP|~c<73NJ6?|zZ-KMqork1#VoAVP4^hY*tjKY~$Z z@hYI>HZu2bwC}Z@;Cj4tv648?-wIpD*Pio z7E+6Zl;~{q^55~1WvAeIT~k@cXn$C|73Sklb&xk+FhDu_2Oh%4-!f;~C4QZ>hEJXJ zLU$xssi$2}-{k8FIc{{xdtPk#tBQ(hJrQJsW2-rKS>()jlTvhHyH6-&lf=fLiX;-R zZ*=^bl|Nh;@|``g_ZIx@q}lUnV-bXMas2xz^13^c8>Mk#fHz%7159Z_+wC{*gTmGW zSX(YqM_I5LF95As<_J+i;ayBy!Gl-i#%aC`YO0_&7oxjHZzurfBX4fPLm&opwzXdV zGG7(Fo`u7N%TV_EGTcu+lhupq%6YhJtN2I%e&oQwu_Wp;7p?{nO!=6x8n)E7M%+2L zCbar}{N<}v>(!W9phvg{OWA@Lll@8qi2tG*wY2x9Z`L(NZXl!VO#y9&JbBp1c62Xg z0n?NUW%U|tsG~LNX|{iVniBMW(5|lhy7?Vf(ce|2_q_VEC3V-R?aFf}{WCWqs)aR^ z)pN)4%(rg+T_f-%%@jD~;bXc3&IiHzt$qRf+Cd+Z;h!>D7I7_OeFTpImb{J%@Xz=k zf3p0j;S@HXC3{|XD1W-4*#!Yj>S5dWfcbbFn1S>qeo3Qih91ahXEaVYq)5a4DZfQx zj58^ejS4f9wGea!J)GNLTU_)b>@W~u93nzYPp;bhm9_Pn+#X9jg|*!#TXkEIn+Sbl zj2}|u=nLyq3Mm&y&3GZmrWo<2d#4UuOO*od|G=B#-t#g!DHKEH%rG|KKe>eIKHeI! zwl!v8t*DRKcKU{B^3^Nc25)@2P~#K*7|&tVLf~Uh520 z^h^l{^Y8VO0mnot==s|Z3*FK4E&UI8fG%^vcQyRG&Yl599FJC%;MV z$m8^`$bLhoDxlH&W~;VWkfp7ui6ev1JG*oy-lU?!roFvAazvHSOypiM6b5;Tqt5e< z)ivIeZgFoVEkCijDSp`Z&Yyk6eXP;$e7c=W;&+7A#sr1ug8X@w#QB`D*k^}Rrs0cT z@kDJDj>2Rs9cehE3UoZ!QKR9IccQDk_dL|R3y=^?-l6{Ao6;pag6vD|B1->an?{>08o0`jUK=5TBL99*l{! z_0U%43SFcEeGN*m^q%B(sWjz_vG8y4j-;Bw%0WY+FKj6rWpN<*?mag>e)9W1*YB6K z@LP|&4@F(@Zmn@|089i*+{Bnc3DoC%2ZO+XXx%5|$NCgeW+gpo7*VqxiQ}(N=m&mA zt`1+1peTe_!G>8z@a#jF9!H-Eze{AOWyQnGinwr!nc-;2E&~e5!%yP4=_u_IJj^MR=_kIgH@b2Al&mK<_Z&dL;#ni7%ax?E&heCff&;Vr5IBz|H zjd12v;3CaH^_~y9(Wx4gRoE$vk)dB>C~QF&X*R3*TsUEXa}2muQ9=n#+9;WB*Qr=v z@j!wRs6h!&w9675(hZ-P3qwZS_1C?vZ^a*;S6;1{gEo*qwVqmnMyAc?WsOWc?q3g3 z;`D;y$sS9Gda56Zm{ipXNuFsQPfS`&7?d<<@qg{v&bTIf{>eNBgf=VAXAVIFF(@t( zNr9{z6#3h!3Mv}7*eiII4RHOD_aT-bB4N6Tqd&xd`2AIfF7a!}UX_HV^SIT7n~K1G z8TPI*>bTHp1w261Vv!?-;sSPVF`CUokEKMpG?F-l@$yvS3Y<(tu+S5^V`P+q)oFic z%K7zg?dbebyzY=Z$J}7{%Uj;*n1v5*T?Jo!{W#P2xI!I_p1T06GMd|{{Of6-;hA+( zb9t^aT9G@-c@COsL`Kj?jpDJ zWTGZxMAC_cbhU328wU(uUWaE4gtgBsKL;YvUQ;f(9!oB zJJD|dPf$FM6(5_|VF2mq8##}q#kQ4lmAu;Y(F z21+l)(r8~omoltIN>{B)J{n;R^nFyeh*~4&LQMPCPc8ef5>)svhedmYdh99HfLD{T z4Cta06n7MR{4cjxt&nNAj{0Q^56hcv$?S>MbHi`kL;VSsHLbVZ;TS*)*^&NOfV-4s z92%+Jyv$w&1GROX{6pvTtq?bH7j1w#&!3@^#IPkb&9xr`2biAmiHwE|EZ{2~9WXF> z37btz+?NYqeZF>vZsftVgCMd*Mvh*L$$6iqp*Mpa*ym>PBhWx+dsCr`0{$+Xvwke+ zYJRZ1i)d`ROP}2*$0j23$2;&Qv;Ej!o_Z{o7z7nroySGm?h|aSeTk5hMw}R9N%i65 z3enuvme(*KJ5=VlZKA#ZpDdJ&>rZ=cM>U1 z_hZRcF22y(vArmZGTis4Pi+UK!fY7w>;>XK$?snYy9}C@Ftc)=()MMPKuCR_9CMZ~ThnTjxdej`p|W(SGeJcKeGtHZFG)aR_A#X-&8+WJo~ zyz5fHY)>gXLuMk!T-Rao>&z2jD^=0eO+4GP_A}#EM&b)i-(V9$GH5gIa)WC48Yxy3 z%}OQ=o|0uMNbGsv%^$P937(@;;3KvW|xg4Kz(Rp8ghiO;HcuE z5eWTld+HW;Bv@tAbnY?d)6dmj6~AODk$Ig6@n+bZ*xCA`VW|6i9mn=P90}?4pZ3TV znJBvS;~WD2WUK|ZGTjAxB1LrrUC01e;qg-aR_?FiCss*I1#uM@GBV6&TnkvhmNC%` zhA5}+fExr&%d$Mm&1l0C9pPMESZ_t@LC)G9REiDqv$yFj_{QXs8gkfdlEWs=@2KgY z`w|_zk>0MB7&&E-6g7?r`xggiA(wEXvhK;LAPCVovs<~L#A!1}%h_#7I1We<_Hjj>P2&Y$g?07klDH|s z2$7R;IQC6fXx2_e32>i9kDTx8f1<9P>X7bz*)Q&&%pg(YHIJi(0UJj`t5zyl{hjKOs$fx6B)@ehn)jHsO6pPzj)^5~ zyGxr(w>5-cdyHJ!4w6D40ZL_Xh}!6$Znzfc?4|Kp8y|roC`_FDh)giPWK?GCN2OCD zq?i8Mip$`I6i~wZbq40(2m?-jPm*(C=Ci;i5RSa-KiD@RzTq6mHtuzLqhfw z!=r0plm3ijPqe&Gf}7Z4(Z!;B8n{@>*V}eIm-jTAFTm*Atkah8PVF z-U~XKrp_bJdrP8Eu;Bm)v1ok8ou!0vGzKCv`AFZCbt<|D04JI7)t)wQM!@WTJzdJ* z$>rA#=LBgj78$)`A|g-}86;UzS!W>FQ9nbeIL*uaW9a6rbLnZpGY@Fge^zUmLjKrw zG{)e1p(TD+Ek7*HJtb^-={1}khQ}~4c=iQw?YE`_wh)B2X}8*OT-=8^=MAjx4=9f* z4T>fp9-%U$k4-~^@vnMYOnlE{J#*xa37s-De07}}Kzu^94R~rI8%sI0;=QbZ>57D1 z#SnF7K$ApNm;)F6)3p3W%O8|zYosUe3G8WZiHN4b%>hryX}{1`h=yH+ezGkuQC5U=Jhi zG8QnZW_ZoS7dWH{2H^4yzdeGE5$g2ekmi;LLn-H+41wg{-N-S_YOHt5CyfH)V&(ZM zbFp1$o1@7>7`z>L(>yZD{5NJtpyxJ%UrfP+QpX)#hY8T4Om)hTI5Pz6RmxL;REOJyK+S**zQ~fh{P(WsE7ocv(P zt`?XBm%ImPsj^UF|BRHN1LGEQ6?CUUE$wdvK4%d>_DKYVb(sipV-;rJYXedEdZH}v zQw%2NY|FUihJ1P9xW0Z4v%-T0Wp-^{`*eEv1>b}y%B;9KL-Leo=p!U7`7$BB{M?=1 zkJ;BDvaC|(e2zbk3QOaoA*Qp>DyBx67Vf+&lH%6V+LRG|?^Z4k?W+ew-qCf^0)sCS zd!MbZc^7X+p93L;J5RD;gth$2svFfqK-vo-^2tQ=>8P_r^GJ*+e15Q)hjE@IfSU zCF=k$w$chm{dc>)9gwA0Vk~WXTrjEtCOodY>fM_s&EB3^Y8lHif_T`#ZLNaXyp#*M zi*Fx{+w8O`D-1jC z+~lR=Fx8M#q2bi%RU!9ivd$eJaJOr2YfGEZ8Ni81M>lYW0dv~NAD}Jo%n4QHtG;02 z+j6orGhibi?b36&SZUp@PEDfNe(>IXEmFJ>0@P_5o=*l|&QPDPJ=~@jMkI4C@7@O) zOZ2gj7mUbnkMh22v;1yK5e|4N>`ai5!}HkwqCC3zwn#`V*0qQHmS5XrI0CebW2JTjRg*scl^9KQzmyufmo z?diVPo{pQv9AZ57E@@v2bE(L9d3A#vd6`orF%#=v;zdesNQZV~sp{a{a1aj1iLZ)m zi9_6w;sToTVD^}BHcl*HPlIv65gup-yF2(CHdLO zA^SDc(2zg-&o;{+LIwux-RTY?oo5q1h%vui-uDraY%EB^4;a^Q(|E8{!xBfog)vIM zfb=J4Q+R=aQw-i%i|k;Z>^{a&qKcF{x`*r^Se{^+wz{$OtBL+nH*ta00bo?TFU7R?G7S5K(+Vh8AX|1Yt)#(H+b|RbF@R?20uet(4CMz^dFTrG2 z+o;ui-rHbvde{BIobCmpn$xMbuo^f#btMqHuf~FN?Wd)5QS(p6M?V^CUi2I9O}Dpv zPu7*E`&h7-B6zk;VtfdwPVp9cNd<2Ddq3%S`rdtSwH1)Q{^oKFZ@pQAchttz;P8u& z_|3y9#oOljEDbQwV$(9Yfc|VS-DGod44p=vaBQPUiIy!a++QMYY5%VOA7kD+m zMB;9~p`AWD8O`c>uD$jyyl(tNNWzc8h6z1f>3&PskW5X5P@9YcRrJ2?ygah|?)||h zB()zj?dNndk@)Eh_}VgPmW5YNyo$F?AQ zt-4vccW! zc%{^a>j!wV;|5LBmw$O<_53}EapDv}b?!}SFR>a^#;DLKM()0~7uGs@qPjAaS&6(# zxJvvCyq@aC18smLW#S^jY{EvIs*#BVTTt^@I@hBawz=XEka4SWV#-s7=E?fgeXbdG zdU`&8a}p#a8mmF|_rU_5xSrSS&qN=zn05<=ryx_XDfETzWmdRV(4$hYX_&dw1|96o z{K&~DMWdFQ5anyJl@GEll(}07)&aLcUrHzHe1_-HjDaaa|6Y$wUPCy=`Ew2qH5$1y zlUApHysrhNYb1CRsXqboIgz0UmB-c9nmTY~;h~9|<(poUl|?YUECAho)YX7xBO4C2OlhVd*sAsxd)G39_0^%^>nzW&g-Ml?_ZhE0YuCqDYe?H zATnP27r_$|b(~%}2DWc0&}`6A*LGh1%IHI?X~7Ca?w3o_(Usaq3zwtViaD-zRwWku zg7#AJB~$@gR7Oec>lu9g;n$)N3!bFpEaXC!k$i`wSf==qY0w8Z2naxO{{V{2y&(p(`97ZWsOE-T?ekAW)e4!vcwS# zhjpt`d94!D&K4|p-cY0?ef4iQLW$gJs@M>tyOB{2m=KM?VwutLo&{KQf)kd!!C55D zkh8Inpt5;5Eebv^=1>?SqJ(4UrS5a;^9ajYc>~>x{2t3^pYvJol&>Pb7~221fA{i|VkaMwdqp!cw_qD7{lD>E@uwdEY3D<%3MKM9$>G*&2EZ zJfFSq^t1K)x(I7lc`;QAhKdj;&UzW^AtS-Yt8H`;Zz5FM*#_d?lymd03#nNYDOrNB zkWY6q4k#=hRWx9$Ns3N|#o``3PJU!om4@G}u}GXX>JvJ5G=~|MRitr_xHw5&3PNln zf3#WXxcuTQaNNK#xP)LvXkMx9XvZX3?Eo(-0b{N-+bNn;fPj3ued1bQ{Z5d)aOfl4 zDhSgR*z@L44Pxf;73ynV~;7~?kMV?sHlI$lVo|^GwZK5e?Lma zw#o%keG_mR9xaYwsO513Q;-j>!-3Y(w9Q1rl)e@94V)p)47hvn_V?MND$e7jZQdh60p7U3q zJH4m^ZYNs49OOoD1(u@BWO2`lcfexL&S0WMl9yc+(A}5!=wP8w|fGN;0`{jBC9K*l9KMiEfCD>)Xd58w? z0*`0NwqUG^2QV|~;R__((9)1t#ykzd47+_D)S^AIZUx#&Vpm;}$Ai(zTyWrio=A&~ ze(f*8Kga+HdCr!BSJuVXRjVkPu2QDrw$N(M5Rxbln}~zD;>9=Z!`F$f!c6TWNEC3sV0v2aHiuSP0s3OA#=;42qHB7y;d_Jd0*q*Ji@DKt_Hy$ z;AFhe?YZfUdcjA67a;{Jq?4X2k2DlD99)l|K0boW00 z6kL+pBaNqttB4f}zT;KG z95AYLc}e+!TLqzJkNK;JklGf@YDEscDhD^soR%%z`sYO9I431dEI@wnXD}HZGf9d~| z{SSRoBaqT2tx-^7ra))1Fej|f-XHo`3hT-iV^OJ3NC`%~nnI`Biq7H0N3Bf34&LW-PyVkm9=<7-@-88T zyifzT8t;X(W+4+JGO<8^*>Y#dcfmmCmGpJO!Mk8VO?okJGC^r|F5Y4YYlqC*W0AxG z4a%<_qg?vasw>T`MmA|0H^%z*`j%p2=#U6>Qb=v5hVj@%j9yy^zPBIm|9pPWi%10x zEg}XZHPB!{&((wal7M<*XklbCGaRGO`Q>+wgd>hYg4^g|Y@ zyzTjT!ct*7FxO8N!1amTv8m~_ZP=JDxY?SRHJ7o4gL-{EZU^XA^HVt!nWSKFJ`;H^Xq#2TKcL>{S4A%dbE7T_31rP4e!9_4sFHfc zGup4-X&C=rtdWsXjHcGn5@O@{36jn;X|$=oPL{9w_9;@+PM>%2(;9#H{Q-C)tyDiY z+P(nL6+-4S9!EJQFYl{*1qYN3f*V5##h-Fm1I^&tmG!x`Udi;1+aK4ne{iv4_X)Pj zjfRW#wo08c))qe>vh4*QMf2wpw0 z&$vzU6WLz);2*#vzyC*72=1adS;`5ZjtU*_ks*Ky{mq)q`%T3Zov(Y`1i6n;K zqp6}D&9q;U*WRwW4|!&dp*PyKk{W#Q;%8i6=4X@bABOXA0>);itaamMB8#OsEw4C@vSwr zkAvQh1VkF?#xu5UPmQV&2JU(FK(tiF^}ycu+rm*O9DP5h}Fy1|bZO zF17~31G`a-21}=PX1!H~>tiAS}Gtr}iJ8H)JZVTHnQ`{)(-K?~_?!7oZ3(?gY zZr&?|+O&=`?2a<86`NaRT)E&_9Ti$GZ+XHgjvCb25y!=Z8pWC+U7Lkq3d%^$jiV?U z!5A}*l7&(5hQ%=!d39|eNSLSlc?$r4rUE6*fjE=Dz~srYV{;Q7=m}Nxa?fIUgPN#H z05X2mEPvpP8);-*s4}IX6!;M~#%s_jcKT3Zpdh|e=C*3d=Mvtwu0q;5nyV0KaTj_Y*B<~l{a7T&`Fibb>bfhwBK8rM20SrE11RLcNsTW5}=gCap7tR#me8S;z?j(Qfz~naKzvtRR|u2l3)DLNXS4VQh4!sB1ttYi!U?NFn0E{U#|%w+Z=%8dxu3Uo#FpkJp?rF>?C;-b!(=DbP?jL7}`%nn?3GaTry z#MP^9-wj-i#2cNVq{fBP*){Zffg%m_-bO=M1h1Vn!PKg6^%_tgryqG)Bt`#tUf5}$ zp_6QF$dg&#RwYd1TXYj!H`rP! zPy6nEG#8+}8$8on!9d9FtRqAoA8Xr3Z;cCI3p{!^nzsv4=~(jco(}~{loVXs3;2|` zqu%B2p!bUOz&pKjWGQ@2Vp1NYz%LfjlE>yRm@T$RzKm3g8PQlgqh&XKFzD9Cb$s`M za)kGj@r;br4sr@;3N}%t*KO^N#_YLV1Z?zFh5f?s-H=0*)4Q6`_ zB-i@;e$#v}t9{U*-Ydp5XXwB~XacF0u<{lq;sv;-zMjBJC#LUO1=Lt^F&vHI8}v55EiH6iMt@g~8;ly#^H|q_{LT!31ABDD3+K zx7}CK?18nk=ocdRcK#Mw+v*LiFe6TcgCQDFN!?LW>ueI) z%j$p(zdtAgkNrbmJ@_ib&ggQNXZ5GhDh?~Uy@rn-o481bKs|wsSwJ^^lmku>pAq}X z!QXOAUx>!=Dg@Qk&z?KKOwmsy;U#!WTUfwYP)cwPvK!7W1}B^=%Il%3leOmhdE~^k zC^6$Zq9ys)5~NUrJ_-oN@4cGuQ5GluRxI5^;T$b)svyAFam9EB8@C(n9O(0NJu8>7 z67K1PeqVA^6&7K{P~8z~CaCQ0=nZdsbEoNj5ypZY7DZmbu0+Ij4RV8KF`~u`K7R%@ zwhnagLP8FBqEEEm#y|g_L)T(0`32c%HwQMyDcT=D;U^GGHdF}Ijv^AstVLAfY(N7X zn98DvHreD_>5w4+g3Cx!N;SZPT4GAV`$B(Xg%#JQ=)Xi#S7>XH9tpc9EO`&vvYqTU z2N5fL_@O#<%gM1CBvvT!^g z@DbV!WqxUjcE5+0lU%bU{ELNAnP-t->dF4^rNDfz9r!i=C)HaJ4&#^k$ob|)m!Sf6 zi{^R=@x6R)2<`wbb-ni$9?#$G-|sd!i+M$f8KC**0BtQeP~ojWbfdFn2jx5EW0Tl&RHkJV*~KwjL~XH? ztI!>WZZd*nx?RG!q|nMvTzaSmM}geftebqc=-@mb0dfwNCXuqQlrD^IQc(yAXh>2` z)UZ5#~~wsIR1A+dW1bcA4Kc`yUCD?KyKQUGFPwH6@e?Lg0*z-_lX&9 z$o3HspDW62JdG8=gde0RCZmekTf?=j&hmeOIct+Y5Pj1jfl4*7n}`h#-u`HZ*}0g^ z=kP5QLkUe*SzsBLIv$Qy)4UOxE7nyWA$%Ai7?W81OCO3B7i2{au=Ij=+*Ub{?2 zb5fx;+d^Zzyf!#qK3aky4YN{+CVf(7O#u!nFv&Kb8o zlk&XfSO<_Ak?@)k4C0=}K_m`hf3JDqU=vg|mzgj6#9h6@6t?e@WCz}bK>8Y5>lp*ku7ly*oGrPGu>c5_Op_E@#V&V8o^c|YluZ~d{yI2rqh zVI1%aN;xyW%yV7?)S2q|O-3Yj#D z0eMBp5q7_dRlwY+(S;Nlz=^AnHiwCJSpb!a6g?gd`t6o?`*Sy|KsK#C3J*GV3W_%7 zFeSyj_jIzq=JvYaj5vB4`S9)+{8_kJ98$oXxa_E?I$bU1>`Y$)I5yGo_us8fg_y1h z@b$ff%00u7LjB1?44|PA0s<=sI59ukrI;=Qls}t0w|Z?FNfC}{u=>qm?wiHZIj75} zMh^kEo8c;v^t!h5&9@$eiCrFrmJ|#W13XZkj^kxZw?D0%r)Jf=DQ%^m#C$tpo5jf) z48XsYVJ5M`$rgf7K=+!8l-i4?aVJLM7s-tT67s1UIWW0gN>rBPMb@W@va{{N80%2= zQzL|w1(AAwDfQsPSk_0npl#|ygdpYOKR+@i-!>tXU=o>RDH~1EAoS9(5IK*KPbF{v zJWv6MnWX^PqkZKtNgykeu+JOfYSI^$>FEM3j63Vj$ITc91@3*J!Sf7yHT&Bd_9X{c zK{{=!jr|9&1rLy}&Dvzyc)Z$Z6r49*qt>KXwwCD-1AQ;a*yE6@(+2Ov4N*L66{Y4xG>fkteUWUoHj^D$9(D zsTUH(!jAHW0eRqL%_T(T0O*>OD*-lKCCSIK6T$58-q3KW;i9dfZ7X+a^oQwUMq3uN zEOy0Pf)1#g)(j1J7E`sgrdr%*&;`-NK>85f&prv=!2eUV7AAYY{1 zcY3tIZc+@@X9~@gZz?WOXO_jCW5<*nx=}s$rD>z0WLjgkydlWMQ2qL~S#-hm&Z%c+ zb?=mw{;{f_zTjq1zlxvjqlUkPH+TWM=Y4+S(EnguGDhVZuiu%QHvks3FCxe*kC;BE=Vu|PIQP&ubB1Nbw5WK{+nL4^{ zw0oOs0}i8_iy*NnIg7Dfm1o~O`g8SB(ZPlb~@d;=B8?r zdh2i?{oAlv&eJA@*z>l@@jBKz1sc2e^ql{H0wn|5{OmEP!bGzibj}B1LMWnZKn?_H ztj36x1t#vx(yHQthwF!z%Yky|5M*&8gxnzbE_mz|arl+72p4<)cYJu$C13ia?u6+G zec9n9ra!NQ>vHCY(Dl4`MBhn8tZOkaFfg<(I(Fi&E+Z<)@lR#)@BYcJeRaI`*)!L} z{`Dh3Qild)485yR2N28V!PIpk#Uda|9(2ra^s9MS1A`Ak)Knl4IPPt3z_{hfH;ex} z&4ca&{e zKF;g)j>QmFRY45`K7}YOz2O^!@d^!TIh-_kky`zYoRgOaI*ny(Tnr2h3`~KwKJ-No zPmg@|+-#3tGDY@hK!kcAHtfXVF$jUFU0%<)>+>0`n=mjiFfamZH(1{;>g&FH_q|5Z z`YWQHdVy>?U~?S!%){WsojL@}vnAyK=h&cEY=yk5-yH(SpS6i~69xtbhV+B@y}8f< zr*AVdy3Y>1^M8BtcD;3xtK{~N*c?Qq0N|!*%pz^`3UHAM5F8yc#$J6N6b#tRx(EXU z0|QfFX@k&fv+stD^UniO8Eq>V%g~5LlNS_FT?156Tp;}LUo)ZGs8ZHN7#J8B(i8mm z@uK}Rp1)5&@%m>4Be+2ZgQh>>9UCxku-sFy&`KmbXCm*n`!N9=4klx_F_Zeybb=B|7zgj%Wx002ov JPDHLkV1kuH!FT`w literal 0 HcmV?d00001 diff --git a/assets/logo.svg b/assets/logo.svg new file mode 100644 index 00000000..9630bc05 --- /dev/null +++ b/assets/logo.svg @@ -0,0 +1,3 @@ + + + diff --git a/dist/style.css b/dist/style.css index 38632f07..1e0792e4 100644 --- a/dist/style.css +++ b/dist/style.css @@ -1,2 +1,2 @@ -body{font-family:'Helvetica Neue',Helvetica,'Lucida Grande','Droid Sans',Tahoma,'Microsoft Sans Serif',sans-serif}.main-wrapper,.wrapper,.header-wrapper,.footer-wrapper{margin:0 auto;width:1200px}.wrapper{height:100%;display:flex}.header-wrapper,.footer-wrapper{height:100%}.header-wrapper{display:flex;align-items:center}header{width:100%;height:100px;background-color:#faea68}header .logo{width:50px;height:50px;background-color:red;margin-left:20px}footer{width:100%;height:30px;background-color:#000;color:#fff}main{display:flex;width:70%;height:100%}aside{display:flex;justify-content:center;width:30%;height:100%;padding-top:20px}aside .cart{background-color:cadetblue;width:300px;height:400px}.cards-container{display:flex;flex-wrap:wrap;justify-content:space-between;row-gap:60px;column-gap:40px;width:100%;height:100%;padding:20px 0}.cards-container .card-item{width:200px;display:flex;position:relative;flex-direction:column;padding:20px;border-radius:20px;cursor:pointer}.cards-container .card-item img{height:300px;width:100%}.cards-container .card-item b{color:grey}.cards-container .card-item h3{font-size:16px;margin-top:10px;margin-bottom:10px}.cards-container .card-item .bar{display:flex;justify-content:space-between;align-items:center;margin:10px 20px}.cards-container .card-item .fast-view{display:none;position:absolute;border-radius:20px;background-color:white;color:black;padding:10px 20px;left:50%;top:50%;transform:translate(-50%, -50%)}.cards-container .card-item button{cursor:pointer;border:none;border-radius:20px;background-color:orange;padding:5px 10px}.cards-container .card-item button:hover{background-color:#fbd183}.cards-container .card-item span{font-size:20px}.cards-container .card-item:hover{box-shadow:0px 2px 35px 14px rgba(13,13,13,0.04)}.cards-container .card-item:hover .fast-view{display:block} +body{font-family:'Helvetica Neue',Helvetica,'Lucida Grande','Droid Sans',Tahoma,'Microsoft Sans Serif',sans-serif}.main-wrapper,.wrapper,.header-wrapper,.footer-wrapper{margin:0 auto;width:1200px}.wrapper{height:100%;display:flex}.header-wrapper,.footer-wrapper{height:100%}.header-wrapper{display:flex;align-items:center}header{width:100%;height:100px;background-color:#faea68}header .logo{margin-left:20px}header .logo img{height:60px}footer{width:100%;height:30px;background-color:#000;color:#fff}main{display:flex;width:70%;height:100%}aside{display:flex;justify-content:center;width:30%;height:100%;padding-top:20px}aside .cart{position:fixed;background-color:#f7f7f7;width:300px;height:400px;border-radius:20px}.cards-container{display:flex;flex-wrap:wrap;justify-content:space-between;row-gap:60px;column-gap:40px;width:100%;height:100%;padding:20px 0}.cards-container .card-item{width:200px;display:flex;position:relative;flex-direction:column;padding:20px;border-radius:20px;cursor:pointer}.cards-container .card-item img{height:300px;width:100%}.cards-container .card-item b{color:grey}.cards-container .card-item h3{font-size:16px;margin-top:10px;margin-bottom:10px}.cards-container .card-item .bar{display:flex;justify-content:space-between;align-items:center;margin:10px 20px}.cards-container .card-item .fast-view{display:none;position:absolute;border-radius:20px;background-color:rgba(255,255,255,0.674);color:black;padding:10px 20px;left:50%;top:50%;transform:translate(-50%, -50%)}.cards-container .card-item button{cursor:pointer;border:none;border-radius:20px;background-color:orange;padding:5px 10px}.cards-container .card-item button:hover{background-color:#fbd183}.cards-container .card-item span{font-size:20px}.cards-container .card-item:hover{box-shadow:0px 2px 35px 14px rgba(13,13,13,0.04)}.cards-container .card-item:hover .fast-view{display:block} diff --git a/script.js b/script.js index d9943d90..3cf1543d 100644 --- a/script.js +++ b/script.js @@ -9,8 +9,13 @@ let headerWrapper = document.createElement("div"); headerWrapper.classList.add('header-wrapper') let footerWrapper = document.createElement("div"); footerWrapper.classList.add('footer-wrapper') -let logo = document.createElement("div"); +let logo = document.createElement("a"); logo.classList.add('logo'); +logo.href = "index.html"; +let logoImg = document.createElement("img"); +logoImg.src = "./assets/logo.png"; +logoImg.alt = "JS Book Store" +logo.append(logoImg) let cardContainer = document.createElement("div"); cardContainer.classList.add('cards-container'); diff --git a/src/scss/app.scss b/src/scss/app.scss index 55e81080..8933f38f 100644 --- a/src/scss/app.scss +++ b/src/scss/app.scss @@ -2,6 +2,7 @@ $bgcolor: rgb(248, 248, 248); $headcolor: #faea68; $footcolor: black; $footfontcolor: white; +$cart-backg-color: rgb(247, 247, 247); body { font-family: 'Helvetica Neue',Helvetica,'Lucida Grande','Droid Sans',Tahoma,'Microsoft Sans Serif',sans-serif; @@ -34,10 +35,10 @@ header { height: 100px; background-color: $headcolor; .logo { - width: 50px; - height: 50px; - background-color: red; margin-left: 20px; + img { + height: 60px; + } } } @@ -61,9 +62,11 @@ aside { height: 100%; padding-top: 20px; .cart { - background-color:cadetblue; + position: fixed; + background-color: $cart-backg-color; width: 300px; height: 400px; + border-radius: 20px; } } @@ -106,7 +109,7 @@ aside { display: none; position: absolute; border-radius: 20px; - background-color: white; + background-color: rgba(255, 255, 255, 0.674); color: black; padding: 10px 20px; left: 50%; From a7c32747caf725deb90df896eb05bedb8edf9607 Mon Sep 17 00:00:00 2001 From: birbwatcher Date: Wed, 31 Aug 2022 15:20:52 +0200 Subject: [PATCH 12/55] refactor: functions for creating elements and blocks --- script.js | 111 +++++++++++++++++++++++++++++------------------------- 1 file changed, 59 insertions(+), 52 deletions(-) diff --git a/script.js b/script.js index 3cf1543d..ed31a710 100644 --- a/script.js +++ b/script.js @@ -1,71 +1,81 @@ let loadedPage = document.createDocumentFragment(); -let header = document.createElement("header") +// let header = document.createElement("header"); let main = document.createElement("main"); -let sidebar = document.createElement("aside"); let footer = document.createElement("footer"); -let wrapper = document.createElement("div"); -wrapper.classList.add('wrapper') -let headerWrapper = document.createElement("div"); -headerWrapper.classList.add('header-wrapper') -let footerWrapper = document.createElement("div"); -footerWrapper.classList.add('footer-wrapper') -let logo = document.createElement("a"); -logo.classList.add('logo'); -logo.href = "index.html"; -let logoImg = document.createElement("img"); -logoImg.src = "./assets/logo.png"; -logoImg.alt = "JS Book Store" -logo.append(logoImg) -let cardContainer = document.createElement("div"); -cardContainer.classList.add('cards-container'); +let wrapper = createElement("div","wrapper") +let headerWrapper = createElement("div","header-wrapper") +let footerWrapper = createElement("div","footer-wrapper") -loadedPage.append(header); -header.append(headerWrapper); + +let cardContainer = createElement("div","cards-container") + +loadedPage.append(createHeader()); wrapper.append(main); -wrapper.append(sidebar); +wrapper.append(createSidebar()); loadedPage.append(wrapper); loadedPage.append(footer); footer.append(footerWrapper); document.body.append(loadedPage); -headerWrapper.append(logo) main.append(cardContainer); +function createElement(element, elementClass) { + let newElement = document.createElement(element); + newElement.classList.add(elementClass); + return newElement; +} + +function createHeader() { + let header = document.createElement("header"); + let headerWrapper = createElement("div","header-wrapper") + header.append(headerWrapper); + let logo = createElement("a","logo"); + logo.href = "index.html"; + let logoImg = document.createElement("img"); + logoImg.src = "./assets/logo.png"; + logoImg.alt = "JS Book Store" + logo.append(logoImg) + headerWrapper.append(logo) + return header +} + +function createSidebar() { + let sidebar = document.createElement("aside"); + let cart = createElement("div","cart") + sidebar.append(cart); + return sidebar; +} + function createCard(x) { for (i=0;i Date: Wed, 31 Aug 2022 17:39:00 +0200 Subject: [PATCH 13/55] feat: sidebar cart added --- assets/dragndrop.png | Bin 0 -> 29678 bytes dist/style.css | 2 +- script.js | 76 +++++++++++++++++++++++++++++-------------- src/scss/app.scss | 28 ++++++++++++++++ 4 files changed, 81 insertions(+), 25 deletions(-) create mode 100644 assets/dragndrop.png diff --git a/assets/dragndrop.png b/assets/dragndrop.png new file mode 100644 index 0000000000000000000000000000000000000000..e3a1fa0dfacbbe90e679567093bd0226ca67d475 GIT binary patch literal 29678 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 Date: Wed, 31 Aug 2022 20:13:06 +0200 Subject: [PATCH 14/55] feat: popup implemented --- dist/style.css | 2 +- script.js | 35 +++++++++++++++++++++ src/scss/app.scss | 80 ++++++++++++++++++++++++++++++++++++----------- 3 files changed, 97 insertions(+), 20 deletions(-) diff --git a/dist/style.css b/dist/style.css index fc8605a8..cae32548 100644 --- a/dist/style.css +++ b/dist/style.css @@ -1,2 +1,2 @@ -body{font-family:'Helvetica Neue',Helvetica,'Lucida Grande','Droid Sans',Tahoma,'Microsoft Sans Serif',sans-serif}.main-wrapper,.wrapper,.header-wrapper,.footer-wrapper{margin:0 auto;width:1200px}.wrapper{height:100%;display:flex}.header-wrapper,.footer-wrapper{height:100%}.header-wrapper{display:flex;align-items:center}header{width:100%;height:100px;background-color:#faea68}header .logo{margin-left:20px}header .logo img{height:60px}footer{width:100%;height:30px;background-color:#000;color:#fff}main{display:flex;width:70%;height:100%}aside{display:flex;justify-content:center;width:30%;height:100%;padding-top:20px}aside .cart{display:flex;flex-direction:column;justify-content:space-between;position:fixed;background-color:#f7f7f7;width:300px;height:400px;border-radius:20px}aside .cart .your-cart{text-align:center}aside .cart .your-cart{margin-top:20px}aside .cart .total{margin:0 0px 20px 20px}aside .cart .cart-container{height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;margin:0 20px;opacity:0.3}aside .cart .cart-container:hover{opacity:1}aside .cart .drag-image{width:50px;height:50px}.cards-container{display:flex;flex-wrap:wrap;justify-content:space-between;row-gap:60px;column-gap:40px;width:100%;height:100%;padding:20px 0}.cards-container .card-item{width:200px;display:flex;position:relative;flex-direction:column;padding:20px;border-radius:20px;cursor:pointer}.cards-container .card-item img{height:300px;width:100%}.cards-container .card-item b{color:grey}.cards-container .card-item h3{font-size:16px;margin-top:10px;margin-bottom:10px}.cards-container .card-item .bar{display:flex;justify-content:space-between;align-items:center;margin:10px 20px}.cards-container .card-item .fast-view{display:none;position:absolute;border-radius:20px;background-color:rgba(255,255,255,0.674);color:black;padding:10px 20px;left:50%;top:50%;transform:translate(-50%, -50%)}.cards-container .card-item button{cursor:pointer;border:none;border-radius:20px;background-color:orange;padding:5px 10px}.cards-container .card-item button:hover{background-color:#fbd183}.cards-container .card-item span{font-size:20px}.cards-container .card-item:hover{box-shadow:0px 2px 35px 14px rgba(13,13,13,0.04)}.cards-container .card-item:hover .fast-view{display:block} +body{font-family:'Helvetica Neue',Helvetica,'Lucida Grande','Droid Sans',Tahoma,'Microsoft Sans Serif',sans-serif}.main-wrapper,.wrapper,.header-wrapper,.footer-wrapper{margin:0 auto;width:1200px}.wrapper{height:100%;display:flex}.header-wrapper,.footer-wrapper{height:100%}.header-wrapper{display:flex;align-items:center}header{width:100%;height:100px;background-color:#faea68}header .logo{margin-left:20px}header .logo img{height:60px}footer{width:100%;height:30px;background-color:#000;color:#fff}main{display:flex;width:70%;height:100%}aside{display:flex;justify-content:center;width:30%;height:100%;padding-top:20px}aside .cart{display:flex;flex-direction:column;justify-content:space-between;position:fixed;background-color:#f7f7f7;width:300px;height:400px;border-radius:20px}aside .cart .your-cart{text-align:center}aside .cart .your-cart{margin-top:20px}aside .cart .total{margin:0 0px 20px 20px}aside .cart .cart-container{height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;margin:0 20px;opacity:0.3}aside .cart .cart-container:hover{opacity:1}aside .cart .drag-image{width:50px;height:50px}.cards-container{display:flex;flex-wrap:wrap;justify-content:space-between;row-gap:60px;column-gap:40px;width:100%;height:100%;padding:20px 0}.cards-container .card-item{width:200px;display:flex;position:relative;justify-content:space-between;flex-direction:column;padding:20px;border-radius:20px;cursor:pointer}.cards-container .card-item img{height:300px;width:100%}.cards-container .card-item b{color:grey}.cards-container .card-item h3{font-size:16px;margin-top:10px;margin-bottom:10px}.cards-container .card-item .fast-view{display:none;position:absolute;border-radius:20px;background-color:rgba(255,255,255,0.674);color:black;padding:10px 20px;left:50%;top:50%;transform:translate(-50%, -50%)}.cards-container .card-item .fast-view:hover{background-color:#fbd183}.cards-container .card-item:hover{box-shadow:0px 2px 35px 14px rgba(13,13,13,0.04)}.cards-container .card-item:hover .fast-view{display:block}.price{font-size:20px}.bar{display:flex;justify-content:space-between;align-items:center;margin:10px 20px}button{cursor:pointer;border:none;border-radius:20px;background-color:orange;padding:5px 10px}button:hover{background-color:#fbd183}.blackout{position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:black;opacity:0.5;z-index:1}.popup{display:flex;position:fixed;align-items:center;top:50%;left:50%;border-radius:10px;transform:translate(-50%, -50%);background-color:white;width:640px;padding:6px 0;z-index:2}.popup .popup-product-image{height:350px}.popup .popup-content{margin:0 15px}.popup .close{align-self:baseline} diff --git a/script.js b/script.js index a529e9eb..591c8075 100644 --- a/script.js +++ b/script.js @@ -99,6 +99,40 @@ function createCard(x) { // sidebar.append(cart); // } +function popUp() { + let blackout = createElement("div","blackout"); + let popup = createElement("div","popup"); + let image = createElement("img","popup-product-image"); + let content = createElement("div","popup-content"); + let title = document.createElement("h3"); + let author = document.createElement("b"); + let price = createElement("span","price"); + let description = createElement("p","description"); + let bar = createElement("div","bar"); + let close = createElement("div","close"); + loadedPage.append(blackout); + loadedPage.append(popup); + popup.append(image); + popup.append(content); + popup.append(close); + content.append(title); + content.append(author); + content.append(description); + content.append(bar); + bar.append(price); + image.src = "./assets/effective-js.jpg"; + title.innerHTML = "JavaScript: The Good Parts: The Good Parts" + author.innerHTML = "Douglas Crockford"; + description.innerHTML = "With JavaScript: The Good Parts, you'll discover a beautiful, elegant, lightweight and highly expressive language that lets you create effective code, whether you're managing object libraries or just trying to get Ajax to run fast. If you develop sites or applications for the Web, this book is an absolute must"; + price.innerHTML = "Price: $30"; + let addToCard = document.createElement("button"); + addToCard.innerHTML = "Add to Cart"; + close.innerHTML = "X" + bar.append(addToCard); + + +} + async function getBooks() { let result = await fetch("./books.json"); let array = await result.json(); @@ -118,5 +152,6 @@ async function shopInit() { } shopInit(); +popUp(); diff --git a/src/scss/app.scss b/src/scss/app.scss index a10310ec..d621bdf3 100644 --- a/src/scss/app.scss +++ b/src/scss/app.scss @@ -3,6 +3,7 @@ $headcolor: #faea68; $footcolor: black; $footfontcolor: white; $cart-backg-color: rgb(247, 247, 247); +$btn-hover: rgb(251, 209, 131); body { font-family: 'Helvetica Neue',Helvetica,'Lucida Grande','Droid Sans',Tahoma,'Microsoft Sans Serif',sans-serif; @@ -111,6 +112,7 @@ aside { width: 200px; display: flex; position: relative; + justify-content: space-between; flex-direction: column; padding: 20px; border-radius: 20px; @@ -127,12 +129,6 @@ aside { margin-top: 10px; margin-bottom: 10px; } - .bar { - display: flex; - justify-content: space-between; - align-items: center; - margin: 10px 20px; - } .fast-view { display: none; position: absolute; @@ -144,19 +140,9 @@ aside { top: 50%; transform:translate(-50%, -50%); } - button { - cursor: pointer; - border: none; - border-radius: 20px; - background-color: orange; - padding: 5px 10px; - } - button:hover{ - background-color: rgb(251, 209, 131); - } - span { - font-size: 20px; - } + .fast-view:hover { + background-color: $btn-hover; + } } .card-item:hover { box-shadow: 0px 2px 35px 14px rgba(13, 13, 13, 0.04); @@ -166,3 +152,59 @@ aside { } } +.price { + font-size: 20px; +} + +.bar { + display: flex; + justify-content: space-between; + align-items: center; + margin: 10px 20px; +} + +button { + cursor: pointer; + border: none; + border-radius: 20px; + background-color: orange; + padding: 5px 10px; +} +button:hover{ + background-color: $btn-hover; +} + +.blackout { + position: fixed; + top: 0; + left: 0; + width: 100vw; + height: 100vh; + background-color: black; + opacity: 0.5; + z-index: 1; +} + +.popup { + display: flex; + position: fixed; + align-items: center; + top: 50%; + left: 50%; + border-radius: 10px; + transform:translate(-50%, -50%); + background-color: white; + width: 640px; + padding: 6px 0; + z-index: 2; + .popup-product-image { + height: 350px; + } + .popup-content { + margin: 0 15px; + } + .close { + align-self: baseline; + } +} + From cf1e4144a90014de43cef0d700d6a0f1e4f27b5e Mon Sep 17 00:00:00 2001 From: birbwatcher Date: Thu, 1 Sep 2022 13:03:43 +0200 Subject: [PATCH 15/55] feat: popup close button design implemented --- assets/modal-close-button.png | Bin 0 -> 220 bytes dist/style.css | 2 +- script.js | 4 ++-- src/scss/app.scss | 5 +++++ 4 files changed, 8 insertions(+), 3 deletions(-) create mode 100644 assets/modal-close-button.png diff --git a/assets/modal-close-button.png b/assets/modal-close-button.png new file mode 100644 index 0000000000000000000000000000000000000000..18a22b60293ba7c2a99e2e54e71027d07d8dc2ca GIT binary patch literal 220 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a&k&H|6fVg?3oVGw3ym^DWND9BhG zxJ`@glJ)PK?>Rf) zz&kC8W5(GylibX%AkC+KvPwnQqN0l?6x(&YI5aojkCTIYb5_rjI Date: Thu, 1 Sep 2022 13:56:50 +0200 Subject: [PATCH 16/55] feat: external module for create element implemented --- dist/style.css | 2 +- index.html | 2 +- script.js | 19 ++++++++++--------- scripts/createElement.js | 5 +++++ src/scss/app.scss | 3 +++ 5 files changed, 20 insertions(+), 11 deletions(-) create mode 100644 scripts/createElement.js diff --git a/dist/style.css b/dist/style.css index 79386823..6e5940cb 100644 --- a/dist/style.css +++ b/dist/style.css @@ -1,2 +1,2 @@ -body{font-family:'Helvetica Neue',Helvetica,'Lucida Grande','Droid Sans',Tahoma,'Microsoft Sans Serif',sans-serif}.main-wrapper,.wrapper,.header-wrapper,.footer-wrapper{margin:0 auto;width:1200px}.wrapper{height:100%;display:flex}.header-wrapper,.footer-wrapper{height:100%}.header-wrapper{display:flex;align-items:center}header{width:100%;height:100px;background-color:#faea68}header .logo{margin-left:20px}header .logo img{height:60px}footer{width:100%;height:30px;background-color:#000;color:#fff}main{display:flex;width:70%;height:100%}aside{display:flex;justify-content:center;width:30%;height:100%;padding-top:20px}aside .cart{display:flex;flex-direction:column;justify-content:space-between;position:fixed;background-color:#f7f7f7;width:300px;height:400px;border-radius:20px}aside .cart .your-cart{text-align:center}aside .cart .your-cart{margin-top:20px}aside .cart .total{margin:0 0px 20px 20px}aside .cart .cart-container{height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;margin:0 20px;opacity:0.3}aside .cart .cart-container:hover{opacity:1}aside .cart .drag-image{width:50px;height:50px}.cards-container{display:flex;flex-wrap:wrap;justify-content:space-between;row-gap:60px;column-gap:40px;width:100%;height:100%;padding:20px 0}.cards-container .card-item{width:200px;display:flex;position:relative;justify-content:space-between;flex-direction:column;padding:20px;border-radius:20px;cursor:pointer}.cards-container .card-item img{height:300px;width:100%}.cards-container .card-item b{color:grey}.cards-container .card-item h3{font-size:16px;margin-top:10px;margin-bottom:10px}.cards-container .card-item .fast-view{display:none;position:absolute;border-radius:20px;background-color:rgba(255,255,255,0.674);color:black;padding:10px 20px;left:50%;top:50%;transform:translate(-50%, -50%)}.cards-container .card-item .fast-view:hover{background-color:#fbd183}.cards-container .card-item:hover{box-shadow:0px 2px 35px 14px rgba(13,13,13,0.04)}.cards-container .card-item:hover .fast-view{display:block}.price{font-size:20px}.bar{display:flex;justify-content:space-between;align-items:center;margin:10px 20px}button{cursor:pointer;border:none;border-radius:20px;background-color:orange;padding:5px 10px}button:hover{background-color:#fbd183}.blackout{position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:black;opacity:0.5;z-index:1}.popup{display:flex;position:fixed;align-items:center;top:50%;left:50%;border-radius:10px;transform:translate(-50%, -50%);background-color:white;width:640px;padding:6px 0;z-index:2}.popup .popup-product-image{height:350px}.popup .popup-content{margin:0 15px}.popup .close{align-self:baseline;margin-top:5px;margin-right:10px}.popup .close:hover{scale:110%} +body{font-family:'Helvetica Neue',Helvetica,'Lucida Grande','Droid Sans',Tahoma,'Microsoft Sans Serif',sans-serif}.main-wrapper,.wrapper,.header-wrapper,.footer-wrapper{margin:0 auto;width:1200px}.wrapper{height:100%;display:flex}.header-wrapper,.footer-wrapper{height:100%}.header-wrapper{display:flex;align-items:center}header{width:100%;height:100px;background-color:#faea68}header .logo{margin-left:20px}header .logo img{height:60px}footer{width:100%;height:30px;background-color:#000;color:#fff}main{display:flex;width:70%;height:100%}aside{display:flex;justify-content:center;width:30%;height:100%;padding-top:20px}aside .cart{display:flex;flex-direction:column;justify-content:space-between;position:fixed;background-color:#f7f7f7;width:300px;height:400px;border-radius:20px}aside .cart .your-cart{text-align:center}aside .cart .your-cart{margin-top:20px}aside .cart .total{margin:0 0px 20px 20px}aside .cart .cart-container{height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;margin:0 20px;opacity:0.3}aside .cart .cart-container:hover{opacity:1}aside .cart .drag-image{width:50px;height:50px}.cards-container{display:flex;flex-wrap:wrap;justify-content:space-between;row-gap:60px;column-gap:40px;width:100%;height:100%;padding:20px 0}.cards-container .card-item{width:200px;display:flex;position:relative;justify-content:space-between;flex-direction:column;padding:20px;border-radius:20px;cursor:pointer}.cards-container .card-item img{height:300px;width:100%}.cards-container .card-item b{color:grey}.cards-container .card-item h3{font-size:16px;margin-top:10px;margin-bottom:10px}.cards-container .card-item img:hover{cursor:grab}.cards-container .card-item .fast-view{display:none;position:absolute;border-radius:20px;background-color:rgba(255,255,255,0.674);color:black;padding:10px 20px;left:50%;top:50%;transform:translate(-50%, -50%)}.cards-container .card-item .fast-view:hover{background-color:#fbd183}.cards-container .card-item:hover{box-shadow:0px 2px 35px 14px rgba(13,13,13,0.04)}.cards-container .card-item:hover .fast-view{display:block}.price{font-size:20px}.bar{display:flex;justify-content:space-between;align-items:center;margin:10px 20px}button{cursor:pointer;border:none;border-radius:20px;background-color:orange;padding:5px 10px}button:hover{background-color:#fbd183}.blackout{position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:black;opacity:0.5;z-index:1}.popup{display:flex;position:fixed;align-items:center;top:50%;left:50%;border-radius:10px;transform:translate(-50%, -50%);background-color:white;width:640px;padding:6px 0;z-index:2}.popup .popup-product-image{height:350px}.popup .popup-content{margin:0 15px}.popup .close{align-self:baseline;margin-top:5px;margin-right:10px}.popup .close:hover{scale:110%} diff --git a/index.html b/index.html index a021e002..b76f5e2a 100644 --- a/index.html +++ b/index.html @@ -9,6 +9,6 @@ - + \ No newline at end of file diff --git a/script.js b/script.js index 277785cb..a378c4f4 100644 --- a/script.js +++ b/script.js @@ -1,13 +1,16 @@ +import createElement from "./scripts/createElement.js"; +let books; + let loadedPage = document.createDocumentFragment(); let wrapper = createElement("div","wrapper") let cardContainer = createElement("div","cards-container") -function createElement(element, elementClass) { - let newElement = document.createElement(element); - newElement.classList.add(elementClass); - return newElement; -} +// function createElement(element, elementClass) { +// let newElement = document.createElement(element); +// newElement.classList.add(elementClass); +// return newElement; +// } function createHeader() { let header = document.createElement("header"); @@ -64,7 +67,7 @@ function createFooter() { } function createCard(x) { - for (i=0;i Date: Thu, 1 Sep 2022 14:26:42 +0200 Subject: [PATCH 17/55] feat: external module for create header implemented --- script.js | 20 ++++---------------- scripts/createHeader.js | 16 ++++++++++++++++ 2 files changed, 20 insertions(+), 16 deletions(-) create mode 100644 scripts/createHeader.js diff --git a/script.js b/script.js index a378c4f4..fb77656e 100644 --- a/script.js +++ b/script.js @@ -1,10 +1,10 @@ -import createElement from "./scripts/createElement.js"; -let books; - let loadedPage = document.createDocumentFragment(); let wrapper = createElement("div","wrapper") let cardContainer = createElement("div","cards-container") +let books; +import createElement from "./scripts/createElement.js"; +import createHeader from "./scripts/createHeader.js"; // function createElement(element, elementClass) { // let newElement = document.createElement(element); @@ -12,19 +12,6 @@ let cardContainer = createElement("div","cards-container") // return newElement; // } -function createHeader() { - let header = document.createElement("header"); - let headerWrapper = createElement("div","header-wrapper") - header.append(headerWrapper); - let logo = createElement("a","logo"); - logo.href = "index.html"; - let logoImg = document.createElement("img"); - logoImg.src = "./assets/logo.png"; - logoImg.alt = "JS Book Store" - logo.append(logoImg) - headerWrapper.append(logo) - loadedPage.append(header); -} function createMain() { let main = document.createElement("main"); @@ -155,4 +142,5 @@ async function shopInit() { shopInit(); // popUp(); +export {loadedPage}; diff --git a/scripts/createHeader.js b/scripts/createHeader.js new file mode 100644 index 00000000..88dc684f --- /dev/null +++ b/scripts/createHeader.js @@ -0,0 +1,16 @@ +import createElement from "./createElement.js"; +import {loadedPage} from "../script.js"; + +export default function createHeader() { + let header = document.createElement("header"); + let headerWrapper = createElement("div","header-wrapper") + header.append(headerWrapper); + let logo = createElement("a","logo"); + logo.href = "index.html"; + let logoImg = document.createElement("img"); + logoImg.src = "./assets/logo.png"; + logoImg.alt = "JS Book Store" + logo.append(logoImg) + headerWrapper.append(logo) + loadedPage.append(header); +} \ No newline at end of file From 1da9716d4028c9dace28a0f884ad06e6cca64165 Mon Sep 17 00:00:00 2001 From: birbwatcher Date: Thu, 1 Sep 2022 14:49:20 +0200 Subject: [PATCH 18/55] feat: external modules for main, sidebar and cart container --- script.js | 38 ++++------------------------------ scripts/createCartContainer.js | 13 ++++++++++++ scripts/createMain.js | 11 ++++++++++ scripts/createSidebar.js | 17 +++++++++++++++ 4 files changed, 45 insertions(+), 34 deletions(-) create mode 100644 scripts/createCartContainer.js create mode 100644 scripts/createMain.js create mode 100644 scripts/createSidebar.js diff --git a/script.js b/script.js index fb77656e..4b428124 100644 --- a/script.js +++ b/script.js @@ -5,7 +5,8 @@ let books; import createElement from "./scripts/createElement.js"; import createHeader from "./scripts/createHeader.js"; - +import createMain from "./scripts/createMain.js"; +import createCartContainer from "./scripts/createCartContainer.js"; // function createElement(element, elementClass) { // let newElement = document.createElement(element); // newElement.classList.add(elementClass); @@ -13,38 +14,6 @@ import createHeader from "./scripts/createHeader.js"; // } -function createMain() { - let main = document.createElement("main"); - wrapper.append(main); - main.append(cardContainer); - createSidebar(); -} - -function createSidebar() { - let sidebar = document.createElement("aside"); - let cart = createElement("div","cart") - let yourCart = createElement("b", "your-cart"); - let total = createElement("b", "total") - sidebar.append(cart); - yourCart.innerHTML = "Your cart:"; - total.innerHTML = "Total:" - cart.append(yourCart); - cart.append(createCartContainer()); - cart.append(total); - wrapper.append(sidebar) -} - -function createCartContainer() { - let cartContainer = createElement("div","cart-container"); - let dragImage = createElement("img","drag-image"); - let title = document.createElement("b"); - title.innerHTML = "Your cart is empty. Just drag and drop the book here"; - dragImage.src = "./assets/dragndrop.png"; - cartContainer.append(dragImage); - cartContainer.append(title); - return cartContainer; -} - function createFooter() { let footer = document.createElement("footer"); let footerWrapper = createElement("div","footer-wrapper"); @@ -143,4 +112,5 @@ shopInit(); // popUp(); export {loadedPage}; - +export {wrapper}; +export {cardContainer}; diff --git a/scripts/createCartContainer.js b/scripts/createCartContainer.js new file mode 100644 index 00000000..b292b4ce --- /dev/null +++ b/scripts/createCartContainer.js @@ -0,0 +1,13 @@ + +import createElement from "./createElement.js"; + +export default function createCartContainer() { + let cartContainer = createElement("div","cart-container"); + let dragImage = createElement("img","drag-image"); + let title = document.createElement("b"); + title.innerHTML = "Your cart is empty. Just drag and drop the book here"; + dragImage.src = "./assets/dragndrop.png"; + cartContainer.append(dragImage); + cartContainer.append(title); + return cartContainer; +} \ No newline at end of file diff --git a/scripts/createMain.js b/scripts/createMain.js new file mode 100644 index 00000000..b4fab338 --- /dev/null +++ b/scripts/createMain.js @@ -0,0 +1,11 @@ +import {wrapper} from "../script.js"; +import {cardContainer} from "../script.js"; +import createSidebar from "../scripts/createSidebar.js" +import createElement from "./createElement.js"; + +export default function createMain() { + let main = document.createElement("main"); + wrapper.append(main); + main.append(cardContainer); + createSidebar(); +} \ No newline at end of file diff --git a/scripts/createSidebar.js b/scripts/createSidebar.js new file mode 100644 index 00000000..b5f95253 --- /dev/null +++ b/scripts/createSidebar.js @@ -0,0 +1,17 @@ +import {wrapper} from "../script.js"; +import createElement from "./createElement.js"; +import createCartContainer from "./createCartContainer.js"; + +export default function createSidebar() { + let sidebar = document.createElement("aside"); + let cart = createElement("div","cart") + let yourCart = createElement("b", "your-cart"); + let total = createElement("b", "total") + sidebar.append(cart); + yourCart.innerHTML = "Your cart:"; + total.innerHTML = "Total:" + cart.append(yourCart); + cart.append(createCartContainer()); + cart.append(total); + wrapper.append(sidebar) +} \ No newline at end of file From 8b02d0e158cfbadec9f01c30c34a699ab8c7b494 Mon Sep 17 00:00:00 2001 From: birbwatcher Date: Thu, 1 Sep 2022 14:51:12 +0200 Subject: [PATCH 19/55] feat: external module for create footer --- script.js | 16 +--------------- scripts/createFooter.js | 8 ++++++++ 2 files changed, 9 insertions(+), 15 deletions(-) create mode 100644 scripts/createFooter.js diff --git a/script.js b/script.js index 4b428124..df3b6f47 100644 --- a/script.js +++ b/script.js @@ -6,21 +6,7 @@ let books; import createElement from "./scripts/createElement.js"; import createHeader from "./scripts/createHeader.js"; import createMain from "./scripts/createMain.js"; -import createCartContainer from "./scripts/createCartContainer.js"; -// function createElement(element, elementClass) { -// let newElement = document.createElement(element); -// newElement.classList.add(elementClass); -// return newElement; -// } - - -function createFooter() { - let footer = document.createElement("footer"); - let footerWrapper = createElement("div","footer-wrapper"); - - footer.append(footerWrapper); - return footer; -} +import createFooter from "./scripts/createFooter.js"; function createCard(x) { for (let i=0;i Date: Thu, 1 Sep 2022 14:55:57 +0200 Subject: [PATCH 20/55] feat: external module for create Card --- script.js | 29 ++--------------------------- scripts/createCard.js | 31 +++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 27 deletions(-) create mode 100644 scripts/createCard.js diff --git a/script.js b/script.js index df3b6f47..39645d70 100644 --- a/script.js +++ b/script.js @@ -7,34 +7,8 @@ import createElement from "./scripts/createElement.js"; import createHeader from "./scripts/createHeader.js"; import createMain from "./scripts/createMain.js"; import createFooter from "./scripts/createFooter.js"; +import createCard from "./scripts/createCard.js"; -function createCard(x) { - for (let i=0;i Date: Thu, 1 Sep 2022 14:58:22 +0200 Subject: [PATCH 21/55] feat: external module for popUp --- script.js | 42 +----------------------------------------- scripts/popUp.js | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 41 deletions(-) create mode 100644 scripts/popUp.js diff --git a/script.js b/script.js index 39645d70..b391f93b 100644 --- a/script.js +++ b/script.js @@ -8,47 +8,7 @@ import createHeader from "./scripts/createHeader.js"; import createMain from "./scripts/createMain.js"; import createFooter from "./scripts/createFooter.js"; import createCard from "./scripts/createCard.js"; - - -// function createCart() { -// let cart = createElement("div","cart") -// let yourCart = document.createElement("b"); -// yourCart.innerHTML = "Your cart:"; -// cart.append(yourCart); -// sidebar.append(cart); -// } - -function popUp() { - let blackout = createElement("div","blackout"); - let popup = createElement("div","popup"); - let image = createElement("img","popup-product-image"); - let content = createElement("div","popup-content"); - let title = document.createElement("h3"); - let author = document.createElement("b"); - let price = createElement("span","price"); - let description = createElement("p","description"); - let bar = createElement("div","bar"); - let close = createElement("img","close"); - loadedPage.append(blackout); - loadedPage.append(popup); - popup.append(image); - popup.append(content); - popup.append(close); - content.append(title); - content.append(author); - content.append(description); - content.append(bar); - bar.append(price); - image.src = "./assets/effective-js.jpg"; - title.innerHTML = "JavaScript: The Good Parts: The Good Parts" - author.innerHTML = "Douglas Crockford"; - description.innerHTML = "With JavaScript: The Good Parts, you'll discover a beautiful, elegant, lightweight and highly expressive language that lets you create effective code, whether you're managing object libraries or just trying to get Ajax to run fast. If you develop sites or applications for the Web, this book is an absolute must"; - price.innerHTML = "Price: $30"; - let addToCard = document.createElement("button"); - addToCard.innerHTML = "Add to Cart"; - close.src = "./assets/modal-close-button.png"; - bar.append(addToCard); -} +import popUp from "./scripts/popUp.js"; async function getBooks() { let result = await fetch("./books.json"); diff --git a/scripts/popUp.js b/scripts/popUp.js new file mode 100644 index 00000000..74c7d9ba --- /dev/null +++ b/scripts/popUp.js @@ -0,0 +1,34 @@ +import createElement from "./createElement.js"; +import {loadedPage} from "../script.js"; + +export default function popUp() { + let blackout = createElement("div","blackout"); + let popup = createElement("div","popup"); + let image = createElement("img","popup-product-image"); + let content = createElement("div","popup-content"); + let title = document.createElement("h3"); + let author = document.createElement("b"); + let price = createElement("span","price"); + let description = createElement("p","description"); + let bar = createElement("div","bar"); + let close = createElement("img","close"); + loadedPage.append(blackout); + loadedPage.append(popup); + popup.append(image); + popup.append(content); + popup.append(close); + content.append(title); + content.append(author); + content.append(description); + content.append(bar); + bar.append(price); + image.src = "./assets/effective-js.jpg"; + title.innerHTML = "JavaScript: The Good Parts: The Good Parts" + author.innerHTML = "Douglas Crockford"; + description.innerHTML = "With JavaScript: The Good Parts, you'll discover a beautiful, elegant, lightweight and highly expressive language that lets you create effective code, whether you're managing object libraries or just trying to get Ajax to run fast. If you develop sites or applications for the Web, this book is an absolute must"; + price.innerHTML = "Price: $30"; + let addToCard = document.createElement("button"); + addToCard.innerHTML = "Add to Cart"; + close.src = "./assets/modal-close-button.png"; + bar.append(addToCard); +} \ No newline at end of file From 60464357faa35d07b97900f96da7e5935497e875 Mon Sep 17 00:00:00 2001 From: birbwatcher Date: Thu, 1 Sep 2022 16:07:15 +0200 Subject: [PATCH 22/55] feat: function getpopup implemented --- dist/style.css | 2 +- script.js | 4 ++-- scripts/createCard.js | 7 +++++++ scripts/{popUp.js => createPopUp.js} | 4 ++++ scripts/getPopUp.js | 4 ++++ src/scss/app.scss | 7 ++++++- 6 files changed, 24 insertions(+), 4 deletions(-) rename scripts/{popUp.js => createPopUp.js} (96%) create mode 100644 scripts/getPopUp.js diff --git a/dist/style.css b/dist/style.css index 6e5940cb..d5d63913 100644 --- a/dist/style.css +++ b/dist/style.css @@ -1,2 +1,2 @@ -body{font-family:'Helvetica Neue',Helvetica,'Lucida Grande','Droid Sans',Tahoma,'Microsoft Sans Serif',sans-serif}.main-wrapper,.wrapper,.header-wrapper,.footer-wrapper{margin:0 auto;width:1200px}.wrapper{height:100%;display:flex}.header-wrapper,.footer-wrapper{height:100%}.header-wrapper{display:flex;align-items:center}header{width:100%;height:100px;background-color:#faea68}header .logo{margin-left:20px}header .logo img{height:60px}footer{width:100%;height:30px;background-color:#000;color:#fff}main{display:flex;width:70%;height:100%}aside{display:flex;justify-content:center;width:30%;height:100%;padding-top:20px}aside .cart{display:flex;flex-direction:column;justify-content:space-between;position:fixed;background-color:#f7f7f7;width:300px;height:400px;border-radius:20px}aside .cart .your-cart{text-align:center}aside .cart .your-cart{margin-top:20px}aside .cart .total{margin:0 0px 20px 20px}aside .cart .cart-container{height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;margin:0 20px;opacity:0.3}aside .cart .cart-container:hover{opacity:1}aside .cart .drag-image{width:50px;height:50px}.cards-container{display:flex;flex-wrap:wrap;justify-content:space-between;row-gap:60px;column-gap:40px;width:100%;height:100%;padding:20px 0}.cards-container .card-item{width:200px;display:flex;position:relative;justify-content:space-between;flex-direction:column;padding:20px;border-radius:20px;cursor:pointer}.cards-container .card-item img{height:300px;width:100%}.cards-container .card-item b{color:grey}.cards-container .card-item h3{font-size:16px;margin-top:10px;margin-bottom:10px}.cards-container .card-item img:hover{cursor:grab}.cards-container .card-item .fast-view{display:none;position:absolute;border-radius:20px;background-color:rgba(255,255,255,0.674);color:black;padding:10px 20px;left:50%;top:50%;transform:translate(-50%, -50%)}.cards-container .card-item .fast-view:hover{background-color:#fbd183}.cards-container .card-item:hover{box-shadow:0px 2px 35px 14px rgba(13,13,13,0.04)}.cards-container .card-item:hover .fast-view{display:block}.price{font-size:20px}.bar{display:flex;justify-content:space-between;align-items:center;margin:10px 20px}button{cursor:pointer;border:none;border-radius:20px;background-color:orange;padding:5px 10px}button:hover{background-color:#fbd183}.blackout{position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:black;opacity:0.5;z-index:1}.popup{display:flex;position:fixed;align-items:center;top:50%;left:50%;border-radius:10px;transform:translate(-50%, -50%);background-color:white;width:640px;padding:6px 0;z-index:2}.popup .popup-product-image{height:350px}.popup .popup-content{margin:0 15px}.popup .close{align-self:baseline;margin-top:5px;margin-right:10px}.popup .close:hover{scale:110%} +body{font-family:'Helvetica Neue',Helvetica,'Lucida Grande','Droid Sans',Tahoma,'Microsoft Sans Serif',sans-serif}.main-wrapper,.wrapper,.header-wrapper,.footer-wrapper{margin:0 auto;width:1200px}.wrapper{height:100%;display:flex}.header-wrapper,.footer-wrapper{height:100%}.header-wrapper{display:flex;align-items:center}header{width:100%;height:100px;background-color:#faea68}header .logo{margin-left:20px}header .logo img{height:60px}footer{width:100%;height:30px;background-color:#000;color:#fff}main{display:flex;width:70%;height:100%}aside{display:flex;justify-content:center;width:30%;height:100%;padding-top:20px}aside .cart{display:flex;flex-direction:column;justify-content:space-between;position:fixed;background-color:#f7f7f7;width:300px;height:400px;border-radius:20px}aside .cart .your-cart{text-align:center}aside .cart .your-cart{margin-top:20px}aside .cart .total{margin:0 0px 20px 20px}aside .cart .cart-container{height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;margin:0 20px;opacity:0.3}aside .cart .cart-container:hover{opacity:1}aside .cart .drag-image{width:50px;height:50px}.cards-container{display:flex;flex-wrap:wrap;justify-content:space-between;row-gap:60px;column-gap:40px;width:100%;height:100%;padding:20px 0}.cards-container .card-item{width:200px;display:flex;position:relative;justify-content:space-between;flex-direction:column;padding:20px;border-radius:20px;cursor:pointer}.cards-container .card-item img{height:300px;width:100%}.cards-container .card-item b{color:grey}.cards-container .card-item h3{font-size:16px;margin-top:10px;margin-bottom:10px}.cards-container .card-item img:hover{cursor:grab}.cards-container .card-item .fast-view{display:none;position:absolute;border-radius:20px;background-color:rgba(255,255,255,0.674);color:black;padding:10px 20px;left:50%;top:50%;transform:translate(-50%, -50%)}.cards-container .card-item .fast-view:hover{background-color:#fbd183}.cards-container .card-item:hover{box-shadow:0px 2px 35px 14px rgba(13,13,13,0.04)}.cards-container .card-item:hover .fast-view{display:block}.price{font-size:20px}.bar{display:flex;justify-content:space-between;align-items:center;margin:10px 20px}button{cursor:pointer;border:none;border-radius:20px;background-color:orange;padding:5px 10px}button:hover{background-color:#fbd183}.blackout{display:none;position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:black;opacity:0.5;z-index:1}.popup{display:none;position:fixed;align-items:center;top:50%;left:50%;border-radius:10px;transform:translate(-50%, -50%);background-color:white;width:640px;padding:6px 0;z-index:2}.popup .popup-product-image{height:350px}.popup .popup-content{margin:0 15px}.popup .close{align-self:baseline;margin-top:5px;margin-right:10px}.popup .close:hover{scale:110%}.active{display:flex} diff --git a/script.js b/script.js index b391f93b..bc4acd1f 100644 --- a/script.js +++ b/script.js @@ -8,7 +8,7 @@ import createHeader from "./scripts/createHeader.js"; import createMain from "./scripts/createMain.js"; import createFooter from "./scripts/createFooter.js"; import createCard from "./scripts/createCard.js"; -import popUp from "./scripts/popUp.js"; +import createPopUp from "./scripts/createPopUp.js"; async function getBooks() { let result = await fetch("./books.json"); @@ -22,6 +22,7 @@ async function shopInit() { await getBooks(); createCard(); createFooter(); + createPopUp(); loadedPage.append(wrapper); loadedPage.append(createFooter()); @@ -29,7 +30,6 @@ async function shopInit() { } shopInit(); -// popUp(); export {loadedPage}; export {wrapper}; diff --git a/scripts/createCard.js b/scripts/createCard.js index 89267695..adb17f1a 100644 --- a/scripts/createCard.js +++ b/scripts/createCard.js @@ -1,6 +1,8 @@ import createElement from "./createElement.js"; import {books} from "../script.js"; import {cardContainer} from "../script.js"; +import createPopUp from "./createPopUp.js"; +import getPopUp from "./getPopUp.js" export default function createCard(x) { for (let i=0;i Date: Thu, 1 Sep 2022 16:15:39 +0200 Subject: [PATCH 23/55] feat: popup open and close implementation --- scripts/createPopUp.js | 3 --- scripts/getPopUp.js | 6 ++++++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/scripts/createPopUp.js b/scripts/createPopUp.js index 955180b0..448c2b91 100644 --- a/scripts/createPopUp.js +++ b/scripts/createPopUp.js @@ -33,6 +33,3 @@ export default function popUp() { bar.append(addToCard); } -export function getPopUp() { - console.log('meow') -} \ No newline at end of file diff --git a/scripts/getPopUp.js b/scripts/getPopUp.js index 8999aa45..5abb12bd 100644 --- a/scripts/getPopUp.js +++ b/scripts/getPopUp.js @@ -1,4 +1,10 @@ export default function getPopUp() { document.querySelector('.blackout').classList.add('active'); document.querySelector('.popup').classList.add('active'); + let close = document.querySelector('.close'); + + close.onclick = function () { + document.querySelector('.blackout').classList.remove('active'); + document.querySelector('.popup').classList.remove('active'); + } } \ No newline at end of file From ef30c3f923f23f863d9a4f4e39c69ec7bc9334ab Mon Sep 17 00:00:00 2001 From: birbwatcher Date: Thu, 1 Sep 2022 19:37:38 +0200 Subject: [PATCH 24/55] feat: fast view button get right book implementation --- scripts/createCard.js | 9 ++++++--- scripts/createMain.js | 1 + scripts/createPopUp.js | 15 +++++---------- scripts/getPopUp.js | 20 ++++++++++++++++++-- 4 files changed, 30 insertions(+), 15 deletions(-) diff --git a/scripts/createCard.js b/scripts/createCard.js index adb17f1a..d2e0b988 100644 --- a/scripts/createCard.js +++ b/scripts/createCard.js @@ -7,7 +7,7 @@ import getPopUp from "./getPopUp.js" export default function createCard(x) { for (let i=0;i Date: Thu, 1 Sep 2022 19:47:24 +0200 Subject: [PATCH 25/55] feat: add to cart button set data --- scripts/createCard.js | 1 + scripts/getPopUp.js | 1 + 2 files changed, 2 insertions(+) diff --git a/scripts/createCard.js b/scripts/createCard.js index d2e0b988..c112437e 100644 --- a/scripts/createCard.js +++ b/scripts/createCard.js @@ -24,6 +24,7 @@ export default function createCard(x) { bar.append(price) price.innerHTML = '$' + books[i].price; let addToCard = document.createElement("button"); + addToCard.setAttribute('data', i); addToCard.innerHTML = "Add to Cart" bar.append(addToCard); let fastView = createElement("button","fast-view") diff --git a/scripts/getPopUp.js b/scripts/getPopUp.js index 23af8e26..18967636 100644 --- a/scripts/getPopUp.js +++ b/scripts/getPopUp.js @@ -23,4 +23,5 @@ export default function getPopUp(bookId) { document.querySelector('.price').innerHTML = '$' + books[bookId].price; document.querySelector('.book-author').innerHTML = books[bookId].author; document.querySelector('.book-title').innerHTML = books[bookId].title; + document.querySelector('.bar button').setAttribute('data', bookId); } \ No newline at end of file From 0c5fd58f98c951be06e8395396a630ab61426075 Mon Sep 17 00:00:00 2001 From: birbwatcher Date: Mon, 5 Sep 2022 19:31:03 +0200 Subject: [PATCH 26/55] feat: cart without count is implemented --- dist/style.css | 2 +- scripts/cart.js | 52 ++++++++++++++++++++++++++++++++++ scripts/createCard.js | 17 ++++++++--- scripts/createCartContainer.js | 2 +- scripts/getPopUp.js | 11 ++++++- src/scss/app.scss | 46 ++++++++++++++++++++++++++++-- 6 files changed, 120 insertions(+), 10 deletions(-) create mode 100644 scripts/cart.js diff --git a/dist/style.css b/dist/style.css index d5d63913..ead05a39 100644 --- a/dist/style.css +++ b/dist/style.css @@ -1,2 +1,2 @@ -body{font-family:'Helvetica Neue',Helvetica,'Lucida Grande','Droid Sans',Tahoma,'Microsoft Sans Serif',sans-serif}.main-wrapper,.wrapper,.header-wrapper,.footer-wrapper{margin:0 auto;width:1200px}.wrapper{height:100%;display:flex}.header-wrapper,.footer-wrapper{height:100%}.header-wrapper{display:flex;align-items:center}header{width:100%;height:100px;background-color:#faea68}header .logo{margin-left:20px}header .logo img{height:60px}footer{width:100%;height:30px;background-color:#000;color:#fff}main{display:flex;width:70%;height:100%}aside{display:flex;justify-content:center;width:30%;height:100%;padding-top:20px}aside .cart{display:flex;flex-direction:column;justify-content:space-between;position:fixed;background-color:#f7f7f7;width:300px;height:400px;border-radius:20px}aside .cart .your-cart{text-align:center}aside .cart .your-cart{margin-top:20px}aside .cart .total{margin:0 0px 20px 20px}aside .cart .cart-container{height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;margin:0 20px;opacity:0.3}aside .cart .cart-container:hover{opacity:1}aside .cart .drag-image{width:50px;height:50px}.cards-container{display:flex;flex-wrap:wrap;justify-content:space-between;row-gap:60px;column-gap:40px;width:100%;height:100%;padding:20px 0}.cards-container .card-item{width:200px;display:flex;position:relative;justify-content:space-between;flex-direction:column;padding:20px;border-radius:20px;cursor:pointer}.cards-container .card-item img{height:300px;width:100%}.cards-container .card-item b{color:grey}.cards-container .card-item h3{font-size:16px;margin-top:10px;margin-bottom:10px}.cards-container .card-item img:hover{cursor:grab}.cards-container .card-item .fast-view{display:none;position:absolute;border-radius:20px;background-color:rgba(255,255,255,0.674);color:black;padding:10px 20px;left:50%;top:50%;transform:translate(-50%, -50%)}.cards-container .card-item .fast-view:hover{background-color:#fbd183}.cards-container .card-item:hover{box-shadow:0px 2px 35px 14px rgba(13,13,13,0.04)}.cards-container .card-item:hover .fast-view{display:block}.price{font-size:20px}.bar{display:flex;justify-content:space-between;align-items:center;margin:10px 20px}button{cursor:pointer;border:none;border-radius:20px;background-color:orange;padding:5px 10px}button:hover{background-color:#fbd183}.blackout{display:none;position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:black;opacity:0.5;z-index:1}.popup{display:none;position:fixed;align-items:center;top:50%;left:50%;border-radius:10px;transform:translate(-50%, -50%);background-color:white;width:640px;padding:6px 0;z-index:2}.popup .popup-product-image{height:350px}.popup .popup-content{margin:0 15px}.popup .close{align-self:baseline;margin-top:5px;margin-right:10px}.popup .close:hover{scale:110%}.active{display:flex} +body{font-family:'Helvetica Neue',Helvetica,'Lucida Grande','Droid Sans',Tahoma,'Microsoft Sans Serif',sans-serif}.main-wrapper,.wrapper,.header-wrapper,.footer-wrapper{margin:0 auto;width:1200px}.wrapper{height:100%;display:flex}.header-wrapper,.footer-wrapper{height:100%}.header-wrapper{display:flex;align-items:center}header{width:100%;height:100px;background-color:#faea68}header .logo{margin-left:20px}header .logo img{height:60px}footer{width:100%;height:30px;background-color:#000;color:#fff}main{display:flex;width:70%;height:100%}aside{display:flex;justify-content:center;width:30%;height:100%;padding-top:20px}aside .cart{display:flex;flex-direction:column;justify-content:space-between;position:fixed;background-color:#f7f7f7;width:300px;height:500px;border-radius:20px}aside .cart .your-cart{text-align:center}aside .cart .your-cart{margin-top:20px;margin-bottom:15px}aside .cart .total{margin:20px 0px 20px 20px}aside .cart .cart-container{height:100%;display:flex;overflow:scroll;flex-direction:column;justify-content:center;align-items:center;margin:0 20px}aside .cart .cart-container:hover{opacity:1}aside .cart .drag-image{width:50px;height:50px;opacity:0.3}aside .cart .empty-cart-title{opacity:0.3}aside .cart .cart-book{display:flex;width:100%;margin:10px 0}aside .cart .cart-book-image{width:70px}aside .cart .cart-book-title{font-size:13px}aside .cart .cart-book-info{display:flex;flex-direction:column;justify-content:space-evenly}aside .cart .cart-count-bar{display:flex;justify-content:space-evenly}aside .cart .cart-book-minus,aside .cart .cart-book-plus{width:40px;height:15px;display:flex;justify-content:center;align-items:center;cursor:pointer;color:white;background-color:grey}aside .cart .cart-count-bar p{margin:0;padding:0;font-size:13px}.cards-container{display:flex;flex-wrap:wrap;justify-content:space-between;row-gap:60px;column-gap:40px;width:100%;height:100%;padding:20px 0}.cards-container .card-item{width:200px;display:flex;position:relative;justify-content:space-between;flex-direction:column;padding:20px;border-radius:20px;cursor:pointer}.cards-container .card-item img{height:300px;width:100%}.cards-container .card-item b{color:grey}.cards-container .card-item h3{font-size:16px;margin-top:10px;margin-bottom:10px}.cards-container .card-item img:hover{cursor:grab}.cards-container .card-item .fast-view{display:none;position:absolute;border-radius:20px;background-color:rgba(255,255,255,0.674);color:black;padding:10px 20px;left:50%;top:50%;transform:translate(-50%, -50%)}.cards-container .card-item .fast-view:hover{background-color:#fbd183}.cards-container .card-item:hover{box-shadow:0px 2px 35px 14px rgba(13,13,13,0.04)}.cards-container .card-item:hover .fast-view{display:block}.price{font-size:20px}.bar{display:flex;justify-content:space-between;align-items:center;margin:10px 20px}button{cursor:pointer;border:none;border-radius:20px;background-color:orange;padding:5px 10px}button:hover{background-color:#fbd183}.blackout{display:none;position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:black;opacity:0.5;z-index:1}.popup{display:none;position:fixed;align-items:center;top:50%;left:50%;border-radius:10px;transform:translate(-50%, -50%);background-color:white;width:640px;padding:6px 0;z-index:2}.popup .popup-product-image{height:350px}.popup .popup-content{margin:0 15px}.popup .close{align-self:baseline;margin-top:5px;margin-right:10px}.popup .close:hover{scale:110%}.active{display:flex} diff --git a/scripts/cart.js b/scripts/cart.js new file mode 100644 index 00000000..5a395175 --- /dev/null +++ b/scripts/cart.js @@ -0,0 +1,52 @@ +// let cart = {}; +let cart = []; +import createElement from "./createElement.js"; +import {books} from "../script.js"; + +export default function addToCart(bookData) { + // cart[bookData] = 1; + let book = {}; + book[bookData] = 1; + cart.push(book); + renderCart() +} + +function renderCart() { + let cartContainer = document.querySelector('.cart-container'); + cartContainer.innerHTML = ''; + for (let i=0;i Date: Mon, 5 Sep 2022 20:44:54 +0200 Subject: [PATCH 27/55] feat: cart with count adding and removing implemented --- scripts/cart.js | 93 +++++++++++++++++++++++++++++++++---------------- 1 file changed, 63 insertions(+), 30 deletions(-) diff --git a/scripts/cart.js b/scripts/cart.js index 5a395175..c853afe6 100644 --- a/scripts/cart.js +++ b/scripts/cart.js @@ -14,39 +14,72 @@ export default function addToCart(bookData) { function renderCart() { let cartContainer = document.querySelector('.cart-container'); cartContainer.innerHTML = ''; + for (let i=0;i 1) { + cart[i][bookId]--; + } else if (cart[i][bookId] = 1) { + cart.splice(i,1); + } + } + } } export {cart}; \ No newline at end of file From 51b0afd0b6f91e5c88be8c594dafca08582151c8 Mon Sep 17 00:00:00 2001 From: birbwatcher Date: Tue, 6 Sep 2022 12:13:40 +0200 Subject: [PATCH 28/55] feat: add to card and added buttons implemented --- dist/style.css | 2 +- scripts/cart.js | 3 +++ scripts/createCard.js | 6 ++++-- src/scss/app.scss | 17 ++++++++++++----- 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/dist/style.css b/dist/style.css index ead05a39..1786d25a 100644 --- a/dist/style.css +++ b/dist/style.css @@ -1,2 +1,2 @@ -body{font-family:'Helvetica Neue',Helvetica,'Lucida Grande','Droid Sans',Tahoma,'Microsoft Sans Serif',sans-serif}.main-wrapper,.wrapper,.header-wrapper,.footer-wrapper{margin:0 auto;width:1200px}.wrapper{height:100%;display:flex}.header-wrapper,.footer-wrapper{height:100%}.header-wrapper{display:flex;align-items:center}header{width:100%;height:100px;background-color:#faea68}header .logo{margin-left:20px}header .logo img{height:60px}footer{width:100%;height:30px;background-color:#000;color:#fff}main{display:flex;width:70%;height:100%}aside{display:flex;justify-content:center;width:30%;height:100%;padding-top:20px}aside .cart{display:flex;flex-direction:column;justify-content:space-between;position:fixed;background-color:#f7f7f7;width:300px;height:500px;border-radius:20px}aside .cart .your-cart{text-align:center}aside .cart .your-cart{margin-top:20px;margin-bottom:15px}aside .cart .total{margin:20px 0px 20px 20px}aside .cart .cart-container{height:100%;display:flex;overflow:scroll;flex-direction:column;justify-content:center;align-items:center;margin:0 20px}aside .cart .cart-container:hover{opacity:1}aside .cart .drag-image{width:50px;height:50px;opacity:0.3}aside .cart .empty-cart-title{opacity:0.3}aside .cart .cart-book{display:flex;width:100%;margin:10px 0}aside .cart .cart-book-image{width:70px}aside .cart .cart-book-title{font-size:13px}aside .cart .cart-book-info{display:flex;flex-direction:column;justify-content:space-evenly}aside .cart .cart-count-bar{display:flex;justify-content:space-evenly}aside .cart .cart-book-minus,aside .cart .cart-book-plus{width:40px;height:15px;display:flex;justify-content:center;align-items:center;cursor:pointer;color:white;background-color:grey}aside .cart .cart-count-bar p{margin:0;padding:0;font-size:13px}.cards-container{display:flex;flex-wrap:wrap;justify-content:space-between;row-gap:60px;column-gap:40px;width:100%;height:100%;padding:20px 0}.cards-container .card-item{width:200px;display:flex;position:relative;justify-content:space-between;flex-direction:column;padding:20px;border-radius:20px;cursor:pointer}.cards-container .card-item img{height:300px;width:100%}.cards-container .card-item b{color:grey}.cards-container .card-item h3{font-size:16px;margin-top:10px;margin-bottom:10px}.cards-container .card-item img:hover{cursor:grab}.cards-container .card-item .fast-view{display:none;position:absolute;border-radius:20px;background-color:rgba(255,255,255,0.674);color:black;padding:10px 20px;left:50%;top:50%;transform:translate(-50%, -50%)}.cards-container .card-item .fast-view:hover{background-color:#fbd183}.cards-container .card-item:hover{box-shadow:0px 2px 35px 14px rgba(13,13,13,0.04)}.cards-container .card-item:hover .fast-view{display:block}.price{font-size:20px}.bar{display:flex;justify-content:space-between;align-items:center;margin:10px 20px}button{cursor:pointer;border:none;border-radius:20px;background-color:orange;padding:5px 10px}button:hover{background-color:#fbd183}.blackout{display:none;position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:black;opacity:0.5;z-index:1}.popup{display:none;position:fixed;align-items:center;top:50%;left:50%;border-radius:10px;transform:translate(-50%, -50%);background-color:white;width:640px;padding:6px 0;z-index:2}.popup .popup-product-image{height:350px}.popup .popup-content{margin:0 15px}.popup .close{align-self:baseline;margin-top:5px;margin-right:10px}.popup .close:hover{scale:110%}.active{display:flex} +body{font-family:'Helvetica Neue',Helvetica,'Lucida Grande','Droid Sans',Tahoma,'Microsoft Sans Serif',sans-serif}.main-wrapper,.wrapper,.header-wrapper,.footer-wrapper{margin:0 auto;width:1200px}.wrapper{height:100%;display:flex}.header-wrapper,.footer-wrapper{height:100%}.header-wrapper{display:flex;align-items:center}header{width:100%;height:100px;background-color:#faea68}header .logo{margin-left:20px}header .logo img{height:60px}footer{width:100%;height:30px;background-color:#000;color:#fff}main{display:flex;width:70%;height:100%}aside{display:flex;justify-content:center;width:30%;height:100%;padding-top:20px}aside .cart{display:flex;flex-direction:column;justify-content:space-between;position:fixed;background-color:#f7f7f7;width:300px;height:500px;border-radius:20px}aside .cart .your-cart{text-align:center}aside .cart .your-cart{margin-top:20px;margin-bottom:15px}aside .cart .total{margin:20px 0px 20px 20px}aside .cart .cart-container{height:100%;overflow:scroll;overflow-x:hidden;flex-direction:column;justify-content:center;align-items:center;margin:0 20px}aside .cart .cart-container:hover{opacity:1}aside .cart .drag-image{width:50px;height:50px;opacity:0.3}aside .cart .empty-cart-title{opacity:0.3}aside .cart .cart-book{display:flex;width:100%;margin:10px 0}aside .cart .cart-book-image{width:70px}aside .cart .cart-book-title{font-size:13px}aside .cart .cart-book-info{display:flex;flex-direction:column;justify-content:space-evenly}aside .cart .cart-count-bar{display:flex;justify-content:space-evenly}aside .cart .cart-book-minus,aside .cart .cart-book-plus{width:40px;height:15px;display:flex;justify-content:center;align-items:center;cursor:pointer;color:white;background-color:grey}aside .cart .cart-count-bar p{margin:0;padding:0;font-size:13px}.cards-container{display:flex;flex-wrap:wrap;justify-content:space-between;row-gap:60px;column-gap:40px;width:100%;height:100%;padding:20px 0}.cards-container .card-item{width:200px;display:flex;position:relative;justify-content:space-between;flex-direction:column;padding:20px;border-radius:20px;cursor:pointer}.cards-container .card-item img{height:300px;width:100%}.cards-container .card-item img:hover{cursor:grab}.cards-container .card-item b{color:grey}.cards-container .card-item h3{font-size:16px;margin-top:10px;margin-bottom:10px}.cards-container .card-item .fast-view{display:none;position:absolute;border-radius:20px;background-color:rgba(255,255,255,0.674);color:black;padding:10px 20px;left:50%;top:50%;transform:translate(-50%, -50%)}.cards-container .card-item .fast-view:hover{background-color:#fbd183}.cards-container .card-item:hover{box-shadow:0px 2px 35px 14px rgba(13,13,13,0.04)}.cards-container .card-item:hover .fast-view{display:block}.price{font-size:20px}.bar{display:flex;justify-content:space-between;align-items:center;margin:10px 20px}button{cursor:pointer;border:none;border-radius:20px;background-color:orange;padding:5px 10px}button:hover{background-color:#fbd183}.added-to-cart{display:none}.blackout{display:none;position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:black;opacity:0.5;z-index:1}.popup{display:none;position:fixed;align-items:center;top:50%;left:50%;border-radius:10px;transform:translate(-50%, -50%);background-color:white;width:640px;padding:6px 0;z-index:2}.popup .popup-product-image{height:350px}.popup .popup-content{margin:0 15px}.popup .close{align-self:baseline;margin-top:5px;margin-right:10px}.popup .close:hover{scale:110%}.active{display:flex} diff --git a/scripts/cart.js b/scripts/cart.js index c853afe6..a50bf3bf 100644 --- a/scripts/cart.js +++ b/scripts/cart.js @@ -77,6 +77,9 @@ function bookMinus(bookId) { cart[i][bookId]--; } else if (cart[i][bookId] = 1) { cart.splice(i,1); + document.querySelectorAll('.card-item .bar .added-to-cart')[bookId].classList.remove('added-to-cart'); + document.querySelectorAll('.card-item .bar .added')[bookId].classList.add('added-to-cart'); + } } } diff --git a/scripts/createCard.js b/scripts/createCard.js index 60ec2e30..5894d84b 100644 --- a/scripts/createCard.js +++ b/scripts/createCard.js @@ -30,6 +30,8 @@ export default function createCard(x) { addToCartBtn.innerHTML = "Add to Cart"; addedButton.innerHTML = "Added"; bar.append(addToCartBtn); + bar.append(addedButton); + addedButton.classList.add('added-to-cart'); let fastView = createElement("button","fast-view") fastView.innerHTML = "Fast View"; card.append(fastView); @@ -40,8 +42,8 @@ export default function createCard(x) { addToCartBtn.onclick = function (event) { addToCart(event.target.getAttribute('data')); - bar.append(addedButton); - addToCartBtn.remove(); + addedButton.classList.remove('added-to-cart'); + addToCartBtn.classList.add('added-to-cart'); } // card.onclick = function() { diff --git a/src/scss/app.scss b/src/scss/app.scss index 09977d48..4c4cd9d7 100644 --- a/src/scss/app.scss +++ b/src/scss/app.scss @@ -5,6 +5,8 @@ $footfontcolor: white; $cart-backg-color: rgb(247, 247, 247); $btn-hover: rgb(251, 209, 131); +// split to files + body { font-family: 'Helvetica Neue',Helvetica,'Lucida Grande','Droid Sans',Tahoma,'Microsoft Sans Serif',sans-serif; } @@ -83,8 +85,8 @@ aside { } .cart-container { height: 100%; - display: flex; overflow: scroll; + overflow-x: hidden; flex-direction: column; justify-content: center; align-items: center; @@ -160,6 +162,10 @@ aside { img { height: 300px; width: 100%; + + &:hover { + cursor:grab; + } } b { color: grey; @@ -169,9 +175,6 @@ aside { margin-top: 10px; margin-bottom: 10px; } - img:hover { - cursor:grab; - } .fast-view { display: none; position: absolute; @@ -214,7 +217,11 @@ button { padding: 5px 10px; } button:hover{ - background-color: $btn-hover; + background-color:$btn-hover; +} + +.added-to-cart{ + display: none; } .blackout { From 0bcba9be65fc3b3e7b256719f9f384ac0c759c7f Mon Sep 17 00:00:00 2001 From: birbwatcher Date: Tue, 6 Sep 2022 13:15:17 +0200 Subject: [PATCH 29/55] feat: adding from popup is implemented --- scripts/createCard.js | 1 + scripts/createPopUp.js | 5 +++++ scripts/getPopUp.js | 15 +++++++++++++-- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/scripts/createCard.js b/scripts/createCard.js index 5894d84b..2668edba 100644 --- a/scripts/createCard.js +++ b/scripts/createCard.js @@ -28,6 +28,7 @@ export default function createCard(x) { let addedButton = createElement("button", "added"); addToCartBtn.setAttribute('data', i); addToCartBtn.innerHTML = "Add to Cart"; + addToCartBtn.classList.add('add-to-cart') addedButton.innerHTML = "Added"; bar.append(addToCartBtn); bar.append(addedButton); diff --git a/scripts/createPopUp.js b/scripts/createPopUp.js index 2aebcdd4..66745d9c 100644 --- a/scripts/createPopUp.js +++ b/scripts/createPopUp.js @@ -26,5 +26,10 @@ export default function popUp() { addToCart.innerHTML = "Add to Cart"; close.src = "./assets/modal-close-button.png"; bar.append(addToCart); + + let addedButton = createElement("button", "added"); + addedButton.innerHTML = "Added"; + addedButton.classList.add('added-to-cart'); + bar.append(addedButton); } diff --git a/scripts/getPopUp.js b/scripts/getPopUp.js index 922c197a..3e0e05af 100644 --- a/scripts/getPopUp.js +++ b/scripts/getPopUp.js @@ -1,4 +1,5 @@ import {books} from "../script.js"; +import {cart} from "../scripts/cart.js"; import addToCart from "./cart.js"; export default function getPopUp(bookId) { @@ -26,10 +27,20 @@ export default function getPopUp(bookId) { document.querySelector('.book-title').innerHTML = books[bookId].title; document.querySelector('.bar button').setAttribute('data', bookId); + if (Object.keys(cart).includes(bookId)) { + document.querySelector('.popup .bar button').classList.add('added-to-cart'); + document.querySelector('.popup .added').classList.remove('added-to-cart'); + } else { + document.querySelector('.popup .bar button').classList.remove('added-to-cart') + document.querySelector('.popup .added').classList.add('added-to-cart'); + } + document.querySelector('.bar button').onclick = function (event) { addToCart(event.target.getAttribute('data')); - document.querySelector('.bar button').remove(); - let addedButton = createElement("button", "added"); + document.querySelector('.popup .bar button').classList.add('added-to-cart'); + document.querySelector('.popup .added').classList.remove('added-to-cart'); + document.querySelectorAll('.add-to-cart')[bookId].classList.add('added-to-cart'); + document.querySelectorAll('.card-item .added')[bookId].classList.remove('added-to-cart'); } From 6768d1adf86785079fa7e5cd14e586d91f0f592c Mon Sep 17 00:00:00 2001 From: birbwatcher Date: Tue, 6 Sep 2022 15:11:24 +0200 Subject: [PATCH 30/55] fix: adding from popup is fixed --- scripts/createPopUp.js | 2 +- scripts/getPopUp.js | 29 ++++++++++++++++++----------- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/scripts/createPopUp.js b/scripts/createPopUp.js index 66745d9c..ef1ce3ce 100644 --- a/scripts/createPopUp.js +++ b/scripts/createPopUp.js @@ -22,7 +22,7 @@ export default function popUp() { content.append(description); content.append(bar); bar.append(price); - let addToCart = document.createElement("button"); + let addToCart = createElement("button","add-to-cart"); addToCart.innerHTML = "Add to Cart"; close.src = "./assets/modal-close-button.png"; bar.append(addToCart); diff --git a/scripts/getPopUp.js b/scripts/getPopUp.js index 3e0e05af..dac40ddb 100644 --- a/scripts/getPopUp.js +++ b/scripts/getPopUp.js @@ -26,20 +26,27 @@ export default function getPopUp(bookId) { document.querySelector('.book-author').innerHTML = books[bookId].author; document.querySelector('.book-title').innerHTML = books[bookId].title; document.querySelector('.bar button').setAttribute('data', bookId); - - if (Object.keys(cart).includes(bookId)) { - document.querySelector('.popup .bar button').classList.add('added-to-cart'); - document.querySelector('.popup .added').classList.remove('added-to-cart'); - } else { - document.querySelector('.popup .bar button').classList.remove('added-to-cart') - document.querySelector('.popup .added').classList.add('added-to-cart'); + + function alreadyInCart(bookId) { + if (cart.find(item => Object.keys(item).toString() === bookId)) { + return true; + } else return false; } - document.querySelector('.bar button').onclick = function (event) { + if (alreadyInCart(bookId)) { + document.querySelector('.popup-content .add-to-cart').classList.add('added-to-cart'); + document.querySelector('.popup-content .added').classList.remove('added-to-cart'); + } else { + document.querySelector('.popup-content .add-to-cart').classList.remove('added-to-cart'); + document.querySelector('.popup-content .added').classList.add('added-to-cart'); + } + + document.querySelector('.add-to-cart').onclick = function (event) { addToCart(event.target.getAttribute('data')); - document.querySelector('.popup .bar button').classList.add('added-to-cart'); - document.querySelector('.popup .added').classList.remove('added-to-cart'); - document.querySelectorAll('.add-to-cart')[bookId].classList.add('added-to-cart'); + document.querySelector('.popup-content .add-to-cart').classList.add('added-to-cart'); + document.querySelector('.popup-content .added').classList.remove('added-to-cart'); + + document.querySelectorAll('.card-item .add-to-cart')[bookId].classList.add('added-to-cart'); document.querySelectorAll('.card-item .added')[bookId].classList.remove('added-to-cart'); } From fb299cd590950d7810d30ad1d03dcb4238775edb Mon Sep 17 00:00:00 2001 From: birbwatcher Date: Tue, 6 Sep 2022 15:15:47 +0200 Subject: [PATCH 31/55] feat: gray button for added item --- dist/style.css | 2 +- scripts/cart.js | 2 -- src/scss/app.scss | 7 +++++++ 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/dist/style.css b/dist/style.css index 1786d25a..a58b45fb 100644 --- a/dist/style.css +++ b/dist/style.css @@ -1,2 +1,2 @@ -body{font-family:'Helvetica Neue',Helvetica,'Lucida Grande','Droid Sans',Tahoma,'Microsoft Sans Serif',sans-serif}.main-wrapper,.wrapper,.header-wrapper,.footer-wrapper{margin:0 auto;width:1200px}.wrapper{height:100%;display:flex}.header-wrapper,.footer-wrapper{height:100%}.header-wrapper{display:flex;align-items:center}header{width:100%;height:100px;background-color:#faea68}header .logo{margin-left:20px}header .logo img{height:60px}footer{width:100%;height:30px;background-color:#000;color:#fff}main{display:flex;width:70%;height:100%}aside{display:flex;justify-content:center;width:30%;height:100%;padding-top:20px}aside .cart{display:flex;flex-direction:column;justify-content:space-between;position:fixed;background-color:#f7f7f7;width:300px;height:500px;border-radius:20px}aside .cart .your-cart{text-align:center}aside .cart .your-cart{margin-top:20px;margin-bottom:15px}aside .cart .total{margin:20px 0px 20px 20px}aside .cart .cart-container{height:100%;overflow:scroll;overflow-x:hidden;flex-direction:column;justify-content:center;align-items:center;margin:0 20px}aside .cart .cart-container:hover{opacity:1}aside .cart .drag-image{width:50px;height:50px;opacity:0.3}aside .cart .empty-cart-title{opacity:0.3}aside .cart .cart-book{display:flex;width:100%;margin:10px 0}aside .cart .cart-book-image{width:70px}aside .cart .cart-book-title{font-size:13px}aside .cart .cart-book-info{display:flex;flex-direction:column;justify-content:space-evenly}aside .cart .cart-count-bar{display:flex;justify-content:space-evenly}aside .cart .cart-book-minus,aside .cart .cart-book-plus{width:40px;height:15px;display:flex;justify-content:center;align-items:center;cursor:pointer;color:white;background-color:grey}aside .cart .cart-count-bar p{margin:0;padding:0;font-size:13px}.cards-container{display:flex;flex-wrap:wrap;justify-content:space-between;row-gap:60px;column-gap:40px;width:100%;height:100%;padding:20px 0}.cards-container .card-item{width:200px;display:flex;position:relative;justify-content:space-between;flex-direction:column;padding:20px;border-radius:20px;cursor:pointer}.cards-container .card-item img{height:300px;width:100%}.cards-container .card-item img:hover{cursor:grab}.cards-container .card-item b{color:grey}.cards-container .card-item h3{font-size:16px;margin-top:10px;margin-bottom:10px}.cards-container .card-item .fast-view{display:none;position:absolute;border-radius:20px;background-color:rgba(255,255,255,0.674);color:black;padding:10px 20px;left:50%;top:50%;transform:translate(-50%, -50%)}.cards-container .card-item .fast-view:hover{background-color:#fbd183}.cards-container .card-item:hover{box-shadow:0px 2px 35px 14px rgba(13,13,13,0.04)}.cards-container .card-item:hover .fast-view{display:block}.price{font-size:20px}.bar{display:flex;justify-content:space-between;align-items:center;margin:10px 20px}button{cursor:pointer;border:none;border-radius:20px;background-color:orange;padding:5px 10px}button:hover{background-color:#fbd183}.added-to-cart{display:none}.blackout{display:none;position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:black;opacity:0.5;z-index:1}.popup{display:none;position:fixed;align-items:center;top:50%;left:50%;border-radius:10px;transform:translate(-50%, -50%);background-color:white;width:640px;padding:6px 0;z-index:2}.popup .popup-product-image{height:350px}.popup .popup-content{margin:0 15px}.popup .close{align-self:baseline;margin-top:5px;margin-right:10px}.popup .close:hover{scale:110%}.active{display:flex} +body{font-family:'Helvetica Neue',Helvetica,'Lucida Grande','Droid Sans',Tahoma,'Microsoft Sans Serif',sans-serif}.main-wrapper,.wrapper,.header-wrapper,.footer-wrapper{margin:0 auto;width:1200px}.wrapper{height:100%;display:flex}.header-wrapper,.footer-wrapper{height:100%}.header-wrapper{display:flex;align-items:center}header{width:100%;height:100px;background-color:#faea68}header .logo{margin-left:20px}header .logo img{height:60px}footer{width:100%;height:30px;background-color:#000;color:#fff}main{display:flex;width:70%;height:100%}aside{display:flex;justify-content:center;width:30%;height:100%;padding-top:20px}aside .cart{display:flex;flex-direction:column;justify-content:space-between;position:fixed;background-color:#f7f7f7;width:300px;height:500px;border-radius:20px}aside .cart .your-cart{text-align:center}aside .cart .your-cart{margin-top:20px;margin-bottom:15px}aside .cart .total{margin:20px 0px 20px 20px}aside .cart .cart-container{height:100%;overflow:scroll;overflow-x:hidden;flex-direction:column;justify-content:center;align-items:center;margin:0 20px}aside .cart .cart-container:hover{opacity:1}aside .cart .drag-image{width:50px;height:50px;opacity:0.3}aside .cart .empty-cart-title{opacity:0.3}aside .cart .cart-book{display:flex;width:100%;margin:10px 0}aside .cart .cart-book-image{width:70px}aside .cart .cart-book-title{font-size:13px}aside .cart .cart-book-info{display:flex;flex-direction:column;justify-content:space-evenly}aside .cart .cart-count-bar{display:flex;justify-content:space-evenly}aside .cart .cart-book-minus,aside .cart .cart-book-plus{width:40px;height:15px;display:flex;justify-content:center;align-items:center;cursor:pointer;color:white;background-color:grey}aside .cart .cart-count-bar p{margin:0;padding:0;font-size:13px}.cards-container{display:flex;flex-wrap:wrap;justify-content:space-between;row-gap:60px;column-gap:40px;width:100%;height:100%;padding:20px 0}.cards-container .card-item{width:200px;display:flex;position:relative;justify-content:space-between;flex-direction:column;padding:20px;border-radius:20px;cursor:pointer}.cards-container .card-item img{height:300px;width:100%}.cards-container .card-item img:hover{cursor:grab}.cards-container .card-item b{color:grey}.cards-container .card-item h3{font-size:16px;margin-top:10px;margin-bottom:10px}.cards-container .card-item .fast-view{display:none;position:absolute;border-radius:20px;background-color:rgba(255,255,255,0.674);color:black;padding:10px 20px;left:50%;top:50%;transform:translate(-50%, -50%)}.cards-container .card-item .fast-view:hover{background-color:#fbd183}.cards-container .card-item:hover{box-shadow:0px 2px 35px 14px rgba(13,13,13,0.04)}.cards-container .card-item:hover .fast-view{display:block}.price{font-size:20px}.bar{display:flex;justify-content:space-between;align-items:center;margin:10px 20px}button{cursor:pointer;border:none;border-radius:20px;background-color:orange;padding:5px 10px}button:hover{background-color:#fbd183}.added-to-cart{display:none}.added{background-color:#cecece}.added:hover{background-color:#cecece}.blackout{display:none;position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:black;opacity:0.5;z-index:1}.popup{display:none;position:fixed;align-items:center;top:50%;left:50%;border-radius:10px;transform:translate(-50%, -50%);background-color:white;width:640px;padding:6px 0;z-index:2}.popup .popup-product-image{height:350px}.popup .popup-content{margin:0 15px}.popup .close{align-self:baseline;margin-top:5px;margin-right:10px}.popup .close:hover{scale:110%}.active{display:flex} diff --git a/scripts/cart.js b/scripts/cart.js index a50bf3bf..54d07d11 100644 --- a/scripts/cart.js +++ b/scripts/cart.js @@ -48,14 +48,12 @@ function renderCart() { let minuses= document.querySelectorAll('.cart-book-minus'); for (let i=0;i Date: Tue, 6 Sep 2022 18:01:00 +0200 Subject: [PATCH 32/55] feat: caclulate total price implementation --- scripts/cart.js | 11 +++++++++++ scripts/createSidebar.js | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/scripts/cart.js b/scripts/cart.js index 54d07d11..b05dadb0 100644 --- a/scripts/cart.js +++ b/scripts/cart.js @@ -58,6 +58,7 @@ function renderCart() { renderCart(); } } + document.querySelector('.total').innerHTML = 'Total: $' + getTotalPrice(); } function bookPlus(bookId) { @@ -83,4 +84,14 @@ function bookMinus(bookId) { } } +function getTotalPrice(){ + let sum = 0; + for (let i = 0;i Date: Tue, 6 Sep 2022 19:06:43 +0200 Subject: [PATCH 33/55] feat: caclulate total price implementation --- dist/style.css | 2 +- scripts/cart.js | 7 +++++++ scripts/createSidebar.js | 17 +++++++++++++++-- src/scss/app.scss | 2 +- 4 files changed, 24 insertions(+), 4 deletions(-) diff --git a/dist/style.css b/dist/style.css index a58b45fb..d313a040 100644 --- a/dist/style.css +++ b/dist/style.css @@ -1,2 +1,2 @@ -body{font-family:'Helvetica Neue',Helvetica,'Lucida Grande','Droid Sans',Tahoma,'Microsoft Sans Serif',sans-serif}.main-wrapper,.wrapper,.header-wrapper,.footer-wrapper{margin:0 auto;width:1200px}.wrapper{height:100%;display:flex}.header-wrapper,.footer-wrapper{height:100%}.header-wrapper{display:flex;align-items:center}header{width:100%;height:100px;background-color:#faea68}header .logo{margin-left:20px}header .logo img{height:60px}footer{width:100%;height:30px;background-color:#000;color:#fff}main{display:flex;width:70%;height:100%}aside{display:flex;justify-content:center;width:30%;height:100%;padding-top:20px}aside .cart{display:flex;flex-direction:column;justify-content:space-between;position:fixed;background-color:#f7f7f7;width:300px;height:500px;border-radius:20px}aside .cart .your-cart{text-align:center}aside .cart .your-cart{margin-top:20px;margin-bottom:15px}aside .cart .total{margin:20px 0px 20px 20px}aside .cart .cart-container{height:100%;overflow:scroll;overflow-x:hidden;flex-direction:column;justify-content:center;align-items:center;margin:0 20px}aside .cart .cart-container:hover{opacity:1}aside .cart .drag-image{width:50px;height:50px;opacity:0.3}aside .cart .empty-cart-title{opacity:0.3}aside .cart .cart-book{display:flex;width:100%;margin:10px 0}aside .cart .cart-book-image{width:70px}aside .cart .cart-book-title{font-size:13px}aside .cart .cart-book-info{display:flex;flex-direction:column;justify-content:space-evenly}aside .cart .cart-count-bar{display:flex;justify-content:space-evenly}aside .cart .cart-book-minus,aside .cart .cart-book-plus{width:40px;height:15px;display:flex;justify-content:center;align-items:center;cursor:pointer;color:white;background-color:grey}aside .cart .cart-count-bar p{margin:0;padding:0;font-size:13px}.cards-container{display:flex;flex-wrap:wrap;justify-content:space-between;row-gap:60px;column-gap:40px;width:100%;height:100%;padding:20px 0}.cards-container .card-item{width:200px;display:flex;position:relative;justify-content:space-between;flex-direction:column;padding:20px;border-radius:20px;cursor:pointer}.cards-container .card-item img{height:300px;width:100%}.cards-container .card-item img:hover{cursor:grab}.cards-container .card-item b{color:grey}.cards-container .card-item h3{font-size:16px;margin-top:10px;margin-bottom:10px}.cards-container .card-item .fast-view{display:none;position:absolute;border-radius:20px;background-color:rgba(255,255,255,0.674);color:black;padding:10px 20px;left:50%;top:50%;transform:translate(-50%, -50%)}.cards-container .card-item .fast-view:hover{background-color:#fbd183}.cards-container .card-item:hover{box-shadow:0px 2px 35px 14px rgba(13,13,13,0.04)}.cards-container .card-item:hover .fast-view{display:block}.price{font-size:20px}.bar{display:flex;justify-content:space-between;align-items:center;margin:10px 20px}button{cursor:pointer;border:none;border-radius:20px;background-color:orange;padding:5px 10px}button:hover{background-color:#fbd183}.added-to-cart{display:none}.added{background-color:#cecece}.added:hover{background-color:#cecece}.blackout{display:none;position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:black;opacity:0.5;z-index:1}.popup{display:none;position:fixed;align-items:center;top:50%;left:50%;border-radius:10px;transform:translate(-50%, -50%);background-color:white;width:640px;padding:6px 0;z-index:2}.popup .popup-product-image{height:350px}.popup .popup-content{margin:0 15px}.popup .close{align-self:baseline;margin-top:5px;margin-right:10px}.popup .close:hover{scale:110%}.active{display:flex} +body{font-family:'Helvetica Neue',Helvetica,'Lucida Grande','Droid Sans',Tahoma,'Microsoft Sans Serif',sans-serif}.main-wrapper,.wrapper,.header-wrapper,.footer-wrapper{margin:0 auto;width:1200px}.wrapper{height:100%;display:flex}.header-wrapper,.footer-wrapper{height:100%}.header-wrapper{display:flex;align-items:center}header{width:100%;height:100px;background-color:#faea68}header .logo{margin-left:20px}header .logo img{height:60px}footer{width:100%;height:30px;background-color:#000;color:#fff}main{display:flex;width:70%;height:100%}aside{display:flex;justify-content:center;width:30%;height:100%;padding-top:20px}aside .cart{display:flex;flex-direction:column;justify-content:space-between;position:fixed;background-color:#f7f7f7;width:300px;height:500px;border-radius:20px}aside .cart .your-cart{text-align:center}aside .cart .your-cart{margin-top:20px;margin-bottom:15px}aside .cart .total{margin:20px 0px 20px 20px}aside .cart .cart-container{height:100%;overflow:scroll;overflow-x:hidden;flex-direction:column;justify-content:center;align-items:center;margin:0 20px}aside .cart .cart-container:hover{opacity:1}aside .cart .drag-image{width:50px;height:50px;opacity:0.3}aside .cart .empty-cart-title{opacity:0.3}aside .cart .cart-book{display:flex;width:100%;margin:10px 0}aside .cart .cart-book-image{width:70px}aside .cart .cart-book-title{font-size:13px}aside .cart .cart-book-info{display:flex;flex-direction:column;justify-content:space-evenly}aside .cart .cart-count-bar{display:flex;justify-content:space-evenly}aside .cart .cart-book-minus,aside .cart .cart-book-plus{width:40px;height:15px;display:flex;justify-content:center;align-items:center;cursor:pointer;color:white;background-color:grey}aside .cart .cart-count-bar p{margin:0;padding:0;font-size:13px}.cards-container{display:flex;flex-wrap:wrap;justify-content:space-between;row-gap:60px;column-gap:40px;width:100%;height:100%;padding:20px 0}.cards-container .card-item{width:200px;display:flex;position:relative;justify-content:space-between;flex-direction:column;padding:20px;border-radius:20px;cursor:pointer}.cards-container .card-item img{height:300px;width:100%}.cards-container .card-item img:hover{cursor:grab}.cards-container .card-item b{color:grey}.cards-container .card-item h3{font-size:16px;margin-top:10px;margin-bottom:10px}.cards-container .card-item .fast-view{display:none;position:absolute;border-radius:20px;background-color:rgba(255,255,255,0.674);color:black;padding:10px 20px;left:50%;top:50%;transform:translate(-50%, -50%)}.cards-container .card-item .fast-view:hover{background-color:#fbd183}.cards-container .card-item:hover{box-shadow:0px 2px 35px 14px rgba(13,13,13,0.04)}.cards-container .card-item:hover .fast-view{display:block}.price{font-size:20px}.bar{display:flex;justify-content:space-between;align-items:center;margin:10px 20px}button{cursor:pointer;border:none;border-radius:20px;background-color:orange;padding:5px 10px}button:hover{background-color:#fbd183}.added-to-cart{display:none}.added,.checkout-button-inactive{background-color:#cecece}.added:hover,.checkout-button-inactive:hover{background-color:#cecece}.blackout{display:none;position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:black;opacity:0.5;z-index:1}.popup{display:none;position:fixed;align-items:center;top:50%;left:50%;border-radius:10px;transform:translate(-50%, -50%);background-color:white;width:640px;padding:6px 0;z-index:2}.popup .popup-product-image{height:350px}.popup .popup-content{margin:0 15px}.popup .close{align-self:baseline;margin-top:5px;margin-right:10px}.popup .close:hover{scale:110%}.active{display:flex} diff --git a/scripts/cart.js b/scripts/cart.js index b05dadb0..8455faf4 100644 --- a/scripts/cart.js +++ b/scripts/cart.js @@ -59,6 +59,13 @@ function renderCart() { } } document.querySelector('.total').innerHTML = 'Total: $' + getTotalPrice(); + if (getTotalPrice() > 0) { + document.querySelector('.checkout-button-inactive').classList.add('added-to-cart'); + document.querySelector('.checkout-button').classList.remove('added-to-cart'); + } else { + document.querySelector('.checkout-button-inactive').classList.remove('added-to-cart'); + document.querySelector('.checkout-button').classList.add('added-to-cart'); + } } function bookPlus(bookId) { diff --git a/scripts/createSidebar.js b/scripts/createSidebar.js index b81d892a..9845e5e8 100644 --- a/scripts/createSidebar.js +++ b/scripts/createSidebar.js @@ -6,12 +6,25 @@ export default function createSidebar() { let sidebar = document.createElement("aside"); let cart = createElement("div","cart") let yourCart = createElement("b", "your-cart"); - let total = createElement("b", "total") + let total = createElement("b", "total"); + let checkoutBtn = createElement("button","checkout-button"); + let checkoutBtnInact = createElement("button","checkout-button-inactive"); + checkoutBtn.classList.add("added-to-cart"); + checkoutBtn.innerHTML = "Checkout"; + checkoutBtnInact.innerHTML = "Checkout"; sidebar.append(cart); yourCart.innerHTML = "Your cart:"; total.innerHTML = "Total: $0" cart.append(yourCart); cart.append(createCartContainer()); cart.append(total); + cart.append(checkoutBtn); + cart.append(checkoutBtnInact); wrapper.append(sidebar) -} \ No newline at end of file + + checkoutBtn.onclick = function() { + console.log('order!'); + document.querySelector('.cards-container').innerHTML = ''; + } +} + diff --git a/src/scss/app.scss b/src/scss/app.scss index 7249b8a2..05bccbd4 100644 --- a/src/scss/app.scss +++ b/src/scss/app.scss @@ -224,7 +224,7 @@ button:hover{ display: none; } -.added { +.added, .checkout-button-inactive { background-color: rgb(206, 206, 206); &:hover { background-color: rgb(206, 206, 206); From d9406d4d430ed4cff4a524d24b8ec0294c009a12 Mon Sep 17 00:00:00 2001 From: birbwatcher Date: Wed, 7 Sep 2022 13:44:50 +0200 Subject: [PATCH 34/55] feat: simple drag and drop function implementation --- script.js | 3 ++- scripts/cart.js | 2 -- scripts/createCard.js | 4 ++-- scripts/dragndrop.js | 23 +++++++++++++++++++++++ 4 files changed, 27 insertions(+), 5 deletions(-) create mode 100644 scripts/dragndrop.js diff --git a/script.js b/script.js index bc4acd1f..a0c3f476 100644 --- a/script.js +++ b/script.js @@ -9,6 +9,7 @@ import createMain from "./scripts/createMain.js"; import createFooter from "./scripts/createFooter.js"; import createCard from "./scripts/createCard.js"; import createPopUp from "./scripts/createPopUp.js"; +import ddInit from "./scripts/dragndrop.js"; async function getBooks() { let result = await fetch("./books.json"); @@ -23,10 +24,10 @@ async function shopInit() { createCard(); createFooter(); createPopUp(); - loadedPage.append(wrapper); loadedPage.append(createFooter()); document.body.append(loadedPage); + ddInit(); } shopInit(); diff --git a/scripts/cart.js b/scripts/cart.js index 8455faf4..33599acc 100644 --- a/scripts/cart.js +++ b/scripts/cart.js @@ -1,10 +1,8 @@ -// let cart = {}; let cart = []; import createElement from "./createElement.js"; import {books} from "../script.js"; export default function addToCart(bookData) { - // cart[bookData] = 1; let book = {}; book[bookData] = 1; cart.push(book); diff --git a/scripts/createCard.js b/scripts/createCard.js index 2668edba..13bb0950 100644 --- a/scripts/createCard.js +++ b/scripts/createCard.js @@ -1,6 +1,5 @@ import createElement from "./createElement.js"; -import {books} from "../script.js"; -import {cardContainer} from "../script.js"; +import {books, cardContainer} from "../script.js"; import createPopUp from "./createPopUp.js"; import getPopUp from "./getPopUp.js" import addToCart from "./cart.js"; @@ -50,5 +49,6 @@ export default function createCard(x) { // card.onclick = function() { // console.log(this.id); // } + } } \ No newline at end of file diff --git a/scripts/dragndrop.js b/scripts/dragndrop.js new file mode 100644 index 00000000..f7900fa2 --- /dev/null +++ b/scripts/dragndrop.js @@ -0,0 +1,23 @@ +import addToCart from "./cart.js"; + +export default function ddInit() { + let dropArea = document.querySelector('.cart-container'); + let ddItems = document.querySelectorAll('.card-item'); + let clicked; + for (let i=0;i { + e.preventDefault(); + }); + + dropArea.addEventListener(`drop`, (e) => { + console.log(clicked) + addToCart(clicked) + }); +} + From df9d26d006e790c9940aef072143f383dd66b4c8 Mon Sep 17 00:00:00 2001 From: birbwatcher Date: Wed, 7 Sep 2022 16:00:55 +0200 Subject: [PATCH 35/55] feat: drag n drop item cant be doubled in cart --- scripts/cart.js | 5 +++++ scripts/dragndrop.js | 13 +++++++++---- scripts/getPopUp.js | 22 ++++++++-------------- 3 files changed, 22 insertions(+), 18 deletions(-) diff --git a/scripts/cart.js b/scripts/cart.js index 33599acc..6e45c139 100644 --- a/scripts/cart.js +++ b/scripts/cart.js @@ -97,6 +97,11 @@ function getTotalPrice(){ return sum; } +export function alreadyInCart(bookId) { + if (cart.find(item => Object.keys(item).toString() === bookId)) { + return true; + } else return false; +} export {cart}; \ No newline at end of file diff --git a/scripts/dragndrop.js b/scripts/dragndrop.js index f7900fa2..8b9b7b57 100644 --- a/scripts/dragndrop.js +++ b/scripts/dragndrop.js @@ -1,13 +1,14 @@ import addToCart from "./cart.js"; +import {alreadyInCart} from "./cart.js"; export default function ddInit() { let dropArea = document.querySelector('.cart-container'); let ddItems = document.querySelectorAll('.card-item'); - let clicked; + let draggedItem; for (let i=0;i { - console.log(clicked) - addToCart(clicked) + console.log(alreadyInCart(draggedItem)) + if(!alreadyInCart(draggedItem)) { + addToCart(draggedItem) + } else { + return; + }; }); } diff --git a/scripts/getPopUp.js b/scripts/getPopUp.js index dac40ddb..ea13ee71 100644 --- a/scripts/getPopUp.js +++ b/scripts/getPopUp.js @@ -1,6 +1,7 @@ import {books} from "../script.js"; import {cart} from "../scripts/cart.js"; import addToCart from "./cart.js"; +import {alreadyInCart} from "./cart.js"; export default function getPopUp(bookId) { document.querySelector('.blackout').classList.add('active'); @@ -26,20 +27,6 @@ export default function getPopUp(bookId) { document.querySelector('.book-author').innerHTML = books[bookId].author; document.querySelector('.book-title').innerHTML = books[bookId].title; document.querySelector('.bar button').setAttribute('data', bookId); - - function alreadyInCart(bookId) { - if (cart.find(item => Object.keys(item).toString() === bookId)) { - return true; - } else return false; - } - - if (alreadyInCart(bookId)) { - document.querySelector('.popup-content .add-to-cart').classList.add('added-to-cart'); - document.querySelector('.popup-content .added').classList.remove('added-to-cart'); - } else { - document.querySelector('.popup-content .add-to-cart').classList.remove('added-to-cart'); - document.querySelector('.popup-content .added').classList.add('added-to-cart'); - } document.querySelector('.add-to-cart').onclick = function (event) { addToCart(event.target.getAttribute('data')); @@ -50,5 +37,12 @@ export default function getPopUp(bookId) { document.querySelectorAll('.card-item .added')[bookId].classList.remove('added-to-cart'); } + if (alreadyInCart(bookId)) { + document.querySelector('.popup-content .add-to-cart').classList.add('added-to-cart'); + document.querySelector('.popup-content .added').classList.remove('added-to-cart'); + } else { + document.querySelector('.popup-content .add-to-cart').classList.remove('added-to-cart'); + document.querySelector('.popup-content .added').classList.add('added-to-cart'); + } } \ No newline at end of file From 85a5aa94ccbe636824aa76f79ea3bb3c0295172d Mon Sep 17 00:00:00 2001 From: birbwatcher Date: Wed, 7 Sep 2022 16:20:59 +0200 Subject: [PATCH 36/55] feat: count of books in cart can be increased by drag n drop --- scripts/cart.js | 10 +++++++--- scripts/dragndrop.js | 5 ----- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/scripts/cart.js b/scripts/cart.js index 6e45c139..b195a9d4 100644 --- a/scripts/cart.js +++ b/scripts/cart.js @@ -3,9 +3,13 @@ import createElement from "./createElement.js"; import {books} from "../script.js"; export default function addToCart(bookData) { - let book = {}; - book[bookData] = 1; - cart.push(book); + if (!alreadyInCart(bookData)) { + let book = {}; + book[bookData] = 1; + cart.push(book); + } else { + bookPlus(bookData); + } renderCart() } diff --git a/scripts/dragndrop.js b/scripts/dragndrop.js index 8b9b7b57..662c54f7 100644 --- a/scripts/dragndrop.js +++ b/scripts/dragndrop.js @@ -17,12 +17,7 @@ export default function ddInit() { }); dropArea.addEventListener(`drop`, (e) => { - console.log(alreadyInCart(draggedItem)) - if(!alreadyInCart(draggedItem)) { addToCart(draggedItem) - } else { - return; - }; }); } From 06eef5ee2e5d679f3cdbcf6917113ff26d822cee Mon Sep 17 00:00:00 2001 From: birbwatcher Date: Wed, 7 Sep 2022 17:02:45 +0200 Subject: [PATCH 37/55] feat: full working dragndrop --- dist/style.css | 2 +- scripts/cart.js | 2 ++ scripts/createCard.js | 5 ++--- scripts/createPopUp.js | 4 ++-- scripts/dragndrop.js | 2 +- scripts/getPopUp.js | 14 +++++++------- src/scss/app.scss | 2 +- 7 files changed, 16 insertions(+), 15 deletions(-) diff --git a/dist/style.css b/dist/style.css index d313a040..d8c3b416 100644 --- a/dist/style.css +++ b/dist/style.css @@ -1,2 +1,2 @@ -body{font-family:'Helvetica Neue',Helvetica,'Lucida Grande','Droid Sans',Tahoma,'Microsoft Sans Serif',sans-serif}.main-wrapper,.wrapper,.header-wrapper,.footer-wrapper{margin:0 auto;width:1200px}.wrapper{height:100%;display:flex}.header-wrapper,.footer-wrapper{height:100%}.header-wrapper{display:flex;align-items:center}header{width:100%;height:100px;background-color:#faea68}header .logo{margin-left:20px}header .logo img{height:60px}footer{width:100%;height:30px;background-color:#000;color:#fff}main{display:flex;width:70%;height:100%}aside{display:flex;justify-content:center;width:30%;height:100%;padding-top:20px}aside .cart{display:flex;flex-direction:column;justify-content:space-between;position:fixed;background-color:#f7f7f7;width:300px;height:500px;border-radius:20px}aside .cart .your-cart{text-align:center}aside .cart .your-cart{margin-top:20px;margin-bottom:15px}aside .cart .total{margin:20px 0px 20px 20px}aside .cart .cart-container{height:100%;overflow:scroll;overflow-x:hidden;flex-direction:column;justify-content:center;align-items:center;margin:0 20px}aside .cart .cart-container:hover{opacity:1}aside .cart .drag-image{width:50px;height:50px;opacity:0.3}aside .cart .empty-cart-title{opacity:0.3}aside .cart .cart-book{display:flex;width:100%;margin:10px 0}aside .cart .cart-book-image{width:70px}aside .cart .cart-book-title{font-size:13px}aside .cart .cart-book-info{display:flex;flex-direction:column;justify-content:space-evenly}aside .cart .cart-count-bar{display:flex;justify-content:space-evenly}aside .cart .cart-book-minus,aside .cart .cart-book-plus{width:40px;height:15px;display:flex;justify-content:center;align-items:center;cursor:pointer;color:white;background-color:grey}aside .cart .cart-count-bar p{margin:0;padding:0;font-size:13px}.cards-container{display:flex;flex-wrap:wrap;justify-content:space-between;row-gap:60px;column-gap:40px;width:100%;height:100%;padding:20px 0}.cards-container .card-item{width:200px;display:flex;position:relative;justify-content:space-between;flex-direction:column;padding:20px;border-radius:20px;cursor:pointer}.cards-container .card-item img{height:300px;width:100%}.cards-container .card-item img:hover{cursor:grab}.cards-container .card-item b{color:grey}.cards-container .card-item h3{font-size:16px;margin-top:10px;margin-bottom:10px}.cards-container .card-item .fast-view{display:none;position:absolute;border-radius:20px;background-color:rgba(255,255,255,0.674);color:black;padding:10px 20px;left:50%;top:50%;transform:translate(-50%, -50%)}.cards-container .card-item .fast-view:hover{background-color:#fbd183}.cards-container .card-item:hover{box-shadow:0px 2px 35px 14px rgba(13,13,13,0.04)}.cards-container .card-item:hover .fast-view{display:block}.price{font-size:20px}.bar{display:flex;justify-content:space-between;align-items:center;margin:10px 20px}button{cursor:pointer;border:none;border-radius:20px;background-color:orange;padding:5px 10px}button:hover{background-color:#fbd183}.added-to-cart{display:none}.added,.checkout-button-inactive{background-color:#cecece}.added:hover,.checkout-button-inactive:hover{background-color:#cecece}.blackout{display:none;position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:black;opacity:0.5;z-index:1}.popup{display:none;position:fixed;align-items:center;top:50%;left:50%;border-radius:10px;transform:translate(-50%, -50%);background-color:white;width:640px;padding:6px 0;z-index:2}.popup .popup-product-image{height:350px}.popup .popup-content{margin:0 15px}.popup .close{align-self:baseline;margin-top:5px;margin-right:10px}.popup .close:hover{scale:110%}.active{display:flex} +body{font-family:'Helvetica Neue',Helvetica,'Lucida Grande','Droid Sans',Tahoma,'Microsoft Sans Serif',sans-serif}.main-wrapper,.wrapper,.header-wrapper,.footer-wrapper{margin:0 auto;width:1200px}.wrapper{height:100%;display:flex}.header-wrapper,.footer-wrapper{height:100%}.header-wrapper{display:flex;align-items:center}header{width:100%;height:100px;background-color:#faea68}header .logo{margin-left:20px}header .logo img{height:60px}footer{width:100%;height:30px;background-color:#000;color:#fff}main{display:flex;width:70%;height:100%}aside{display:flex;justify-content:center;width:30%;height:100%;padding-top:20px}aside .cart{display:flex;flex-direction:column;justify-content:space-between;position:fixed;background-color:#f7f7f7;width:300px;height:500px;border-radius:20px}aside .cart .your-cart{text-align:center}aside .cart .your-cart{margin-top:20px;margin-bottom:15px}aside .cart .total{margin:20px 0px 20px 20px}aside .cart .cart-container{height:100%;overflow:scroll;overflow-x:hidden;flex-direction:column;justify-content:center;align-items:center;margin:0 20px}aside .cart .cart-container:hover{opacity:1}aside .cart .drag-image{width:50px;height:50px;opacity:0.3}aside .cart .empty-cart-title{opacity:0.3}aside .cart .cart-book{display:flex;width:100%;margin:10px 0}aside .cart .cart-book-image{width:70px}aside .cart .cart-book-title{font-size:13px}aside .cart .cart-book-info{display:flex;flex-direction:column;justify-content:space-evenly}aside .cart .cart-count-bar{display:flex;justify-content:space-evenly}aside .cart .cart-book-minus,aside .cart .cart-book-plus{width:40px;height:15px;display:flex;justify-content:center;align-items:center;cursor:pointer;color:white;background-color:grey}aside .cart .cart-count-bar p{margin:0;padding:0;font-size:13px}.cards-container{display:flex;flex-wrap:wrap;justify-content:space-between;row-gap:60px;column-gap:40px;width:100%;height:100%;padding:20px 0}.cards-container .card-item{width:200px;display:flex;position:relative;justify-content:space-between;flex-direction:column;padding:20px;border-radius:20px;cursor:pointer}.cards-container .card-item img{height:300px;width:100%}.cards-container .card-item img:hover{cursor:grab}.cards-container .card-item b{color:grey}.cards-container .card-item h3{font-size:16px;margin-top:10px;margin-bottom:10px}.cards-container .card-item .fast-view{display:none;position:absolute;border-radius:20px;background-color:rgba(255,255,255,0.674);color:black;padding:10px 20px;left:50%;top:50%;transform:translate(-50%, -50%)}.cards-container .card-item .fast-view:hover{background-color:#fbd183}.cards-container .card-item:hover{box-shadow:0px 2px 35px 14px rgba(13,13,13,0.04)}.cards-container .card-item:hover .fast-view{display:block}.price{font-size:20px}.bar{display:flex;justify-content:space-between;align-items:center;margin:10px 20px}button{cursor:pointer;border:none;border-radius:20px;background-color:orange;padding:5px 10px}button:hover{background-color:#fbd183}.added-to-cart{display:none}.added,.added-popup,.checkout-button-inactive{background-color:#cecece}.added:hover,.added-popup:hover,.checkout-button-inactive:hover{background-color:#cecece}.blackout{display:none;position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:black;opacity:0.5;z-index:1}.popup{display:none;position:fixed;align-items:center;top:50%;left:50%;border-radius:10px;transform:translate(-50%, -50%);background-color:white;width:640px;padding:6px 0;z-index:2}.popup .popup-product-image{height:350px}.popup .popup-content{margin:0 15px}.popup .close{align-self:baseline;margin-top:5px;margin-right:10px}.popup .close:hover{scale:110%}.active{display:flex} diff --git a/scripts/cart.js b/scripts/cart.js index b195a9d4..6fa2ab4f 100644 --- a/scripts/cart.js +++ b/scripts/cart.js @@ -7,6 +7,8 @@ export default function addToCart(bookData) { let book = {}; book[bookData] = 1; cart.push(book); + document.querySelectorAll('.add-to-cart')[bookData].classList.add('added-to-cart'); + document.querySelectorAll('.added')[bookData].classList.remove('added-to-cart'); } else { bookPlus(bookData); } diff --git a/scripts/createCard.js b/scripts/createCard.js index 13bb0950..8434a60c 100644 --- a/scripts/createCard.js +++ b/scripts/createCard.js @@ -1,6 +1,5 @@ import createElement from "./createElement.js"; import {books, cardContainer} from "../script.js"; -import createPopUp from "./createPopUp.js"; import getPopUp from "./getPopUp.js" import addToCart from "./cart.js"; @@ -42,8 +41,8 @@ export default function createCard(x) { addToCartBtn.onclick = function (event) { addToCart(event.target.getAttribute('data')); - addedButton.classList.remove('added-to-cart'); - addToCartBtn.classList.add('added-to-cart'); + // addedButton.classList.remove('added-to-cart'); + // addToCartBtn.classList.add('added-to-cart'); } // card.onclick = function() { diff --git a/scripts/createPopUp.js b/scripts/createPopUp.js index ef1ce3ce..63a1dd40 100644 --- a/scripts/createPopUp.js +++ b/scripts/createPopUp.js @@ -22,12 +22,12 @@ export default function popUp() { content.append(description); content.append(bar); bar.append(price); - let addToCart = createElement("button","add-to-cart"); + let addToCart = createElement("button","add-to-cart-popup"); addToCart.innerHTML = "Add to Cart"; close.src = "./assets/modal-close-button.png"; bar.append(addToCart); - let addedButton = createElement("button", "added"); + let addedButton = createElement("button", "added-popup"); addedButton.innerHTML = "Added"; addedButton.classList.add('added-to-cart'); bar.append(addedButton); diff --git a/scripts/dragndrop.js b/scripts/dragndrop.js index 662c54f7..6f4d7b93 100644 --- a/scripts/dragndrop.js +++ b/scripts/dragndrop.js @@ -17,7 +17,7 @@ export default function ddInit() { }); dropArea.addEventListener(`drop`, (e) => { - addToCart(draggedItem) + addToCart(draggedItem); }); } diff --git a/scripts/getPopUp.js b/scripts/getPopUp.js index ea13ee71..9f7b4b8a 100644 --- a/scripts/getPopUp.js +++ b/scripts/getPopUp.js @@ -28,21 +28,21 @@ export default function getPopUp(bookId) { document.querySelector('.book-title').innerHTML = books[bookId].title; document.querySelector('.bar button').setAttribute('data', bookId); - document.querySelector('.add-to-cart').onclick = function (event) { + document.querySelector('.add-to-cart-popup').onclick = function (event) { addToCart(event.target.getAttribute('data')); - document.querySelector('.popup-content .add-to-cart').classList.add('added-to-cart'); - document.querySelector('.popup-content .added').classList.remove('added-to-cart'); + document.querySelector('.popup-content .add-to-cart-popup').classList.add('added-to-cart'); + document.querySelector('.popup-content .added-popup').classList.remove('added-to-cart'); document.querySelectorAll('.card-item .add-to-cart')[bookId].classList.add('added-to-cart'); document.querySelectorAll('.card-item .added')[bookId].classList.remove('added-to-cart'); } if (alreadyInCart(bookId)) { - document.querySelector('.popup-content .add-to-cart').classList.add('added-to-cart'); - document.querySelector('.popup-content .added').classList.remove('added-to-cart'); + document.querySelector('.popup-content .add-to-cart-popup').classList.add('added-to-cart'); + document.querySelector('.popup-content .added-popup').classList.remove('added-to-cart'); } else { - document.querySelector('.popup-content .add-to-cart').classList.remove('added-to-cart'); - document.querySelector('.popup-content .added').classList.add('added-to-cart'); + document.querySelector('.popup-content .add-to-cart-popup').classList.remove('added-to-cart'); + document.querySelector('.popup-content .added-popup').classList.add('added-to-cart'); } } \ No newline at end of file diff --git a/src/scss/app.scss b/src/scss/app.scss index 05bccbd4..8874ae06 100644 --- a/src/scss/app.scss +++ b/src/scss/app.scss @@ -224,7 +224,7 @@ button:hover{ display: none; } -.added, .checkout-button-inactive { +.added, .added-popup, .checkout-button-inactive { background-color: rgb(206, 206, 206); &:hover { background-color: rgb(206, 206, 206); From 37a465d2627838764069061b0d36f20186fd17d5 Mon Sep 17 00:00:00 2001 From: birbwatcher Date: Wed, 7 Sep 2022 17:29:01 +0200 Subject: [PATCH 38/55] feat: checkout and empty cart buttons implemented --- scripts/cart.js | 2 +- scripts/createSidebar.js | 15 +++++++++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/scripts/cart.js b/scripts/cart.js index 6fa2ab4f..71be1323 100644 --- a/scripts/cart.js +++ b/scripts/cart.js @@ -89,7 +89,7 @@ function bookMinus(bookId) { cart.splice(i,1); document.querySelectorAll('.card-item .bar .added-to-cart')[bookId].classList.remove('added-to-cart'); document.querySelectorAll('.card-item .bar .added')[bookId].classList.add('added-to-cart'); - + // document.querySelectorAll('.checkout-button-active').classList.add('added-to-cart'); } } } diff --git a/scripts/createSidebar.js b/scripts/createSidebar.js index 9845e5e8..ef7970c5 100644 --- a/scripts/createSidebar.js +++ b/scripts/createSidebar.js @@ -9,9 +9,12 @@ export default function createSidebar() { let total = createElement("b", "total"); let checkoutBtn = createElement("button","checkout-button"); let checkoutBtnInact = createElement("button","checkout-button-inactive"); + let checkoutBtnActive = createElement("button","checkout-button-active"); checkoutBtn.classList.add("added-to-cart"); - checkoutBtn.innerHTML = "Checkout"; - checkoutBtnInact.innerHTML = "Checkout"; + checkoutBtnActive.classList.add("added-to-cart"); + checkoutBtn.innerHTML = "Go to Cart"; + checkoutBtnInact.innerHTML = "Cart is empty"; + checkoutBtnActive.innerHTML = "Checkout"; sidebar.append(cart); yourCart.innerHTML = "Your cart:"; total.innerHTML = "Total: $0" @@ -20,11 +23,15 @@ export default function createSidebar() { cart.append(total); cart.append(checkoutBtn); cart.append(checkoutBtnInact); + // cart.append(checkoutBtnActive); wrapper.append(sidebar) checkoutBtn.onclick = function() { - console.log('order!'); - document.querySelector('.cards-container').innerHTML = ''; + document.querySelector('.cards-container').classList.add('added-to-cart'); + checkoutBtn.classList.add('added-to-cart'); + checkoutBtnActive.classList.remove('added-to-cart'); } + + } From f7dcf2b8c6e6abb386056affcc6cc100c4a1251d Mon Sep 17 00:00:00 2001 From: birbwatcher Date: Wed, 7 Sep 2022 22:55:17 +0200 Subject: [PATCH 39/55] refactor: function alreadyincart refactored --- dist/style.css | 2 +- scripts/cart.js | 5 +---- scripts/checkoutPage.js | 22 ++++++++++++++++++++++ scripts/createSidebar.js | 2 ++ src/scss/app.scss | 5 +++++ 5 files changed, 31 insertions(+), 5 deletions(-) create mode 100644 scripts/checkoutPage.js diff --git a/dist/style.css b/dist/style.css index d8c3b416..9ff43364 100644 --- a/dist/style.css +++ b/dist/style.css @@ -1,2 +1,2 @@ -body{font-family:'Helvetica Neue',Helvetica,'Lucida Grande','Droid Sans',Tahoma,'Microsoft Sans Serif',sans-serif}.main-wrapper,.wrapper,.header-wrapper,.footer-wrapper{margin:0 auto;width:1200px}.wrapper{height:100%;display:flex}.header-wrapper,.footer-wrapper{height:100%}.header-wrapper{display:flex;align-items:center}header{width:100%;height:100px;background-color:#faea68}header .logo{margin-left:20px}header .logo img{height:60px}footer{width:100%;height:30px;background-color:#000;color:#fff}main{display:flex;width:70%;height:100%}aside{display:flex;justify-content:center;width:30%;height:100%;padding-top:20px}aside .cart{display:flex;flex-direction:column;justify-content:space-between;position:fixed;background-color:#f7f7f7;width:300px;height:500px;border-radius:20px}aside .cart .your-cart{text-align:center}aside .cart .your-cart{margin-top:20px;margin-bottom:15px}aside .cart .total{margin:20px 0px 20px 20px}aside .cart .cart-container{height:100%;overflow:scroll;overflow-x:hidden;flex-direction:column;justify-content:center;align-items:center;margin:0 20px}aside .cart .cart-container:hover{opacity:1}aside .cart .drag-image{width:50px;height:50px;opacity:0.3}aside .cart .empty-cart-title{opacity:0.3}aside .cart .cart-book{display:flex;width:100%;margin:10px 0}aside .cart .cart-book-image{width:70px}aside .cart .cart-book-title{font-size:13px}aside .cart .cart-book-info{display:flex;flex-direction:column;justify-content:space-evenly}aside .cart .cart-count-bar{display:flex;justify-content:space-evenly}aside .cart .cart-book-minus,aside .cart .cart-book-plus{width:40px;height:15px;display:flex;justify-content:center;align-items:center;cursor:pointer;color:white;background-color:grey}aside .cart .cart-count-bar p{margin:0;padding:0;font-size:13px}.cards-container{display:flex;flex-wrap:wrap;justify-content:space-between;row-gap:60px;column-gap:40px;width:100%;height:100%;padding:20px 0}.cards-container .card-item{width:200px;display:flex;position:relative;justify-content:space-between;flex-direction:column;padding:20px;border-radius:20px;cursor:pointer}.cards-container .card-item img{height:300px;width:100%}.cards-container .card-item img:hover{cursor:grab}.cards-container .card-item b{color:grey}.cards-container .card-item h3{font-size:16px;margin-top:10px;margin-bottom:10px}.cards-container .card-item .fast-view{display:none;position:absolute;border-radius:20px;background-color:rgba(255,255,255,0.674);color:black;padding:10px 20px;left:50%;top:50%;transform:translate(-50%, -50%)}.cards-container .card-item .fast-view:hover{background-color:#fbd183}.cards-container .card-item:hover{box-shadow:0px 2px 35px 14px rgba(13,13,13,0.04)}.cards-container .card-item:hover .fast-view{display:block}.price{font-size:20px}.bar{display:flex;justify-content:space-between;align-items:center;margin:10px 20px}button{cursor:pointer;border:none;border-radius:20px;background-color:orange;padding:5px 10px}button:hover{background-color:#fbd183}.added-to-cart{display:none}.added,.added-popup,.checkout-button-inactive{background-color:#cecece}.added:hover,.added-popup:hover,.checkout-button-inactive:hover{background-color:#cecece}.blackout{display:none;position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:black;opacity:0.5;z-index:1}.popup{display:none;position:fixed;align-items:center;top:50%;left:50%;border-radius:10px;transform:translate(-50%, -50%);background-color:white;width:640px;padding:6px 0;z-index:2}.popup .popup-product-image{height:350px}.popup .popup-content{margin:0 15px}.popup .close{align-self:baseline;margin-top:5px;margin-right:10px}.popup .close:hover{scale:110%}.active{display:flex} +body{font-family:'Helvetica Neue',Helvetica,'Lucida Grande','Droid Sans',Tahoma,'Microsoft Sans Serif',sans-serif}.main-wrapper,.wrapper,.header-wrapper,.footer-wrapper{margin:0 auto;width:1200px}.wrapper{height:100%;display:flex}.header-wrapper,.footer-wrapper{height:100%}.header-wrapper{display:flex;align-items:center}header{width:100%;height:100px;background-color:#faea68}header .logo{margin-left:20px}header .logo img{height:60px}footer{width:100%;height:30px;background-color:#000;color:#fff}main{display:flex;width:70%;height:100%}aside{display:flex;justify-content:center;width:30%;height:100%;padding-top:20px}aside .cart{display:flex;flex-direction:column;justify-content:space-between;position:fixed;background-color:#f7f7f7;width:300px;height:500px;border-radius:20px}aside .cart .your-cart{text-align:center}aside .cart .your-cart{margin-top:20px;margin-bottom:15px}aside .cart .total{margin:20px 0px 20px 20px}aside .cart .cart-container{height:100%;overflow:scroll;overflow-x:hidden;flex-direction:column;justify-content:center;align-items:center;margin:0 20px}aside .cart .cart-container:hover{opacity:1}aside .cart .drag-image{width:50px;height:50px;opacity:0.3}aside .cart .empty-cart-title{opacity:0.3}aside .cart .cart-book{display:flex;width:100%;margin:10px 0}aside .cart .cart-book-image{width:70px}aside .cart .cart-book-title{font-size:13px}aside .cart .cart-book-info{display:flex;flex-direction:column;justify-content:space-evenly}aside .cart .cart-count-bar{display:flex;justify-content:space-evenly}aside .cart .cart-book-minus,aside .cart .cart-book-plus{width:40px;height:15px;display:flex;justify-content:center;align-items:center;cursor:pointer;color:white;background-color:grey}aside .cart .cart-count-bar p{margin:0;padding:0;font-size:13px}.cards-container{display:flex;flex-wrap:wrap;justify-content:space-between;row-gap:60px;column-gap:40px;width:100%;height:100%;padding:20px 0}.cards-container .card-item{width:200px;display:flex;position:relative;justify-content:space-between;flex-direction:column;padding:20px;border-radius:20px;cursor:pointer}.cards-container .card-item img{height:300px;width:100%}.cards-container .card-item img:hover{cursor:grab}.cards-container .card-item b{color:grey}.cards-container .card-item h3{font-size:16px;margin-top:10px;margin-bottom:10px}.cards-container .card-item .fast-view{display:none;position:absolute;border-radius:20px;background-color:rgba(255,255,255,0.674);color:black;padding:10px 20px;left:50%;top:50%;transform:translate(-50%, -50%)}.cards-container .card-item .fast-view:hover{background-color:#fbd183}.cards-container .card-item:hover{box-shadow:0px 2px 35px 14px rgba(13,13,13,0.04)}.cards-container .card-item:hover .fast-view{display:block}.checkout-container{width:100%;height:100vh}.price{font-size:20px}.bar{display:flex;justify-content:space-between;align-items:center;margin:10px 20px}button{cursor:pointer;border:none;border-radius:20px;background-color:orange;padding:5px 10px}button:hover{background-color:#fbd183}.added-to-cart{display:none}.added,.added-popup,.checkout-button-inactive{background-color:#cecece}.added:hover,.added-popup:hover,.checkout-button-inactive:hover{background-color:#cecece}.blackout{display:none;position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:black;opacity:0.5;z-index:1}.popup{display:none;position:fixed;align-items:center;top:50%;left:50%;border-radius:10px;transform:translate(-50%, -50%);background-color:white;width:640px;padding:6px 0;z-index:2}.popup .popup-product-image{height:350px}.popup .popup-content{margin:0 15px}.popup .close{align-self:baseline;margin-top:5px;margin-right:10px}.popup .close:hover{scale:110%}.active{display:flex} diff --git a/scripts/cart.js b/scripts/cart.js index 71be1323..87756689 100644 --- a/scripts/cart.js +++ b/scripts/cart.js @@ -104,10 +104,7 @@ function getTotalPrice(){ } export function alreadyInCart(bookId) { - if (cart.find(item => Object.keys(item).toString() === bookId)) { - return true; - } else return false; + return cart.find(item => Object.keys(item).toString() === bookId) !== undefined; } - export {cart}; \ No newline at end of file diff --git a/scripts/checkoutPage.js b/scripts/checkoutPage.js new file mode 100644 index 00000000..e9560c87 --- /dev/null +++ b/scripts/checkoutPage.js @@ -0,0 +1,22 @@ +import createElement from "./createElement.js"; + +export default function createCheckout() { + let checkoutContainer = createElement("div","checkout-container") + document.querySelector('main').append(checkoutContainer); + let cartName = createElement("h1","cart-name"); + let name = createElement("input","input-name"); + let surname = createElement("input","input-name"); + let street = createElement("input","input-street"); + let houseNum = createElement("input","input-house-number"); + let apt = createElement("input","input-apt-number"); + + cartName.innerHTML = 'Cart'; + + checkoutContainer.append(cartName); + checkoutContainer.append(name); + checkoutContainer.append(surname); + checkoutContainer.append(street); + checkoutContainer.append(houseNum); + checkoutContainer.append(apt); + +} \ No newline at end of file diff --git a/scripts/createSidebar.js b/scripts/createSidebar.js index ef7970c5..affa7fd6 100644 --- a/scripts/createSidebar.js +++ b/scripts/createSidebar.js @@ -1,6 +1,7 @@ import {wrapper} from "../script.js"; import createElement from "./createElement.js"; import createCartContainer from "./createCartContainer.js"; +import createCheckout from "./checkoutPage.js"; export default function createSidebar() { let sidebar = document.createElement("aside"); @@ -30,6 +31,7 @@ export default function createSidebar() { document.querySelector('.cards-container').classList.add('added-to-cart'); checkoutBtn.classList.add('added-to-cart'); checkoutBtnActive.classList.remove('added-to-cart'); + createCheckout(); } diff --git a/src/scss/app.scss b/src/scss/app.scss index 8874ae06..dc2301b4 100644 --- a/src/scss/app.scss +++ b/src/scss/app.scss @@ -198,6 +198,11 @@ aside { } } +.checkout-container { + width: 100%; + height: 100vh; +} + .price { font-size: 20px; } From ba46a418131b3699e8149ab1981dbd3f69b2752e Mon Sep 17 00:00:00 2001 From: birbwatcher Date: Thu, 8 Sep 2022 14:43:46 +0200 Subject: [PATCH 40/55] feat: forms on checkout page is created --- dist/style.css | 2 +- scripts/checkoutPage.js | 84 ++++++++++++++++++++++++++++++++++------- src/scss/app.scss | 21 +++++++++++ 3 files changed, 92 insertions(+), 15 deletions(-) diff --git a/dist/style.css b/dist/style.css index 9ff43364..80d2e279 100644 --- a/dist/style.css +++ b/dist/style.css @@ -1,2 +1,2 @@ -body{font-family:'Helvetica Neue',Helvetica,'Lucida Grande','Droid Sans',Tahoma,'Microsoft Sans Serif',sans-serif}.main-wrapper,.wrapper,.header-wrapper,.footer-wrapper{margin:0 auto;width:1200px}.wrapper{height:100%;display:flex}.header-wrapper,.footer-wrapper{height:100%}.header-wrapper{display:flex;align-items:center}header{width:100%;height:100px;background-color:#faea68}header .logo{margin-left:20px}header .logo img{height:60px}footer{width:100%;height:30px;background-color:#000;color:#fff}main{display:flex;width:70%;height:100%}aside{display:flex;justify-content:center;width:30%;height:100%;padding-top:20px}aside .cart{display:flex;flex-direction:column;justify-content:space-between;position:fixed;background-color:#f7f7f7;width:300px;height:500px;border-radius:20px}aside .cart .your-cart{text-align:center}aside .cart .your-cart{margin-top:20px;margin-bottom:15px}aside .cart .total{margin:20px 0px 20px 20px}aside .cart .cart-container{height:100%;overflow:scroll;overflow-x:hidden;flex-direction:column;justify-content:center;align-items:center;margin:0 20px}aside .cart .cart-container:hover{opacity:1}aside .cart .drag-image{width:50px;height:50px;opacity:0.3}aside .cart .empty-cart-title{opacity:0.3}aside .cart .cart-book{display:flex;width:100%;margin:10px 0}aside .cart .cart-book-image{width:70px}aside .cart .cart-book-title{font-size:13px}aside .cart .cart-book-info{display:flex;flex-direction:column;justify-content:space-evenly}aside .cart .cart-count-bar{display:flex;justify-content:space-evenly}aside .cart .cart-book-minus,aside .cart .cart-book-plus{width:40px;height:15px;display:flex;justify-content:center;align-items:center;cursor:pointer;color:white;background-color:grey}aside .cart .cart-count-bar p{margin:0;padding:0;font-size:13px}.cards-container{display:flex;flex-wrap:wrap;justify-content:space-between;row-gap:60px;column-gap:40px;width:100%;height:100%;padding:20px 0}.cards-container .card-item{width:200px;display:flex;position:relative;justify-content:space-between;flex-direction:column;padding:20px;border-radius:20px;cursor:pointer}.cards-container .card-item img{height:300px;width:100%}.cards-container .card-item img:hover{cursor:grab}.cards-container .card-item b{color:grey}.cards-container .card-item h3{font-size:16px;margin-top:10px;margin-bottom:10px}.cards-container .card-item .fast-view{display:none;position:absolute;border-radius:20px;background-color:rgba(255,255,255,0.674);color:black;padding:10px 20px;left:50%;top:50%;transform:translate(-50%, -50%)}.cards-container .card-item .fast-view:hover{background-color:#fbd183}.cards-container .card-item:hover{box-shadow:0px 2px 35px 14px rgba(13,13,13,0.04)}.cards-container .card-item:hover .fast-view{display:block}.checkout-container{width:100%;height:100vh}.price{font-size:20px}.bar{display:flex;justify-content:space-between;align-items:center;margin:10px 20px}button{cursor:pointer;border:none;border-radius:20px;background-color:orange;padding:5px 10px}button:hover{background-color:#fbd183}.added-to-cart{display:none}.added,.added-popup,.checkout-button-inactive{background-color:#cecece}.added:hover,.added-popup:hover,.checkout-button-inactive:hover{background-color:#cecece}.blackout{display:none;position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:black;opacity:0.5;z-index:1}.popup{display:none;position:fixed;align-items:center;top:50%;left:50%;border-radius:10px;transform:translate(-50%, -50%);background-color:white;width:640px;padding:6px 0;z-index:2}.popup .popup-product-image{height:350px}.popup .popup-content{margin:0 15px}.popup .close{align-self:baseline;margin-top:5px;margin-right:10px}.popup .close:hover{scale:110%}.active{display:flex} +body{font-family:'Helvetica Neue',Helvetica,'Lucida Grande','Droid Sans',Tahoma,'Microsoft Sans Serif',sans-serif}.main-wrapper,.wrapper,.header-wrapper,.footer-wrapper{margin:0 auto;width:1200px}.wrapper{height:100%;display:flex}.header-wrapper,.footer-wrapper{height:100%}.header-wrapper{display:flex;align-items:center}header{width:100%;height:100px;background-color:#faea68}header .logo{margin-left:20px}header .logo img{height:60px}footer{width:100%;height:30px;background-color:#000;color:#fff}main{display:flex;width:70%;height:100%}aside{display:flex;justify-content:center;width:30%;height:100%;padding-top:20px}aside .cart{display:flex;flex-direction:column;justify-content:space-between;position:fixed;background-color:#f7f7f7;width:300px;height:500px;border-radius:20px}aside .cart .your-cart{text-align:center}aside .cart .your-cart{margin-top:20px;margin-bottom:15px}aside .cart .total{margin:20px 0px 20px 20px}aside .cart .cart-container{height:100%;overflow:scroll;overflow-x:hidden;flex-direction:column;justify-content:center;align-items:center;margin:0 20px}aside .cart .cart-container:hover{opacity:1}aside .cart .drag-image{width:50px;height:50px;opacity:0.3}aside .cart .empty-cart-title{opacity:0.3}aside .cart .cart-book{display:flex;width:100%;margin:10px 0}aside .cart .cart-book-image{width:70px}aside .cart .cart-book-title{font-size:13px}aside .cart .cart-book-info{display:flex;flex-direction:column;justify-content:space-evenly}aside .cart .cart-count-bar{display:flex;justify-content:space-evenly}aside .cart .cart-book-minus,aside .cart .cart-book-plus{width:40px;height:15px;display:flex;justify-content:center;align-items:center;cursor:pointer;color:white;background-color:grey}aside .cart .cart-count-bar p{margin:0;padding:0;font-size:13px}.cards-container{display:flex;flex-wrap:wrap;justify-content:space-between;row-gap:60px;column-gap:40px;width:100%;height:100%;padding:20px 0}.cards-container .card-item{width:200px;display:flex;position:relative;justify-content:space-between;flex-direction:column;padding:20px;border-radius:20px;cursor:pointer}.cards-container .card-item img{height:300px;width:100%}.cards-container .card-item img:hover{cursor:grab}.cards-container .card-item b{color:grey}.cards-container .card-item h3{font-size:16px;margin-top:10px;margin-bottom:10px}.cards-container .card-item .fast-view{display:none;position:absolute;border-radius:20px;background-color:rgba(255,255,255,0.674);color:black;padding:10px 20px;left:50%;top:50%;transform:translate(-50%, -50%)}.cards-container .card-item .fast-view:hover{background-color:#fbd183}.cards-container .card-item:hover{box-shadow:0px 2px 35px 14px rgba(13,13,13,0.04)}.cards-container .card-item:hover .fast-view{display:block}.checkout-container{width:100%;height:100vh}.price{font-size:20px}.bar{display:flex;justify-content:space-between;align-items:center;margin:10px 20px}button{cursor:pointer;border:none;border-radius:20px;background-color:orange;padding:5px 10px}button:hover{background-color:#fbd183}.added-to-cart{display:none}.added,.added-popup,.checkout-button-inactive{background-color:#cecece}.added:hover,.added-popup:hover,.checkout-button-inactive:hover{background-color:#cecece}.blackout{display:none;position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:black;opacity:0.5;z-index:1}.popup{display:none;position:fixed;align-items:center;top:50%;left:50%;border-radius:10px;transform:translate(-50%, -50%);background-color:white;width:640px;padding:6px 0;z-index:2}.popup .popup-product-image{height:350px}.popup .popup-content{margin:0 15px}.popup .close{align-self:baseline;margin-top:5px;margin-right:10px}.popup .close:hover{scale:110%}.active{display:flex}.user-data{display:flex;flex-wrap:wrap;row-gap:20px}.user-data .name,.user-data .surname{width:50%}.user-data .name label,.user-data .surname label{width:100%}.user-data .street{width:100%}.user-data .street input{width:70%}.user-data div{display:flex;flex-direction:column} diff --git a/scripts/checkoutPage.js b/scripts/checkoutPage.js index e9560c87..3dfcd75d 100644 --- a/scripts/checkoutPage.js +++ b/scripts/checkoutPage.js @@ -1,22 +1,78 @@ import createElement from "./createElement.js"; export default function createCheckout() { - let checkoutContainer = createElement("div","checkout-container") + let checkoutContainer = createElement("div","checkout-container"); + let checkoutHeader = createElement("h1","checkout-header"); + checkoutHeader.innerHTML = "Checkout"; document.querySelector('main').append(checkoutContainer); - let cartName = createElement("h1","cart-name"); - let name = createElement("input","input-name"); - let surname = createElement("input","input-name"); - let street = createElement("input","input-street"); - let houseNum = createElement("input","input-house-number"); - let apt = createElement("input","input-apt-number"); + checkoutContainer.append(checkoutHeader); + let checkoutForm = createElement("form","checkout-form"); + checkoutContainer.append(checkoutForm) + let userData = createElement("div","user-data"); + let paymentType = createElement("div","payment-type"); + checkoutForm.append(userData); + checkoutForm.append(paymentType); + + let paymentHeader = createElement("h2","checkout-header"); + paymentHeader.innerHTML = "Choose the payment type:" + paymentType.append(paymentHeader); - cartName.innerHTML = 'Cart'; + let giftType = createElement("div","gift-type"); + let giftHeader = createElement("h2","gift-header"); + giftHeader.innerHTML = "Choose 2 gifts: (optional)" + giftType.append(giftHeader); + checkoutForm.append(giftType); - checkoutContainer.append(cartName); - checkoutContainer.append(name); - checkoutContainer.append(surname); - checkoutContainer.append(street); - checkoutContainer.append(houseNum); - checkoutContainer.append(apt); + userData.append(createInput("name","Name:", "text")); + userData.append(createInput("surname","Surname:", "text")); + userData.append(createInput("street","Your Street:", "text")); + userData.append(createInput("house-number","House Number:", "text")); + userData.append(createInput("flat-number","Flat Number:", "text")); + userData.append(createInput("delivery-date","Preferable Delivery Date:", "date")); + // let cardPayment = createInput("by-card","By Card", "radio"); + // let cashPayment = createInput("by-cash","By Cash", "radio") + // cardPayment.name = "payment"; + // cashPayment.name = "payment"; + paymentType.append(createPayment("card", "Card")); + paymentType.append(createPayment("cash", "Cash")); + + giftType.append(chooseGift("gift", "pack as a gift")) + giftType.append(chooseGift("postcard", "add postcard")) + giftType.append(chooseGift("discount", "provide 2% discount to the next time")) + giftType.append(chooseGift("branded-pen", "branded pen or pencil")) +} + +function createInput(name, labelName, inputtype) { + let block = createElement("div", name); + let label = document.createElement("label"); + let input = document.createElement("input"); + label.innerHTML = labelName; + input.type = inputtype; + block.append(label); + block.append(input); + return block; +} + +function createPayment(name, labelName) { + let block = createElement("div", name); + let label = document.createElement("label"); + let input = document.createElement("input"); + label.innerHTML = labelName; + input.type = "radio"; + input.name = "Payment"; + block.append(input); + block.append(label); + return block; +} + +function chooseGift(name, labelName) { + let block = createElement("div", name); + let label = document.createElement("label"); + let input = document.createElement("input"); + label.innerHTML = labelName; + input.type = "checkbox"; + block.append(input); + block.append(label); + return block; } \ No newline at end of file diff --git a/src/scss/app.scss b/src/scss/app.scss index dc2301b4..8003d499 100644 --- a/src/scss/app.scss +++ b/src/scss/app.scss @@ -280,3 +280,24 @@ button:hover{ display: flex; } +.user-data { + display: flex; + flex-wrap: wrap; + row-gap: 20px; + .name, .surname { + width: 50%; + label { + width: 100%; + } + } + .street { + width: 100%; + input { + width: 70%; + } + } + div { + display: flex; + flex-direction: column; + } +} From fb4d1f09e6f663dc694fe202280cabd2eeedfa9e Mon Sep 17 00:00:00 2001 From: birbwatcher Date: Mon, 12 Sep 2022 12:43:50 +0200 Subject: [PATCH 41/55] feat: date form minimum implemented --- scripts/checkoutPage.js | 67 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 62 insertions(+), 5 deletions(-) diff --git a/scripts/checkoutPage.js b/scripts/checkoutPage.js index 3dfcd75d..9ede44f4 100644 --- a/scripts/checkoutPage.js +++ b/scripts/checkoutPage.js @@ -1,5 +1,7 @@ import createElement from "./createElement.js"; +let checkoutData = {}; + export default function createCheckout() { let checkoutContainer = createElement("div","checkout-container"); let checkoutHeader = createElement("h1","checkout-header"); @@ -7,6 +9,7 @@ export default function createCheckout() { document.querySelector('main').append(checkoutContainer); checkoutContainer.append(checkoutHeader); let checkoutForm = createElement("form","checkout-form"); + checkoutForm.id = "form"; checkoutContainer.append(checkoutForm) let userData = createElement("div","user-data"); let paymentType = createElement("div","payment-type"); @@ -29,11 +32,9 @@ export default function createCheckout() { userData.append(createInput("house-number","House Number:", "text")); userData.append(createInput("flat-number","Flat Number:", "text")); userData.append(createInput("delivery-date","Preferable Delivery Date:", "date")); - - // let cardPayment = createInput("by-card","By Card", "radio"); - // let cashPayment = createInput("by-cash","By Cash", "radio") - // cardPayment.name = "payment"; - // cashPayment.name = "payment"; + document.getElementById('delivery-date').setAttribute("min", getTomorrowDate()) + document.getElementById('delivery-date').setAttribute("value", getTomorrowDate()) + paymentType.append(createPayment("card", "Card")); paymentType.append(createPayment("cash", "Cash")); @@ -41,6 +42,33 @@ export default function createCheckout() { giftType.append(chooseGift("postcard", "add postcard")) giftType.append(chooseGift("discount", "provide 2% discount to the next time")) giftType.append(chooseGift("branded-pen", "branded pen or pencil")) + + let submitButton = createElement("button","submit-button"); + submitButton.innerHTML = "Leave Order"; + submitButton.type = "submit"; + checkoutForm.append(submitButton); + + submitButton.onclick = function(e) { + e.preventDefault(); + let name = document.getElementById('name').value; + let surname = document.getElementById('surname').value; + let street = document.getElementById('street').value; + let houseNumber = document.getElementById('house-number').value; + let flatNumber = document.getElementById('flat-number').value; + let deliveryDate = document.getElementById('delivery-date').value; + + checkoutData.name = name; + checkoutData.surname = surname; + checkoutData.street = street; + checkoutData.houseNumber = houseNumber; + checkoutData.flatNumber = flatNumber; + checkoutData.deliveryDate = deliveryDate; + checkoutData.payment = paymentTypeSelection(); + console.log(checkoutData); + + // return false; + paymentTypeSelection(); + } } function createInput(name, labelName, inputtype) { @@ -49,6 +77,8 @@ function createInput(name, labelName, inputtype) { let input = document.createElement("input"); label.innerHTML = labelName; input.type = inputtype; + input.name = name; + input.id = name; block.append(label); block.append(input); return block; @@ -61,6 +91,7 @@ function createPayment(name, labelName) { label.innerHTML = labelName; input.type = "radio"; input.name = "Payment"; + input.id = name; block.append(input); block.append(label); return block; @@ -75,4 +106,30 @@ function chooseGift(name, labelName) { block.append(input); block.append(label); return block; +} + +function paymentTypeSelection(){ + let paymentType = document.querySelector('input[name="Payment"]:checked').id; + return paymentType; +} + +function createDateInput(name, labelName) { + let block = createElement("div", name); + let label = document.createElement("label"); + let input = document.createElement("input"); + label.innerHTML = labelName; + input.type = inputtype; + input.name = name; + input.id = name; + input.min = getTomorrowDate(); + input.value = getTomorrowDate(); + block.append(label); + block.append(input); + return block; +} + +function getTomorrowDate() { + let today = new Date(); + let tomorrow = today.getFullYear() + "-" + 0 + (today.getMonth() + 1) + "-" + (today.getDate() + 1); + return tomorrow; } \ No newline at end of file From 642cd2466e52c017fbc7ea2cd14851a6b53b2659 Mon Sep 17 00:00:00 2001 From: birbwatcher Date: Mon, 12 Sep 2022 17:22:04 +0200 Subject: [PATCH 42/55] feat: forms cant be blank --- dist/style.css | 2 +- scripts/checkoutPage.js | 18 +++++++++++++----- scripts/formValidation.js | 14 ++++++++++++++ src/scss/app.scss | 18 ++++++++++++++++++ 4 files changed, 46 insertions(+), 6 deletions(-) create mode 100644 scripts/formValidation.js diff --git a/dist/style.css b/dist/style.css index 80d2e279..9cf37645 100644 --- a/dist/style.css +++ b/dist/style.css @@ -1,2 +1,2 @@ -body{font-family:'Helvetica Neue',Helvetica,'Lucida Grande','Droid Sans',Tahoma,'Microsoft Sans Serif',sans-serif}.main-wrapper,.wrapper,.header-wrapper,.footer-wrapper{margin:0 auto;width:1200px}.wrapper{height:100%;display:flex}.header-wrapper,.footer-wrapper{height:100%}.header-wrapper{display:flex;align-items:center}header{width:100%;height:100px;background-color:#faea68}header .logo{margin-left:20px}header .logo img{height:60px}footer{width:100%;height:30px;background-color:#000;color:#fff}main{display:flex;width:70%;height:100%}aside{display:flex;justify-content:center;width:30%;height:100%;padding-top:20px}aside .cart{display:flex;flex-direction:column;justify-content:space-between;position:fixed;background-color:#f7f7f7;width:300px;height:500px;border-radius:20px}aside .cart .your-cart{text-align:center}aside .cart .your-cart{margin-top:20px;margin-bottom:15px}aside .cart .total{margin:20px 0px 20px 20px}aside .cart .cart-container{height:100%;overflow:scroll;overflow-x:hidden;flex-direction:column;justify-content:center;align-items:center;margin:0 20px}aside .cart .cart-container:hover{opacity:1}aside .cart .drag-image{width:50px;height:50px;opacity:0.3}aside .cart .empty-cart-title{opacity:0.3}aside .cart .cart-book{display:flex;width:100%;margin:10px 0}aside .cart .cart-book-image{width:70px}aside .cart .cart-book-title{font-size:13px}aside .cart .cart-book-info{display:flex;flex-direction:column;justify-content:space-evenly}aside .cart .cart-count-bar{display:flex;justify-content:space-evenly}aside .cart .cart-book-minus,aside .cart .cart-book-plus{width:40px;height:15px;display:flex;justify-content:center;align-items:center;cursor:pointer;color:white;background-color:grey}aside .cart .cart-count-bar p{margin:0;padding:0;font-size:13px}.cards-container{display:flex;flex-wrap:wrap;justify-content:space-between;row-gap:60px;column-gap:40px;width:100%;height:100%;padding:20px 0}.cards-container .card-item{width:200px;display:flex;position:relative;justify-content:space-between;flex-direction:column;padding:20px;border-radius:20px;cursor:pointer}.cards-container .card-item img{height:300px;width:100%}.cards-container .card-item img:hover{cursor:grab}.cards-container .card-item b{color:grey}.cards-container .card-item h3{font-size:16px;margin-top:10px;margin-bottom:10px}.cards-container .card-item .fast-view{display:none;position:absolute;border-radius:20px;background-color:rgba(255,255,255,0.674);color:black;padding:10px 20px;left:50%;top:50%;transform:translate(-50%, -50%)}.cards-container .card-item .fast-view:hover{background-color:#fbd183}.cards-container .card-item:hover{box-shadow:0px 2px 35px 14px rgba(13,13,13,0.04)}.cards-container .card-item:hover .fast-view{display:block}.checkout-container{width:100%;height:100vh}.price{font-size:20px}.bar{display:flex;justify-content:space-between;align-items:center;margin:10px 20px}button{cursor:pointer;border:none;border-radius:20px;background-color:orange;padding:5px 10px}button:hover{background-color:#fbd183}.added-to-cart{display:none}.added,.added-popup,.checkout-button-inactive{background-color:#cecece}.added:hover,.added-popup:hover,.checkout-button-inactive:hover{background-color:#cecece}.blackout{display:none;position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:black;opacity:0.5;z-index:1}.popup{display:none;position:fixed;align-items:center;top:50%;left:50%;border-radius:10px;transform:translate(-50%, -50%);background-color:white;width:640px;padding:6px 0;z-index:2}.popup .popup-product-image{height:350px}.popup .popup-content{margin:0 15px}.popup .close{align-self:baseline;margin-top:5px;margin-right:10px}.popup .close:hover{scale:110%}.active{display:flex}.user-data{display:flex;flex-wrap:wrap;row-gap:20px}.user-data .name,.user-data .surname{width:50%}.user-data .name label,.user-data .surname label{width:100%}.user-data .street{width:100%}.user-data .street input{width:70%}.user-data div{display:flex;flex-direction:column} +body{font-family:'Helvetica Neue',Helvetica,'Lucida Grande','Droid Sans',Tahoma,'Microsoft Sans Serif',sans-serif}.main-wrapper,.wrapper,.header-wrapper,.footer-wrapper{margin:0 auto;width:1200px}.wrapper{height:100%;display:flex}.header-wrapper,.footer-wrapper{height:100%}.header-wrapper{display:flex;align-items:center}header{width:100%;height:100px;background-color:#faea68}header .logo{margin-left:20px}header .logo img{height:60px}footer{width:100%;height:30px;background-color:#000;color:#fff}main{display:flex;width:70%;height:100%}aside{display:flex;justify-content:center;width:30%;height:100%;padding-top:20px}aside .cart{display:flex;flex-direction:column;justify-content:space-between;position:fixed;background-color:#f7f7f7;width:300px;height:500px;border-radius:20px}aside .cart .your-cart{text-align:center}aside .cart .your-cart{margin-top:20px;margin-bottom:15px}aside .cart .total{margin:20px 0px 20px 20px}aside .cart .cart-container{height:100%;overflow:scroll;overflow-x:hidden;flex-direction:column;justify-content:center;align-items:center;margin:0 20px}aside .cart .cart-container:hover{opacity:1}aside .cart .drag-image{width:50px;height:50px;opacity:0.3}aside .cart .empty-cart-title{opacity:0.3}aside .cart .cart-book{display:flex;width:100%;margin:10px 0}aside .cart .cart-book-image{width:70px}aside .cart .cart-book-title{font-size:13px}aside .cart .cart-book-info{display:flex;flex-direction:column;justify-content:space-evenly}aside .cart .cart-count-bar{display:flex;justify-content:space-evenly}aside .cart .cart-book-minus,aside .cart .cart-book-plus{width:40px;height:15px;display:flex;justify-content:center;align-items:center;cursor:pointer;color:white;background-color:grey}aside .cart .cart-count-bar p{margin:0;padding:0;font-size:13px}.cards-container{display:flex;flex-wrap:wrap;justify-content:space-between;row-gap:60px;column-gap:40px;width:100%;height:100%;padding:20px 0}.cards-container .card-item{width:200px;display:flex;position:relative;justify-content:space-between;flex-direction:column;padding:20px;border-radius:20px;cursor:pointer}.cards-container .card-item img{height:300px;width:100%}.cards-container .card-item img:hover{cursor:grab}.cards-container .card-item b{color:grey}.cards-container .card-item h3{font-size:16px;margin-top:10px;margin-bottom:10px}.cards-container .card-item .fast-view{display:none;position:absolute;border-radius:20px;background-color:rgba(255,255,255,0.674);color:black;padding:10px 20px;left:50%;top:50%;transform:translate(-50%, -50%)}.cards-container .card-item .fast-view:hover{background-color:#fbd183}.cards-container .card-item:hover{box-shadow:0px 2px 35px 14px rgba(13,13,13,0.04)}.cards-container .card-item:hover .fast-view{display:block}.checkout-container{width:100%;height:100vh}.price{font-size:20px}.bar{display:flex;justify-content:space-between;align-items:center;margin:10px 20px}button{cursor:pointer;border:none;border-radius:20px;background-color:orange;padding:5px 10px}button:hover{background-color:#fbd183}.added-to-cart{display:none}.added,.added-popup,.checkout-button-inactive{background-color:#cecece}.added:hover,.added-popup:hover,.checkout-button-inactive:hover{background-color:#cecece}.blackout{display:none;position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:black;opacity:0.5;z-index:1}.popup{display:none;position:fixed;align-items:center;top:50%;left:50%;border-radius:10px;transform:translate(-50%, -50%);background-color:white;width:640px;padding:6px 0;z-index:2}.popup .popup-product-image{height:350px}.popup .popup-content{margin:0 15px}.popup .close{align-self:baseline;margin-top:5px;margin-right:10px}.popup .close:hover{scale:110%}.active{display:flex}.user-data{display:flex;flex-wrap:wrap;row-gap:20px}.user-data input{border:1px solid;border-radius:5px}.user-data input:focus{background-color:#faea68}.user-data input.error{background-color:rgba(250,43,43,0.395)}.user-data .name,.user-data .surname{width:50%}.user-data .name label,.user-data .surname label{width:100%}.user-data .street{width:100%}.user-data .street input{width:70%}.user-data div{display:flex;flex-direction:column}.payment-type input,.gift-type input{margin-right:15px} diff --git a/scripts/checkoutPage.js b/scripts/checkoutPage.js index 9ede44f4..829f8105 100644 --- a/scripts/checkoutPage.js +++ b/scripts/checkoutPage.js @@ -1,4 +1,5 @@ import createElement from "./createElement.js"; +import checkForms from "./formValidation.js"; let checkoutData = {}; @@ -26,10 +27,10 @@ export default function createCheckout() { giftType.append(giftHeader); checkoutForm.append(giftType); - userData.append(createInput("name","Name:", "text")); - userData.append(createInput("surname","Surname:", "text")); - userData.append(createInput("street","Your Street:", "text")); - userData.append(createInput("house-number","House Number:", "text")); + userData.append(createInput("name","Name:", "text", true)); + userData.append(createInput("surname","Surname:", "text", true)); + userData.append(createInput("street","Your Street:", "text", true)); + userData.append(createInput("house-number","House Number:", "text", true)); userData.append(createInput("flat-number","Flat Number:", "text")); userData.append(createInput("delivery-date","Preferable Delivery Date:", "date")); document.getElementById('delivery-date').setAttribute("min", getTomorrowDate()) @@ -57,6 +58,8 @@ export default function createCheckout() { let flatNumber = document.getElementById('flat-number').value; let deliveryDate = document.getElementById('delivery-date').value; + checkForms(); + checkoutData.name = name; checkoutData.surname = surname; checkoutData.street = street; @@ -71,7 +74,7 @@ export default function createCheckout() { } } -function createInput(name, labelName, inputtype) { +function createInput(name, labelName, inputtype, required) { let block = createElement("div", name); let label = document.createElement("label"); let input = document.createElement("input"); @@ -79,6 +82,11 @@ function createInput(name, labelName, inputtype) { input.type = inputtype; input.name = name; input.id = name; + + if (required === true) { + input.classList.add('required'); + } + block.append(label); block.append(input); return block; diff --git a/scripts/formValidation.js b/scripts/formValidation.js new file mode 100644 index 00000000..8f937f81 --- /dev/null +++ b/scripts/formValidation.js @@ -0,0 +1,14 @@ + +export default function checkForms() { + let reqForms = document.querySelectorAll('.required'); + + for (let i=0;i Date: Mon, 12 Sep 2022 17:59:33 +0200 Subject: [PATCH 43/55] feat: default payment type implemented --- dist/style.css | 2 +- scripts/checkoutPage.js | 7 +++++-- scripts/formValidation.js | 27 +++++++++++++++++++++------ src/scss/app.scss | 4 ++++ 4 files changed, 31 insertions(+), 9 deletions(-) diff --git a/dist/style.css b/dist/style.css index 9cf37645..801907be 100644 --- a/dist/style.css +++ b/dist/style.css @@ -1,2 +1,2 @@ -body{font-family:'Helvetica Neue',Helvetica,'Lucida Grande','Droid Sans',Tahoma,'Microsoft Sans Serif',sans-serif}.main-wrapper,.wrapper,.header-wrapper,.footer-wrapper{margin:0 auto;width:1200px}.wrapper{height:100%;display:flex}.header-wrapper,.footer-wrapper{height:100%}.header-wrapper{display:flex;align-items:center}header{width:100%;height:100px;background-color:#faea68}header .logo{margin-left:20px}header .logo img{height:60px}footer{width:100%;height:30px;background-color:#000;color:#fff}main{display:flex;width:70%;height:100%}aside{display:flex;justify-content:center;width:30%;height:100%;padding-top:20px}aside .cart{display:flex;flex-direction:column;justify-content:space-between;position:fixed;background-color:#f7f7f7;width:300px;height:500px;border-radius:20px}aside .cart .your-cart{text-align:center}aside .cart .your-cart{margin-top:20px;margin-bottom:15px}aside .cart .total{margin:20px 0px 20px 20px}aside .cart .cart-container{height:100%;overflow:scroll;overflow-x:hidden;flex-direction:column;justify-content:center;align-items:center;margin:0 20px}aside .cart .cart-container:hover{opacity:1}aside .cart .drag-image{width:50px;height:50px;opacity:0.3}aside .cart .empty-cart-title{opacity:0.3}aside .cart .cart-book{display:flex;width:100%;margin:10px 0}aside .cart .cart-book-image{width:70px}aside .cart .cart-book-title{font-size:13px}aside .cart .cart-book-info{display:flex;flex-direction:column;justify-content:space-evenly}aside .cart .cart-count-bar{display:flex;justify-content:space-evenly}aside .cart .cart-book-minus,aside .cart .cart-book-plus{width:40px;height:15px;display:flex;justify-content:center;align-items:center;cursor:pointer;color:white;background-color:grey}aside .cart .cart-count-bar p{margin:0;padding:0;font-size:13px}.cards-container{display:flex;flex-wrap:wrap;justify-content:space-between;row-gap:60px;column-gap:40px;width:100%;height:100%;padding:20px 0}.cards-container .card-item{width:200px;display:flex;position:relative;justify-content:space-between;flex-direction:column;padding:20px;border-radius:20px;cursor:pointer}.cards-container .card-item img{height:300px;width:100%}.cards-container .card-item img:hover{cursor:grab}.cards-container .card-item b{color:grey}.cards-container .card-item h3{font-size:16px;margin-top:10px;margin-bottom:10px}.cards-container .card-item .fast-view{display:none;position:absolute;border-radius:20px;background-color:rgba(255,255,255,0.674);color:black;padding:10px 20px;left:50%;top:50%;transform:translate(-50%, -50%)}.cards-container .card-item .fast-view:hover{background-color:#fbd183}.cards-container .card-item:hover{box-shadow:0px 2px 35px 14px rgba(13,13,13,0.04)}.cards-container .card-item:hover .fast-view{display:block}.checkout-container{width:100%;height:100vh}.price{font-size:20px}.bar{display:flex;justify-content:space-between;align-items:center;margin:10px 20px}button{cursor:pointer;border:none;border-radius:20px;background-color:orange;padding:5px 10px}button:hover{background-color:#fbd183}.added-to-cart{display:none}.added,.added-popup,.checkout-button-inactive{background-color:#cecece}.added:hover,.added-popup:hover,.checkout-button-inactive:hover{background-color:#cecece}.blackout{display:none;position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:black;opacity:0.5;z-index:1}.popup{display:none;position:fixed;align-items:center;top:50%;left:50%;border-radius:10px;transform:translate(-50%, -50%);background-color:white;width:640px;padding:6px 0;z-index:2}.popup .popup-product-image{height:350px}.popup .popup-content{margin:0 15px}.popup .close{align-self:baseline;margin-top:5px;margin-right:10px}.popup .close:hover{scale:110%}.active{display:flex}.user-data{display:flex;flex-wrap:wrap;row-gap:20px}.user-data input{border:1px solid;border-radius:5px}.user-data input:focus{background-color:#faea68}.user-data input.error{background-color:rgba(250,43,43,0.395)}.user-data .name,.user-data .surname{width:50%}.user-data .name label,.user-data .surname label{width:100%}.user-data .street{width:100%}.user-data .street input{width:70%}.user-data div{display:flex;flex-direction:column}.payment-type input,.gift-type input{margin-right:15px} +body{font-family:'Helvetica Neue',Helvetica,'Lucida Grande','Droid Sans',Tahoma,'Microsoft Sans Serif',sans-serif}.main-wrapper,.wrapper,.header-wrapper,.footer-wrapper{margin:0 auto;width:1200px}.wrapper{height:100%;display:flex}.header-wrapper,.footer-wrapper{height:100%}.header-wrapper{display:flex;align-items:center}header{width:100%;height:100px;background-color:#faea68}header .logo{margin-left:20px}header .logo img{height:60px}footer{width:100%;height:30px;background-color:#000;color:#fff}main{display:flex;width:70%;height:100%}aside{display:flex;justify-content:center;width:30%;height:100%;padding-top:20px}aside .cart{display:flex;flex-direction:column;justify-content:space-between;position:fixed;background-color:#f7f7f7;width:300px;height:500px;border-radius:20px}aside .cart .your-cart{text-align:center}aside .cart .your-cart{margin-top:20px;margin-bottom:15px}aside .cart .total{margin:20px 0px 20px 20px}aside .cart .cart-container{height:100%;overflow:scroll;overflow-x:hidden;flex-direction:column;justify-content:center;align-items:center;margin:0 20px}aside .cart .cart-container:hover{opacity:1}aside .cart .drag-image{width:50px;height:50px;opacity:0.3}aside .cart .empty-cart-title{opacity:0.3}aside .cart .cart-book{display:flex;width:100%;margin:10px 0}aside .cart .cart-book-image{width:70px}aside .cart .cart-book-title{font-size:13px}aside .cart .cart-book-info{display:flex;flex-direction:column;justify-content:space-evenly}aside .cart .cart-count-bar{display:flex;justify-content:space-evenly}aside .cart .cart-book-minus,aside .cart .cart-book-plus{width:40px;height:15px;display:flex;justify-content:center;align-items:center;cursor:pointer;color:white;background-color:grey}aside .cart .cart-count-bar p{margin:0;padding:0;font-size:13px}.cards-container{display:flex;flex-wrap:wrap;justify-content:space-between;row-gap:60px;column-gap:40px;width:100%;height:100%;padding:20px 0}.cards-container .card-item{width:200px;display:flex;position:relative;justify-content:space-between;flex-direction:column;padding:20px;border-radius:20px;cursor:pointer}.cards-container .card-item img{height:300px;width:100%}.cards-container .card-item img:hover{cursor:grab}.cards-container .card-item b{color:grey}.cards-container .card-item h3{font-size:16px;margin-top:10px;margin-bottom:10px}.cards-container .card-item .fast-view{display:none;position:absolute;border-radius:20px;background-color:rgba(255,255,255,0.674);color:black;padding:10px 20px;left:50%;top:50%;transform:translate(-50%, -50%)}.cards-container .card-item .fast-view:hover{background-color:#fbd183}.cards-container .card-item:hover{box-shadow:0px 2px 35px 14px rgba(13,13,13,0.04)}.cards-container .card-item:hover .fast-view{display:block}.checkout-container{width:100%;height:100vh}.price{font-size:20px}.bar{display:flex;justify-content:space-between;align-items:center;margin:10px 20px}button{cursor:pointer;border:none;border-radius:20px;background-color:orange;padding:5px 10px}button:hover{background-color:#fbd183}.added-to-cart{display:none}.added,.added-popup,.checkout-button-inactive{background-color:#cecece}.added:hover,.added-popup:hover,.checkout-button-inactive:hover{background-color:#cecece}.blackout{display:none;position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:black;opacity:0.5;z-index:1}.popup{display:none;position:fixed;align-items:center;top:50%;left:50%;border-radius:10px;transform:translate(-50%, -50%);background-color:white;width:640px;padding:6px 0;z-index:2}.popup .popup-product-image{height:350px}.popup .popup-content{margin:0 15px}.popup .close{align-self:baseline;margin-top:5px;margin-right:10px}.popup .close:hover{scale:110%}.active{display:flex}.user-data{display:flex;flex-wrap:wrap;row-gap:20px}.user-data input{border:1px solid;border-radius:5px}.user-data input:focus{background-color:#faea68}.user-data input.error{background-color:rgba(250,43,43,0.395)}.user-data .required-field-label{font-size:15px;color:red}.user-data .name,.user-data .surname{width:50%}.user-data .name label,.user-data .surname label{width:100%}.user-data .street{width:100%}.user-data .street input{width:70%}.user-data div{display:flex;flex-direction:column}.payment-type input,.gift-type input{margin-right:15px} diff --git a/scripts/checkoutPage.js b/scripts/checkoutPage.js index 829f8105..02167d6f 100644 --- a/scripts/checkoutPage.js +++ b/scripts/checkoutPage.js @@ -36,7 +36,7 @@ export default function createCheckout() { document.getElementById('delivery-date').setAttribute("min", getTomorrowDate()) document.getElementById('delivery-date').setAttribute("value", getTomorrowDate()) - paymentType.append(createPayment("card", "Card")); + paymentType.append(createPayment("card", "Card", true)); paymentType.append(createPayment("cash", "Cash")); giftType.append(chooseGift("gift", "pack as a gift")) @@ -92,13 +92,16 @@ function createInput(name, labelName, inputtype, required) { return block; } -function createPayment(name, labelName) { +function createPayment(name, labelName, checked) { let block = createElement("div", name); let label = document.createElement("label"); let input = document.createElement("input"); label.innerHTML = labelName; input.type = "radio"; input.name = "Payment"; + if (checked) { + input.checked = true; + } input.id = name; block.append(input); block.append(label); diff --git a/scripts/formValidation.js b/scripts/formValidation.js index 8f937f81..3e7158f7 100644 --- a/scripts/formValidation.js +++ b/scripts/formValidation.js @@ -1,14 +1,29 @@ +import createElement from "./createElement.js"; export default function checkForms() { let reqForms = document.querySelectorAll('.required'); - for (let i=0;i Date: Mon, 12 Sep 2022 21:07:12 +0200 Subject: [PATCH 44/55] feat: posible to get only two gifts --- dist/style.css | 2 +- scripts/checkoutPage.js | 45 +++++++++++++++++++++++++++++++++++++-- scripts/formValidation.js | 10 ++++++--- src/scss/app.scss | 10 ++++++--- 4 files changed, 58 insertions(+), 9 deletions(-) diff --git a/dist/style.css b/dist/style.css index 801907be..b15a2203 100644 --- a/dist/style.css +++ b/dist/style.css @@ -1,2 +1,2 @@ -body{font-family:'Helvetica Neue',Helvetica,'Lucida Grande','Droid Sans',Tahoma,'Microsoft Sans Serif',sans-serif}.main-wrapper,.wrapper,.header-wrapper,.footer-wrapper{margin:0 auto;width:1200px}.wrapper{height:100%;display:flex}.header-wrapper,.footer-wrapper{height:100%}.header-wrapper{display:flex;align-items:center}header{width:100%;height:100px;background-color:#faea68}header .logo{margin-left:20px}header .logo img{height:60px}footer{width:100%;height:30px;background-color:#000;color:#fff}main{display:flex;width:70%;height:100%}aside{display:flex;justify-content:center;width:30%;height:100%;padding-top:20px}aside .cart{display:flex;flex-direction:column;justify-content:space-between;position:fixed;background-color:#f7f7f7;width:300px;height:500px;border-radius:20px}aside .cart .your-cart{text-align:center}aside .cart .your-cart{margin-top:20px;margin-bottom:15px}aside .cart .total{margin:20px 0px 20px 20px}aside .cart .cart-container{height:100%;overflow:scroll;overflow-x:hidden;flex-direction:column;justify-content:center;align-items:center;margin:0 20px}aside .cart .cart-container:hover{opacity:1}aside .cart .drag-image{width:50px;height:50px;opacity:0.3}aside .cart .empty-cart-title{opacity:0.3}aside .cart .cart-book{display:flex;width:100%;margin:10px 0}aside .cart .cart-book-image{width:70px}aside .cart .cart-book-title{font-size:13px}aside .cart .cart-book-info{display:flex;flex-direction:column;justify-content:space-evenly}aside .cart .cart-count-bar{display:flex;justify-content:space-evenly}aside .cart .cart-book-minus,aside .cart .cart-book-plus{width:40px;height:15px;display:flex;justify-content:center;align-items:center;cursor:pointer;color:white;background-color:grey}aside .cart .cart-count-bar p{margin:0;padding:0;font-size:13px}.cards-container{display:flex;flex-wrap:wrap;justify-content:space-between;row-gap:60px;column-gap:40px;width:100%;height:100%;padding:20px 0}.cards-container .card-item{width:200px;display:flex;position:relative;justify-content:space-between;flex-direction:column;padding:20px;border-radius:20px;cursor:pointer}.cards-container .card-item img{height:300px;width:100%}.cards-container .card-item img:hover{cursor:grab}.cards-container .card-item b{color:grey}.cards-container .card-item h3{font-size:16px;margin-top:10px;margin-bottom:10px}.cards-container .card-item .fast-view{display:none;position:absolute;border-radius:20px;background-color:rgba(255,255,255,0.674);color:black;padding:10px 20px;left:50%;top:50%;transform:translate(-50%, -50%)}.cards-container .card-item .fast-view:hover{background-color:#fbd183}.cards-container .card-item:hover{box-shadow:0px 2px 35px 14px rgba(13,13,13,0.04)}.cards-container .card-item:hover .fast-view{display:block}.checkout-container{width:100%;height:100vh}.price{font-size:20px}.bar{display:flex;justify-content:space-between;align-items:center;margin:10px 20px}button{cursor:pointer;border:none;border-radius:20px;background-color:orange;padding:5px 10px}button:hover{background-color:#fbd183}.added-to-cart{display:none}.added,.added-popup,.checkout-button-inactive{background-color:#cecece}.added:hover,.added-popup:hover,.checkout-button-inactive:hover{background-color:#cecece}.blackout{display:none;position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:black;opacity:0.5;z-index:1}.popup{display:none;position:fixed;align-items:center;top:50%;left:50%;border-radius:10px;transform:translate(-50%, -50%);background-color:white;width:640px;padding:6px 0;z-index:2}.popup .popup-product-image{height:350px}.popup .popup-content{margin:0 15px}.popup .close{align-self:baseline;margin-top:5px;margin-right:10px}.popup .close:hover{scale:110%}.active{display:flex}.user-data{display:flex;flex-wrap:wrap;row-gap:20px}.user-data input{border:1px solid;border-radius:5px}.user-data input:focus{background-color:#faea68}.user-data input.error{background-color:rgba(250,43,43,0.395)}.user-data .required-field-label{font-size:15px;color:red}.user-data .name,.user-data .surname{width:50%}.user-data .name label,.user-data .surname label{width:100%}.user-data .street{width:100%}.user-data .street input{width:70%}.user-data div{display:flex;flex-direction:column}.payment-type input,.gift-type input{margin-right:15px} +body{font-family:'Helvetica Neue',Helvetica,'Lucida Grande','Droid Sans',Tahoma,'Microsoft Sans Serif',sans-serif}.main-wrapper,.wrapper,.header-wrapper,.footer-wrapper{margin:0 auto;width:1200px}.wrapper{height:100%;display:flex}.header-wrapper,.footer-wrapper{height:100%}.header-wrapper{display:flex;align-items:center}header{width:100%;height:100px;background-color:#faea68}header .logo{margin-left:20px}header .logo img{height:60px}footer{width:100%;height:30px;background-color:#000;color:#fff}main{display:flex;width:70%;height:100%}aside{display:flex;justify-content:center;width:30%;height:100%;padding-top:20px}aside .cart{display:flex;flex-direction:column;justify-content:space-between;position:fixed;background-color:#f7f7f7;width:300px;height:500px;border-radius:20px}aside .cart .your-cart{text-align:center}aside .cart .your-cart{margin-top:20px;margin-bottom:15px}aside .cart .total{margin:20px 0px 20px 20px}aside .cart .cart-container{height:100%;overflow:scroll;overflow-x:hidden;flex-direction:column;justify-content:center;align-items:center;margin:0 20px}aside .cart .cart-container:hover{opacity:1}aside .cart .drag-image{width:50px;height:50px;opacity:0.3}aside .cart .empty-cart-title{opacity:0.3}aside .cart .cart-book{display:flex;width:100%;margin:10px 0}aside .cart .cart-book-image{width:70px}aside .cart .cart-book-title{font-size:13px}aside .cart .cart-book-info{display:flex;flex-direction:column;justify-content:space-evenly}aside .cart .cart-count-bar{display:flex;justify-content:space-evenly}aside .cart .cart-book-minus,aside .cart .cart-book-plus{width:40px;height:15px;display:flex;justify-content:center;align-items:center;cursor:pointer;color:white;background-color:grey}aside .cart .cart-count-bar p{margin:0;padding:0;font-size:13px}.cards-container{display:flex;flex-wrap:wrap;justify-content:space-between;row-gap:60px;column-gap:40px;width:100%;height:100%;padding:20px 0}.cards-container .card-item{width:200px;display:flex;position:relative;justify-content:space-between;flex-direction:column;padding:20px;border-radius:20px;cursor:pointer}.cards-container .card-item img{height:300px;width:100%}.cards-container .card-item img:hover{cursor:grab}.cards-container .card-item b{color:grey}.cards-container .card-item h3{font-size:16px;margin-top:10px;margin-bottom:10px}.cards-container .card-item .fast-view{display:none;position:absolute;border-radius:20px;background-color:rgba(255,255,255,0.674);color:black;padding:10px 20px;left:50%;top:50%;transform:translate(-50%, -50%)}.cards-container .card-item .fast-view:hover{background-color:#fbd183}.cards-container .card-item:hover{box-shadow:0px 2px 35px 14px rgba(13,13,13,0.04)}.cards-container .card-item:hover .fast-view{display:block}.checkout-container{width:100%;height:100vh}.price{font-size:20px}.bar{display:flex;justify-content:space-between;align-items:center;margin:10px 20px}button{cursor:pointer;border:none;border-radius:20px;background-color:orange;padding:5px 10px}button:hover{background-color:#fbd183}.added-to-cart{display:none}.added,.added-popup,.checkout-button-inactive{background-color:#cecece}.added:hover,.added-popup:hover,.checkout-button-inactive:hover{background-color:#cecece}.blackout{display:none;position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:black;opacity:0.5;z-index:1}.popup{display:none;position:fixed;align-items:center;top:50%;left:50%;border-radius:10px;transform:translate(-50%, -50%);background-color:white;width:640px;padding:6px 0;z-index:2}.popup .popup-product-image{height:350px}.popup .popup-content{margin:0 15px}.popup .close{align-self:baseline;margin-top:5px;margin-right:10px}.popup .close:hover{scale:110%}.active{display:flex}.user-data{display:flex;flex-wrap:wrap;row-gap:20px}.user-data input{border:1px solid;border-radius:5px;margin-right:25px;height:30px}.user-data input:focus{background-color:#faea68}.user-data input.error{background-color:rgba(250,43,43,0.395)}.user-data .required-field-label{font-size:15px;color:red}.user-data .name,.user-data .surname{width:50%}.user-data .name label,.user-data .surname label{width:100%}.user-data .street{width:100%}.user-data div{display:flex;flex-direction:column;width:33%}.payment-type,.gift-type{margin-bottom:20px}.payment-type input,.gift-type input{margin-right:15px} diff --git a/scripts/checkoutPage.js b/scripts/checkoutPage.js index 02167d6f..c44038e3 100644 --- a/scripts/checkoutPage.js +++ b/scripts/checkoutPage.js @@ -39,7 +39,7 @@ export default function createCheckout() { paymentType.append(createPayment("card", "Card", true)); paymentType.append(createPayment("cash", "Cash")); - giftType.append(chooseGift("gift", "pack as a gift")) + giftType.append(chooseGift("pack-as-gift", "pack as a gift")) giftType.append(chooseGift("postcard", "add postcard")) giftType.append(chooseGift("discount", "provide 2% discount to the next time")) giftType.append(chooseGift("branded-pen", "branded pen or pencil")) @@ -72,12 +72,46 @@ export default function createCheckout() { // return false; paymentTypeSelection(); } + + + let checkboxes = document.querySelectorAll('.gift'); + + for (let i=0;i item.disabled = true) + } + + function moreGifts() { + let checkboxes = document.querySelectorAll('.gift:not(:checked)'); + checkboxes.forEach(item => item.disabled = false) + } + + // document.querySelectorAll('.gift:checked'); + + + + // document.querySelectorAll('.gift:not(:checked)') } function createInput(name, labelName, inputtype, required) { let block = createElement("div", name); let label = document.createElement("label"); let input = document.createElement("input"); + + let reqLabel = createElement("span","required-field-label") + reqLabel.innerHTML = ""; + label.innerHTML = labelName; input.type = inputtype; input.name = name; @@ -89,6 +123,7 @@ function createInput(name, labelName, inputtype, required) { block.append(label); block.append(input); + block.append(reqLabel); return block; } @@ -114,6 +149,9 @@ function chooseGift(name, labelName) { let input = document.createElement("input"); label.innerHTML = labelName; input.type = "checkbox"; + input.value = labelName; + // input.disabled = true; + input.classList.add('gift'); block.append(input); block.append(label); return block; @@ -143,4 +181,7 @@ function getTomorrowDate() { let today = new Date(); let tomorrow = today.getFullYear() + "-" + 0 + (today.getMonth() + 1) + "-" + (today.getDate() + 1); return tomorrow; -} \ No newline at end of file +} + + + diff --git a/scripts/formValidation.js b/scripts/formValidation.js index 3e7158f7..16b0b799 100644 --- a/scripts/formValidation.js +++ b/scripts/formValidation.js @@ -15,15 +15,19 @@ export default function checkForms() { // } reqForms.forEach(function(item) { - let reqLabel = createElement("span","required-field-label") - reqLabel.innerHTML = "*this field is mandatory"; + // let reqLabel = createElement("span","required-field-label") + // reqLabel.innerHTML = "*this field is mandatory"; if (item.value.length === 0) { item.classList.add('error'); - item.after(reqLabel); + item.nextSibling.innerHTML = "This field is mandatory"; } else { item.classList.remove('error'); + item.nextSibling.innerHTML = ""; } }) } + + + diff --git a/src/scss/app.scss b/src/scss/app.scss index 44779a62..a263d5e3 100644 --- a/src/scss/app.scss +++ b/src/scss/app.scss @@ -289,6 +289,8 @@ button:hover{ border: 1px solid; // border-color: red; border-radius: 5px; + margin-right: 25px; + height: 30px; &:focus { background-color: #faea68; } @@ -308,13 +310,14 @@ button:hover{ } .street { width: 100%; - input { - width: 70%; - } + // input { + // width: 70%; + // } } div { display: flex; flex-direction: column; + width: 33%; } } @@ -322,4 +325,5 @@ button:hover{ input { margin-right: 15px; } + margin-bottom: 20px; } From f106e067c7aa93fa50cb54eaae5a5df18bbf08dc Mon Sep 17 00:00:00 2001 From: birbwatcher Date: Tue, 13 Sep 2022 12:41:18 +0200 Subject: [PATCH 45/55] feat: form checked on focus out --- dist/style.css | 2 +- scripts/checkoutPage.js | 41 ++++++++++++-------------- scripts/formValidation.js | 61 +++++++++++++++++++++++++-------------- src/scss/app.scss | 5 +++- 4 files changed, 64 insertions(+), 45 deletions(-) diff --git a/dist/style.css b/dist/style.css index b15a2203..f7914474 100644 --- a/dist/style.css +++ b/dist/style.css @@ -1,2 +1,2 @@ -body{font-family:'Helvetica Neue',Helvetica,'Lucida Grande','Droid Sans',Tahoma,'Microsoft Sans Serif',sans-serif}.main-wrapper,.wrapper,.header-wrapper,.footer-wrapper{margin:0 auto;width:1200px}.wrapper{height:100%;display:flex}.header-wrapper,.footer-wrapper{height:100%}.header-wrapper{display:flex;align-items:center}header{width:100%;height:100px;background-color:#faea68}header .logo{margin-left:20px}header .logo img{height:60px}footer{width:100%;height:30px;background-color:#000;color:#fff}main{display:flex;width:70%;height:100%}aside{display:flex;justify-content:center;width:30%;height:100%;padding-top:20px}aside .cart{display:flex;flex-direction:column;justify-content:space-between;position:fixed;background-color:#f7f7f7;width:300px;height:500px;border-radius:20px}aside .cart .your-cart{text-align:center}aside .cart .your-cart{margin-top:20px;margin-bottom:15px}aside .cart .total{margin:20px 0px 20px 20px}aside .cart .cart-container{height:100%;overflow:scroll;overflow-x:hidden;flex-direction:column;justify-content:center;align-items:center;margin:0 20px}aside .cart .cart-container:hover{opacity:1}aside .cart .drag-image{width:50px;height:50px;opacity:0.3}aside .cart .empty-cart-title{opacity:0.3}aside .cart .cart-book{display:flex;width:100%;margin:10px 0}aside .cart .cart-book-image{width:70px}aside .cart .cart-book-title{font-size:13px}aside .cart .cart-book-info{display:flex;flex-direction:column;justify-content:space-evenly}aside .cart .cart-count-bar{display:flex;justify-content:space-evenly}aside .cart .cart-book-minus,aside .cart .cart-book-plus{width:40px;height:15px;display:flex;justify-content:center;align-items:center;cursor:pointer;color:white;background-color:grey}aside .cart .cart-count-bar p{margin:0;padding:0;font-size:13px}.cards-container{display:flex;flex-wrap:wrap;justify-content:space-between;row-gap:60px;column-gap:40px;width:100%;height:100%;padding:20px 0}.cards-container .card-item{width:200px;display:flex;position:relative;justify-content:space-between;flex-direction:column;padding:20px;border-radius:20px;cursor:pointer}.cards-container .card-item img{height:300px;width:100%}.cards-container .card-item img:hover{cursor:grab}.cards-container .card-item b{color:grey}.cards-container .card-item h3{font-size:16px;margin-top:10px;margin-bottom:10px}.cards-container .card-item .fast-view{display:none;position:absolute;border-radius:20px;background-color:rgba(255,255,255,0.674);color:black;padding:10px 20px;left:50%;top:50%;transform:translate(-50%, -50%)}.cards-container .card-item .fast-view:hover{background-color:#fbd183}.cards-container .card-item:hover{box-shadow:0px 2px 35px 14px rgba(13,13,13,0.04)}.cards-container .card-item:hover .fast-view{display:block}.checkout-container{width:100%;height:100vh}.price{font-size:20px}.bar{display:flex;justify-content:space-between;align-items:center;margin:10px 20px}button{cursor:pointer;border:none;border-radius:20px;background-color:orange;padding:5px 10px}button:hover{background-color:#fbd183}.added-to-cart{display:none}.added,.added-popup,.checkout-button-inactive{background-color:#cecece}.added:hover,.added-popup:hover,.checkout-button-inactive:hover{background-color:#cecece}.blackout{display:none;position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:black;opacity:0.5;z-index:1}.popup{display:none;position:fixed;align-items:center;top:50%;left:50%;border-radius:10px;transform:translate(-50%, -50%);background-color:white;width:640px;padding:6px 0;z-index:2}.popup .popup-product-image{height:350px}.popup .popup-content{margin:0 15px}.popup .close{align-self:baseline;margin-top:5px;margin-right:10px}.popup .close:hover{scale:110%}.active{display:flex}.user-data{display:flex;flex-wrap:wrap;row-gap:20px}.user-data input{border:1px solid;border-radius:5px;margin-right:25px;height:30px}.user-data input:focus{background-color:#faea68}.user-data input.error{background-color:rgba(250,43,43,0.395)}.user-data .required-field-label{font-size:15px;color:red}.user-data .name,.user-data .surname{width:50%}.user-data .name label,.user-data .surname label{width:100%}.user-data .street{width:100%}.user-data div{display:flex;flex-direction:column;width:33%}.payment-type,.gift-type{margin-bottom:20px}.payment-type input,.gift-type input{margin-right:15px} +body{font-family:'Helvetica Neue',Helvetica,'Lucida Grande','Droid Sans',Tahoma,'Microsoft Sans Serif',sans-serif}.main-wrapper,.wrapper,.header-wrapper,.footer-wrapper{margin:0 auto;width:1200px}.wrapper{height:100%;display:flex}.header-wrapper,.footer-wrapper{height:100%}.header-wrapper{display:flex;align-items:center}header{width:100%;height:100px;background-color:#faea68}header .logo{margin-left:20px}header .logo img{height:60px}footer{width:100%;height:30px;background-color:#000;color:#fff}main{display:flex;width:70%;height:100%}aside{display:flex;justify-content:center;width:30%;height:100%;padding-top:20px}aside .cart{display:flex;flex-direction:column;justify-content:space-between;position:fixed;background-color:#f7f7f7;width:300px;height:500px;border-radius:20px}aside .cart .your-cart{text-align:center}aside .cart .your-cart{margin-top:20px;margin-bottom:15px}aside .cart .total{margin:20px 0px 20px 20px}aside .cart .cart-container{height:100%;overflow:scroll;overflow-x:hidden;flex-direction:column;justify-content:center;align-items:center;margin:0 20px}aside .cart .cart-container:hover{opacity:1}aside .cart .drag-image{width:50px;height:50px;opacity:0.3}aside .cart .empty-cart-title{opacity:0.3}aside .cart .cart-book{display:flex;width:100%;margin:10px 0}aside .cart .cart-book-image{width:70px}aside .cart .cart-book-title{font-size:13px}aside .cart .cart-book-info{display:flex;flex-direction:column;justify-content:space-evenly}aside .cart .cart-count-bar{display:flex;justify-content:space-evenly}aside .cart .cart-book-minus,aside .cart .cart-book-plus{width:40px;height:15px;display:flex;justify-content:center;align-items:center;cursor:pointer;color:white;background-color:grey}aside .cart .cart-count-bar p{margin:0;padding:0;font-size:13px}.cards-container{display:flex;flex-wrap:wrap;justify-content:space-between;row-gap:60px;column-gap:40px;width:100%;height:100%;padding:20px 0}.cards-container .card-item{width:200px;display:flex;position:relative;justify-content:space-between;flex-direction:column;padding:20px;border-radius:20px;cursor:pointer}.cards-container .card-item img{height:300px;width:100%}.cards-container .card-item img:hover{cursor:grab}.cards-container .card-item b{color:grey}.cards-container .card-item h3{font-size:16px;margin-top:10px;margin-bottom:10px}.cards-container .card-item .fast-view{display:none;position:absolute;border-radius:20px;background-color:rgba(255,255,255,0.674);color:black;padding:10px 20px;left:50%;top:50%;transform:translate(-50%, -50%)}.cards-container .card-item .fast-view:hover{background-color:#fbd183}.cards-container .card-item:hover{box-shadow:0px 2px 35px 14px rgba(13,13,13,0.04)}.cards-container .card-item:hover .fast-view{display:block}.checkout-container{width:100%;height:100vh}.price{font-size:20px}.bar{display:flex;justify-content:space-between;align-items:center;margin:10px 20px}button{cursor:pointer;border:none;border-radius:20px;background-color:orange;padding:5px 10px}button:hover{background-color:#fbd183}.added-to-cart{display:none}.added,.added-popup,.checkout-button-inactive{background-color:#cecece}.added:hover,.added-popup:hover,.checkout-button-inactive:hover{background-color:#cecece}.blackout{display:none;position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:black;opacity:0.5;z-index:1}.popup{display:none;position:fixed;align-items:center;top:50%;left:50%;border-radius:10px;transform:translate(-50%, -50%);background-color:white;width:640px;padding:6px 0;z-index:2}.popup .popup-product-image{height:350px}.popup .popup-content{margin:0 15px}.popup .close{align-self:baseline;margin-top:5px;margin-right:10px}.popup .close:hover{scale:110%}.active{display:flex}.user-data{display:flex;flex-wrap:wrap;row-gap:20px}.user-data input{border:1px solid;border-radius:5px;margin-right:25px;height:30px}.user-data input:focus{background-color:#faea68}.user-data input.error{border-color:red}.user-data input.valid{border-color:green}.user-data .required-field-label{font-size:15px;color:red}.user-data .name,.user-data .surname{width:50%}.user-data .name label,.user-data .surname label{width:100%}.user-data .street{width:100%}.user-data div{display:flex;flex-direction:column;width:33%}.payment-type,.gift-type{margin-bottom:20px}.payment-type input,.gift-type input{margin-right:15px} diff --git a/scripts/checkoutPage.js b/scripts/checkoutPage.js index c44038e3..e0141989 100644 --- a/scripts/checkoutPage.js +++ b/scripts/checkoutPage.js @@ -58,8 +58,6 @@ export default function createCheckout() { let flatNumber = document.getElementById('flat-number').value; let deliveryDate = document.getElementById('delivery-date').value; - checkForms(); - checkoutData.name = name; checkoutData.surname = surname; checkoutData.street = street; @@ -73,7 +71,6 @@ export default function createCheckout() { paymentTypeSelection(); } - let checkboxes = document.querySelectorAll('.gift'); for (let i=0;i item.disabled = false) } - // document.querySelectorAll('.gift:checked'); - - - - // document.querySelectorAll('.gift:not(:checked)') + checkForms() } function createInput(name, labelName, inputtype, required) { @@ -117,6 +110,10 @@ function createInput(name, labelName, inputtype, required) { input.name = name; input.id = name; + if (inputtype === "text") { + input.classList.add("validate"); + } + if (required === true) { input.classList.add('required'); } @@ -162,20 +159,20 @@ function paymentTypeSelection(){ return paymentType; } -function createDateInput(name, labelName) { - let block = createElement("div", name); - let label = document.createElement("label"); - let input = document.createElement("input"); - label.innerHTML = labelName; - input.type = inputtype; - input.name = name; - input.id = name; - input.min = getTomorrowDate(); - input.value = getTomorrowDate(); - block.append(label); - block.append(input); - return block; -} +// function createDateInput(name, labelName) { +// let block = createElement("div", name); +// let label = document.createElement("label"); +// let input = document.createElement("input"); +// label.innerHTML = labelName; +// input.type = inputtype; +// input.name = name; +// input.id = name; +// input.min = getTomorrowDate(); +// input.value = getTomorrowDate(); +// block.append(label); +// block.append(input); +// return block; +// } function getTomorrowDate() { let today = new Date(); diff --git a/scripts/formValidation.js b/scripts/formValidation.js index 16b0b799..80c52a2e 100644 --- a/scripts/formValidation.js +++ b/scripts/formValidation.js @@ -1,31 +1,50 @@ import createElement from "./createElement.js"; export default function checkForms() { - let reqForms = document.querySelectorAll('.required'); + + // let reqForms = document.querySelectorAll('.required'); - - // for (let i=0;i Date: Tue, 13 Sep 2022 13:43:24 +0200 Subject: [PATCH 46/55] feat: button checkout hidden when fields is empty --- scripts/checkoutPage.js | 1 + scripts/formValidation.js | 54 +++++++++++++++++++++++++++++---------- 2 files changed, 42 insertions(+), 13 deletions(-) diff --git a/scripts/checkoutPage.js b/scripts/checkoutPage.js index e0141989..f963174f 100644 --- a/scripts/checkoutPage.js +++ b/scripts/checkoutPage.js @@ -45,6 +45,7 @@ export default function createCheckout() { giftType.append(chooseGift("branded-pen", "branded pen or pencil")) let submitButton = createElement("button","submit-button"); + submitButton.classList.add('added-to-cart') submitButton.innerHTML = "Leave Order"; submitButton.type = "submit"; checkoutForm.append(submitButton); diff --git a/scripts/formValidation.js b/scripts/formValidation.js index 80c52a2e..478ac308 100644 --- a/scripts/formValidation.js +++ b/scripts/formValidation.js @@ -1,44 +1,60 @@ import createElement from "./createElement.js"; +import {cart} from "./cart.js"; export default function checkForms() { - - // let reqForms = document.querySelectorAll('.required'); - - // reqForms.forEach(function(item) { - // if (item.value.length === 0) { - // item.classList.add('error'); - // item.nextSibling.innerHTML = "This field is mandatory"; - // } else { - // item.classList.remove('error'); - // item.nextSibling.innerHTML = ""; - // } - // }) - let fieldName = document.getElementById('name'); let fieldSurname = document.getElementById('surname'); let fieldStreet = document.getElementById('street'); let fieldHouse = document.getElementById('house-number'); + let fieldFlatNumber = document.getElementById('flat-number'); fieldName.onblur = function() { isFieldBlank(fieldName); + if (fieldName.value.match(/^([a-zA-Z ]){4,30}$/)) { + fieldName.classList.add('valid'); + } else { + fieldName.nextSibling.innerHTML = "Mandatory, the length not less than 4 symbols"; + } + checkoutStatus() } fieldSurname.onblur = function() { isFieldBlank(fieldSurname); + if (fieldSurname.value.match(/^([a-zA-Z ]){5,30}$/)) { + fieldSurname.classList.add('valid'); + } else { + fieldSurname.nextSibling.innerHTML = "Mandatory, the length not less than 5 symbols"; + } + checkoutStatus() } fieldStreet.onblur = function() { isFieldBlank(fieldStreet); + if (fieldStreet.value.match(/^([a-zA-Z0-9]){5,30}$/)) { + fieldStreet.classList.add('valid'); + } else { + fieldStreet.nextSibling.innerHTML = "Mandatory, the length not less than 5 symbols"; + fieldStreet.classList.remove('valid'); + } + checkoutStatus() } fieldHouse.onblur = function() { isFieldBlank(fieldHouse); + if (fieldHouse.value.match(/^[1-9]+[0-9]*$/)) { + fieldHouse.classList.add('valid'); + } else { + fieldHouse.nextSibling.innerHTML = "Only positive numbers allowed"; + fieldHouse.classList.remove('valid'); + } + checkoutStatus() } } function isFieldBlank(field) { if (field.value.length === 0) { + field.classList.remove('valid'); field.classList.add('error'); field.nextSibling.innerHTML = "This field is mandatory"; } else { @@ -47,6 +63,18 @@ function isFieldBlank(field) { } } +function checkoutStatus() { + console.log(cart.length); + let allInputs = document.querySelectorAll('.required.valid'); + if (allInputs.length === 4 && cart.length > 0) { + document.querySelector('.submit-button').classList.remove('added-to-cart') + } + if (allInputs.length < 4 || cart.length === 0) { + document.querySelector('.submit-button').classList.add('added-to-cart'); + + } +} + From ec8a974732c93a763f3cc22826033f9c47377454 Mon Sep 17 00:00:00 2001 From: birbwatcher Date: Tue, 13 Sep 2022 21:47:33 +0200 Subject: [PATCH 47/55] feat: order function implemented --- books.json | 2 +- dist/style.css | 2 +- scripts/cart.js | 32 ++++++++++++++- scripts/checkoutPage.js | 85 ++++++++++++++++++++++++++++++--------- scripts/createSidebar.js | 2 +- scripts/formValidation.js | 57 +++++++++++++++++++++++--- src/scss/app.scss | 8 ++-- 7 files changed, 157 insertions(+), 31 deletions(-) diff --git a/books.json b/books.json index 0f607507..5e5dc74e 100644 --- a/books.json +++ b/books.json @@ -1,7 +1,7 @@ [{ "author": "Douglas Crockford", "imageLink": "./assets/js-the-good-parts.jpg", - "title": "JavaScript: The Good Parts: The Good Parts", + "title": "JavaScript: The Good Parts", "price": 30, "description": "With JavaScript: The Good Parts, you'll discover a beautiful, elegant, lightweight and highly expressive language that lets you create effective code, whether you're managing object libraries or just trying to get Ajax to run fast. If you develop sites or applications for the Web, this book is an absolute must" }, diff --git a/dist/style.css b/dist/style.css index f7914474..9c43b655 100644 --- a/dist/style.css +++ b/dist/style.css @@ -1,2 +1,2 @@ -body{font-family:'Helvetica Neue',Helvetica,'Lucida Grande','Droid Sans',Tahoma,'Microsoft Sans Serif',sans-serif}.main-wrapper,.wrapper,.header-wrapper,.footer-wrapper{margin:0 auto;width:1200px}.wrapper{height:100%;display:flex}.header-wrapper,.footer-wrapper{height:100%}.header-wrapper{display:flex;align-items:center}header{width:100%;height:100px;background-color:#faea68}header .logo{margin-left:20px}header .logo img{height:60px}footer{width:100%;height:30px;background-color:#000;color:#fff}main{display:flex;width:70%;height:100%}aside{display:flex;justify-content:center;width:30%;height:100%;padding-top:20px}aside .cart{display:flex;flex-direction:column;justify-content:space-between;position:fixed;background-color:#f7f7f7;width:300px;height:500px;border-radius:20px}aside .cart .your-cart{text-align:center}aside .cart .your-cart{margin-top:20px;margin-bottom:15px}aside .cart .total{margin:20px 0px 20px 20px}aside .cart .cart-container{height:100%;overflow:scroll;overflow-x:hidden;flex-direction:column;justify-content:center;align-items:center;margin:0 20px}aside .cart .cart-container:hover{opacity:1}aside .cart .drag-image{width:50px;height:50px;opacity:0.3}aside .cart .empty-cart-title{opacity:0.3}aside .cart .cart-book{display:flex;width:100%;margin:10px 0}aside .cart .cart-book-image{width:70px}aside .cart .cart-book-title{font-size:13px}aside .cart .cart-book-info{display:flex;flex-direction:column;justify-content:space-evenly}aside .cart .cart-count-bar{display:flex;justify-content:space-evenly}aside .cart .cart-book-minus,aside .cart .cart-book-plus{width:40px;height:15px;display:flex;justify-content:center;align-items:center;cursor:pointer;color:white;background-color:grey}aside .cart .cart-count-bar p{margin:0;padding:0;font-size:13px}.cards-container{display:flex;flex-wrap:wrap;justify-content:space-between;row-gap:60px;column-gap:40px;width:100%;height:100%;padding:20px 0}.cards-container .card-item{width:200px;display:flex;position:relative;justify-content:space-between;flex-direction:column;padding:20px;border-radius:20px;cursor:pointer}.cards-container .card-item img{height:300px;width:100%}.cards-container .card-item img:hover{cursor:grab}.cards-container .card-item b{color:grey}.cards-container .card-item h3{font-size:16px;margin-top:10px;margin-bottom:10px}.cards-container .card-item .fast-view{display:none;position:absolute;border-radius:20px;background-color:rgba(255,255,255,0.674);color:black;padding:10px 20px;left:50%;top:50%;transform:translate(-50%, -50%)}.cards-container .card-item .fast-view:hover{background-color:#fbd183}.cards-container .card-item:hover{box-shadow:0px 2px 35px 14px rgba(13,13,13,0.04)}.cards-container .card-item:hover .fast-view{display:block}.checkout-container{width:100%;height:100vh}.price{font-size:20px}.bar{display:flex;justify-content:space-between;align-items:center;margin:10px 20px}button{cursor:pointer;border:none;border-radius:20px;background-color:orange;padding:5px 10px}button:hover{background-color:#fbd183}.added-to-cart{display:none}.added,.added-popup,.checkout-button-inactive{background-color:#cecece}.added:hover,.added-popup:hover,.checkout-button-inactive:hover{background-color:#cecece}.blackout{display:none;position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:black;opacity:0.5;z-index:1}.popup{display:none;position:fixed;align-items:center;top:50%;left:50%;border-radius:10px;transform:translate(-50%, -50%);background-color:white;width:640px;padding:6px 0;z-index:2}.popup .popup-product-image{height:350px}.popup .popup-content{margin:0 15px}.popup .close{align-self:baseline;margin-top:5px;margin-right:10px}.popup .close:hover{scale:110%}.active{display:flex}.user-data{display:flex;flex-wrap:wrap;row-gap:20px}.user-data input{border:1px solid;border-radius:5px;margin-right:25px;height:30px}.user-data input:focus{background-color:#faea68}.user-data input.error{border-color:red}.user-data input.valid{border-color:green}.user-data .required-field-label{font-size:15px;color:red}.user-data .name,.user-data .surname{width:50%}.user-data .name label,.user-data .surname label{width:100%}.user-data .street{width:100%}.user-data div{display:flex;flex-direction:column;width:33%}.payment-type,.gift-type{margin-bottom:20px}.payment-type input,.gift-type input{margin-right:15px} +body{font-family:'Helvetica Neue',Helvetica,'Lucida Grande','Droid Sans',Tahoma,'Microsoft Sans Serif',sans-serif}.main-wrapper,.wrapper,.header-wrapper,.footer-wrapper{margin:0 auto;width:1200px}.wrapper{height:100%;display:flex}.header-wrapper,.footer-wrapper{height:100%}.header-wrapper{display:flex;align-items:center}header{width:100%;height:100px;background-color:#faea68}header .logo{margin-left:20px}header .logo img{height:60px}footer{width:100%;height:30px;background-color:#000;color:#fff}main{display:flex;width:70%;height:100%}aside{display:flex;justify-content:center;width:30%;height:100%;padding-top:20px}aside .cart{display:flex;flex-direction:column;justify-content:space-between;position:fixed;background-color:#f7f7f7;width:300px;height:500px;border-radius:20px}aside .cart .your-cart{text-align:center}aside .cart .your-cart{margin-top:20px;margin-bottom:15px}aside .cart .total{margin:20px 0px 20px 20px}aside .cart .cart-container{height:100%;overflow:scroll;overflow-x:hidden;flex-direction:column;justify-content:center;align-items:center;margin:0 20px}aside .cart .cart-container:hover{opacity:1}aside .cart .drag-image{width:50px;height:50px;opacity:0.3}aside .cart .empty-cart-title{opacity:0.3}aside .cart .cart-book{display:flex;width:100%;margin:10px 0}aside .cart .cart-book-image{width:70px}aside .cart .cart-book-title{font-size:13px}aside .cart .cart-book-info{display:flex;flex-direction:column;justify-content:space-evenly}aside .cart .cart-count-bar{display:flex;justify-content:space-evenly}aside .cart .cart-book-minus,aside .cart .cart-book-plus{width:40px;height:15px;display:flex;justify-content:center;align-items:center;cursor:pointer;color:white;background-color:grey}aside .cart .cart-count-bar p{margin:0;padding:0;font-size:13px}.cards-container{display:flex;flex-wrap:wrap;justify-content:space-between;row-gap:60px;column-gap:40px;width:100%;height:100%;padding:20px 0}.cards-container .card-item{width:200px;display:flex;position:relative;justify-content:space-between;flex-direction:column;padding:20px;border-radius:20px;cursor:pointer}.cards-container .card-item img{height:300px;width:100%}.cards-container .card-item img:hover{cursor:grab}.cards-container .card-item b{color:grey}.cards-container .card-item h3{font-size:16px;margin-top:10px;margin-bottom:10px}.cards-container .card-item .fast-view{display:none;position:absolute;border-radius:20px;background-color:rgba(255,255,255,0.674);color:black;padding:10px 20px;left:50%;top:50%;transform:translate(-50%, -50%)}.cards-container .card-item .fast-view:hover{background-color:#fbd183}.cards-container .card-item:hover{box-shadow:0px 2px 35px 14px rgba(13,13,13,0.04)}.cards-container .card-item:hover .fast-view{display:block}.checkout-container{width:100%;height:100vh}.price{font-size:20px}.bar{display:flex;justify-content:space-between;align-items:center;margin:10px 20px}button{cursor:pointer;border:none;border-radius:20px;background-color:orange;padding:5px 10px}button:hover{background-color:#fbd183}.added-to-cart{display:none}.added,.added-popup,.checkout-button-inactive,.checkout-page-button-inactive{background-color:#cecece}.added:hover,.added-popup:hover,.checkout-button-inactive:hover,.checkout-page-button-inactive:hover{background-color:#cecece}.blackout{display:none;position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:black;opacity:0.5;z-index:1}.popup{display:none;position:fixed;align-items:center;top:50%;left:50%;border-radius:10px;transform:translate(-50%, -50%);background-color:white;width:640px;padding:6px 0;z-index:2}.popup .popup-product-image{height:350px}.popup .popup-content{margin:0 15px}.popup .close{align-self:baseline;margin-top:5px;margin-right:10px}.popup .close:hover{scale:110%}.active{display:flex}.user-data{display:flex;flex-wrap:wrap;row-gap:20px}.user-data input{border:1px solid;border-radius:5px;margin-right:25px;height:30px}.user-data input:focus{background-color:#faea68}.user-data input.error{border-color:red}.user-data input.valid{border-color:green}.user-data .required-field-label{font-size:15px;color:red}.user-data .name,.user-data .surname{width:50%}.user-data .name label,.user-data .surname label{width:100%}.user-data .street{width:100%}.user-data div{display:flex;flex-direction:column;width:33%}.payment-type,.gift-type{margin-bottom:20px}.payment-type input,.gift-type input{margin-right:15px}.ordered-container{height:calc(100vh - 150px)} diff --git a/scripts/cart.js b/scripts/cart.js index 87756689..60de673f 100644 --- a/scripts/cart.js +++ b/scripts/cart.js @@ -27,12 +27,15 @@ function renderCart() { let bookTitle = createElement("b","cart-book-title"); let bookInfo = createElement("div","cart-book-info"); let plus = createElement("div","cart-book-plus"); + let deleteBook = createElement("div","cart-book-delete"); let minus = createElement("div","cart-book-minus"); let cartCountBar = createElement("div","cart-count-bar"); minus.innerHTML = '-'; plus.innerHTML = '+'; + deleteBook.innerHTML = 'x' minus.setAttribute('data', bookId); plus.setAttribute('data', bookId); + deleteBook.setAttribute('data', bookId); bookImg.src = books[bookId].imageLink; bookTitle.innerHTML = books[bookId].title; count.innerHTML = 'Count:' + cart[i][bookId]; @@ -43,6 +46,7 @@ function renderCart() { cartCountBar.append(minus); cartCountBar.append(count); cartCountBar.append(plus); + cartCountBar.append(deleteBook); cartContainer.append(book); } } @@ -50,6 +54,18 @@ function renderCart() { let pluses = document.querySelectorAll('.cart-book-plus'); let minuses= document.querySelectorAll('.cart-book-minus'); + let bookDeletes = document.querySelectorAll('.cart-book-delete'); + + // for (let i=0;i 0) { document.querySelector('.checkout-button-inactive').classList.add('added-to-cart'); - document.querySelector('.checkout-button').classList.remove('added-to-cart'); + if (document.querySelector(".checkout-container") === null) { + document.querySelector('.checkout-button').classList.remove('added-to-cart'); + } } else { document.querySelector('.checkout-button-inactive').classList.remove('added-to-cart'); document.querySelector('.checkout-button').classList.add('added-to-cart'); + document.querySelector('.checkout-submit-button').classList.add('added-to-cart'); + document.querySelector('.checkout-page-button-inactive').classList.remove('added-to-cart'); } } @@ -80,6 +100,14 @@ function bookPlus(bookId) { } } +function bookDelete(bookId){ + for (let i=0;i 0) { - document.querySelector('.submit-button').classList.remove('added-to-cart') + let allErrors = document.querySelectorAll('.error'); + if (allInputs.length === 4 && allErrors.length === 0) { + document.querySelector('.checkout-submit-button').classList.remove('added-to-cart') + document.querySelector('.checkout-page-button-inactive').classList.add('added-to-cart') } - if (allInputs.length < 4 || cart.length === 0) { - document.querySelector('.submit-button').classList.add('added-to-cart'); + if (allInputs.length < 4 || allErrors.length > 0) { + document.querySelector('.checkout-submit-button').classList.add('added-to-cart'); + document.querySelector('.checkout-page-button-inactive').classList.remove('added-to-cart') } } diff --git a/src/scss/app.scss b/src/scss/app.scss index 43684378..98b47796 100644 --- a/src/scss/app.scss +++ b/src/scss/app.scss @@ -5,8 +5,6 @@ $footfontcolor: white; $cart-backg-color: rgb(247, 247, 247); $btn-hover: rgb(251, 209, 131); -// split to files - body { font-family: 'Helvetica Neue',Helvetica,'Lucida Grande','Droid Sans',Tahoma,'Microsoft Sans Serif',sans-serif; } @@ -229,7 +227,7 @@ button:hover{ display: none; } -.added, .added-popup, .checkout-button-inactive { +.added, .added-popup, .checkout-button-inactive, .checkout-page-button-inactive { background-color: rgb(206, 206, 206); &:hover { background-color: rgb(206, 206, 206); @@ -330,3 +328,7 @@ button:hover{ } margin-bottom: 20px; } + +.ordered-container { + height: calc(100vh - 150px); +} From f9c7cb76c1c87df39e2d010b4927be572349920b Mon Sep 17 00:00:00 2001 From: birbwatcher Date: Tue, 13 Sep 2022 21:52:48 +0200 Subject: [PATCH 48/55] feat: basket delete item is ready --- dist/style.css | 2 +- scripts/cart.js | 16 ++++++++-------- src/scss/app.scss | 10 ++++++++++ 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/dist/style.css b/dist/style.css index 9c43b655..08704365 100644 --- a/dist/style.css +++ b/dist/style.css @@ -1,2 +1,2 @@ -body{font-family:'Helvetica Neue',Helvetica,'Lucida Grande','Droid Sans',Tahoma,'Microsoft Sans Serif',sans-serif}.main-wrapper,.wrapper,.header-wrapper,.footer-wrapper{margin:0 auto;width:1200px}.wrapper{height:100%;display:flex}.header-wrapper,.footer-wrapper{height:100%}.header-wrapper{display:flex;align-items:center}header{width:100%;height:100px;background-color:#faea68}header .logo{margin-left:20px}header .logo img{height:60px}footer{width:100%;height:30px;background-color:#000;color:#fff}main{display:flex;width:70%;height:100%}aside{display:flex;justify-content:center;width:30%;height:100%;padding-top:20px}aside .cart{display:flex;flex-direction:column;justify-content:space-between;position:fixed;background-color:#f7f7f7;width:300px;height:500px;border-radius:20px}aside .cart .your-cart{text-align:center}aside .cart .your-cart{margin-top:20px;margin-bottom:15px}aside .cart .total{margin:20px 0px 20px 20px}aside .cart .cart-container{height:100%;overflow:scroll;overflow-x:hidden;flex-direction:column;justify-content:center;align-items:center;margin:0 20px}aside .cart .cart-container:hover{opacity:1}aside .cart .drag-image{width:50px;height:50px;opacity:0.3}aside .cart .empty-cart-title{opacity:0.3}aside .cart .cart-book{display:flex;width:100%;margin:10px 0}aside .cart .cart-book-image{width:70px}aside .cart .cart-book-title{font-size:13px}aside .cart .cart-book-info{display:flex;flex-direction:column;justify-content:space-evenly}aside .cart .cart-count-bar{display:flex;justify-content:space-evenly}aside .cart .cart-book-minus,aside .cart .cart-book-plus{width:40px;height:15px;display:flex;justify-content:center;align-items:center;cursor:pointer;color:white;background-color:grey}aside .cart .cart-count-bar p{margin:0;padding:0;font-size:13px}.cards-container{display:flex;flex-wrap:wrap;justify-content:space-between;row-gap:60px;column-gap:40px;width:100%;height:100%;padding:20px 0}.cards-container .card-item{width:200px;display:flex;position:relative;justify-content:space-between;flex-direction:column;padding:20px;border-radius:20px;cursor:pointer}.cards-container .card-item img{height:300px;width:100%}.cards-container .card-item img:hover{cursor:grab}.cards-container .card-item b{color:grey}.cards-container .card-item h3{font-size:16px;margin-top:10px;margin-bottom:10px}.cards-container .card-item .fast-view{display:none;position:absolute;border-radius:20px;background-color:rgba(255,255,255,0.674);color:black;padding:10px 20px;left:50%;top:50%;transform:translate(-50%, -50%)}.cards-container .card-item .fast-view:hover{background-color:#fbd183}.cards-container .card-item:hover{box-shadow:0px 2px 35px 14px rgba(13,13,13,0.04)}.cards-container .card-item:hover .fast-view{display:block}.checkout-container{width:100%;height:100vh}.price{font-size:20px}.bar{display:flex;justify-content:space-between;align-items:center;margin:10px 20px}button{cursor:pointer;border:none;border-radius:20px;background-color:orange;padding:5px 10px}button:hover{background-color:#fbd183}.added-to-cart{display:none}.added,.added-popup,.checkout-button-inactive,.checkout-page-button-inactive{background-color:#cecece}.added:hover,.added-popup:hover,.checkout-button-inactive:hover,.checkout-page-button-inactive:hover{background-color:#cecece}.blackout{display:none;position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:black;opacity:0.5;z-index:1}.popup{display:none;position:fixed;align-items:center;top:50%;left:50%;border-radius:10px;transform:translate(-50%, -50%);background-color:white;width:640px;padding:6px 0;z-index:2}.popup .popup-product-image{height:350px}.popup .popup-content{margin:0 15px}.popup .close{align-self:baseline;margin-top:5px;margin-right:10px}.popup .close:hover{scale:110%}.active{display:flex}.user-data{display:flex;flex-wrap:wrap;row-gap:20px}.user-data input{border:1px solid;border-radius:5px;margin-right:25px;height:30px}.user-data input:focus{background-color:#faea68}.user-data input.error{border-color:red}.user-data input.valid{border-color:green}.user-data .required-field-label{font-size:15px;color:red}.user-data .name,.user-data .surname{width:50%}.user-data .name label,.user-data .surname label{width:100%}.user-data .street{width:100%}.user-data div{display:flex;flex-direction:column;width:33%}.payment-type,.gift-type{margin-bottom:20px}.payment-type input,.gift-type input{margin-right:15px}.ordered-container{height:calc(100vh - 150px)} +body{font-family:'Helvetica Neue',Helvetica,'Lucida Grande','Droid Sans',Tahoma,'Microsoft Sans Serif',sans-serif}.main-wrapper,.wrapper,.header-wrapper,.footer-wrapper{margin:0 auto;width:1200px}.wrapper{height:100%;display:flex}.header-wrapper,.footer-wrapper{height:100%}.header-wrapper{display:flex;align-items:center}header{width:100%;height:100px;background-color:#faea68}header .logo{margin-left:20px}header .logo img{height:60px}footer{width:100%;height:30px;background-color:#000;color:#fff}main{display:flex;width:70%;height:100%}aside{display:flex;justify-content:center;width:30%;height:100%;padding-top:20px}aside .cart{display:flex;flex-direction:column;justify-content:space-between;position:fixed;background-color:#f7f7f7;width:300px;height:500px;border-radius:20px}aside .cart .your-cart{text-align:center}aside .cart .your-cart{margin-top:20px;margin-bottom:15px}aside .cart .total{margin:20px 0px 20px 20px}aside .cart .cart-container{height:100%;overflow:scroll;overflow-x:hidden;flex-direction:column;justify-content:center;align-items:center;margin:0 20px}aside .cart .cart-container:hover{opacity:1}aside .cart .drag-image{width:50px;height:50px;opacity:0.3}aside .cart .empty-cart-title{opacity:0.3}aside .cart .cart-book{display:flex;width:100%;margin:10px 0}aside .cart .cart-book-image{width:70px}aside .cart .cart-book-title{font-size:13px}aside .cart .cart-book-info{display:flex;flex-direction:column;justify-content:space-evenly}aside .cart .cart-count-bar{display:flex;justify-content:space-evenly}aside .cart .cart-book-delete{width:15px;height:15px;background-color:red;color:white;display:flex;justify-content:center;align-items:center;cursor:pointer}aside .cart .cart-book-minus,aside .cart .cart-book-plus{width:40px;height:15px;display:flex;justify-content:center;align-items:center;cursor:pointer;color:white;background-color:grey}aside .cart .cart-count-bar p{margin:0;padding:0;font-size:13px}.cards-container{display:flex;flex-wrap:wrap;justify-content:space-between;row-gap:60px;column-gap:40px;width:100%;height:100%;padding:20px 0}.cards-container .card-item{width:200px;display:flex;position:relative;justify-content:space-between;flex-direction:column;padding:20px;border-radius:20px;cursor:pointer}.cards-container .card-item img{height:300px;width:100%}.cards-container .card-item img:hover{cursor:grab}.cards-container .card-item b{color:grey}.cards-container .card-item h3{font-size:16px;margin-top:10px;margin-bottom:10px}.cards-container .card-item .fast-view{display:none;position:absolute;border-radius:20px;background-color:rgba(255,255,255,0.674);color:black;padding:10px 20px;left:50%;top:50%;transform:translate(-50%, -50%)}.cards-container .card-item .fast-view:hover{background-color:#fbd183}.cards-container .card-item:hover{box-shadow:0px 2px 35px 14px rgba(13,13,13,0.04)}.cards-container .card-item:hover .fast-view{display:block}.checkout-container{width:100%;height:100vh}.price{font-size:20px}.bar{display:flex;justify-content:space-between;align-items:center;margin:10px 20px}button{cursor:pointer;border:none;border-radius:20px;background-color:orange;padding:5px 10px}button:hover{background-color:#fbd183}.added-to-cart{display:none}.added,.added-popup,.checkout-button-inactive,.checkout-page-button-inactive{background-color:#cecece}.added:hover,.added-popup:hover,.checkout-button-inactive:hover,.checkout-page-button-inactive:hover{background-color:#cecece}.blackout{display:none;position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:black;opacity:0.5;z-index:1}.popup{display:none;position:fixed;align-items:center;top:50%;left:50%;border-radius:10px;transform:translate(-50%, -50%);background-color:white;width:640px;padding:6px 0;z-index:2}.popup .popup-product-image{height:350px}.popup .popup-content{margin:0 15px}.popup .close{align-self:baseline;margin-top:5px;margin-right:10px}.popup .close:hover{scale:110%}.active{display:flex}.user-data{display:flex;flex-wrap:wrap;row-gap:20px}.user-data input{border:1px solid;border-radius:5px;margin-right:25px;height:30px}.user-data input:focus{background-color:#faea68}.user-data input.error{border-color:red}.user-data input.valid{border-color:green}.user-data .required-field-label{font-size:15px;color:red}.user-data .name,.user-data .surname{width:50%}.user-data .name label,.user-data .surname label{width:100%}.user-data .street{width:100%}.user-data div{display:flex;flex-direction:column;width:33%}.payment-type,.gift-type{margin-bottom:20px}.payment-type input,.gift-type input{margin-right:15px}.ordered-container{height:calc(100vh - 150px)} diff --git a/scripts/cart.js b/scripts/cart.js index 60de673f..3906c54d 100644 --- a/scripts/cart.js +++ b/scripts/cart.js @@ -56,14 +56,12 @@ function renderCart() { let minuses= document.querySelectorAll('.cart-book-minus'); let bookDeletes = document.querySelectorAll('.cart-book-delete'); - // for (let i=0;i Date: Tue, 13 Sep 2022 22:12:29 +0200 Subject: [PATCH 49/55] fix: dragndrop icon position fixed --- dist/style.css | 2 +- scripts/cart.js | 1 + scripts/createCartContainer.js | 1 + src/scss/app.scss | 6 ++++++ 4 files changed, 9 insertions(+), 1 deletion(-) diff --git a/dist/style.css b/dist/style.css index 08704365..6d5c44a8 100644 --- a/dist/style.css +++ b/dist/style.css @@ -1,2 +1,2 @@ -body{font-family:'Helvetica Neue',Helvetica,'Lucida Grande','Droid Sans',Tahoma,'Microsoft Sans Serif',sans-serif}.main-wrapper,.wrapper,.header-wrapper,.footer-wrapper{margin:0 auto;width:1200px}.wrapper{height:100%;display:flex}.header-wrapper,.footer-wrapper{height:100%}.header-wrapper{display:flex;align-items:center}header{width:100%;height:100px;background-color:#faea68}header .logo{margin-left:20px}header .logo img{height:60px}footer{width:100%;height:30px;background-color:#000;color:#fff}main{display:flex;width:70%;height:100%}aside{display:flex;justify-content:center;width:30%;height:100%;padding-top:20px}aside .cart{display:flex;flex-direction:column;justify-content:space-between;position:fixed;background-color:#f7f7f7;width:300px;height:500px;border-radius:20px}aside .cart .your-cart{text-align:center}aside .cart .your-cart{margin-top:20px;margin-bottom:15px}aside .cart .total{margin:20px 0px 20px 20px}aside .cart .cart-container{height:100%;overflow:scroll;overflow-x:hidden;flex-direction:column;justify-content:center;align-items:center;margin:0 20px}aside .cart .cart-container:hover{opacity:1}aside .cart .drag-image{width:50px;height:50px;opacity:0.3}aside .cart .empty-cart-title{opacity:0.3}aside .cart .cart-book{display:flex;width:100%;margin:10px 0}aside .cart .cart-book-image{width:70px}aside .cart .cart-book-title{font-size:13px}aside .cart .cart-book-info{display:flex;flex-direction:column;justify-content:space-evenly}aside .cart .cart-count-bar{display:flex;justify-content:space-evenly}aside .cart .cart-book-delete{width:15px;height:15px;background-color:red;color:white;display:flex;justify-content:center;align-items:center;cursor:pointer}aside .cart .cart-book-minus,aside .cart .cart-book-plus{width:40px;height:15px;display:flex;justify-content:center;align-items:center;cursor:pointer;color:white;background-color:grey}aside .cart .cart-count-bar p{margin:0;padding:0;font-size:13px}.cards-container{display:flex;flex-wrap:wrap;justify-content:space-between;row-gap:60px;column-gap:40px;width:100%;height:100%;padding:20px 0}.cards-container .card-item{width:200px;display:flex;position:relative;justify-content:space-between;flex-direction:column;padding:20px;border-radius:20px;cursor:pointer}.cards-container .card-item img{height:300px;width:100%}.cards-container .card-item img:hover{cursor:grab}.cards-container .card-item b{color:grey}.cards-container .card-item h3{font-size:16px;margin-top:10px;margin-bottom:10px}.cards-container .card-item .fast-view{display:none;position:absolute;border-radius:20px;background-color:rgba(255,255,255,0.674);color:black;padding:10px 20px;left:50%;top:50%;transform:translate(-50%, -50%)}.cards-container .card-item .fast-view:hover{background-color:#fbd183}.cards-container .card-item:hover{box-shadow:0px 2px 35px 14px rgba(13,13,13,0.04)}.cards-container .card-item:hover .fast-view{display:block}.checkout-container{width:100%;height:100vh}.price{font-size:20px}.bar{display:flex;justify-content:space-between;align-items:center;margin:10px 20px}button{cursor:pointer;border:none;border-radius:20px;background-color:orange;padding:5px 10px}button:hover{background-color:#fbd183}.added-to-cart{display:none}.added,.added-popup,.checkout-button-inactive,.checkout-page-button-inactive{background-color:#cecece}.added:hover,.added-popup:hover,.checkout-button-inactive:hover,.checkout-page-button-inactive:hover{background-color:#cecece}.blackout{display:none;position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:black;opacity:0.5;z-index:1}.popup{display:none;position:fixed;align-items:center;top:50%;left:50%;border-radius:10px;transform:translate(-50%, -50%);background-color:white;width:640px;padding:6px 0;z-index:2}.popup .popup-product-image{height:350px}.popup .popup-content{margin:0 15px}.popup .close{align-self:baseline;margin-top:5px;margin-right:10px}.popup .close:hover{scale:110%}.active{display:flex}.user-data{display:flex;flex-wrap:wrap;row-gap:20px}.user-data input{border:1px solid;border-radius:5px;margin-right:25px;height:30px}.user-data input:focus{background-color:#faea68}.user-data input.error{border-color:red}.user-data input.valid{border-color:green}.user-data .required-field-label{font-size:15px;color:red}.user-data .name,.user-data .surname{width:50%}.user-data .name label,.user-data .surname label{width:100%}.user-data .street{width:100%}.user-data div{display:flex;flex-direction:column;width:33%}.payment-type,.gift-type{margin-bottom:20px}.payment-type input,.gift-type input{margin-right:15px}.ordered-container{height:calc(100vh - 150px)} +body{font-family:'Helvetica Neue',Helvetica,'Lucida Grande','Droid Sans',Tahoma,'Microsoft Sans Serif',sans-serif}.main-wrapper,.wrapper,.header-wrapper,.footer-wrapper{margin:0 auto;width:1200px}.wrapper{height:100%;display:flex}.header-wrapper,.footer-wrapper{height:100%}.header-wrapper{display:flex;align-items:center}header{width:100%;height:100px;background-color:#faea68}header .logo{margin-left:20px}header .logo img{height:60px}footer{width:100%;height:30px;background-color:#000;color:#fff}main{display:flex;width:70%;height:100%}aside{display:flex;justify-content:center;width:30%;height:100%;padding-top:20px}aside .cart{display:flex;flex-direction:column;justify-content:space-between;position:fixed;background-color:#f7f7f7;width:300px;height:500px;border-radius:20px}aside .cart .your-cart{text-align:center}aside .cart .your-cart{margin-top:20px;margin-bottom:15px}aside .cart .total{margin:20px 0px 20px 20px}aside .cart .cart-container{height:100%;overflow:scroll;overflow-x:hidden;flex-direction:column;justify-content:center;align-items:center;margin:0 20px}aside .cart .cart-container:hover{opacity:1}aside .cart .drag-image{width:50px;height:50px;opacity:0.3}aside .cart .empty-cart-title{opacity:0.3}aside .cart .cart-book{display:flex;width:100%;margin:10px 0}aside .cart .cart-book-image{width:70px}aside .cart .cart-book-title{font-size:13px}aside .cart .cart-book-info{display:flex;flex-direction:column;justify-content:space-evenly}aside .cart .cart-count-bar{display:flex;justify-content:space-evenly}aside .cart .cart-book-delete{width:15px;height:15px;background-color:red;color:white;display:flex;justify-content:center;align-items:center;cursor:pointer}aside .cart .cart-book-minus,aside .cart .cart-book-plus{width:40px;height:15px;display:flex;justify-content:center;align-items:center;cursor:pointer;color:white;background-color:grey}aside .cart .cart-count-bar p{margin:0;padding:0;font-size:13px}.cards-container{display:flex;flex-wrap:wrap;justify-content:space-between;row-gap:60px;column-gap:40px;width:100%;height:100%;padding:20px 0}.cards-container .card-item{width:200px;display:flex;position:relative;justify-content:space-between;flex-direction:column;padding:20px;border-radius:20px;cursor:pointer}.cards-container .card-item img{height:300px;width:100%}.cards-container .card-item img:hover{cursor:grab}.cards-container .card-item b{color:grey}.cards-container .card-item h3{font-size:16px;margin-top:10px;margin-bottom:10px}.cards-container .card-item .fast-view{display:none;position:absolute;border-radius:20px;background-color:rgba(255,255,255,0.674);color:black;padding:10px 20px;left:50%;top:50%;transform:translate(-50%, -50%)}.cards-container .card-item .fast-view:hover{background-color:#fbd183}.cards-container .card-item:hover{box-shadow:0px 2px 35px 14px rgba(13,13,13,0.04)}.cards-container .card-item:hover .fast-view{display:block}.centered{display:flex;justify-content:center;align-content:center}.checkout-container{width:100%;height:100vh}.price{font-size:20px}.bar{display:flex;justify-content:space-between;align-items:center;margin:10px 20px}button{cursor:pointer;border:none;border-radius:20px;background-color:orange;padding:5px 10px}button:hover{background-color:#fbd183}.added-to-cart{display:none}.added,.added-popup,.checkout-button-inactive,.checkout-page-button-inactive{background-color:#cecece}.added:hover,.added-popup:hover,.checkout-button-inactive:hover,.checkout-page-button-inactive:hover{background-color:#cecece}.blackout{display:none;position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:black;opacity:0.5;z-index:1}.popup{display:none;position:fixed;align-items:center;top:50%;left:50%;border-radius:10px;transform:translate(-50%, -50%);background-color:white;width:640px;padding:6px 0;z-index:2}.popup .popup-product-image{height:350px}.popup .popup-content{margin:0 15px}.popup .close{align-self:baseline;margin-top:5px;margin-right:10px}.popup .close:hover{scale:110%}.active{display:flex}.user-data{display:flex;flex-wrap:wrap;row-gap:20px}.user-data input{border:1px solid;border-radius:5px;margin-right:25px;height:30px}.user-data input:focus{background-color:#faea68}.user-data input.error{border-color:red}.user-data input.valid{border-color:green}.user-data .required-field-label{font-size:15px;color:red}.user-data .name,.user-data .surname{width:50%}.user-data .name label,.user-data .surname label{width:100%}.user-data .street{width:100%}.user-data div{display:flex;flex-direction:column;width:33%}.payment-type,.gift-type{margin-bottom:20px}.payment-type input,.gift-type input{margin-right:15px}.ordered-container{height:calc(100vh - 150px)} diff --git a/scripts/cart.js b/scripts/cart.js index 3906c54d..c615df7e 100644 --- a/scripts/cart.js +++ b/scripts/cart.js @@ -17,6 +17,7 @@ export default function addToCart(bookData) { function renderCart() { let cartContainer = document.querySelector('.cart-container'); + cartContainer.classList.remove('centered'); cartContainer.innerHTML = ''; for (let i=0;i Date: Tue, 13 Sep 2022 22:45:15 +0200 Subject: [PATCH 50/55] refactor: comments and console.logs deleted --- scripts/checkoutPage.js | 4 ---- scripts/createCard.js | 7 ------- scripts/formValidation.js | 5 ----- 3 files changed, 16 deletions(-) diff --git a/scripts/checkoutPage.js b/scripts/checkoutPage.js index 2f166be4..b2d25095 100644 --- a/scripts/checkoutPage.js +++ b/scripts/checkoutPage.js @@ -83,8 +83,6 @@ export default function createCheckout() { checkoutData.flatNumber = flatNumber; checkoutData.deliveryDate = deliveryDate; checkoutData.payment = paymentTypeSelection(); - console.log(checkoutData); - console.log(userGifts); document.querySelector('.cart').remove(); @@ -168,7 +166,6 @@ function chooseGift(name, labelName) { label.innerHTML = labelName; input.type = "checkbox"; input.value = labelName; - // input.disabled = true; input.classList.add('gift'); block.append(input); block.append(label); @@ -209,7 +206,6 @@ function orderCreated() { orderContainer.append(orderSummary); orderHeader.innerHTML = "Thanks you for your order!"; orderSummary.innerHTML = "Order Summary:"; - console.log(cart); for (let i = 0; i Date: Tue, 13 Sep 2022 22:56:30 +0200 Subject: [PATCH 51/55] refactor: scss variables refactored --- dist/style.css | 2 +- src/scss/app.scss | 52 ++++++++++++++++++++++++++++------------------- 2 files changed, 32 insertions(+), 22 deletions(-) diff --git a/dist/style.css b/dist/style.css index 6d5c44a8..e578d0d7 100644 --- a/dist/style.css +++ b/dist/style.css @@ -1,2 +1,2 @@ -body{font-family:'Helvetica Neue',Helvetica,'Lucida Grande','Droid Sans',Tahoma,'Microsoft Sans Serif',sans-serif}.main-wrapper,.wrapper,.header-wrapper,.footer-wrapper{margin:0 auto;width:1200px}.wrapper{height:100%;display:flex}.header-wrapper,.footer-wrapper{height:100%}.header-wrapper{display:flex;align-items:center}header{width:100%;height:100px;background-color:#faea68}header .logo{margin-left:20px}header .logo img{height:60px}footer{width:100%;height:30px;background-color:#000;color:#fff}main{display:flex;width:70%;height:100%}aside{display:flex;justify-content:center;width:30%;height:100%;padding-top:20px}aside .cart{display:flex;flex-direction:column;justify-content:space-between;position:fixed;background-color:#f7f7f7;width:300px;height:500px;border-radius:20px}aside .cart .your-cart{text-align:center}aside .cart .your-cart{margin-top:20px;margin-bottom:15px}aside .cart .total{margin:20px 0px 20px 20px}aside .cart .cart-container{height:100%;overflow:scroll;overflow-x:hidden;flex-direction:column;justify-content:center;align-items:center;margin:0 20px}aside .cart .cart-container:hover{opacity:1}aside .cart .drag-image{width:50px;height:50px;opacity:0.3}aside .cart .empty-cart-title{opacity:0.3}aside .cart .cart-book{display:flex;width:100%;margin:10px 0}aside .cart .cart-book-image{width:70px}aside .cart .cart-book-title{font-size:13px}aside .cart .cart-book-info{display:flex;flex-direction:column;justify-content:space-evenly}aside .cart .cart-count-bar{display:flex;justify-content:space-evenly}aside .cart .cart-book-delete{width:15px;height:15px;background-color:red;color:white;display:flex;justify-content:center;align-items:center;cursor:pointer}aside .cart .cart-book-minus,aside .cart .cart-book-plus{width:40px;height:15px;display:flex;justify-content:center;align-items:center;cursor:pointer;color:white;background-color:grey}aside .cart .cart-count-bar p{margin:0;padding:0;font-size:13px}.cards-container{display:flex;flex-wrap:wrap;justify-content:space-between;row-gap:60px;column-gap:40px;width:100%;height:100%;padding:20px 0}.cards-container .card-item{width:200px;display:flex;position:relative;justify-content:space-between;flex-direction:column;padding:20px;border-radius:20px;cursor:pointer}.cards-container .card-item img{height:300px;width:100%}.cards-container .card-item img:hover{cursor:grab}.cards-container .card-item b{color:grey}.cards-container .card-item h3{font-size:16px;margin-top:10px;margin-bottom:10px}.cards-container .card-item .fast-view{display:none;position:absolute;border-radius:20px;background-color:rgba(255,255,255,0.674);color:black;padding:10px 20px;left:50%;top:50%;transform:translate(-50%, -50%)}.cards-container .card-item .fast-view:hover{background-color:#fbd183}.cards-container .card-item:hover{box-shadow:0px 2px 35px 14px rgba(13,13,13,0.04)}.cards-container .card-item:hover .fast-view{display:block}.centered{display:flex;justify-content:center;align-content:center}.checkout-container{width:100%;height:100vh}.price{font-size:20px}.bar{display:flex;justify-content:space-between;align-items:center;margin:10px 20px}button{cursor:pointer;border:none;border-radius:20px;background-color:orange;padding:5px 10px}button:hover{background-color:#fbd183}.added-to-cart{display:none}.added,.added-popup,.checkout-button-inactive,.checkout-page-button-inactive{background-color:#cecece}.added:hover,.added-popup:hover,.checkout-button-inactive:hover,.checkout-page-button-inactive:hover{background-color:#cecece}.blackout{display:none;position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:black;opacity:0.5;z-index:1}.popup{display:none;position:fixed;align-items:center;top:50%;left:50%;border-radius:10px;transform:translate(-50%, -50%);background-color:white;width:640px;padding:6px 0;z-index:2}.popup .popup-product-image{height:350px}.popup .popup-content{margin:0 15px}.popup .close{align-self:baseline;margin-top:5px;margin-right:10px}.popup .close:hover{scale:110%}.active{display:flex}.user-data{display:flex;flex-wrap:wrap;row-gap:20px}.user-data input{border:1px solid;border-radius:5px;margin-right:25px;height:30px}.user-data input:focus{background-color:#faea68}.user-data input.error{border-color:red}.user-data input.valid{border-color:green}.user-data .required-field-label{font-size:15px;color:red}.user-data .name,.user-data .surname{width:50%}.user-data .name label,.user-data .surname label{width:100%}.user-data .street{width:100%}.user-data div{display:flex;flex-direction:column;width:33%}.payment-type,.gift-type{margin-bottom:20px}.payment-type input,.gift-type input{margin-right:15px}.ordered-container{height:calc(100vh - 150px)} +body{font-family:'Helvetica Neue',Helvetica,'Lucida Grande','Droid Sans',Tahoma,'Microsoft Sans Serif',sans-serif}.main-wrapper,.wrapper,.header-wrapper,.footer-wrapper{margin:0 auto;width:1200px}.wrapper{height:100%;display:flex}.header-wrapper,.footer-wrapper{height:100%}.header-wrapper{display:flex;align-items:center}header{width:100%;height:100px;background-color:#faea68}header .logo{margin-left:20px}header .logo img{height:60px}footer{width:100%;height:30px;background-color:#000;color:#fff}main{display:flex;width:70%;height:100%}aside{display:flex;justify-content:center;width:30%;height:100%;padding-top:20px}aside .cart{display:flex;flex-direction:column;justify-content:space-between;position:fixed;background-color:#f7f7f7;width:300px;height:500px;border-radius:20px}aside .cart .your-cart{text-align:center}aside .cart .your-cart{margin-top:20px;margin-bottom:15px}aside .cart .total{margin:20px 0px 20px 20px}aside .cart .cart-container{height:100%;overflow:scroll;overflow-x:hidden;flex-direction:column;justify-content:center;align-items:center;margin:0 20px}aside .cart .cart-container:hover{opacity:1}aside .cart .drag-image{width:50px;height:50px;opacity:0.3}aside .cart .empty-cart-title{opacity:0.3}aside .cart .cart-book{display:flex;width:100%;margin:10px 0}aside .cart .cart-book-image{width:70px}aside .cart .cart-book-title{font-size:13px}aside .cart .cart-book-info{display:flex;flex-direction:column;justify-content:space-evenly}aside .cart .cart-count-bar{display:flex;justify-content:space-evenly}aside .cart .cart-book-delete{width:15px;height:15px;background-color:red;color:#fff;display:flex;justify-content:center;align-items:center;cursor:pointer}aside .cart .cart-book-minus,aside .cart .cart-book-plus{width:40px;height:15px;display:flex;justify-content:center;align-items:center;cursor:pointer;color:#fff;background-color:grey}aside .cart .cart-count-bar p{margin:0;padding:0;font-size:13px}.cards-container{display:flex;flex-wrap:wrap;justify-content:space-between;row-gap:60px;column-gap:40px;width:100%;height:100%;padding:20px 0}.cards-container .card-item{width:200px;display:flex;position:relative;justify-content:space-between;flex-direction:column;padding:20px;border-radius:20px;cursor:pointer}.cards-container .card-item img{height:300px;width:100%}.cards-container .card-item img:hover{cursor:grab}.cards-container .card-item b{color:grey}.cards-container .card-item h3{font-size:16px;margin-top:10px;margin-bottom:10px}.cards-container .card-item .fast-view{display:none;position:absolute;border-radius:20px;background-color:rgba(255,255,255,0.674);color:#000;padding:10px 20px;left:50%;top:50%;transform:translate(-50%, -50%)}.cards-container .card-item .fast-view:hover{background-color:#fbd183}.cards-container .card-item:hover{box-shadow:0px 2px 35px 14px rgba(13,13,13,0.04)}.cards-container .card-item:hover .fast-view{display:block}.centered{display:flex;justify-content:center;align-content:center}.checkout-container{width:100%;height:100vh}.price{font-size:20px}.bar{display:flex;justify-content:space-between;align-items:center;margin:10px 20px}button{cursor:pointer;border:none;border-radius:20px;background-color:orange;padding:5px 10px}button:hover{background-color:#fbd183}.added-to-cart{display:none}.added,.added-popup,.checkout-button-inactive,.checkout-page-button-inactive{background-color:#cecece}.added:hover,.added-popup:hover,.checkout-button-inactive:hover,.checkout-page-button-inactive:hover{background-color:#cecece}.blackout{display:none;position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:#000;opacity:0.5;z-index:1}.popup{display:none;position:fixed;align-items:center;top:50%;left:50%;border-radius:10px;transform:translate(-50%, -50%);background-color:#fff;width:640px;padding:6px 0;z-index:2}.popup .popup-product-image{height:350px}.popup .popup-content{margin:0 15px}.popup .close{align-self:baseline;margin-top:5px;margin-right:10px}.popup .close:hover{scale:110%}.active{display:flex}.user-data{display:flex;flex-wrap:wrap;row-gap:20px}.user-data input{border:1px solid;border-radius:5px;margin-right:25px;height:30px}.user-data input:focus{background-color:#faea68}.user-data input.error{border-color:red}.user-data input.valid{border-color:green}.user-data .required-field-label{font-size:15px;color:red}.user-data .name,.user-data .surname{width:50%}.user-data .name label,.user-data .surname label{width:100%}.user-data .street{width:100%}.user-data div{display:flex;flex-direction:column;width:33%}.payment-type,.gift-type{margin-bottom:20px}.payment-type input,.gift-type input{margin-right:15px}.ordered-container{height:calc(100vh - 150px)} diff --git a/src/scss/app.scss b/src/scss/app.scss index 25abf6d0..f011676d 100644 --- a/src/scss/app.scss +++ b/src/scss/app.scss @@ -4,6 +4,21 @@ $footcolor: black; $footfontcolor: white; $cart-backg-color: rgb(247, 247, 247); $btn-hover: rgb(251, 209, 131); +$cart-book-delete-background: red; +$cart-book-delete-color: white; +$rt-book-minus-color: white; +$rt-book-background-color: grey; +$card-contaner-b-color: grey; +$fast-view-background: rgba(255, 255, 255, 0.674); +$fast-view-color: black; +$btn-background-color: orange; +$added-button-background: rgb(206, 206, 206); +$blackout-background: black; +$popup-background: white; +$input-focus: #faea68; +$input-error: red; +$input-valid: green; +$required-field-color: red; body { font-family: 'Helvetica Neue',Helvetica,'Lucida Grande','Droid Sans',Tahoma,'Microsoft Sans Serif',sans-serif; @@ -16,7 +31,6 @@ body { .wrapper { @extend .main-wrapper; - // background-color: $bgcolor; height: 100%; display: flex; } @@ -124,8 +138,8 @@ aside { .cart-book-delete { width: 15px; height: 15px; - background-color: red; - color: white; + background-color: $cart-book-delete-background; + color: $cart-book-delete-color; display: flex; justify-content: center; align-items: center; @@ -138,8 +152,8 @@ aside { justify-content: center; align-items: center; cursor: pointer; - color: white; - background-color: grey; + color: $rt-book-minus-color; + background-color: $rt-book-background-color; } .cart-count-bar p{ margin: 0; @@ -176,7 +190,7 @@ aside { } } b { - color: grey; + color: $card-contaner-b-color; } h3 { font-size: 16px; @@ -187,8 +201,8 @@ aside { display: none; position: absolute; border-radius: 20px; - background-color: rgba(255, 255, 255, 0.674); - color: black; + background-color: $fast-view-background; + color: $fast-view-color; padding: 10px 20px; left: 50%; top: 50%; @@ -232,7 +246,7 @@ button { cursor: pointer; border: none; border-radius: 20px; - background-color: orange; + background-color: $btn-background-color; padding: 5px 10px; } button:hover{ @@ -244,9 +258,9 @@ button:hover{ } .added, .added-popup, .checkout-button-inactive, .checkout-page-button-inactive { - background-color: rgb(206, 206, 206); + background-color: $added-button-background; &:hover { - background-color: rgb(206, 206, 206); + background-color: $added-button-background; } } @@ -257,7 +271,7 @@ button:hover{ left: 0; width: 100vw; height: 100vh; - background-color: black; + background-color:$blackout-background; opacity: 0.5; z-index: 1; } @@ -270,7 +284,7 @@ button:hover{ left: 50%; border-radius: 10px; transform:translate(-50%, -50%); - background-color: white; + background-color: $popup-background; width: 640px; padding: 6px 0; z-index: 2; @@ -301,23 +315,22 @@ button:hover{ row-gap: 20px; input { border: 1px solid; - // border-color: red; border-radius: 5px; margin-right: 25px; height: 30px; &:focus { - background-color: #faea68; + background-color: $input-focus; } &.error { - border-color: red; + border-color: $input-error; } &.valid { - border-color: green + border-color: $input-valid; } } .required-field-label { font-size: 15px; - color: red; + color: $required-field-color; } .name, .surname { width: 50%; @@ -327,9 +340,6 @@ button:hover{ } .street { width: 100%; - // input { - // width: 70%; - // } } div { display: flex; From 0f753870af339110e9d05058952e60c44466c1bb Mon Sep 17 00:00:00 2001 From: birbwatcher Date: Thu, 15 Sep 2022 12:56:23 +0200 Subject: [PATCH 52/55] fix: apartment number checkin --- scripts/formValidation.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/formValidation.js b/scripts/formValidation.js index 280c47d0..dff0dd1e 100644 --- a/scripts/formValidation.js +++ b/scripts/formValidation.js @@ -16,6 +16,7 @@ export default function checkForms() { } else if (fieldFlatNumber.value.match(/[1-9]+0*(-?[1-9]+0*)*/)) { if (fieldFlatNumber.value.match(/[1-9]+0*(-?[1-9]+0*)*/)[0] === fieldFlatNumber.value) { fieldFlatNumber.classList.add('valid'); + fieldFlatNumber.classList.remove('error'); fieldFlatNumber.nextSibling.innerHTML = "" } else { fieldFlatNumber.classList.remove('valid'); @@ -27,6 +28,7 @@ export default function checkForms() { fieldFlatNumber.classList.add('error'); fieldFlatNumber.nextSibling.innerHTML = "Positive numbers only"; } + checkoutStatus(); } fieldName.onblur = function() { From bcc446a332235c2ba5b369fe85cb3603eaa224e1 Mon Sep 17 00:00:00 2001 From: birbwatcher Date: Thu, 15 Sep 2022 13:33:25 +0200 Subject: [PATCH 53/55] fix: date is checked properly --- scripts/checkoutPage.js | 9 +++++++++ scripts/formValidation.js | 3 ++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/scripts/checkoutPage.js b/scripts/checkoutPage.js index b2d25095..fba3814f 100644 --- a/scripts/checkoutPage.js +++ b/scripts/checkoutPage.js @@ -183,6 +183,15 @@ function getTomorrowDate() { return tomorrow; } +export function checkDate() { + let userDate = document.getElementById('delivery-date').value; + let date = new Date(userDate).getTime(); + let tomorrow = new Date(getTomorrowDate()).getTime(); + return date >= tomorrow; +} + + + function orderCreated() { document.querySelector('.checkout-container').remove(); let orderContainer = createElement("div","ordered-container"); diff --git a/scripts/formValidation.js b/scripts/formValidation.js index dff0dd1e..44a777ff 100644 --- a/scripts/formValidation.js +++ b/scripts/formValidation.js @@ -1,5 +1,6 @@ import createElement from "./createElement.js"; import {cart} from "./cart.js"; +import {checkDate} from "./checkoutPage.js"; export default function checkForms() { let fieldName = document.getElementById('name'); @@ -80,7 +81,7 @@ export default function checkForms() { } fieldDeliveryDate.onblur = function() { - if (fieldDeliveryDate.value === '') { + if (!checkDate()) { fieldDeliveryDate.nextSibling.innerHTML = "Please choose the date"; fieldDeliveryDate.classList.remove('valid'); fieldDeliveryDate.classList.add('error'); From 72fa38a34a915da88a47594a41b68afde5bdc568 Mon Sep 17 00:00:00 2001 From: birbwatcher Date: Thu, 15 Sep 2022 13:34:37 +0200 Subject: [PATCH 54/55] feat: date checking message is changed --- scripts/formValidation.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/formValidation.js b/scripts/formValidation.js index 44a777ff..fbf35aef 100644 --- a/scripts/formValidation.js +++ b/scripts/formValidation.js @@ -82,7 +82,7 @@ export default function checkForms() { fieldDeliveryDate.onblur = function() { if (!checkDate()) { - fieldDeliveryDate.nextSibling.innerHTML = "Please choose the date"; + fieldDeliveryDate.nextSibling.innerHTML = "Please choose the correct date"; fieldDeliveryDate.classList.remove('valid'); fieldDeliveryDate.classList.add('error'); } else { From 627211c972d0c2edf8b282225cac19f80579e057 Mon Sep 17 00:00:00 2001 From: birbwatcher Date: Thu, 15 Sep 2022 19:49:38 +0200 Subject: [PATCH 55/55] fix: order of css files changed --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index b76f5e2a..815ff060 100644 --- a/index.html +++ b/index.html @@ -5,8 +5,8 @@ Book Shop - +