From 1ce19731b170198d5dd95ed26621ea365c37e677 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Sun, 19 Feb 2023 19:43:19 +0100 Subject: [PATCH 001/262] Start refactoring --- refactor/refactor/.eslintrc.json | 3 + refactor/refactor/.gitignore | 36 + refactor/refactor/README.md | 38 + refactor/refactor/next.config.js | 6 + refactor/refactor/package-lock.json | 3316 ++++++++++++++++++ refactor/refactor/package.json | 23 + refactor/refactor/public/favicon.ico | Bin 0 -> 25931 bytes refactor/refactor/public/next.svg | 1 + refactor/refactor/public/thirteen.svg | 1 + refactor/refactor/public/vercel.svg | 1 + refactor/refactor/src/pages/_app.tsx | 6 + refactor/refactor/src/pages/_document.tsx | 13 + refactor/refactor/src/pages/api/hello.ts | 13 + refactor/refactor/src/pages/index.tsx | 123 + refactor/refactor/src/styles/Home.module.css | 278 ++ refactor/refactor/src/styles/globals.css | 107 + refactor/refactor/tsconfig.json | 24 + 17 files changed, 3989 insertions(+) create mode 100644 refactor/refactor/.eslintrc.json create mode 100644 refactor/refactor/.gitignore create mode 100644 refactor/refactor/README.md create mode 100644 refactor/refactor/next.config.js create mode 100644 refactor/refactor/package-lock.json create mode 100644 refactor/refactor/package.json create mode 100644 refactor/refactor/public/favicon.ico create mode 100644 refactor/refactor/public/next.svg create mode 100644 refactor/refactor/public/thirteen.svg create mode 100644 refactor/refactor/public/vercel.svg create mode 100644 refactor/refactor/src/pages/_app.tsx create mode 100644 refactor/refactor/src/pages/_document.tsx create mode 100644 refactor/refactor/src/pages/api/hello.ts create mode 100644 refactor/refactor/src/pages/index.tsx create mode 100644 refactor/refactor/src/styles/Home.module.css create mode 100644 refactor/refactor/src/styles/globals.css create mode 100644 refactor/refactor/tsconfig.json diff --git a/refactor/refactor/.eslintrc.json b/refactor/refactor/.eslintrc.json new file mode 100644 index 000000000..bffb357a7 --- /dev/null +++ b/refactor/refactor/.eslintrc.json @@ -0,0 +1,3 @@ +{ + "extends": "next/core-web-vitals" +} diff --git a/refactor/refactor/.gitignore b/refactor/refactor/.gitignore new file mode 100644 index 000000000..c87c9b392 --- /dev/null +++ b/refactor/refactor/.gitignore @@ -0,0 +1,36 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# local env files +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/refactor/refactor/README.md b/refactor/refactor/README.md new file mode 100644 index 000000000..965a1228c --- /dev/null +++ b/refactor/refactor/README.md @@ -0,0 +1,38 @@ +This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). + +## Getting Started + +First, run the development server: + +```bash +npm run dev +# or +yarn dev +# or +pnpm dev +``` + +Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. + +You can start editing the page by modifying `pages/index.tsx`. The page auto-updates as you edit the file. + +[API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.ts`. + +The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages. + +This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font. + +## Learn More + +To learn more about Next.js, take a look at the following resources: + +- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. +- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. + +You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! + +## Deploy on Vercel + +The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. + +Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. diff --git a/refactor/refactor/next.config.js b/refactor/refactor/next.config.js new file mode 100644 index 000000000..a843cbee0 --- /dev/null +++ b/refactor/refactor/next.config.js @@ -0,0 +1,6 @@ +/** @type {import('next').NextConfig} */ +const nextConfig = { + reactStrictMode: true, +} + +module.exports = nextConfig diff --git a/refactor/refactor/package-lock.json b/refactor/refactor/package-lock.json new file mode 100644 index 000000000..0aa79b619 --- /dev/null +++ b/refactor/refactor/package-lock.json @@ -0,0 +1,3316 @@ +{ + "name": "refactor", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "refactor", + "version": "0.1.0", + "dependencies": { + "@next/font": "13.1.6", + "@types/node": "18.14.0", + "@types/react": "18.0.28", + "@types/react-dom": "18.0.11", + "eslint": "8.34.0", + "eslint-config-next": "13.1.6", + "next": "13.1.6", + "react": "18.2.0", + "react-dom": "18.2.0", + "typescript": "4.9.5" + } + }, + "node_modules/@babel/runtime": { + "version": "7.20.13", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.13.tgz", + "integrity": "sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==", + "dependencies": { + "regenerator-runtime": "^0.13.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", + "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" + }, + "node_modules/@next/env": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/env/-/env-13.1.6.tgz", + "integrity": "sha512-s+W9Fdqh5MFk6ECrbnVmmAOwxKQuhGMT7xXHrkYIBMBcTiOqNWhv5KbJIboKR5STXxNXl32hllnvKaffzFaWQg==" + }, + "node_modules/@next/eslint-plugin-next": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.1.6.tgz", + "integrity": "sha512-o7cauUYsXjzSJkay8wKjpKJf2uLzlggCsGUkPu3lP09Pv97jYlekTC20KJrjQKmSv5DXV0R/uks2ZXhqjNkqAw==", + "dependencies": { + "glob": "7.1.7" + } + }, + "node_modules/@next/font": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/font/-/font-13.1.6.tgz", + "integrity": "sha512-AITjmeb1RgX1HKMCiA39ztx2mxeAyxl4ljv2UoSBUGAbFFMg8MO7YAvjHCgFhD39hL7YTbFjol04e/BPBH5RzQ==" + }, + "node_modules/@next/swc-android-arm-eabi": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.1.6.tgz", + "integrity": "sha512-F3/6Z8LH/pGlPzR1AcjPFxx35mPqjE5xZcf+IL+KgbW9tMkp7CYi1y7qKrEWU7W4AumxX/8OINnDQWLiwLasLQ==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-android-arm64": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-13.1.6.tgz", + "integrity": "sha512-cMwQjnB8vrYkWyK/H0Rf2c2pKIH4RGjpKUDvbjVAit6SbwPDpmaijLio0LWFV3/tOnY6kvzbL62lndVA0mkYpw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.1.6.tgz", + "integrity": "sha512-KKRQH4DDE4kONXCvFMNBZGDb499Hs+xcFAwvj+rfSUssIDrZOlyfJNy55rH5t2Qxed1e4K80KEJgsxKQN1/fyw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.1.6.tgz", + "integrity": "sha512-/uOky5PaZDoaU99ohjtNcDTJ6ks/gZ5ykTQDvNZDjIoCxFe3+t06bxsTPY6tAO6uEAw5f6vVFX5H5KLwhrkZCA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-freebsd-x64": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.1.6.tgz", + "integrity": "sha512-qaEALZeV7to6weSXk3Br80wtFQ7cFTpos/q+m9XVRFggu+8Ib895XhMWdJBzew6aaOcMvYR6KQ6JmHA2/eMzWw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm-gnueabihf": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.1.6.tgz", + "integrity": "sha512-OybkbC58A1wJ+JrJSOjGDvZzrVEQA4sprJejGqMwiZyLqhr9Eo8FXF0y6HL+m1CPCpPhXEHz/2xKoYsl16kNqw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.1.6.tgz", + "integrity": "sha512-yCH+yDr7/4FDuWv6+GiYrPI9kcTAO3y48UmaIbrKy8ZJpi7RehJe3vIBRUmLrLaNDH3rY1rwoHi471NvR5J5NQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.1.6.tgz", + "integrity": "sha512-ECagB8LGX25P9Mrmlc7Q/TQBb9rGScxHbv/kLqqIWs2fIXy6Y/EiBBiM72NTwuXUFCNrWR4sjUPSooVBJJ3ESQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.1.6.tgz", + "integrity": "sha512-GT5w2mruk90V/I5g6ScuueE7fqj/d8Bui2qxdw6lFxmuTgMeol5rnzAv4uAoVQgClOUO/MULilzlODg9Ib3Y4Q==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.1.6.tgz", + "integrity": "sha512-keFD6KvwOPzmat4TCnlnuxJCQepPN+8j3Nw876FtULxo8005Y9Ghcl7ACcR8GoiKoddAq8gxNBrpjoxjQRHeAQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.1.6.tgz", + "integrity": "sha512-OwertslIiGQluFvHyRDzBCIB07qJjqabAmINlXUYt7/sY7Q7QPE8xVi5beBxX/rxTGPIbtyIe3faBE6Z2KywhQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-ia32-msvc": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.1.6.tgz", + "integrity": "sha512-g8zowiuP8FxUR9zslPmlju7qYbs2XBtTLVSxVikPtUDQedhcls39uKYLvOOd1JZg0ehyhopobRoH1q+MHlIN/w==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.1.6.tgz", + "integrity": "sha512-Ls2OL9hi3YlJKGNdKv8k3X/lLgc3VmLG3a/DeTkAd+lAituJp8ZHmRmm9f9SL84fT3CotlzcgbdaCDfFwFA6bA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgr/utils": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.3.1.tgz", + "integrity": "sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==", + "dependencies": { + "cross-spawn": "^7.0.3", + "is-glob": "^4.0.3", + "open": "^8.4.0", + "picocolors": "^1.0.0", + "tiny-glob": "^0.2.9", + "tslib": "^2.4.0" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz", + "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==" + }, + "node_modules/@swc/helpers": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.14.tgz", + "integrity": "sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" + }, + "node_modules/@types/node": { + "version": "18.14.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.0.tgz", + "integrity": "sha512-5EWrvLmglK+imbCJY0+INViFWUHg1AHel1sq4ZVSfdcNqGy9Edv3UB9IIzzg+xPaUcAgZYcfVs2fBcwDeZzU0A==" + }, + "node_modules/@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + }, + "node_modules/@types/react": { + "version": "18.0.28", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.28.tgz", + "integrity": "sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew==", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.0.11", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.11.tgz", + "integrity": "sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.52.0.tgz", + "integrity": "sha512-e2KiLQOZRo4Y0D/b+3y08i3jsekoSkOYStROYmPUnGMEoA0h+k2qOH5H6tcjIc68WDvGwH+PaOrP1XRzLJ6QlA==", + "dependencies": { + "@typescript-eslint/scope-manager": "5.52.0", + "@typescript-eslint/types": "5.52.0", + "@typescript-eslint/typescript-estree": "5.52.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.52.0.tgz", + "integrity": "sha512-AR7sxxfBKiNV0FWBSARxM8DmNxrwgnYMPwmpkC1Pl1n+eT8/I2NAUPuwDy/FmDcC6F8pBfmOcaxcxRHspgOBMw==", + "dependencies": { + "@typescript-eslint/types": "5.52.0", + "@typescript-eslint/visitor-keys": "5.52.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.52.0.tgz", + "integrity": "sha512-oV7XU4CHYfBhk78fS7tkum+/Dpgsfi91IIDy7fjCyq2k6KB63M6gMC0YIvy+iABzmXThCRI6xpCEyVObBdWSDQ==", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.52.0.tgz", + "integrity": "sha512-WeWnjanyEwt6+fVrSR0MYgEpUAuROxuAH516WPjUblIrClzYJj0kBbjdnbQXLpgAN8qbEuGywiQsXUVDiAoEuQ==", + "dependencies": { + "@typescript-eslint/types": "5.52.0", + "@typescript-eslint/visitor-keys": "5.52.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.52.0.tgz", + "integrity": "sha512-qMwpw6SU5VHCPr99y274xhbm+PRViK/NATY6qzt+Et7+mThGuFSl/ompj2/hrBlRP/kq+BFdgagnOSgw9TB0eA==", + "dependencies": { + "@typescript-eslint/types": "5.52.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "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/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "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==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "node_modules/array-includes": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", + "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", + "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", + "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", + "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.1.3" + } + }, + "node_modules/ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axe-core": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.6.3.tgz", + "integrity": "sha512-/BQzOX780JhsxDnPpH4ZiyrJAzcd8AfzFPkv+89veFSr1rcMjuq2JDCwypKaPeB6ljHp9KjXhPpjgCvQlWYuqg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/axobject-query": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz", + "integrity": "sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==", + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "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==" + }, + "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==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001456", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001456.tgz", + "integrity": "sha512-XFHJY5dUgmpMV25UqaD4kVq2LsiaU5rS8fb0f17pCoXQiQslzmFgnfOxfvo1bTpTqf7dwG/N/05CnLCnOEKmzA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" + }, + "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==", + "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==" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "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==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==" + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-equal": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.0.tgz", + "integrity": "sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==", + "dependencies": { + "call-bind": "^1.0.2", + "es-get-iterator": "^1.1.2", + "get-intrinsic": "^1.1.3", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.1", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/enhanced-resolve": { + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", + "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/es-abstract": { + "version": "1.21.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz", + "integrity": "sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.3", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.4", + "is-array-buffer": "^3.0.1", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.2", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.34.0.tgz", + "integrity": "sha512-1Z8iFsucw+7kSqXNZVslXS8Ioa4u2KM7GPwuKtkTFAqZ/cHMcEaR+1+Br0wLlot49cNxIiZk5wp8EAbPcYZxTg==", + "dependencies": { + "@eslint/eslintrc": "^1.4.1", + "@humanwhocodes/config-array": "^0.11.8", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.4.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-next": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.1.6.tgz", + "integrity": "sha512-0cg7h5wztg/SoLAlxljZ0ZPUQ7i6QKqRiP4M2+MgTZtxWwNKb2JSwNc18nJ6/kXBI6xYvPraTbQSIhAuVw6czw==", + "dependencies": { + "@next/eslint-plugin-next": "13.1.6", + "@rushstack/eslint-patch": "^1.1.3", + "@typescript-eslint/parser": "^5.42.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^3.5.2", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.31.7", + "eslint-plugin-react-hooks": "^4.5.0" + }, + "peerDependencies": { + "eslint": "^7.23.0 || ^8.0.0", + "typescript": ">=3.3.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", + "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.11.0", + "resolve": "^1.22.1" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-typescript": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.3.tgz", + "integrity": "sha512-njRcKYBc3isE42LaTcJNVANR3R99H9bAxBDMNDr2W7yq5gYPxbU3MkdhsQukxZ/Xg9C2vcyLlDsbKfRDg0QvCQ==", + "dependencies": { + "debug": "^4.3.4", + "enhanced-resolve": "^5.10.0", + "get-tsconfig": "^4.2.0", + "globby": "^13.1.2", + "is-core-module": "^2.10.0", + "is-glob": "^4.0.3", + "synckit": "^0.8.4" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*" + } + }, + "node_modules/eslint-import-resolver-typescript/node_modules/globby": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz", + "integrity": "sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==", + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-import-resolver-typescript/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", + "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.27.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", + "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.7.4", + "has": "^1.0.3", + "is-core-module": "^2.11.0", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.6", + "resolve": "^1.22.1", + "semver": "^6.3.0", + "tsconfig-paths": "^3.14.1" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", + "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", + "dependencies": { + "@babel/runtime": "^7.20.7", + "aria-query": "^5.1.3", + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "ast-types-flow": "^0.0.7", + "axe-core": "^4.6.2", + "axobject-query": "^3.1.1", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "has": "^1.0.3", + "jsx-ast-utils": "^3.3.3", + "language-tags": "=1.0.5", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.32.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz", + "integrity": "sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "array.prototype.tosorted": "^1.1.1", + "doctrine": "^2.1.0", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "object.hasown": "^1.1.2", + "object.values": "^1.1.6", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.4", + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.8" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", + "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "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/eslint-plugin-react/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/espree": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.2.tgz", + "integrity": "sha512-JVSoLdTlTDkmjFmab7H/9SL9qGSyjElT3myyKp7krqjVFQCDLmj1QFaCLRFBszBKI0XVZaiiXvuPIX3ZwHe1Ng==", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "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==", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.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==" + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "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==" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "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==" + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.4.0.tgz", + "integrity": "sha512-0Gdjo/9+FzsYhXCEFueo2aY1z1tpXrxWZzP7k8ul9qt1U5o8rYJwTJYmaeHdrVosYIVYkOy2iwCJ9FdpocJhPQ==", + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "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/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globalyzer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", + "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==" + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==" + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==" + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "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==", + "engines": { + "node": ">=0.8.19" + } + }, + "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==", + "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==" + }, + "node_modules/internal-slot": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "dependencies": { + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz", + "integrity": "sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/js-sdsl": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", + "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, + "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==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "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==" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" + }, + "node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", + "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", + "dependencies": { + "array-includes": "^3.1.5", + "object.assign": "^4.1.3" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", + "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==" + }, + "node_modules/language-tags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", + "dependencies": { + "language-subtag-registry": "~0.3.2" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" + }, + "node_modules/next": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/next/-/next-13.1.6.tgz", + "integrity": "sha512-hHlbhKPj9pW+Cymvfzc15lvhaOZ54l+8sXDXJWm3OBNBzgrVj6hwGPmqqsXg40xO1Leq+kXpllzRPuncpC0Phw==", + "dependencies": { + "@next/env": "13.1.6", + "@swc/helpers": "0.4.14", + "caniuse-lite": "^1.0.30001406", + "postcss": "8.4.14", + "styled-jsx": "5.1.1" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": ">=14.6.0" + }, + "optionalDependencies": { + "@next/swc-android-arm-eabi": "13.1.6", + "@next/swc-android-arm64": "13.1.6", + "@next/swc-darwin-arm64": "13.1.6", + "@next/swc-darwin-x64": "13.1.6", + "@next/swc-freebsd-x64": "13.1.6", + "@next/swc-linux-arm-gnueabihf": "13.1.6", + "@next/swc-linux-arm64-gnu": "13.1.6", + "@next/swc-linux-arm64-musl": "13.1.6", + "@next/swc-linux-x64-gnu": "13.1.6", + "@next/swc-linux-x64-musl": "13.1.6", + "@next/swc-win32-arm64-msvc": "13.1.6", + "@next/swc-win32-ia32-msvc": "13.1.6", + "@next/swc-win32-x64-msvc": "13.1.6" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^6.0.0 || ^7.0.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", + "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", + "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.hasown": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", + "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", + "dependencies": { + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", + "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/open": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.1.tgz", + "integrity": "sha512-/4b7qZNhv6Uhd7jjnREh1NjnPxlTq+XNWPG88Ydkj5AILcA5m3ajvcg57pB24EQjKv0dK62XnDqk9c/hkIG5Kg==", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "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==", + "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==", + "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==", + "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==" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.4.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", + "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", + "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/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "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/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "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-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "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==", + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stop-iteration-iterator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", + "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "dependencies": { + "internal-slot": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", + "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/styled-jsx": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", + "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", + "dependencies": { + "client-only": "0.0.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + } + } + }, + "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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/synckit": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", + "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==", + "dependencies": { + "@pkgr/utils": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + }, + "node_modules/tiny-glob": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", + "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", + "dependencies": { + "globalyzer": "0.1.0", + "globrex": "^0.1.2" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", + "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dependencies": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "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==" + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/refactor/refactor/package.json b/refactor/refactor/package.json new file mode 100644 index 000000000..c7673c6e1 --- /dev/null +++ b/refactor/refactor/package.json @@ -0,0 +1,23 @@ +{ + "name": "refactor", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "next lint" + }, + "dependencies": { + "@next/font": "13.1.6", + "@types/node": "18.14.0", + "@types/react": "18.0.28", + "@types/react-dom": "18.0.11", + "eslint": "8.34.0", + "eslint-config-next": "13.1.6", + "next": "13.1.6", + "react": "18.2.0", + "react-dom": "18.2.0", + "typescript": "4.9.5" + } +} diff --git a/refactor/refactor/public/favicon.ico b/refactor/refactor/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..718d6fea4835ec2d246af9800eddb7ffb276240c GIT binary patch literal 25931 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 LrJugUA?W`A8`#=m literal 0 HcmV?d00001 diff --git a/refactor/refactor/public/next.svg b/refactor/refactor/public/next.svg new file mode 100644 index 000000000..5174b28c5 --- /dev/null +++ b/refactor/refactor/public/next.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/refactor/refactor/public/thirteen.svg b/refactor/refactor/public/thirteen.svg new file mode 100644 index 000000000..8977c1bd1 --- /dev/null +++ b/refactor/refactor/public/thirteen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/refactor/refactor/public/vercel.svg b/refactor/refactor/public/vercel.svg new file mode 100644 index 000000000..d2f842227 --- /dev/null +++ b/refactor/refactor/public/vercel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/refactor/refactor/src/pages/_app.tsx b/refactor/refactor/src/pages/_app.tsx new file mode 100644 index 000000000..021681f4d --- /dev/null +++ b/refactor/refactor/src/pages/_app.tsx @@ -0,0 +1,6 @@ +import '@/styles/globals.css' +import type { AppProps } from 'next/app' + +export default function App({ Component, pageProps }: AppProps) { + return +} diff --git a/refactor/refactor/src/pages/_document.tsx b/refactor/refactor/src/pages/_document.tsx new file mode 100644 index 000000000..54e8bf3e2 --- /dev/null +++ b/refactor/refactor/src/pages/_document.tsx @@ -0,0 +1,13 @@ +import { Html, Head, Main, NextScript } from 'next/document' + +export default function Document() { + return ( + + + +
+ + + + ) +} diff --git a/refactor/refactor/src/pages/api/hello.ts b/refactor/refactor/src/pages/api/hello.ts new file mode 100644 index 000000000..f8bcc7e5c --- /dev/null +++ b/refactor/refactor/src/pages/api/hello.ts @@ -0,0 +1,13 @@ +// Next.js API route support: https://nextjs.org/docs/api-routes/introduction +import type { NextApiRequest, NextApiResponse } from 'next' + +type Data = { + name: string +} + +export default function handler( + req: NextApiRequest, + res: NextApiResponse +) { + res.status(200).json({ name: 'John Doe' }) +} diff --git a/refactor/refactor/src/pages/index.tsx b/refactor/refactor/src/pages/index.tsx new file mode 100644 index 000000000..2e91b0c88 --- /dev/null +++ b/refactor/refactor/src/pages/index.tsx @@ -0,0 +1,123 @@ +import Head from 'next/head' +import Image from 'next/image' +import { Inter } from '@next/font/google' +import styles from '@/styles/Home.module.css' + +const inter = Inter({ subsets: ['latin'] }) + +export default function Home() { + return ( + <> + + Create Next App + + + + +
+
+

+ Get started by editing  + src/pages/index.tsx +

+ +
+ +
+ Next.js Logo +
+ 13 +
+
+ + +
+ + ) +} diff --git a/refactor/refactor/src/styles/Home.module.css b/refactor/refactor/src/styles/Home.module.css new file mode 100644 index 000000000..27dfff5ec --- /dev/null +++ b/refactor/refactor/src/styles/Home.module.css @@ -0,0 +1,278 @@ +.main { + display: flex; + flex-direction: column; + justify-content: space-between; + align-items: center; + padding: 6rem; + min-height: 100vh; +} + +.description { + display: inherit; + justify-content: inherit; + align-items: inherit; + font-size: 0.85rem; + max-width: var(--max-width); + width: 100%; + z-index: 2; + font-family: var(--font-mono); +} + +.description a { + display: flex; + justify-content: center; + align-items: center; + gap: 0.5rem; +} + +.description p { + position: relative; + margin: 0; + padding: 1rem; + background-color: rgba(var(--callout-rgb), 0.5); + border: 1px solid rgba(var(--callout-border-rgb), 0.3); + border-radius: var(--border-radius); +} + +.code { + font-weight: 700; + font-family: var(--font-mono); +} + +.grid { + display: grid; + grid-template-columns: repeat(4, minmax(25%, auto)); + width: var(--max-width); + max-width: 100%; +} + +.card { + padding: 1rem 1.2rem; + border-radius: var(--border-radius); + background: rgba(var(--card-rgb), 0); + border: 1px solid rgba(var(--card-border-rgb), 0); + transition: background 200ms, border 200ms; +} + +.card span { + display: inline-block; + transition: transform 200ms; +} + +.card h2 { + font-weight: 600; + margin-bottom: 0.7rem; +} + +.card p { + margin: 0; + opacity: 0.6; + font-size: 0.9rem; + line-height: 1.5; + max-width: 30ch; +} + +.center { + display: flex; + justify-content: center; + align-items: center; + position: relative; + padding: 4rem 0; +} + +.center::before { + background: var(--secondary-glow); + border-radius: 50%; + width: 480px; + height: 360px; + margin-left: -400px; +} + +.center::after { + background: var(--primary-glow); + width: 240px; + height: 180px; + z-index: -1; +} + +.center::before, +.center::after { + content: ''; + left: 50%; + position: absolute; + filter: blur(45px); + transform: translateZ(0); +} + +.logo, +.thirteen { + position: relative; +} + +.thirteen { + display: flex; + justify-content: center; + align-items: center; + width: 75px; + height: 75px; + padding: 25px 10px; + margin-left: 16px; + transform: translateZ(0); + border-radius: var(--border-radius); + overflow: hidden; + box-shadow: 0px 2px 8px -1px #0000001a; +} + +.thirteen::before, +.thirteen::after { + content: ''; + position: absolute; + z-index: -1; +} + +/* Conic Gradient Animation */ +.thirteen::before { + animation: 6s rotate linear infinite; + width: 200%; + height: 200%; + background: var(--tile-border); +} + +/* Inner Square */ +.thirteen::after { + inset: 0; + padding: 1px; + border-radius: var(--border-radius); + background: linear-gradient( + to bottom right, + rgba(var(--tile-start-rgb), 1), + rgba(var(--tile-end-rgb), 1) + ); + background-clip: content-box; +} + +/* Enable hover only on non-touch devices */ +@media (hover: hover) and (pointer: fine) { + .card:hover { + background: rgba(var(--card-rgb), 0.1); + border: 1px solid rgba(var(--card-border-rgb), 0.15); + } + + .card:hover span { + transform: translateX(4px); + } +} + +@media (prefers-reduced-motion) { + .thirteen::before { + animation: none; + } + + .card:hover span { + transform: none; + } +} + +/* Mobile */ +@media (max-width: 700px) { + .content { + padding: 4rem; + } + + .grid { + grid-template-columns: 1fr; + margin-bottom: 120px; + max-width: 320px; + text-align: center; + } + + .card { + padding: 1rem 2.5rem; + } + + .card h2 { + margin-bottom: 0.5rem; + } + + .center { + padding: 8rem 0 6rem; + } + + .center::before { + transform: none; + height: 300px; + } + + .description { + font-size: 0.8rem; + } + + .description a { + padding: 1rem; + } + + .description p, + .description div { + display: flex; + justify-content: center; + position: fixed; + width: 100%; + } + + .description p { + align-items: center; + inset: 0 0 auto; + padding: 2rem 1rem 1.4rem; + border-radius: 0; + border: none; + border-bottom: 1px solid rgba(var(--callout-border-rgb), 0.25); + background: linear-gradient( + to bottom, + rgba(var(--background-start-rgb), 1), + rgba(var(--callout-rgb), 0.5) + ); + background-clip: padding-box; + backdrop-filter: blur(24px); + } + + .description div { + align-items: flex-end; + pointer-events: none; + inset: auto 0 0; + padding: 2rem; + height: 200px; + background: linear-gradient( + to bottom, + transparent 0%, + rgb(var(--background-end-rgb)) 40% + ); + z-index: 1; + } +} + +/* Tablet and Smaller Desktop */ +@media (min-width: 701px) and (max-width: 1120px) { + .grid { + grid-template-columns: repeat(2, 50%); + } +} + +@media (prefers-color-scheme: dark) { + .vercelLogo { + filter: invert(1); + } + + .logo, + .thirteen img { + filter: invert(1) drop-shadow(0 0 0.3rem #ffffff70); + } +} + +@keyframes rotate { + from { + transform: rotate(360deg); + } + to { + transform: rotate(0deg); + } +} diff --git a/refactor/refactor/src/styles/globals.css b/refactor/refactor/src/styles/globals.css new file mode 100644 index 000000000..d4f491e15 --- /dev/null +++ b/refactor/refactor/src/styles/globals.css @@ -0,0 +1,107 @@ +:root { + --max-width: 1100px; + --border-radius: 12px; + --font-mono: ui-monospace, Menlo, Monaco, 'Cascadia Mono', 'Segoe UI Mono', + 'Roboto Mono', 'Oxygen Mono', 'Ubuntu Monospace', 'Source Code Pro', + 'Fira Mono', 'Droid Sans Mono', 'Courier New', monospace; + + --foreground-rgb: 0, 0, 0; + --background-start-rgb: 214, 219, 220; + --background-end-rgb: 255, 255, 255; + + --primary-glow: conic-gradient( + from 180deg at 50% 50%, + #16abff33 0deg, + #0885ff33 55deg, + #54d6ff33 120deg, + #0071ff33 160deg, + transparent 360deg + ); + --secondary-glow: radial-gradient( + rgba(255, 255, 255, 1), + rgba(255, 255, 255, 0) + ); + + --tile-start-rgb: 239, 245, 249; + --tile-end-rgb: 228, 232, 233; + --tile-border: conic-gradient( + #00000080, + #00000040, + #00000030, + #00000020, + #00000010, + #00000010, + #00000080 + ); + + --callout-rgb: 238, 240, 241; + --callout-border-rgb: 172, 175, 176; + --card-rgb: 180, 185, 188; + --card-border-rgb: 131, 134, 135; +} + +@media (prefers-color-scheme: dark) { + :root { + --foreground-rgb: 255, 255, 255; + --background-start-rgb: 0, 0, 0; + --background-end-rgb: 0, 0, 0; + + --primary-glow: radial-gradient(rgba(1, 65, 255, 0.4), rgba(1, 65, 255, 0)); + --secondary-glow: linear-gradient( + to bottom right, + rgba(1, 65, 255, 0), + rgba(1, 65, 255, 0), + rgba(1, 65, 255, 0.3) + ); + + --tile-start-rgb: 2, 13, 46; + --tile-end-rgb: 2, 5, 19; + --tile-border: conic-gradient( + #ffffff80, + #ffffff40, + #ffffff30, + #ffffff20, + #ffffff10, + #ffffff10, + #ffffff80 + ); + + --callout-rgb: 20, 20, 20; + --callout-border-rgb: 108, 108, 108; + --card-rgb: 100, 100, 100; + --card-border-rgb: 200, 200, 200; + } +} + +* { + box-sizing: border-box; + padding: 0; + margin: 0; +} + +html, +body { + max-width: 100vw; + overflow-x: hidden; +} + +body { + color: rgb(var(--foreground-rgb)); + background: linear-gradient( + to bottom, + transparent, + rgb(var(--background-end-rgb)) + ) + rgb(var(--background-start-rgb)); +} + +a { + color: inherit; + text-decoration: none; +} + +@media (prefers-color-scheme: dark) { + html { + color-scheme: dark; + } +} diff --git a/refactor/refactor/tsconfig.json b/refactor/refactor/tsconfig.json new file mode 100644 index 000000000..2159bf45c --- /dev/null +++ b/refactor/refactor/tsconfig.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true, + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + } + }, + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], + "exclude": ["node_modules"] +} From e7e15349ee897f080548304112ed30fe17d8a868 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Sun, 19 Feb 2023 19:52:33 +0100 Subject: [PATCH 002/262] Rearrange folders --- refactor/{refactor => }/.eslintrc.json | 0 refactor/{refactor => }/.gitignore | 0 refactor/{refactor => }/README.md | 0 refactor/{refactor => }/next.config.js | 0 refactor/{refactor => }/package-lock.json | 590 +++++++++++++++++- refactor/{refactor => }/package.json | 7 +- refactor/postcss.config.js | 6 + refactor/{refactor => }/public/favicon.ico | Bin refactor/{refactor => }/public/next.svg | 0 refactor/{refactor => }/public/thirteen.svg | 0 refactor/{refactor => }/public/vercel.svg | 0 refactor/{refactor => }/src/pages/_app.tsx | 0 .../{refactor => }/src/pages/_document.tsx | 0 .../{refactor => }/src/pages/api/hello.ts | 0 refactor/{refactor => }/src/pages/index.tsx | 0 .../{refactor => }/src/styles/Home.module.css | 0 .../{refactor => }/src/styles/globals.css | 0 refactor/tailwind.config.js | 8 + refactor/{refactor => }/tsconfig.json | 0 19 files changed, 605 insertions(+), 6 deletions(-) rename refactor/{refactor => }/.eslintrc.json (100%) rename refactor/{refactor => }/.gitignore (100%) rename refactor/{refactor => }/README.md (100%) rename refactor/{refactor => }/next.config.js (100%) rename refactor/{refactor => }/package-lock.json (86%) rename refactor/{refactor => }/package.json (78%) create mode 100644 refactor/postcss.config.js rename refactor/{refactor => }/public/favicon.ico (100%) rename refactor/{refactor => }/public/next.svg (100%) rename refactor/{refactor => }/public/thirteen.svg (100%) rename refactor/{refactor => }/public/vercel.svg (100%) rename refactor/{refactor => }/src/pages/_app.tsx (100%) rename refactor/{refactor => }/src/pages/_document.tsx (100%) rename refactor/{refactor => }/src/pages/api/hello.ts (100%) rename refactor/{refactor => }/src/pages/index.tsx (100%) rename refactor/{refactor => }/src/styles/Home.module.css (100%) rename refactor/{refactor => }/src/styles/globals.css (100%) create mode 100644 refactor/tailwind.config.js rename refactor/{refactor => }/tsconfig.json (100%) diff --git a/refactor/refactor/.eslintrc.json b/refactor/.eslintrc.json similarity index 100% rename from refactor/refactor/.eslintrc.json rename to refactor/.eslintrc.json diff --git a/refactor/refactor/.gitignore b/refactor/.gitignore similarity index 100% rename from refactor/refactor/.gitignore rename to refactor/.gitignore diff --git a/refactor/refactor/README.md b/refactor/README.md similarity index 100% rename from refactor/refactor/README.md rename to refactor/README.md diff --git a/refactor/refactor/next.config.js b/refactor/next.config.js similarity index 100% rename from refactor/refactor/next.config.js rename to refactor/next.config.js diff --git a/refactor/refactor/package-lock.json b/refactor/package-lock.json similarity index 86% rename from refactor/refactor/package-lock.json rename to refactor/package-lock.json index 0aa79b619..fdc7e7651 100644 --- a/refactor/refactor/package-lock.json +++ b/refactor/package-lock.json @@ -1,11 +1,11 @@ { - "name": "refactor", + "name": "test", "version": "0.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "refactor", + "name": "test", "version": "0.1.0", "dependencies": { "@next/font": "13.1.6", @@ -18,6 +18,11 @@ "react": "18.2.0", "react-dom": "18.2.0", "typescript": "4.9.5" + }, + "devDependencies": { + "autoprefixer": "^10.4.13", + "postcss": "^8.4.21", + "tailwindcss": "^3.2.7" } }, "node_modules/@babel/runtime": { @@ -513,6 +518,38 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "dependencies": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "node_modules/acorn-node/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -550,6 +587,25 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true + }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -640,6 +696,39 @@ "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==" }, + "node_modules/autoprefixer": { + "version": "10.4.13", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", + "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + ], + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-lite": "^1.0.30001426", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, "node_modules/available-typed-arrays": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", @@ -672,6 +761,15 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -692,6 +790,34 @@ "node": ">=8" } }, + "node_modules/browserslist": { + "version": "4.21.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", + "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", + "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.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, "node_modules/call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -712,6 +838,15 @@ "node": ">=6" } }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, "node_modules/caniuse-lite": { "version": "1.0.30001456", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001456.tgz", @@ -742,6 +877,45 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/client-only": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", @@ -781,6 +955,18 @@ "node": ">= 8" } }, + "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/csstype": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", @@ -862,6 +1048,38 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/defined": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", + "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/detective": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", + "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", + "dev": true, + "dependencies": { + "acorn-node": "^1.8.2", + "defined": "^1.0.0", + "minimist": "^1.2.6" + }, + "bin": { + "detective": "bin/detective.js" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true + }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -873,6 +1091,12 @@ "node": ">=8" } }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -884,6 +1108,12 @@ "node": ">=6.0.0" } }, + "node_modules/electron-to-chromium": { + "version": "1.4.302", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.302.tgz", + "integrity": "sha512-Uk7C+7aPBryUR1Fwvk9VmipBcN9fVsqBO57jV2ZjTm+IZ6BMNqu7EDVEg2HxCNufk6QcWlFsBkhQyQroB2VWKw==", + "dev": true + }, "node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", @@ -1003,6 +1233,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "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": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -1565,11 +1804,38 @@ "is-callable": "^1.1.3" } }, + "node_modules/fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" + } + }, "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==" }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -1915,6 +2181,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/is-boolean-object": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", @@ -2263,6 +2541,15 @@ "node": ">= 0.8.0" } }, + "node_modules/lilconfig": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", + "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -2415,6 +2702,53 @@ } } }, + "node_modules/next/node_modules/postcss": { + "version": "8.4.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", + "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", + "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/node-releases": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", + "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -2423,6 +2757,15 @@ "node": ">=0.10.0" } }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, "node_modules/object-inspect": { "version": "1.12.3", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", @@ -2660,10 +3003,20 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/postcss": { - "version": "8.4.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", - "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", + "version": "8.4.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", + "dev": true, "funding": [ { "type": "opencollective", @@ -2683,6 +3036,109 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/postcss-import": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", + "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "dev": true, + "dependencies": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-nested": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz", + "integrity": "sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", + "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", + "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/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -2728,6 +3184,18 @@ } ] }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/react": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", @@ -2756,6 +3224,27 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, "node_modules/regenerator-runtime": { "version": "0.13.11", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", @@ -3084,6 +3573,47 @@ "url": "https://opencollective.com/unts" } }, + "node_modules/tailwindcss": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.2.7.tgz", + "integrity": "sha512-B6DLqJzc21x7wntlH/GsZwEXTBttVSl1FtCzC8WP4oBc/NKef7kaax5jeihkkCEWc831/5NDJ9gRNDK6NEioQQ==", + "dev": true, + "dependencies": { + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "color-name": "^1.1.4", + "detective": "^5.2.1", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.12", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "lilconfig": "^2.0.6", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.0.9", + "postcss-import": "^14.1.0", + "postcss-js": "^4.0.0", + "postcss-load-config": "^3.1.4", + "postcss-nested": "6.0.0", + "postcss-selector-parser": "^6.0.11", + "postcss-value-parser": "^4.2.0", + "quick-lru": "^5.1.1", + "resolve": "^1.22.1" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, "node_modules/tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", @@ -3213,6 +3743,32 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "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", @@ -3221,6 +3777,12 @@ "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/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -3296,11 +3858,29 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/refactor/refactor/package.json b/refactor/package.json similarity index 78% rename from refactor/refactor/package.json rename to refactor/package.json index c7673c6e1..0c1a0d2b3 100644 --- a/refactor/refactor/package.json +++ b/refactor/package.json @@ -1,5 +1,5 @@ { - "name": "refactor", + "name": "test", "version": "0.1.0", "private": true, "scripts": { @@ -19,5 +19,10 @@ "react": "18.2.0", "react-dom": "18.2.0", "typescript": "4.9.5" + }, + "devDependencies": { + "autoprefixer": "^10.4.13", + "postcss": "^8.4.21", + "tailwindcss": "^3.2.7" } } diff --git a/refactor/postcss.config.js b/refactor/postcss.config.js new file mode 100644 index 000000000..33ad091d2 --- /dev/null +++ b/refactor/postcss.config.js @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/refactor/refactor/public/favicon.ico b/refactor/public/favicon.ico similarity index 100% rename from refactor/refactor/public/favicon.ico rename to refactor/public/favicon.ico diff --git a/refactor/refactor/public/next.svg b/refactor/public/next.svg similarity index 100% rename from refactor/refactor/public/next.svg rename to refactor/public/next.svg diff --git a/refactor/refactor/public/thirteen.svg b/refactor/public/thirteen.svg similarity index 100% rename from refactor/refactor/public/thirteen.svg rename to refactor/public/thirteen.svg diff --git a/refactor/refactor/public/vercel.svg b/refactor/public/vercel.svg similarity index 100% rename from refactor/refactor/public/vercel.svg rename to refactor/public/vercel.svg diff --git a/refactor/refactor/src/pages/_app.tsx b/refactor/src/pages/_app.tsx similarity index 100% rename from refactor/refactor/src/pages/_app.tsx rename to refactor/src/pages/_app.tsx diff --git a/refactor/refactor/src/pages/_document.tsx b/refactor/src/pages/_document.tsx similarity index 100% rename from refactor/refactor/src/pages/_document.tsx rename to refactor/src/pages/_document.tsx diff --git a/refactor/refactor/src/pages/api/hello.ts b/refactor/src/pages/api/hello.ts similarity index 100% rename from refactor/refactor/src/pages/api/hello.ts rename to refactor/src/pages/api/hello.ts diff --git a/refactor/refactor/src/pages/index.tsx b/refactor/src/pages/index.tsx similarity index 100% rename from refactor/refactor/src/pages/index.tsx rename to refactor/src/pages/index.tsx diff --git a/refactor/refactor/src/styles/Home.module.css b/refactor/src/styles/Home.module.css similarity index 100% rename from refactor/refactor/src/styles/Home.module.css rename to refactor/src/styles/Home.module.css diff --git a/refactor/refactor/src/styles/globals.css b/refactor/src/styles/globals.css similarity index 100% rename from refactor/refactor/src/styles/globals.css rename to refactor/src/styles/globals.css diff --git a/refactor/tailwind.config.js b/refactor/tailwind.config.js new file mode 100644 index 000000000..32e3abdef --- /dev/null +++ b/refactor/tailwind.config.js @@ -0,0 +1,8 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: [], + theme: { + extend: {}, + }, + plugins: [], +} diff --git a/refactor/refactor/tsconfig.json b/refactor/tsconfig.json similarity index 100% rename from refactor/refactor/tsconfig.json rename to refactor/tsconfig.json From 6675b15da41aa86ee8bb33a8cd0ca8b121b348a3 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Sun, 19 Feb 2023 20:01:33 +0100 Subject: [PATCH 003/262] Ensure that Tailwind works --- refactor/src/pages/_app.tsx | 25 ++- refactor/src/pages/index.tsx | 114 +----------- refactor/src/styles/Home.module.css | 278 ---------------------------- refactor/src/styles/algolia.min.css | 1 + refactor/src/styles/animate.min.css | 9 + refactor/src/styles/globals.css | 110 +---------- refactor/tailwind.config.js | 2 +- 7 files changed, 39 insertions(+), 500 deletions(-) delete mode 100644 refactor/src/styles/Home.module.css create mode 100644 refactor/src/styles/algolia.min.css create mode 100644 refactor/src/styles/animate.min.css diff --git a/refactor/src/pages/_app.tsx b/refactor/src/pages/_app.tsx index 021681f4d..e012482ac 100644 --- a/refactor/src/pages/_app.tsx +++ b/refactor/src/pages/_app.tsx @@ -1,6 +1,23 @@ -import '@/styles/globals.css' -import type { AppProps } from 'next/app' +// Imports +import { Lato } from "@next/font/google"; -export default function App({ Component, pageProps }: AppProps) { - return +// Types +import type { AppProps } from "next/app"; + +// Styles +import "@/styles/globals.css"; + +const lato = Lato({ + weight: ["400", "700"], + subsets: ["latin"] +}); + +function MyApp({ Component, pageProps }: AppProps) { + return ( +
+ +
+ ); } + +export default MyApp; diff --git a/refactor/src/pages/index.tsx b/refactor/src/pages/index.tsx index 2e91b0c88..a4edd46f5 100644 --- a/refactor/src/pages/index.tsx +++ b/refactor/src/pages/index.tsx @@ -1,9 +1,4 @@ -import Head from 'next/head' -import Image from 'next/image' -import { Inter } from '@next/font/google' -import styles from '@/styles/Home.module.css' - -const inter = Inter({ subsets: ['latin'] }) +import Head from 'next/head'; export default function Home() { return ( @@ -14,110 +9,9 @@ export default function Home() { -
-
-

- Get started by editing  - src/pages/index.tsx -

- -
- -
- Next.js Logo -
- 13 -
-
- - +
+
This text should be red
- ) + ); } diff --git a/refactor/src/styles/Home.module.css b/refactor/src/styles/Home.module.css deleted file mode 100644 index 27dfff5ec..000000000 --- a/refactor/src/styles/Home.module.css +++ /dev/null @@ -1,278 +0,0 @@ -.main { - display: flex; - flex-direction: column; - justify-content: space-between; - align-items: center; - padding: 6rem; - min-height: 100vh; -} - -.description { - display: inherit; - justify-content: inherit; - align-items: inherit; - font-size: 0.85rem; - max-width: var(--max-width); - width: 100%; - z-index: 2; - font-family: var(--font-mono); -} - -.description a { - display: flex; - justify-content: center; - align-items: center; - gap: 0.5rem; -} - -.description p { - position: relative; - margin: 0; - padding: 1rem; - background-color: rgba(var(--callout-rgb), 0.5); - border: 1px solid rgba(var(--callout-border-rgb), 0.3); - border-radius: var(--border-radius); -} - -.code { - font-weight: 700; - font-family: var(--font-mono); -} - -.grid { - display: grid; - grid-template-columns: repeat(4, minmax(25%, auto)); - width: var(--max-width); - max-width: 100%; -} - -.card { - padding: 1rem 1.2rem; - border-radius: var(--border-radius); - background: rgba(var(--card-rgb), 0); - border: 1px solid rgba(var(--card-border-rgb), 0); - transition: background 200ms, border 200ms; -} - -.card span { - display: inline-block; - transition: transform 200ms; -} - -.card h2 { - font-weight: 600; - margin-bottom: 0.7rem; -} - -.card p { - margin: 0; - opacity: 0.6; - font-size: 0.9rem; - line-height: 1.5; - max-width: 30ch; -} - -.center { - display: flex; - justify-content: center; - align-items: center; - position: relative; - padding: 4rem 0; -} - -.center::before { - background: var(--secondary-glow); - border-radius: 50%; - width: 480px; - height: 360px; - margin-left: -400px; -} - -.center::after { - background: var(--primary-glow); - width: 240px; - height: 180px; - z-index: -1; -} - -.center::before, -.center::after { - content: ''; - left: 50%; - position: absolute; - filter: blur(45px); - transform: translateZ(0); -} - -.logo, -.thirteen { - position: relative; -} - -.thirteen { - display: flex; - justify-content: center; - align-items: center; - width: 75px; - height: 75px; - padding: 25px 10px; - margin-left: 16px; - transform: translateZ(0); - border-radius: var(--border-radius); - overflow: hidden; - box-shadow: 0px 2px 8px -1px #0000001a; -} - -.thirteen::before, -.thirteen::after { - content: ''; - position: absolute; - z-index: -1; -} - -/* Conic Gradient Animation */ -.thirteen::before { - animation: 6s rotate linear infinite; - width: 200%; - height: 200%; - background: var(--tile-border); -} - -/* Inner Square */ -.thirteen::after { - inset: 0; - padding: 1px; - border-radius: var(--border-radius); - background: linear-gradient( - to bottom right, - rgba(var(--tile-start-rgb), 1), - rgba(var(--tile-end-rgb), 1) - ); - background-clip: content-box; -} - -/* Enable hover only on non-touch devices */ -@media (hover: hover) and (pointer: fine) { - .card:hover { - background: rgba(var(--card-rgb), 0.1); - border: 1px solid rgba(var(--card-border-rgb), 0.15); - } - - .card:hover span { - transform: translateX(4px); - } -} - -@media (prefers-reduced-motion) { - .thirteen::before { - animation: none; - } - - .card:hover span { - transform: none; - } -} - -/* Mobile */ -@media (max-width: 700px) { - .content { - padding: 4rem; - } - - .grid { - grid-template-columns: 1fr; - margin-bottom: 120px; - max-width: 320px; - text-align: center; - } - - .card { - padding: 1rem 2.5rem; - } - - .card h2 { - margin-bottom: 0.5rem; - } - - .center { - padding: 8rem 0 6rem; - } - - .center::before { - transform: none; - height: 300px; - } - - .description { - font-size: 0.8rem; - } - - .description a { - padding: 1rem; - } - - .description p, - .description div { - display: flex; - justify-content: center; - position: fixed; - width: 100%; - } - - .description p { - align-items: center; - inset: 0 0 auto; - padding: 2rem 1rem 1.4rem; - border-radius: 0; - border: none; - border-bottom: 1px solid rgba(var(--callout-border-rgb), 0.25); - background: linear-gradient( - to bottom, - rgba(var(--background-start-rgb), 1), - rgba(var(--callout-rgb), 0.5) - ); - background-clip: padding-box; - backdrop-filter: blur(24px); - } - - .description div { - align-items: flex-end; - pointer-events: none; - inset: auto 0 0; - padding: 2rem; - height: 200px; - background: linear-gradient( - to bottom, - transparent 0%, - rgb(var(--background-end-rgb)) 40% - ); - z-index: 1; - } -} - -/* Tablet and Smaller Desktop */ -@media (min-width: 701px) and (max-width: 1120px) { - .grid { - grid-template-columns: repeat(2, 50%); - } -} - -@media (prefers-color-scheme: dark) { - .vercelLogo { - filter: invert(1); - } - - .logo, - .thirteen img { - filter: invert(1) drop-shadow(0 0 0.3rem #ffffff70); - } -} - -@keyframes rotate { - from { - transform: rotate(360deg); - } - to { - transform: rotate(0deg); - } -} diff --git a/refactor/src/styles/algolia.min.css b/refactor/src/styles/algolia.min.css new file mode 100644 index 000000000..82fe121d8 --- /dev/null +++ b/refactor/src/styles/algolia.min.css @@ -0,0 +1 @@ +.ais-Breadcrumb-list,.ais-CurrentRefinements-list,.ais-HierarchicalMenu-list,.ais-Hits-list,.ais-InfiniteHits-list,.ais-InfiniteResults-list,.ais-Menu-list,.ais-NumericMenu-list,.ais-Pagination-list,.ais-RatingMenu-list,.ais-RefinementList-list,.ais-Results-list,.ais-ToggleRefinement-list{margin:0;padding:0;list-style:none}.ais-ClearRefinements-button,.ais-CurrentRefinements-delete,.ais-CurrentRefinements-reset,.ais-GeoSearch-redo,.ais-GeoSearch-reset,.ais-HierarchicalMenu-showMore,.ais-InfiniteHits-loadMore,.ais-InfiniteHits-loadPrevious,.ais-InfiniteResults-loadMore,.ais-Menu-showMore,.ais-RangeInput-submit,.ais-RefinementList-showMore,.ais-SearchBox-reset,.ais-SearchBox-submit,.ais-VoiceSearch-button{padding:0;overflow:visible;font:inherit;line-height:normal;color:inherit;background:none;border:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ais-ClearRefinements-button::-moz-focus-inner,.ais-CurrentRefinements-delete::-moz-focus-inner,.ais-CurrentRefinements-reset::-moz-focus-inner,.ais-GeoSearch-redo::-moz-focus-inner,.ais-GeoSearch-reset::-moz-focus-inner,.ais-HierarchicalMenu-showMore::-moz-focus-inner,.ais-InfiniteHits-loadMore::-moz-focus-inner,.ais-InfiniteHits-loadPrevious::-moz-focus-inner,.ais-InfiniteResults-loadMore::-moz-focus-inner,.ais-Menu-showMore::-moz-focus-inner,.ais-RangeInput-submit::-moz-focus-inner,.ais-RefinementList-showMore::-moz-focus-inner,.ais-SearchBox-reset::-moz-focus-inner,.ais-SearchBox-submit::-moz-focus-inner,.ais-VoiceSearch-button::-moz-focus-inner{padding:0;border:0}.ais-ClearRefinements-button[disabled],.ais-CurrentRefinements-delete[disabled],.ais-CurrentRefinements-reset[disabled],.ais-GeoSearch-redo[disabled],.ais-GeoSearch-reset[disabled],.ais-HierarchicalMenu-showMore[disabled],.ais-InfiniteHits-loadMore[disabled],.ais-InfiniteHits-loadPrevious[disabled],.ais-InfiniteResults-loadMore[disabled],.ais-Menu-showMore[disabled],.ais-RangeInput-submit[disabled],.ais-RefinementList-showMore[disabled],.ais-SearchBox-reset[disabled],.ais-SearchBox-submit[disabled],.ais-VoiceSearch-button[disabled]{cursor:default}.ais-Breadcrumb-item,.ais-Breadcrumb-list,.ais-Pagination-list,.ais-PoweredBy,.ais-RangeInput-form,.ais-RatingMenu-link{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.ais-GeoSearch,.ais-GeoSearch-map{height:100%}.ais-HierarchicalMenu-list .ais-HierarchicalMenu-list{margin-left:1em}.ais-PoweredBy-logo{display:block;height:1.2em;width:auto}.ais-RatingMenu-starIcon{display:block;width:20px;height:20px}.ais-SearchBox-input::-ms-clear,.ais-SearchBox-input::-ms-reveal{display:none;width:0;height:0}.ais-SearchBox-input::-webkit-search-cancel-button,.ais-SearchBox-input::-webkit-search-decoration,.ais-SearchBox-input::-webkit-search-results-button,.ais-SearchBox-input::-webkit-search-results-decoration{display:none}.ais-RangeSlider .rheostat{overflow:visible;margin-top:40px;margin-bottom:40px}.ais-RangeSlider .rheostat-background{height:6px;top:0;width:100%}.ais-RangeSlider .rheostat-handle{margin-left:-12px;top:-7px}.ais-RangeSlider .rheostat-background{position:relative;background-color:#fff;border:1px solid #aaa}.ais-RangeSlider .rheostat-progress{position:absolute;top:1px;height:4px;background-color:#333}.rheostat-handle{position:relative;z-index:1;width:20px;height:20px;background-color:#fff;border:1px solid #333;border-radius:50%;cursor:-webkit-grab;cursor:grab}.rheostat-marker{margin-left:-1px;position:absolute;width:1px;height:5px;background-color:#aaa}.rheostat-marker--large{height:9px}.rheostat-value{padding-top:15px}.rheostat-tooltip,.rheostat-value{margin-left:50%;position:absolute;text-align:center;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.rheostat-tooltip{top:-22px} \ No newline at end of file diff --git a/refactor/src/styles/animate.min.css b/refactor/src/styles/animate.min.css new file mode 100644 index 000000000..59b25aa7b --- /dev/null +++ b/refactor/src/styles/animate.min.css @@ -0,0 +1,9 @@ + +@charset "UTF-8"; +/*! + * animate.css - https://animate.style/ + * Version - 4.0.0 + * Licensed under the MIT license - http://opensource.org/licenses/MIT + * + * Copyright (c) 2020 Animate.css + */:root{--animate-duration:1s;--animate-delay:1s;--animate-repeat:1}.animate__animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-duration:var(--animate-duration);animation-duration:var(--animate-duration);-webkit-animation-fill-mode:both;animation-fill-mode:both}.animate__animated.animate__infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.animate__animated.animate__repeat-1{-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-iteration-count:var(--animate-repeat);animation-iteration-count:var(--animate-repeat)}.animate__animated.animate__repeat-2{-webkit-animation-iteration-count:2;animation-iteration-count:2;-webkit-animation-iteration-count:calc(var(--animate-repeat)*2);animation-iteration-count:calc(var(--animate-repeat)*2)}.animate__animated.animate__repeat-3{-webkit-animation-iteration-count:3;animation-iteration-count:3;-webkit-animation-iteration-count:calc(var(--animate-repeat)*3);animation-iteration-count:calc(var(--animate-repeat)*3)}.animate__animated.animate__delay-1s{-webkit-animation-delay:1s;animation-delay:1s;-webkit-animation-delay:var(--animate-delay);animation-delay:var(--animate-delay)}.animate__animated.animate__delay-2s{-webkit-animation-delay:2s;animation-delay:2s;-webkit-animation-delay:calc(var(--animate-delay)*2);animation-delay:calc(var(--animate-delay)*2)}.animate__animated.animate__delay-3s{-webkit-animation-delay:3s;animation-delay:3s;-webkit-animation-delay:calc(var(--animate-delay)*3);animation-delay:calc(var(--animate-delay)*3)}.animate__animated.animate__delay-4s{-webkit-animation-delay:4s;animation-delay:4s;-webkit-animation-delay:calc(var(--animate-delay)*4);animation-delay:calc(var(--animate-delay)*4)}.animate__animated.animate__delay-5s{-webkit-animation-delay:5s;animation-delay:5s;-webkit-animation-delay:calc(var(--animate-delay)*5);animation-delay:calc(var(--animate-delay)*5)}.animate__animated.animate__faster{-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-duration:calc(var(--animate-duration)/2);animation-duration:calc(var(--animate-duration)/2)}.animate__animated.animate__fast{-webkit-animation-duration:.8s;animation-duration:.8s;-webkit-animation-duration:calc(var(--animate-duration)*0.8);animation-duration:calc(var(--animate-duration)*0.8)}.animate__animated.animate__slow{-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-duration:calc(var(--animate-duration)*2);animation-duration:calc(var(--animate-duration)*2)}.animate__animated.animate__slower{-webkit-animation-duration:3s;animation-duration:3s;-webkit-animation-duration:calc(var(--animate-duration)*3);animation-duration:calc(var(--animate-duration)*3)}@media (prefers-reduced-motion:reduce),print{.animate__animated{-webkit-animation-duration:1ms!important;animation-duration:1ms!important;-webkit-transition-duration:1ms!important;transition-duration:1ms!important;-webkit-animation-iteration-count:1!important;animation-iteration-count:1!important}.animate__animated[class*=Out]{opacity:0}}@-webkit-keyframes bounce{0%,20%,53%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translateZ(0);transform:translateZ(0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0) scaleY(1.1);transform:translate3d(0,-30px,0) scaleY(1.1)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0) scaleY(1.05);transform:translate3d(0,-15px,0) scaleY(1.05)}80%{-webkit-transition-timing-function:cubic-bezier(.215,.61,.355,1);transition-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translateZ(0) scaleY(.95);transform:translateZ(0) scaleY(.95)}90%{-webkit-transform:translate3d(0,-4px,0) scaleY(1.02);transform:translate3d(0,-4px,0) scaleY(1.02)}}@keyframes bounce{0%,20%,53%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translateZ(0);transform:translateZ(0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0) scaleY(1.1);transform:translate3d(0,-30px,0) scaleY(1.1)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0) scaleY(1.05);transform:translate3d(0,-15px,0) scaleY(1.05)}80%{-webkit-transition-timing-function:cubic-bezier(.215,.61,.355,1);transition-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translateZ(0) scaleY(.95);transform:translateZ(0) scaleY(.95)}90%{-webkit-transform:translate3d(0,-4px,0) scaleY(1.02);transform:translate3d(0,-4px,0) scaleY(1.02)}}.animate__bounce{-webkit-animation-name:bounce;animation-name:bounce;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes flash{0%,50%,to{opacity:1}25%,75%{opacity:0}}@keyframes flash{0%,50%,to{opacity:1}25%,75%{opacity:0}}.animate__flash{-webkit-animation-name:flash;animation-name:flash}@-webkit-keyframes pulse{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes pulse{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.animate__pulse{-webkit-animation-name:pulse;animation-name:pulse;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}@-webkit-keyframes rubberBand{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes rubberBand{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.animate__rubberBand{-webkit-animation-name:rubberBand;animation-name:rubberBand}@-webkit-keyframes shakeX{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}@keyframes shakeX{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}.animate__shakeX{-webkit-animation-name:shakeX;animation-name:shakeX}@-webkit-keyframes shakeY{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}20%,40%,60%,80%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}}@keyframes shakeY{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}20%,40%,60%,80%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}}.animate__shakeY{-webkit-animation-name:shakeY;animation-name:shakeY}@-webkit-keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}.animate__headShake{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-name:headShake;animation-name:headShake}@-webkit-keyframes swing{20%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}40%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}60%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}80%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes swing{20%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}40%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}60%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}80%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}.animate__swing{-webkit-transform-origin:top center;transform-origin:top center;-webkit-animation-name:swing;animation-name:swing}@-webkit-keyframes tada{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate(-3deg);transform:scale3d(.9,.9,.9) rotate(-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(3deg);transform:scale3d(1.1,1.1,1.1) rotate(3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(-3deg);transform:scale3d(1.1,1.1,1.1) rotate(-3deg)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes tada{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate(-3deg);transform:scale3d(.9,.9,.9) rotate(-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(3deg);transform:scale3d(1.1,1.1,1.1) rotate(3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(-3deg);transform:scale3d(1.1,1.1,1.1) rotate(-3deg)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.animate__tada{-webkit-animation-name:tada;animation-name:tada}@-webkit-keyframes wobble{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}15%{-webkit-transform:translate3d(-25%,0,0) rotate(-5deg);transform:translate3d(-25%,0,0) rotate(-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate(3deg);transform:translate3d(20%,0,0) rotate(3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate(-3deg);transform:translate3d(-15%,0,0) rotate(-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate(2deg);transform:translate3d(10%,0,0) rotate(2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate(-1deg);transform:translate3d(-5%,0,0) rotate(-1deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes wobble{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}15%{-webkit-transform:translate3d(-25%,0,0) rotate(-5deg);transform:translate3d(-25%,0,0) rotate(-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate(3deg);transform:translate3d(20%,0,0) rotate(3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate(-3deg);transform:translate3d(-15%,0,0) rotate(-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate(2deg);transform:translate3d(10%,0,0) rotate(2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate(-1deg);transform:translate3d(-5%,0,0) rotate(-1deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__wobble{-webkit-animation-name:wobble;animation-name:wobble}@-webkit-keyframes jello{0%,11.1%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.390625deg) skewY(.390625deg);transform:skewX(.390625deg) skewY(.390625deg)}88.8%{-webkit-transform:skewX(-.1953125deg) skewY(-.1953125deg);transform:skewX(-.1953125deg) skewY(-.1953125deg)}}@keyframes jello{0%,11.1%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.390625deg) skewY(.390625deg);transform:skewX(.390625deg) skewY(.390625deg)}88.8%{-webkit-transform:skewX(-.1953125deg) skewY(-.1953125deg);transform:skewX(-.1953125deg) skewY(-.1953125deg)}}.animate__jello{-webkit-animation-name:jello;animation-name:jello;-webkit-transform-origin:center;transform-origin:center}@-webkit-keyframes heartBeat{0%{-webkit-transform:scale(1);transform:scale(1)}14%{-webkit-transform:scale(1.3);transform:scale(1.3)}28%{-webkit-transform:scale(1);transform:scale(1)}42%{-webkit-transform:scale(1.3);transform:scale(1.3)}70%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes heartBeat{0%{-webkit-transform:scale(1);transform:scale(1)}14%{-webkit-transform:scale(1.3);transform:scale(1.3)}28%{-webkit-transform:scale(1);transform:scale(1)}42%{-webkit-transform:scale(1.3);transform:scale(1.3)}70%{-webkit-transform:scale(1);transform:scale(1)}}.animate__heartBeat{-webkit-animation-name:heartBeat;animation-name:heartBeat;-webkit-animation-duration:1.3s;animation-duration:1.3s;-webkit-animation-duration:calc(var(--animate-duration)*1.3);animation-duration:calc(var(--animate-duration)*1.3);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}@-webkit-keyframes backInDown{0%{-webkit-transform:translateY(-1200px) scale(.7);transform:translateY(-1200px) scale(.7);opacity:.7}80%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes backInDown{0%{-webkit-transform:translateY(-1200px) scale(.7);transform:translateY(-1200px) scale(.7);opacity:.7}80%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}.animate__backInDown{-webkit-animation-name:backInDown;animation-name:backInDown}@-webkit-keyframes backInLeft{0%{-webkit-transform:translateX(-2000px) scale(.7);transform:translateX(-2000px) scale(.7);opacity:.7}80%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes backInLeft{0%{-webkit-transform:translateX(-2000px) scale(.7);transform:translateX(-2000px) scale(.7);opacity:.7}80%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}.animate__backInLeft{-webkit-animation-name:backInLeft;animation-name:backInLeft}@-webkit-keyframes backInRight{0%{-webkit-transform:translateX(2000px) scale(.7);transform:translateX(2000px) scale(.7);opacity:.7}80%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes backInRight{0%{-webkit-transform:translateX(2000px) scale(.7);transform:translateX(2000px) scale(.7);opacity:.7}80%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}.animate__backInRight{-webkit-animation-name:backInRight;animation-name:backInRight}@-webkit-keyframes backInUp{0%{-webkit-transform:translateY(1200px) scale(.7);transform:translateY(1200px) scale(.7);opacity:.7}80%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes backInUp{0%{-webkit-transform:translateY(1200px) scale(.7);transform:translateY(1200px) scale(.7);opacity:.7}80%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}.animate__backInUp{-webkit-animation-name:backInUp;animation-name:backInUp}@-webkit-keyframes backOutDown{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:translateY(700px) scale(.7);transform:translateY(700px) scale(.7);opacity:.7}}@keyframes backOutDown{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:translateY(700px) scale(.7);transform:translateY(700px) scale(.7);opacity:.7}}.animate__backOutDown{-webkit-animation-name:backOutDown;animation-name:backOutDown}@-webkit-keyframes backOutLeft{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:translateX(-2000px) scale(.7);transform:translateX(-2000px) scale(.7);opacity:.7}}@keyframes backOutLeft{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:translateX(-2000px) scale(.7);transform:translateX(-2000px) scale(.7);opacity:.7}}.animate__backOutLeft{-webkit-animation-name:backOutLeft;animation-name:backOutLeft}@-webkit-keyframes backOutRight{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:translateX(2000px) scale(.7);transform:translateX(2000px) scale(.7);opacity:.7}}@keyframes backOutRight{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:translateX(2000px) scale(.7);transform:translateX(2000px) scale(.7);opacity:.7}}.animate__backOutRight{-webkit-animation-name:backOutRight;animation-name:backOutRight}@-webkit-keyframes backOutUp{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:translateY(-700px) scale(.7);transform:translateY(-700px) scale(.7);opacity:.7}}@keyframes backOutUp{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:translateY(-700px) scale(.7);transform:translateY(-700px) scale(.7);opacity:.7}}.animate__backOutUp{-webkit-animation-name:backOutUp;animation-name:backOutUp}@-webkit-keyframes bounceIn{0%,20%,40%,60%,80%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes bounceIn{0%,20%,40%,60%,80%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scaleX(1);transform:scaleX(1)}}.animate__bounceIn{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-duration:calc(var(--animate-duration)*0.75);animation-duration:calc(var(--animate-duration)*0.75);-webkit-animation-name:bounceIn;animation-name:bounceIn}@-webkit-keyframes bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0) scaleY(3);transform:translate3d(0,-3000px,0) scaleY(3)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0) scaleY(.9);transform:translate3d(0,25px,0) scaleY(.9)}75%{-webkit-transform:translate3d(0,-10px,0) scaleY(.95);transform:translate3d(0,-10px,0) scaleY(.95)}90%{-webkit-transform:translate3d(0,5px,0) scaleY(.985);transform:translate3d(0,5px,0) scaleY(.985)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0) scaleY(3);transform:translate3d(0,-3000px,0) scaleY(3)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0) scaleY(.9);transform:translate3d(0,25px,0) scaleY(.9)}75%{-webkit-transform:translate3d(0,-10px,0) scaleY(.95);transform:translate3d(0,-10px,0) scaleY(.95)}90%{-webkit-transform:translate3d(0,5px,0) scaleY(.985);transform:translate3d(0,5px,0) scaleY(.985)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__bounceInDown{-webkit-animation-name:bounceInDown;animation-name:bounceInDown}@-webkit-keyframes bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0) scaleX(3);transform:translate3d(-3000px,0,0) scaleX(3)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0) scaleX(1);transform:translate3d(25px,0,0) scaleX(1)}75%{-webkit-transform:translate3d(-10px,0,0) scaleX(.98);transform:translate3d(-10px,0,0) scaleX(.98)}90%{-webkit-transform:translate3d(5px,0,0) scaleX(.995);transform:translate3d(5px,0,0) scaleX(.995)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0) scaleX(3);transform:translate3d(-3000px,0,0) scaleX(3)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0) scaleX(1);transform:translate3d(25px,0,0) scaleX(1)}75%{-webkit-transform:translate3d(-10px,0,0) scaleX(.98);transform:translate3d(-10px,0,0) scaleX(.98)}90%{-webkit-transform:translate3d(5px,0,0) scaleX(.995);transform:translate3d(5px,0,0) scaleX(.995)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__bounceInLeft{-webkit-animation-name:bounceInLeft;animation-name:bounceInLeft}@-webkit-keyframes bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0) scaleX(3);transform:translate3d(3000px,0,0) scaleX(3)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0) scaleX(1);transform:translate3d(-25px,0,0) scaleX(1)}75%{-webkit-transform:translate3d(10px,0,0) scaleX(.98);transform:translate3d(10px,0,0) scaleX(.98)}90%{-webkit-transform:translate3d(-5px,0,0) scaleX(.995);transform:translate3d(-5px,0,0) scaleX(.995)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0) scaleX(3);transform:translate3d(3000px,0,0) scaleX(3)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0) scaleX(1);transform:translate3d(-25px,0,0) scaleX(1)}75%{-webkit-transform:translate3d(10px,0,0) scaleX(.98);transform:translate3d(10px,0,0) scaleX(.98)}90%{-webkit-transform:translate3d(-5px,0,0) scaleX(.995);transform:translate3d(-5px,0,0) scaleX(.995)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__bounceInRight{-webkit-animation-name:bounceInRight;animation-name:bounceInRight}@-webkit-keyframes bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0) scaleY(5);transform:translate3d(0,3000px,0) scaleY(5)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0) scaleY(.9);transform:translate3d(0,-20px,0) scaleY(.9)}75%{-webkit-transform:translate3d(0,10px,0) scaleY(.95);transform:translate3d(0,10px,0) scaleY(.95)}90%{-webkit-transform:translate3d(0,-5px,0) scaleY(.985);transform:translate3d(0,-5px,0) scaleY(.985)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0) scaleY(5);transform:translate3d(0,3000px,0) scaleY(5)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0) scaleY(.9);transform:translate3d(0,-20px,0) scaleY(.9)}75%{-webkit-transform:translate3d(0,10px,0) scaleY(.95);transform:translate3d(0,10px,0) scaleY(.95)}90%{-webkit-transform:translate3d(0,-5px,0) scaleY(.985);transform:translate3d(0,-5px,0) scaleY(.985)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__bounceInUp{-webkit-animation-name:bounceInUp;animation-name:bounceInUp}@-webkit-keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}@keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}.animate__bounceOut{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-duration:calc(var(--animate-duration)*0.75);animation-duration:calc(var(--animate-duration)*0.75);-webkit-animation-name:bounceOut;animation-name:bounceOut}@-webkit-keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0) scaleY(.985);transform:translate3d(0,10px,0) scaleY(.985)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0) scaleY(.9);transform:translate3d(0,-20px,0) scaleY(.9)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0) scaleY(3);transform:translate3d(0,2000px,0) scaleY(3)}}@keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0) scaleY(.985);transform:translate3d(0,10px,0) scaleY(.985)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0) scaleY(.9);transform:translate3d(0,-20px,0) scaleY(.9)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0) scaleY(3);transform:translate3d(0,2000px,0) scaleY(3)}}.animate__bounceOutDown{-webkit-animation-name:bounceOutDown;animation-name:bounceOutDown}@-webkit-keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0) scaleX(.9);transform:translate3d(20px,0,0) scaleX(.9)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0) scaleX(2);transform:translate3d(-2000px,0,0) scaleX(2)}}@keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0) scaleX(.9);transform:translate3d(20px,0,0) scaleX(.9)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0) scaleX(2);transform:translate3d(-2000px,0,0) scaleX(2)}}.animate__bounceOutLeft{-webkit-animation-name:bounceOutLeft;animation-name:bounceOutLeft}@-webkit-keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0) scaleX(.9);transform:translate3d(-20px,0,0) scaleX(.9)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0) scaleX(2);transform:translate3d(2000px,0,0) scaleX(2)}}@keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0) scaleX(.9);transform:translate3d(-20px,0,0) scaleX(.9)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0) scaleX(2);transform:translate3d(2000px,0,0) scaleX(2)}}.animate__bounceOutRight{-webkit-animation-name:bounceOutRight;animation-name:bounceOutRight}@-webkit-keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0) scaleY(.985);transform:translate3d(0,-10px,0) scaleY(.985)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0) scaleY(.9);transform:translate3d(0,20px,0) scaleY(.9)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0) scaleY(3);transform:translate3d(0,-2000px,0) scaleY(3)}}@keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0) scaleY(.985);transform:translate3d(0,-10px,0) scaleY(.985)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0) scaleY(.9);transform:translate3d(0,20px,0) scaleY(.9)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0) scaleY(3);transform:translate3d(0,-2000px,0) scaleY(3)}}.animate__bounceOutUp{-webkit-animation-name:bounceOutUp;animation-name:bounceOutUp}@-webkit-keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.animate__fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes fadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInDown{-webkit-animation-name:fadeInDown;animation-name:fadeInDown}@-webkit-keyframes fadeInDownBig{0%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInDownBig{0%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInDownBig{-webkit-animation-name:fadeInDownBig;animation-name:fadeInDownBig}@-webkit-keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInLeft{-webkit-animation-name:fadeInLeft;animation-name:fadeInLeft}@-webkit-keyframes fadeInLeftBig{0%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInLeftBig{0%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInLeftBig{-webkit-animation-name:fadeInLeftBig;animation-name:fadeInLeftBig}@-webkit-keyframes fadeInRight{0%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInRight{0%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInRight{-webkit-animation-name:fadeInRight;animation-name:fadeInRight}@-webkit-keyframes fadeInRightBig{0%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInRightBig{0%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInRightBig{-webkit-animation-name:fadeInRightBig;animation-name:fadeInRightBig}@-webkit-keyframes fadeInUp{0%{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInUp{0%{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInUp{-webkit-animation-name:fadeInUp;animation-name:fadeInUp}@-webkit-keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInUpBig{-webkit-animation-name:fadeInUpBig;animation-name:fadeInUpBig}@-webkit-keyframes fadeInTopLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,-100%,0);transform:translate3d(-100%,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInTopLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,-100%,0);transform:translate3d(-100%,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInTopLeft{-webkit-animation-name:fadeInTopLeft;animation-name:fadeInTopLeft}@-webkit-keyframes fadeInTopRight{0%{opacity:0;-webkit-transform:translate3d(100%,-100%,0);transform:translate3d(100%,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInTopRight{0%{opacity:0;-webkit-transform:translate3d(100%,-100%,0);transform:translate3d(100%,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInTopRight{-webkit-animation-name:fadeInTopRight;animation-name:fadeInTopRight}@-webkit-keyframes fadeInBottomLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,100%,0);transform:translate3d(-100%,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInBottomLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,100%,0);transform:translate3d(-100%,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInBottomLeft{-webkit-animation-name:fadeInBottomLeft;animation-name:fadeInBottomLeft}@-webkit-keyframes fadeInBottomRight{0%{opacity:0;-webkit-transform:translate3d(100%,100%,0);transform:translate3d(100%,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInBottomRight{0%{opacity:0;-webkit-transform:translate3d(100%,100%,0);transform:translate3d(100%,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__fadeInBottomRight{-webkit-animation-name:fadeInBottomRight;animation-name:fadeInBottomRight}@-webkit-keyframes fadeOut{0%{opacity:1}to{opacity:0}}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}.animate__fadeOut{-webkit-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeOutDown{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes fadeOutDown{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.animate__fadeOutDown{-webkit-animation-name:fadeOutDown;animation-name:fadeOutDown}@-webkit-keyframes fadeOutDownBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes fadeOutDownBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.animate__fadeOutDownBig{-webkit-animation-name:fadeOutDownBig;animation-name:fadeOutDownBig}@-webkit-keyframes fadeOutLeft{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes fadeOutLeft{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.animate__fadeOutLeft{-webkit-animation-name:fadeOutLeft;animation-name:fadeOutLeft}@-webkit-keyframes fadeOutLeftBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes fadeOutLeftBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.animate__fadeOutLeftBig{-webkit-animation-name:fadeOutLeftBig;animation-name:fadeOutLeftBig}@-webkit-keyframes fadeOutRight{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes fadeOutRight{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.animate__fadeOutRight{-webkit-animation-name:fadeOutRight;animation-name:fadeOutRight}@-webkit-keyframes fadeOutRightBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes fadeOutRightBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.animate__fadeOutRightBig{-webkit-animation-name:fadeOutRightBig;animation-name:fadeOutRightBig}@-webkit-keyframes fadeOutUp{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes fadeOutUp{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.animate__fadeOutUp{-webkit-animation-name:fadeOutUp;animation-name:fadeOutUp}@-webkit-keyframes fadeOutUpBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes fadeOutUpBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.animate__fadeOutUpBig{-webkit-animation-name:fadeOutUpBig;animation-name:fadeOutUpBig}@-webkit-keyframes fadeOutTopLeft{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(-100%,-100%,0);transform:translate3d(-100%,-100%,0)}}@keyframes fadeOutTopLeft{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(-100%,-100%,0);transform:translate3d(-100%,-100%,0)}}.animate__fadeOutTopLeft{-webkit-animation-name:fadeOutTopLeft;animation-name:fadeOutTopLeft}@-webkit-keyframes fadeOutTopRight{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(100%,-100%,0);transform:translate3d(100%,-100%,0)}}@keyframes fadeOutTopRight{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(100%,-100%,0);transform:translate3d(100%,-100%,0)}}.animate__fadeOutTopRight{-webkit-animation-name:fadeOutTopRight;animation-name:fadeOutTopRight}@-webkit-keyframes fadeOutBottomRight{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(100%,100%,0);transform:translate3d(100%,100%,0)}}@keyframes fadeOutBottomRight{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(100%,100%,0);transform:translate3d(100%,100%,0)}}.animate__fadeOutBottomRight{-webkit-animation-name:fadeOutBottomRight;animation-name:fadeOutBottomRight}@-webkit-keyframes fadeOutBottomLeft{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(-100%,100%,0);transform:translate3d(-100%,100%,0)}}@keyframes fadeOutBottomLeft{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(-100%,100%,0);transform:translate3d(-100%,100%,0)}}.animate__fadeOutBottomLeft{-webkit-animation-name:fadeOutBottomLeft;animation-name:fadeOutBottomLeft}@-webkit-keyframes flip{0%{-webkit-transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn);transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg);transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg);transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg);transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg);transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}@keyframes flip{0%{-webkit-transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn);transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg);transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg);transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg);transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg);transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}.animate__animated.animate__flip{-webkit-backface-visibility:visible;backface-visibility:visible;-webkit-animation-name:flip;animation-name:flip}@-webkit-keyframes flipInX{0%{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInX{0%{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.animate__flipInX{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInX;animation-name:flipInX}@-webkit-keyframes flipInY{0%{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateY(-20deg);transform:perspective(400px) rotateY(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateY(10deg);transform:perspective(400px) rotateY(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateY(-5deg);transform:perspective(400px) rotateY(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInY{0%{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateY(-20deg);transform:perspective(400px) rotateY(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateY(10deg);transform:perspective(400px) rotateY(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateY(-5deg);transform:perspective(400px) rotateY(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.animate__flipInY{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInY;animation-name:flipInY}@-webkit-keyframes flipOutX{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);opacity:0}}@keyframes flipOutX{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);opacity:0}}.animate__flipOutX{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-duration:calc(var(--animate-duration)*0.75);animation-duration:calc(var(--animate-duration)*0.75);-webkit-animation-name:flipOutX;animation-name:flipOutX;-webkit-backface-visibility:visible!important;backface-visibility:visible!important}@-webkit-keyframes flipOutY{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateY(-15deg);transform:perspective(400px) rotateY(-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);opacity:0}}@keyframes flipOutY{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateY(-15deg);transform:perspective(400px) rotateY(-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);opacity:0}}.animate__flipOutY{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-duration:calc(var(--animate-duration)*0.75);animation-duration:calc(var(--animate-duration)*0.75);-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipOutY;animation-name:flipOutY}@-webkit-keyframes lightSpeedInRight{0%{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes lightSpeedInRight{0%{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__lightSpeedInRight{-webkit-animation-name:lightSpeedInRight;animation-name:lightSpeedInRight;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedInLeft{0%{-webkit-transform:translate3d(-100%,0,0) skewX(30deg);transform:translate3d(-100%,0,0) skewX(30deg);opacity:0}60%{-webkit-transform:skewX(-20deg);transform:skewX(-20deg);opacity:1}80%{-webkit-transform:skewX(5deg);transform:skewX(5deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes lightSpeedInLeft{0%{-webkit-transform:translate3d(-100%,0,0) skewX(30deg);transform:translate3d(-100%,0,0) skewX(30deg);opacity:0}60%{-webkit-transform:skewX(-20deg);transform:skewX(-20deg);opacity:1}80%{-webkit-transform:skewX(5deg);transform:skewX(5deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__lightSpeedInLeft{-webkit-animation-name:lightSpeedInLeft;animation-name:lightSpeedInLeft;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedOutRight{0%{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}@keyframes lightSpeedOutRight{0%{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}.animate__lightSpeedOutRight{-webkit-animation-name:lightSpeedOutRight;animation-name:lightSpeedOutRight;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes lightSpeedOutLeft{0%{opacity:1}to{-webkit-transform:translate3d(-100%,0,0) skewX(-30deg);transform:translate3d(-100%,0,0) skewX(-30deg);opacity:0}}@keyframes lightSpeedOutLeft{0%{opacity:1}to{-webkit-transform:translate3d(-100%,0,0) skewX(-30deg);transform:translate3d(-100%,0,0) skewX(-30deg);opacity:0}}.animate__lightSpeedOutLeft{-webkit-animation-name:lightSpeedOutLeft;animation-name:lightSpeedOutLeft;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes rotateIn{0%{-webkit-transform:rotate(-200deg);transform:rotate(-200deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateIn{0%{-webkit-transform:rotate(-200deg);transform:rotate(-200deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.animate__rotateIn{-webkit-animation-name:rotateIn;animation-name:rotateIn;-webkit-transform-origin:center;transform-origin:center}@-webkit-keyframes rotateInDownLeft{0%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateInDownLeft{0%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.animate__rotateInDownLeft{-webkit-animation-name:rotateInDownLeft;animation-name:rotateInDownLeft;-webkit-transform-origin:left bottom;transform-origin:left bottom}@-webkit-keyframes rotateInDownRight{0%{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateInDownRight{0%{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.animate__rotateInDownRight{-webkit-animation-name:rotateInDownRight;animation-name:rotateInDownRight;-webkit-transform-origin:right bottom;transform-origin:right bottom}@-webkit-keyframes rotateInUpLeft{0%{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateInUpLeft{0%{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.animate__rotateInUpLeft{-webkit-animation-name:rotateInUpLeft;animation-name:rotateInUpLeft;-webkit-transform-origin:left bottom;transform-origin:left bottom}@-webkit-keyframes rotateInUpRight{0%{-webkit-transform:rotate(-90deg);transform:rotate(-90deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateInUpRight{0%{-webkit-transform:rotate(-90deg);transform:rotate(-90deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.animate__rotateInUpRight{-webkit-animation-name:rotateInUpRight;animation-name:rotateInUpRight;-webkit-transform-origin:right bottom;transform-origin:right bottom}@-webkit-keyframes rotateOut{0%{opacity:1}to{-webkit-transform:rotate(200deg);transform:rotate(200deg);opacity:0}}@keyframes rotateOut{0%{opacity:1}to{-webkit-transform:rotate(200deg);transform:rotate(200deg);opacity:0}}.animate__rotateOut{-webkit-animation-name:rotateOut;animation-name:rotateOut;-webkit-transform-origin:center;transform-origin:center}@-webkit-keyframes rotateOutDownLeft{0%{opacity:1}to{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}}@keyframes rotateOutDownLeft{0%{opacity:1}to{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}}.animate__rotateOutDownLeft{-webkit-animation-name:rotateOutDownLeft;animation-name:rotateOutDownLeft;-webkit-transform-origin:left bottom;transform-origin:left bottom}@-webkit-keyframes rotateOutDownRight{0%{opacity:1}to{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}@keyframes rotateOutDownRight{0%{opacity:1}to{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}.animate__rotateOutDownRight{-webkit-animation-name:rotateOutDownRight;animation-name:rotateOutDownRight;-webkit-transform-origin:right bottom;transform-origin:right bottom}@-webkit-keyframes rotateOutUpLeft{0%{opacity:1}to{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}@keyframes rotateOutUpLeft{0%{opacity:1}to{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}.animate__rotateOutUpLeft{-webkit-animation-name:rotateOutUpLeft;animation-name:rotateOutUpLeft;-webkit-transform-origin:left bottom;transform-origin:left bottom}@-webkit-keyframes rotateOutUpRight{0%{opacity:1}to{-webkit-transform:rotate(90deg);transform:rotate(90deg);opacity:0}}@keyframes rotateOutUpRight{0%{opacity:1}to{-webkit-transform:rotate(90deg);transform:rotate(90deg);opacity:0}}.animate__rotateOutUpRight{-webkit-animation-name:rotateOutUpRight;animation-name:rotateOutUpRight;-webkit-transform-origin:right bottom;transform-origin:right bottom}@-webkit-keyframes hinge{0%{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate(80deg);transform:rotate(80deg);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate(60deg);transform:rotate(60deg);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}@keyframes hinge{0%{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate(80deg);transform:rotate(80deg);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate(60deg);transform:rotate(60deg);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}.animate__hinge{-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-duration:calc(var(--animate-duration)*2);animation-duration:calc(var(--animate-duration)*2);-webkit-animation-name:hinge;animation-name:hinge;-webkit-transform-origin:top left;transform-origin:top left}@-webkit-keyframes jackInTheBox{0%{opacity:0;-webkit-transform:scale(.1) rotate(30deg);transform:scale(.1) rotate(30deg);-webkit-transform-origin:center bottom;transform-origin:center bottom}50%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}70%{-webkit-transform:rotate(3deg);transform:rotate(3deg)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes jackInTheBox{0%{opacity:0;-webkit-transform:scale(.1) rotate(30deg);transform:scale(.1) rotate(30deg);-webkit-transform-origin:center bottom;transform-origin:center bottom}50%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}70%{-webkit-transform:rotate(3deg);transform:rotate(3deg)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}.animate__jackInTheBox{-webkit-animation-name:jackInTheBox;animation-name:jackInTheBox}@-webkit-keyframes rollIn{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate(-120deg);transform:translate3d(-100%,0,0) rotate(-120deg)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes rollIn{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate(-120deg);transform:translate3d(-100%,0,0) rotate(-120deg)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__rollIn{-webkit-animation-name:rollIn;animation-name:rollIn}@-webkit-keyframes rollOut{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate(120deg);transform:translate3d(100%,0,0) rotate(120deg)}}@keyframes rollOut{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate(120deg);transform:translate3d(100%,0,0) rotate(120deg)}}.animate__rollOut{-webkit-animation-name:rollOut;animation-name:rollOut}@-webkit-keyframes zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}.animate__zoomIn{-webkit-animation-name:zoomIn;animation-name:zoomIn}@-webkit-keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.animate__zoomInDown{-webkit-animation-name:zoomInDown;animation-name:zoomInDown}@-webkit-keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.animate__zoomInLeft{-webkit-animation-name:zoomInLeft;animation-name:zoomInLeft}@-webkit-keyframes zoomInRight{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInRight{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.animate__zoomInRight{-webkit-animation-name:zoomInRight;animation-name:zoomInRight}@-webkit-keyframes zoomInUp{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInUp{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.animate__zoomInUp{-webkit-animation-name:zoomInUp;animation-name:zoomInUp}@-webkit-keyframes zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}@keyframes zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}.animate__zoomOut{-webkit-animation-name:zoomOut;animation-name:zoomOut}@-webkit-keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.animate__zoomOutDown{-webkit-animation-name:zoomOutDown;animation-name:zoomOutDown;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0)}}@keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0)}}.animate__zoomOutLeft{-webkit-animation-name:zoomOutLeft;animation-name:zoomOutLeft;-webkit-transform-origin:left center;transform-origin:left center}@-webkit-keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0)}}@keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0)}}.animate__zoomOutRight{-webkit-animation-name:zoomOutRight;animation-name:zoomOutRight;-webkit-transform-origin:right center;transform-origin:right center}@-webkit-keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.animate__zoomOutUp{-webkit-animation-name:zoomOutUp;animation-name:zoomOutUp;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes slideInDown{0%{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInDown{0%{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__slideInDown{-webkit-animation-name:slideInDown;animation-name:slideInDown}@-webkit-keyframes slideInLeft{0%{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInLeft{0%{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__slideInLeft{-webkit-animation-name:slideInLeft;animation-name:slideInLeft}@-webkit-keyframes slideInRight{0%{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInRight{0%{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__slideInRight{-webkit-animation-name:slideInRight;animation-name:slideInRight}@-webkit-keyframes slideInUp{0%{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInUp{0%{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.animate__slideInUp{-webkit-animation-name:slideInUp;animation-name:slideInUp}@-webkit-keyframes slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.animate__slideOutDown{-webkit-animation-name:slideOutDown;animation-name:slideOutDown}@-webkit-keyframes slideOutLeft{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes slideOutLeft{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.animate__slideOutLeft{-webkit-animation-name:slideOutLeft;animation-name:slideOutLeft}@-webkit-keyframes slideOutRight{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes slideOutRight{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.animate__slideOutRight{-webkit-animation-name:slideOutRight;animation-name:slideOutRight}@-webkit-keyframes slideOutUp{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes slideOutUp{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.animate__slideOutUp{-webkit-animation-name:slideOutUp;animation-name:slideOutUp} \ No newline at end of file diff --git a/refactor/src/styles/globals.css b/refactor/src/styles/globals.css index d4f491e15..bd6213e1d 100644 --- a/refactor/src/styles/globals.css +++ b/refactor/src/styles/globals.css @@ -1,107 +1,3 @@ -:root { - --max-width: 1100px; - --border-radius: 12px; - --font-mono: ui-monospace, Menlo, Monaco, 'Cascadia Mono', 'Segoe UI Mono', - 'Roboto Mono', 'Oxygen Mono', 'Ubuntu Monospace', 'Source Code Pro', - 'Fira Mono', 'Droid Sans Mono', 'Courier New', monospace; - - --foreground-rgb: 0, 0, 0; - --background-start-rgb: 214, 219, 220; - --background-end-rgb: 255, 255, 255; - - --primary-glow: conic-gradient( - from 180deg at 50% 50%, - #16abff33 0deg, - #0885ff33 55deg, - #54d6ff33 120deg, - #0071ff33 160deg, - transparent 360deg - ); - --secondary-glow: radial-gradient( - rgba(255, 255, 255, 1), - rgba(255, 255, 255, 0) - ); - - --tile-start-rgb: 239, 245, 249; - --tile-end-rgb: 228, 232, 233; - --tile-border: conic-gradient( - #00000080, - #00000040, - #00000030, - #00000020, - #00000010, - #00000010, - #00000080 - ); - - --callout-rgb: 238, 240, 241; - --callout-border-rgb: 172, 175, 176; - --card-rgb: 180, 185, 188; - --card-border-rgb: 131, 134, 135; -} - -@media (prefers-color-scheme: dark) { - :root { - --foreground-rgb: 255, 255, 255; - --background-start-rgb: 0, 0, 0; - --background-end-rgb: 0, 0, 0; - - --primary-glow: radial-gradient(rgba(1, 65, 255, 0.4), rgba(1, 65, 255, 0)); - --secondary-glow: linear-gradient( - to bottom right, - rgba(1, 65, 255, 0), - rgba(1, 65, 255, 0), - rgba(1, 65, 255, 0.3) - ); - - --tile-start-rgb: 2, 13, 46; - --tile-end-rgb: 2, 5, 19; - --tile-border: conic-gradient( - #ffffff80, - #ffffff40, - #ffffff30, - #ffffff20, - #ffffff10, - #ffffff10, - #ffffff80 - ); - - --callout-rgb: 20, 20, 20; - --callout-border-rgb: 108, 108, 108; - --card-rgb: 100, 100, 100; - --card-border-rgb: 200, 200, 200; - } -} - -* { - box-sizing: border-box; - padding: 0; - margin: 0; -} - -html, -body { - max-width: 100vw; - overflow-x: hidden; -} - -body { - color: rgb(var(--foreground-rgb)); - background: linear-gradient( - to bottom, - transparent, - rgb(var(--background-end-rgb)) - ) - rgb(var(--background-start-rgb)); -} - -a { - color: inherit; - text-decoration: none; -} - -@media (prefers-color-scheme: dark) { - html { - color-scheme: dark; - } -} +@tailwind base; +@tailwind components; +@tailwind utilities; \ No newline at end of file diff --git a/refactor/tailwind.config.js b/refactor/tailwind.config.js index 32e3abdef..6d696d057 100644 --- a/refactor/tailwind.config.js +++ b/refactor/tailwind.config.js @@ -1,6 +1,6 @@ /** @type {import('tailwindcss').Config} */ module.exports = { - content: [], + content: ['./src/components/**/*.tsx', './src/pages/**/*.tsx'], theme: { extend: {}, }, From 9be92426befee9a367dda0588c4cb34d30659471 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Sun, 19 Feb 2023 20:16:27 +0100 Subject: [PATCH 004/262] Finish initial setup and formatting --- refactor/README.md | 135 +- refactor/next.config.js | 4 +- refactor/package-lock.json | 6535 +++++++++++++++++++++++------------ refactor/package.json | 42 +- refactor/postcss.config.js | 2 +- refactor/tailwind.config.js | 2 +- 6 files changed, 4524 insertions(+), 2196 deletions(-) diff --git a/refactor/README.md b/refactor/README.md index 965a1228c..a9613ac0c 100644 --- a/refactor/README.md +++ b/refactor/README.md @@ -1,38 +1,127 @@ -This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). +![Codiga Code Grade](https://api.codiga.io/project/35238/score/svg) +[![Codacy Badge](https://api.codacy.com/project/badge/Grade/29de6847b01142e6a0183988fc3df46a)](https://app.codacy.com/gh/w3bdesign/nextjs-woocommerce?utm_source=github.com&utm_medium=referral&utm_content=w3bdesign/nextjs-woocommerce&utm_campaign=Badge_Grade_Settings) +[![CodeFactor](https://www.codefactor.io/repository/github/w3bdesign/nextjs-woocommerce/badge)](https://www.codefactor.io/repository/github/w3bdesign/nextjs-woocommerce) +[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=w3bdesign_nextjs-woocommerce&metric=alert_status)](https://sonarcloud.io/dashboard?id=w3bdesign_nextjs-woocommerce) -## Getting Started +![Screenshot 1](./screenshots/screenshot1.jpg) -First, run the development server: +## Star History -```bash -npm run dev -# or -yarn dev -# or -pnpm dev -``` +[![Star History Chart](https://api.star-history.com/svg?repos=w3bdesign/nextjs-woocommerce&type=Date)](https://star-history.com/#w3bdesign/nextjs-woocommerce&Date) -Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. +# Next.js Ecommerce site with WooCommerce backend -You can start editing the page by modifying `pages/index.tsx`. The page auto-updates as you edit the file. +## Live URL: -[API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.ts`. +## Table Of Contents (TOC) -The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages. +- [Installation](#Installation) +- [Features](#Features) +- [Issues](#Issues) +- [Troubleshooting](#Troubleshooting) +- [TODO](#TODO) -This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font. +## Installation -## Learn More +1. Install and activate the following required plugins, in your WordPress plugin directory: -To learn more about Next.js, take a look at the following resources: +- [woocommerce](https://wordpress.org/plugins/woocommerce) Ecommerce for WordPress. +- [wp-graphql](https://wordpress.org/plugins/wp-graphql) Exposes GraphQL for WordPress. +- [wp-graphql-woocommerce](https://github.com/wp-graphql/wp-graphql-woocommerce) Adds WooCommerce functionality to a WPGraphQL schema. +- [algolia-woo-indexer](https://github.com/w3bdesign/algolia-woo-indexer) Sends WooCommerce products to Algolia. Required for search to work. -- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. -- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. +Optional plugin: -You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! +- [headless-wordpress](https://github.com/w3bdesign/headless-wp) Disables the frontend so only the backend is accessible. (optional) -## Deploy on Vercel +The current release has been tested and is confirmed working with the following versions: -The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. +- WordPress version 6.1.1 +- WooCommerce version 7.4.0 +- WP GraphQL version 1.13.8 +- WooGraphQL version 0.12.0 +- WPGraphQL CORS version 2.1 -Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. +2. For debugging and testing, install either: + + (Firefox) + + (Chrome) + + +3. Make sure WooCommerce has some products already or import some sample products + + The WooCommerce sample products CSV file is available at `wp-content/plugins/woocommerce/sample-data/sample_products.csv` or [Sample products](sample_products/) + + Import the products at `WP Dashboard > Tools > Import > WooCommerce products(CSV)` + +4. Clone or fork the repo and modify `.env.example` and rename it to `.env` + + Then set the environment variables accordingly in Vercel or your preferred hosting solution. + + See + +5. Modify the values according to your setup + +6. Start the server with `npm run dev` + +7. Enable COD (Cash On Demand) payment method in WooCommerce + +8. Add a product to the cart + +9. Proceed to checkout (Gå til kasse) + +10. Fill in your details and place the order + +## Features + +- Next.js version 13.1.6 +- React 18 +- Connect to Woocommerce GraphQL API and list name, price and display image for products +- Support for simple products and variable products +- Cart handling and checkout with WooCommerce (Cash On Delivery only for now) +- Algolia search (requires [algolia-woo-indexer](https://github.com/w3bdesign/algolia-woo-indexer)) +- Meets WCAG accessibility standards where possible +- Placeholder for products without images +- Apollo Client with GraphQL +- React Hook Form with form validation and error display +- Animations with Framer motion, Styled components and Animate.css +- Loading spinner created with Styled Components +- Shows page load progress with Nprogress during navigation +- Fully responsive design +- Category and product listings +- Show stock status +- Pretty URLs with builtin Nextjs functionality +- Tailwind 3 for styling +- JSDoc comments +- WooCommerce cart session is automatically deleted after 48 hours to prevent GraphQL session expiration errors + +## Troubleshooting + +### I am getting a cart undefined error or other GraphQL errors + +Check that you are using the 0.12.0 version of the [wp-graphql-woocommerce](https://github.com/wp-graphql/wp-graphql-woocommerce) plugin + +### The products page isn't loading + +Check the attributes of the products. Right now the application requires Size and Color. + +## Issues + +Overall the application is working as intended, but it has not been tested extensively in a production environment. +More testing and debugging is required before deploying it in a production environment. + +With that said, keep the following in mind: + +- Currently only simple products and variable products work without any issues. Other product types are not known to work. +- Only Cash On Delivery (COD) is currently supported. More payment methods may be added later. + +## TODO + +- Add total to cart/checkout page +- Show stock quantity on individual products +- Copy billing address to shipping address +- Display product variation name in cart / checkout +- Hide products not in stock +- Add better SEO +- Re-add Next/image when it is working better diff --git a/refactor/next.config.js b/refactor/next.config.js index a843cbee0..91ef62f0d 100644 --- a/refactor/next.config.js +++ b/refactor/next.config.js @@ -1,6 +1,6 @@ /** @type {import('next').NextConfig} */ const nextConfig = { reactStrictMode: true, -} +}; -module.exports = nextConfig +module.exports = nextConfig; diff --git a/refactor/package-lock.json b/refactor/package-lock.json index fdc7e7651..643fa20f6 100644 --- a/refactor/package-lock.json +++ b/refactor/package-lock.json @@ -7,1849 +7,3551 @@ "": { "name": "test", "version": "0.1.0", + "license": "ISC", "dependencies": { - "@next/font": "13.1.6", - "@types/node": "18.14.0", - "@types/react": "18.0.28", - "@types/react-dom": "18.0.11", - "eslint": "8.34.0", - "eslint-config-next": "13.1.6", - "next": "13.1.6", + "@apollo/client": "^3.7.8", + "@types/react": "^18.0.28", + "algoliasearch": "^4.14.3", + "autoprefixer": "^10.4.13", + "framer-motion": "9.0.4", + "graphql": "^16.6.0", + "next": "^13.1.6", + "nprogress": "^0.2.0", + "postcss": "^8.4.21", "react": "18.2.0", "react-dom": "18.2.0", - "typescript": "4.9.5" + "react-hook-form": "^7.43.1", + "react-instantsearch-dom": "^6.39.0", + "styled-components": "^5.3.6", + "uuid": "^9.0.0" }, "devDependencies": { - "autoprefixer": "^10.4.13", - "postcss": "^8.4.21", + "babel-plugin-styled-components": "^2.0.7", + "eslint": "8.34.0", + "eslint-config-next": "^13.1.6", + "postcss-preset-env": "^8.0.1", + "prettier": "^2.8.4", "tailwindcss": "^3.2.7" } }, - "node_modules/@babel/runtime": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.13.tgz", - "integrity": "sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==", + "node_modules/@algolia/cache-browser-local-storage": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.14.3.tgz", + "integrity": "sha512-hWH1yCxgG3+R/xZIscmUrWAIBnmBFHH5j30fY/+aPkEZWt90wYILfAHIOZ1/Wxhho5SkPfwFmT7ooX2d9JeQBw==", "dependencies": { - "regenerator-runtime": "^0.13.11" + "@algolia/cache-common": "4.14.3" + } + }, + "node_modules/@algolia/cache-common": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.14.3.tgz", + "integrity": "sha512-oZJofOoD9FQOwiGTzyRnmzvh3ZP8WVTNPBLH5xU5JNF7drDbRT0ocVT0h/xB2rPHYzOeXRrLaQQBwRT/CKom0Q==" + }, + "node_modules/@algolia/cache-in-memory": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.14.3.tgz", + "integrity": "sha512-ES0hHQnzWjeioLQf5Nq+x1AWdZJ50znNPSH3puB/Y4Xsg4Av1bvLmTJe7SY2uqONaeMTvL0OaVcoVtQgJVw0vg==", + "dependencies": { + "@algolia/cache-common": "4.14.3" + } + }, + "node_modules/@algolia/client-account": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.14.3.tgz", + "integrity": "sha512-PBcPb0+f5Xbh5UfLZNx2Ow589OdP8WYjB4CnvupfYBrl9JyC1sdH4jcq/ri8osO/mCZYjZrQsKAPIqW/gQmizQ==", + "dependencies": { + "@algolia/client-common": "4.14.3", + "@algolia/client-search": "4.14.3", + "@algolia/transporter": "4.14.3" + } + }, + "node_modules/@algolia/client-analytics": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.14.3.tgz", + "integrity": "sha512-eAwQq0Hb/aauv9NhCH5Dp3Nm29oFx28sayFN2fdOWemwSeJHIl7TmcsxVlRsO50fsD8CtPcDhtGeD3AIFLNvqw==", + "dependencies": { + "@algolia/client-common": "4.14.3", + "@algolia/client-search": "4.14.3", + "@algolia/requester-common": "4.14.3", + "@algolia/transporter": "4.14.3" + } + }, + "node_modules/@algolia/client-common": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.14.3.tgz", + "integrity": "sha512-jkPPDZdi63IK64Yg4WccdCsAP4pHxSkr4usplkUZM5C1l1oEpZXsy2c579LQ0rvwCs5JFmwfNG4ahOszidfWPw==", + "dependencies": { + "@algolia/requester-common": "4.14.3", + "@algolia/transporter": "4.14.3" + } + }, + "node_modules/@algolia/client-personalization": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.14.3.tgz", + "integrity": "sha512-UCX1MtkVNgaOL9f0e22x6tC9e2H3unZQlSUdnVaSKpZ+hdSChXGaRjp2UIT7pxmPqNCyv51F597KEX5WT60jNg==", + "dependencies": { + "@algolia/client-common": "4.14.3", + "@algolia/requester-common": "4.14.3", + "@algolia/transporter": "4.14.3" + } + }, + "node_modules/@algolia/client-search": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.14.3.tgz", + "integrity": "sha512-I2U7xBx5OPFdPLA8AXKUPPxGY3HDxZ4r7+mlZ8ZpLbI8/ri6fnu6B4z3wcL7sgHhDYMwnAE8Xr0AB0h3Hnkp4A==", + "dependencies": { + "@algolia/client-common": "4.14.3", + "@algolia/requester-common": "4.14.3", + "@algolia/transporter": "4.14.3" + } + }, + "node_modules/@algolia/events": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz", + "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==" + }, + "node_modules/@algolia/logger-common": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.14.3.tgz", + "integrity": "sha512-kUEAZaBt/J3RjYi8MEBT2QEexJR2kAE2mtLmezsmqMQZTV502TkHCxYzTwY2dE7OKcUTxi4OFlMuS4GId9CWPw==" + }, + "node_modules/@algolia/logger-console": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.14.3.tgz", + "integrity": "sha512-ZWqAlUITktiMN2EiFpQIFCJS10N96A++yrexqC2Z+3hgF/JcKrOxOdT4nSCQoEPvU4Ki9QKbpzbebRDemZt/hw==", + "dependencies": { + "@algolia/logger-common": "4.14.3" + } + }, + "node_modules/@algolia/requester-browser-xhr": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.14.3.tgz", + "integrity": "sha512-AZeg2T08WLUPvDncl2XLX2O67W5wIO8MNaT7z5ii5LgBTuk/rU4CikTjCe2xsUleIZeFl++QrPAi4Bdxws6r/Q==", + "dependencies": { + "@algolia/requester-common": "4.14.3" + } + }, + "node_modules/@algolia/requester-common": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.14.3.tgz", + "integrity": "sha512-RrRzqNyKFDP7IkTuV3XvYGF9cDPn9h6qEDl595lXva3YUk9YSS8+MGZnnkOMHvjkrSCKfoLeLbm/T4tmoIeclw==" + }, + "node_modules/@algolia/requester-node-http": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.14.3.tgz", + "integrity": "sha512-O5wnPxtDRPuW2U0EaOz9rMMWdlhwP0J0eSL1Z7TtXF8xnUeeUyNJrdhV5uy2CAp6RbhM1VuC3sOJcIR6Av+vbA==", + "dependencies": { + "@algolia/requester-common": "4.14.3" + } + }, + "node_modules/@algolia/transporter": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.14.3.tgz", + "integrity": "sha512-2qlKlKsnGJ008exFRb5RTeTOqhLZj0bkMCMVskxoqWejs2Q2QtWmsiH98hDfpw0fmnyhzHEt0Z7lqxBYp8bW2w==", + "dependencies": { + "@algolia/cache-common": "4.14.3", + "@algolia/logger-common": "4.14.3", + "@algolia/requester-common": "4.14.3" + } + }, + "node_modules/@apollo/client": { + "version": "3.7.8", + "resolved": "https://registry.npmjs.org/@apollo/client/-/client-3.7.8.tgz", + "integrity": "sha512-o1NxF4ytET2w9HSVMLwYUEEdv6H3XPpbh9M+ABVGnUVT0s6T9pgqRtYO4pFP1TmeDmb1pbRfVhFwh3gC167j5Q==", + "dependencies": { + "@graphql-typed-document-node/core": "^3.1.1", + "@wry/context": "^0.7.0", + "@wry/equality": "^0.5.0", + "@wry/trie": "^0.3.0", + "graphql-tag": "^2.12.6", + "hoist-non-react-statics": "^3.3.2", + "optimism": "^0.16.1", + "prop-types": "^15.7.2", + "response-iterator": "^0.2.6", + "symbol-observable": "^4.0.0", + "ts-invariant": "^0.10.3", + "tslib": "^2.3.0", + "zen-observable-ts": "^1.2.5" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0", + "graphql-ws": "^5.5.5", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", + "subscriptions-transport-ws": "^0.9.0 || ^0.11.0" + }, + "peerDependenciesMeta": { + "graphql-ws": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "subscriptions-transport-ws": { + "optional": true + } + } + }, + "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==", + "dependencies": { + "@babel/highlight": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@eslint/eslintrc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", - "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", + "node_modules/@babel/generator": { + "version": "7.20.14", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.14.tgz", + "integrity": "sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg==", "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.4.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" + "@babel/types": "^7.20.7", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=6.9.0" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", - "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" + "@babel/types": "^7.18.6" }, "engines": { - "node": ">=10.10.0" + "node": ">=6.9.0" } }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "node_modules/@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", "engines": { - "node": ">=12.22" + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "dependencies": { + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" + "node_modules/@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } }, - "node_modules/@next/env": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/env/-/env-13.1.6.tgz", - "integrity": "sha512-s+W9Fdqh5MFk6ECrbnVmmAOwxKQuhGMT7xXHrkYIBMBcTiOqNWhv5KbJIboKR5STXxNXl32hllnvKaffzFaWQg==" + "node_modules/@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } }, - "node_modules/@next/eslint-plugin-next": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.1.6.tgz", - "integrity": "sha512-o7cauUYsXjzSJkay8wKjpKJf2uLzlggCsGUkPu3lP09Pv97jYlekTC20KJrjQKmSv5DXV0R/uks2ZXhqjNkqAw==", + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", "dependencies": { - "glob": "7.1.7" + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@next/font": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/font/-/font-13.1.6.tgz", - "integrity": "sha512-AITjmeb1RgX1HKMCiA39ztx2mxeAyxl4ljv2UoSBUGAbFFMg8MO7YAvjHCgFhD39hL7YTbFjol04e/BPBH5RzQ==" + "node_modules/@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "engines": { + "node": ">=6.9.0" + } }, - "node_modules/@next/swc-android-arm-eabi": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.1.6.tgz", - "integrity": "sha512-F3/6Z8LH/pGlPzR1AcjPFxx35mPqjE5xZcf+IL+KgbW9tMkp7CYi1y7qKrEWU7W4AumxX/8OINnDQWLiwLasLQ==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ], + "node_modules/@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", "engines": { - "node": ">= 10" + "node": ">=6.9.0" } }, - "node_modules/@next/swc-android-arm64": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-13.1.6.tgz", - "integrity": "sha512-cMwQjnB8vrYkWyK/H0Rf2c2pKIH4RGjpKUDvbjVAit6SbwPDpmaijLio0LWFV3/tOnY6kvzbL62lndVA0mkYpw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], + "node_modules/@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, "engines": { - "node": ">= 10" + "node": ">=6.9.0" } }, - "node_modules/@next/swc-darwin-arm64": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.1.6.tgz", - "integrity": "sha512-KKRQH4DDE4kONXCvFMNBZGDb499Hs+xcFAwvj+rfSUssIDrZOlyfJNy55rH5t2Qxed1e4K80KEJgsxKQN1/fyw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], + "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==", + "dependencies": { + "color-convert": "^1.9.0" + }, "engines": { - "node": ">= 10" + "node": ">=4" } }, - "node_modules/@next/swc-darwin-x64": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.1.6.tgz", - "integrity": "sha512-/uOky5PaZDoaU99ohjtNcDTJ6ks/gZ5ykTQDvNZDjIoCxFe3+t06bxsTPY6tAO6uEAw5f6vVFX5H5KLwhrkZCA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], + "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==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, "engines": { - "node": ">= 10" + "node": ">=4" } }, - "node_modules/@next/swc-freebsd-x64": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.1.6.tgz", - "integrity": "sha512-qaEALZeV7to6weSXk3Br80wtFQ7cFTpos/q+m9XVRFggu+8Ib895XhMWdJBzew6aaOcMvYR6KQ6JmHA2/eMzWw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], + "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==", + "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==" + }, + "node_modules/@babel/highlight/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==", "engines": { - "node": ">= 10" + "node": ">=0.8.0" } }, - "node_modules/@next/swc-linux-arm-gnueabihf": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.1.6.tgz", - "integrity": "sha512-OybkbC58A1wJ+JrJSOjGDvZzrVEQA4sprJejGqMwiZyLqhr9Eo8FXF0y6HL+m1CPCpPhXEHz/2xKoYsl16kNqw==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], + "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==", "engines": { - "node": ">= 10" + "node": ">=4" } }, - "node_modules/@next/swc-linux-arm64-gnu": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.1.6.tgz", - "integrity": "sha512-yCH+yDr7/4FDuWv6+GiYrPI9kcTAO3y48UmaIbrKy8ZJpi7RehJe3vIBRUmLrLaNDH3rY1rwoHi471NvR5J5NQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], + "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==", + "dependencies": { + "has-flag": "^3.0.0" + }, "engines": { - "node": ">= 10" + "node": ">=4" } }, - "node_modules/@next/swc-linux-arm64-musl": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.1.6.tgz", - "integrity": "sha512-ECagB8LGX25P9Mrmlc7Q/TQBb9rGScxHbv/kLqqIWs2fIXy6Y/EiBBiM72NTwuXUFCNrWR4sjUPSooVBJJ3ESQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], + "node_modules/@babel/parser": { + "version": "7.20.15", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.15.tgz", + "integrity": "sha512-DI4a1oZuf8wC+oAJA9RW6ga3Zbe8RZFt7kD9i4qAspz3I/yHet1VvC3DiSy/fsUvv5pvJuNPh0LPOdCcqinDPg==", + "bin": { + "parser": "bin/babel-parser.js" + }, "engines": { - "node": ">= 10" + "node": ">=6.0.0" } }, - "node_modules/@next/swc-linux-x64-gnu": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.1.6.tgz", - "integrity": "sha512-GT5w2mruk90V/I5g6ScuueE7fqj/d8Bui2qxdw6lFxmuTgMeol5rnzAv4uAoVQgClOUO/MULilzlODg9Ib3Y4Q==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-musl": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.1.6.tgz", - "integrity": "sha512-keFD6KvwOPzmat4TCnlnuxJCQepPN+8j3Nw876FtULxo8005Y9Ghcl7ACcR8GoiKoddAq8gxNBrpjoxjQRHeAQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-arm64-msvc": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.1.6.tgz", - "integrity": "sha512-OwertslIiGQluFvHyRDzBCIB07qJjqabAmINlXUYt7/sY7Q7QPE8xVi5beBxX/rxTGPIbtyIe3faBE6Z2KywhQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-ia32-msvc": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.1.6.tgz", - "integrity": "sha512-g8zowiuP8FxUR9zslPmlju7qYbs2XBtTLVSxVikPtUDQedhcls39uKYLvOOd1JZg0ehyhopobRoH1q+MHlIN/w==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], + "node_modules/@babel/runtime": { + "version": "7.20.13", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.13.tgz", + "integrity": "sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==", + "dependencies": { + "regenerator-runtime": "^0.13.11" + }, "engines": { - "node": ">= 10" + "node": ">=6.9.0" } }, - "node_modules/@next/swc-win32-x64-msvc": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.1.6.tgz", - "integrity": "sha512-Ls2OL9hi3YlJKGNdKv8k3X/lLgc3VmLG3a/DeTkAd+lAituJp8ZHmRmm9f9SL84fT3CotlzcgbdaCDfFwFA6bA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], + "node_modules/@babel/template": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" + }, "engines": { - "node": ">= 10" + "node": ">=6.9.0" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "node_modules/@babel/traverse": { + "version": "7.20.13", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.13.tgz", + "integrity": "sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ==", "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.7", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.20.13", + "@babel/types": "^7.20.7", + "debug": "^4.1.0", + "globals": "^11.1.0" }, "engines": { - "node": ">= 8" + "node": ">=6.9.0" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "engines": { - "node": ">= 8" + "node": ">=4" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/@babel/types": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz", + "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==", "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" }, "engines": { - "node": ">= 8" + "node": ">=6.9.0" } }, - "node_modules/@pkgr/utils": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.3.1.tgz", - "integrity": "sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==", - "dependencies": { - "cross-spawn": "^7.0.3", - "is-glob": "^4.0.3", - "open": "^8.4.0", - "picocolors": "^1.0.0", - "tiny-glob": "^0.2.9", - "tslib": "^2.4.0" - }, + "node_modules/@csstools/cascade-layer-name-parser": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.1.tgz", + "integrity": "sha512-SAAi5DpgJJWkfTvWSaqkgyIsTawa83hMwKrktkj6ra2h+q6ZN57vOGZ6ySHq6RSo+CbP64fA3aPChPBRDDUgtw==", + "dev": true, "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + "node": "^14 || ^16 || >=18" }, "funding": { - "url": "https://opencollective.com/unts" + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^2.0.0", + "@csstools/css-tokenizer": "^2.0.0" } }, - "node_modules/@rushstack/eslint-patch": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz", - "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==" - }, - "node_modules/@swc/helpers": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.14.tgz", - "integrity": "sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==", - "dependencies": { - "tslib": "^2.4.0" + "node_modules/@csstools/color-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-1.0.0.tgz", + "integrity": "sha512-tgqtiV8sU/VaWYjOB3O7PWs7HR/MmOLl2kTYRW2qSsTSEniJq7xmyAYFB1LPpXvvQcE5u2ih2dK9fyc8BnrAGQ==", + "dev": true, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" } }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" - }, - "node_modules/@types/node": { - "version": "18.14.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.0.tgz", - "integrity": "sha512-5EWrvLmglK+imbCJY0+INViFWUHg1AHel1sq4ZVSfdcNqGy9Edv3UB9IIzzg+xPaUcAgZYcfVs2fBcwDeZzU0A==" - }, - "node_modules/@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" - }, - "node_modules/@types/react": { - "version": "18.0.28", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.28.tgz", - "integrity": "sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew==", - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" + "node_modules/@csstools/css-parser-algorithms": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.0.1.tgz", + "integrity": "sha512-B9/8PmOtU6nBiibJg0glnNktQDZ3rZnGn/7UmDfrm2vMtrdlXO3p7ErE95N0up80IRk9YEtB5jyj/TmQ1WH3dw==", + "dev": true, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^2.0.0" } }, - "node_modules/@types/react-dom": { - "version": "18.0.11", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.11.tgz", - "integrity": "sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==", - "dependencies": { - "@types/react": "*" + "node_modules/@csstools/css-tokenizer": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.0.2.tgz", + "integrity": "sha512-prUTipz0NZH7Lc5wyBUy93NFy3QYDMVEQgSeZzNdpMbKRd6V2bgRFyJ+O0S0Dw0MXWuE/H9WXlJk3kzMZRHZ/g==", + "dev": true, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" } }, - "node_modules/@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" - }, - "node_modules/@typescript-eslint/parser": { - "version": "5.52.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.52.0.tgz", - "integrity": "sha512-e2KiLQOZRo4Y0D/b+3y08i3jsekoSkOYStROYmPUnGMEoA0h+k2qOH5H6tcjIc68WDvGwH+PaOrP1XRzLJ6QlA==", - "dependencies": { - "@typescript-eslint/scope-manager": "5.52.0", - "@typescript-eslint/types": "5.52.0", - "@typescript-eslint/typescript-estree": "5.52.0", - "debug": "^4.3.4" - }, + "node_modules/@csstools/media-query-list-parser": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.0.1.tgz", + "integrity": "sha512-X2/OuzEbjaxhzm97UJ+95GrMeT29d1Ib+Pu+paGLuRWZnWRK9sI9r3ikmKXPWGA1C4y4JEdBEFpp9jEqCvLeRA==", + "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^14 || ^16 || >=18" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://opencollective.com/csstools" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "@csstools/css-parser-algorithms": "^2.0.0", + "@csstools/css-tokenizer": "^2.0.0" } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.52.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.52.0.tgz", - "integrity": "sha512-AR7sxxfBKiNV0FWBSARxM8DmNxrwgnYMPwmpkC1Pl1n+eT8/I2NAUPuwDy/FmDcC6F8pBfmOcaxcxRHspgOBMw==", + "node_modules/@csstools/postcss-cascade-layers": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-3.0.1.tgz", + "integrity": "sha512-dD8W98dOYNOH/yX4V4HXOhfCOnvVAg8TtsL+qCGNoKXuq5z2C/d026wGWgySgC8cajXXo/wNezS31Glj5GcqrA==", + "dev": true, "dependencies": { - "@typescript-eslint/types": "5.52.0", - "@typescript-eslint/visitor-keys": "5.52.0" + "@csstools/selector-specificity": "^2.0.2", + "postcss-selector-parser": "^6.0.10" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^14 || ^16 || >=18" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@typescript-eslint/types": { - "version": "5.52.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.52.0.tgz", - "integrity": "sha512-oV7XU4CHYfBhk78fS7tkum+/Dpgsfi91IIDy7fjCyq2k6KB63M6gMC0YIvy+iABzmXThCRI6xpCEyVObBdWSDQ==", + "node_modules/@csstools/postcss-color-function": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-2.1.0.tgz", + "integrity": "sha512-XBoCClLyWchlYGHGlmMOa6M2UXZNrZm63HVfsvgD/z1RPm/s3+FhHyT6VkDo+OvEBPhCgn6xz4IeCu4pRctKDQ==", + "dev": true, + "dependencies": { + "@csstools/color-helpers": "^1.0.0", + "@csstools/postcss-progressive-custom-properties": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^14 || ^16 || >=18" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.52.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.52.0.tgz", - "integrity": "sha512-WeWnjanyEwt6+fVrSR0MYgEpUAuROxuAH516WPjUblIrClzYJj0kBbjdnbQXLpgAN8qbEuGywiQsXUVDiAoEuQ==", + "node_modules/@csstools/postcss-font-format-keywords": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-2.0.2.tgz", + "integrity": "sha512-iKYZlIs6JsNT7NKyRjyIyezTCHLh4L4BBB3F5Nx7Dc4Z/QmBgX+YJFuUSar8IM6KclGiAUFGomXFdYxAwJydlA==", + "dev": true, "dependencies": { - "@typescript-eslint/types": "5.52.0", - "@typescript-eslint/visitor-keys": "5.52.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^14 || ^16 || >=18" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://opencollective.com/csstools" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.52.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.52.0.tgz", - "integrity": "sha512-qMwpw6SU5VHCPr99y274xhbm+PRViK/NATY6qzt+Et7+mThGuFSl/ompj2/hrBlRP/kq+BFdgagnOSgw9TB0eA==", + "node_modules/@csstools/postcss-hwb-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-2.1.1.tgz", + "integrity": "sha512-XijKzdxBdH2hU6IcPWmnaU85FKEF1XE5hGy0d6dQC6XznFUIRu1T4uebL3krayX40m4xIcxfCBsQm5zphzVrtg==", + "dev": true, "dependencies": { - "@typescript-eslint/types": "5.52.0", - "eslint-visitor-keys": "^3.3.0" + "@csstools/color-helpers": "^1.0.0", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^14 || ^16 || >=18" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "bin": { - "acorn": "bin/acorn" + "node_modules/@csstools/postcss-ic-unit": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-2.0.2.tgz", + "integrity": "sha512-N84qGTJkfLTPj2qOG5P4CIqGjpZBbjOEMKMn+UjO5wlb9lcBTfBsxCF0lQsFdWJUzBHYFOz19dL66v71WF3Pig==", + "dev": true, + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^2.0.0", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + "postcss": "^8.4" } }, - "node_modules/acorn-node": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", - "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "node_modules/@csstools/postcss-is-pseudo-class": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-3.1.1.tgz", + "integrity": "sha512-hhiacuby4YdUnnxfCYCRMBIobyJImozf0u+gHSbQ/tNOdwvmrZtVROvgW7zmfYuRkHVDNZJWZslq2v5jOU+j/A==", "dev": true, "dependencies": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - } - }, - "node_modules/acorn-node/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" }, "engines": { - "node": ">=0.4.0" + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "node_modules/@csstools/postcss-logical-float-and-clear": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-float-and-clear/-/postcss-logical-float-and-clear-1.0.1.tgz", + "integrity": "sha512-eO9z2sMLddvlfFEW5Fxbjyd03zaO7cJafDurK4rCqyRt9P7aaWwha0LcSzoROlcZrw1NBV2JAp2vMKfPMQO1xw==", "dev": true, "engines": { - "node": ">=0.4.0" + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "node_modules/@csstools/postcss-logical-resize": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-resize/-/postcss-logical-resize-1.0.1.tgz", + "integrity": "sha512-x1ge74eCSvpBkDDWppl+7FuD2dL68WP+wwP2qvdUcKY17vJksz+XoE1ZRV38uJgS6FNUwC0AxrPW5gy3MxsDHQ==", + "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" + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "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==", + "node_modules/@csstools/postcss-logical-viewport-units": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-1.0.2.tgz", + "integrity": "sha512-nnKFywBqRMYjv5jyjSplD/nbAnboUEGFfdxKw1o34Y1nvycgqjQavhKkmxbORxroBBIDwC5y6SfgENcPPUcOxQ==", + "dev": true, + "dependencies": { + "@csstools/css-tokenizer": "^2.0.0" + }, "engines": { - "node": ">=8" + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "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==", + "node_modules/@csstools/postcss-media-queries-aspect-ratio-number-values": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-1.0.1.tgz", + "integrity": "sha512-V9yQqXdje6OfqDf6EL5iGOpi6N0OEczwYK83rql9UapQwFEryXlAehR5AqH8QqLYb6+y31wUXK6vMxCp0920Zg==", + "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "@csstools/css-parser-algorithms": "^2.0.0", + "@csstools/css-tokenizer": "^2.0.0", + "@csstools/media-query-list-parser": "^2.0.0" }, "engines": { - "node": ">=8" + "node": "^14 || ^16 || >=18" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "node_modules/@csstools/postcss-nested-calc": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-2.0.2.tgz", + "integrity": "sha512-jbwrP8rN4e7LNaRcpx3xpMUjhtt34I9OV+zgbcsYAAk6k1+3kODXJBf95/JMYWhu9g1oif7r06QVUgfWsKxCFw==", "dev": true, "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">= 8" + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "dev": true - }, - "node_modules/argparse": { + "node_modules/@csstools/postcss-normalize-display-values": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/aria-query": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", - "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-2.0.1.tgz", + "integrity": "sha512-TQT5g3JQ5gPXC239YuRK8jFceXF9d25ZvBkyjzBGGoW5st5sPXFVQS8OjYb9IJ/K3CdfK4528y483cgS2DJR/w==", + "dev": true, "dependencies": { - "deep-equal": "^2.0.5" + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "node_modules/@csstools/postcss-oklab-function": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-2.1.0.tgz", + "integrity": "sha512-U/odSNjOVhagNRu+RDaNVbn8vaqA9GyCOoneQA2je7697KOrtRDc7/POrYsP7QioO2aaezDzKNX02wBzc99fkQ==", + "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "is-string": "^1.0.7" + "@csstools/color-helpers": "^1.0.0", + "@csstools/postcss-progressive-custom-properties": "^2.0.0", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">= 0.4" + "node": "^14 || ^16 || >=18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/array-union": { + "node_modules/@csstools/postcss-progressive-custom-properties": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-2.1.0.tgz", + "integrity": "sha512-tRX1rinsXajZlc4WiU7s9Y6O9EdSHScT997zDsvDUjQ1oZL2nvnL6Bt0s9KyQZZTdC3lrG2PIdBqdOIWXSEPlQ==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, "engines": { - "node": ">=8" + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/array.prototype.flat": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", - "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "node_modules/@csstools/postcss-scope-pseudo-class": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-scope-pseudo-class/-/postcss-scope-pseudo-class-2.0.2.tgz", + "integrity": "sha512-6Pvo4uexUCXt+Hz5iUtemQAcIuCYnL+ePs1khFR6/xPgC92aQLJ0zGHonWoewiBE+I++4gXK3pr+R1rlOFHe5w==", + "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" + "postcss-selector-parser": "^6.0.10" }, "engines": { - "node": ">= 0.4" + "node": "^14 || ^16 || >=18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "node_modules/@csstools/postcss-stepped-value-functions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-2.0.1.tgz", + "integrity": "sha512-VimD+M69GsZF/XssivjUwo6jXLgi86ar/gRSH7bautnCULSLxCr/HuY32N4rLRUr7qWF8oF/JTv06ceb66Q1jA==", + "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">= 0.4" + "node": "^14 || ^16 || >=18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", - "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", + "node_modules/@csstools/postcss-text-decoration-shorthand": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-2.2.1.tgz", + "integrity": "sha512-Ow6/cWWdjjVvA83mkm3kLRvvWsbzoe1AbJCxkpC+c9ibUjyS8pifm+LpZslQUKcxRVQ69ztKHDBEbFGTDhNeUw==", + "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.1.3" + "@csstools/color-helpers": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==" - }, - "node_modules/autoprefixer": { - "version": "10.4.13", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", - "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==", + "node_modules/@csstools/postcss-trigonometric-functions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-2.0.1.tgz", + "integrity": "sha512-uGmmVWGHozyWe6+I4w321fKUC034OB1OYW0ZP4ySHA23n+r9y93K+1yrmW+hThpSfApKhaWySoD4I71LLlFUYQ==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - } - ], "dependencies": { - "browserslist": "^4.21.4", - "caniuse-lite": "^1.0.30001426", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", "postcss-value-parser": "^4.2.0" }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, "engines": { - "node": "^10 || ^12 || >=14" + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" }, "peerDependencies": { - "postcss": "^8.1.0" + "postcss": "^8.4" } }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "node_modules/@csstools/postcss-unset-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-2.0.1.tgz", + "integrity": "sha512-oJ9Xl29/yU8U7/pnMJRqAZd4YXNCfGEdcP4ywREuqm/xMqcgDNDppYRoCGDt40aaZQIEKBS79LytUDN/DHf0Ew==", + "dev": true, "engines": { - "node": ">= 0.4" + "node": "^14 || ^16 || >=18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/axe-core": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.6.3.tgz", - "integrity": "sha512-/BQzOX780JhsxDnPpH4ZiyrJAzcd8AfzFPkv+89veFSr1rcMjuq2JDCwypKaPeB6ljHp9KjXhPpjgCvQlWYuqg==", + "node_modules/@csstools/selector-specificity": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.1.1.tgz", + "integrity": "sha512-jwx+WCqszn53YHOfvFMJJRd/B2GqkCBt+1MJSG6o5/s8+ytHMvDZXsJgUEWLk12UnLd7HYKac4BYU5i/Ron1Cw==", + "dev": true, "engines": { - "node": ">=4" + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4", + "postcss-selector-parser": "^6.0.10" } }, - "node_modules/axobject-query": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz", - "integrity": "sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==", + "node_modules/@emotion/is-prop-valid": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", + "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", + "optional": true, "dependencies": { - "deep-equal": "^2.0.5" + "@emotion/memoize": "0.7.4" } }, - "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==" + "node_modules/@emotion/memoize": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", + "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==", + "optional": true }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "node_modules/@emotion/stylis": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz", + "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==" + }, + "node_modules/@emotion/unitless": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", + "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" + }, + "node_modules/@eslint/eslintrc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", + "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, "engines": { - "node": ">=8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "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==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "node_modules/@graphql-typed-document-node/core": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.1.1.tgz", + "integrity": "sha512-NQ17ii0rK1b34VZonlmT2QMJFI70m0TRwbknO/ihlbatXyaktDhN/98vBiUU6kNBPljqGqyIrl2T4nY2RpFANg==", + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", + "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" }, "engines": { - "node": ">=8" + "node": ">=10.10.0" } }, - "node_modules/browserslist": { - "version": "4.21.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "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.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" - }, - "bin": { - "browserslist": "cli.js" - }, "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "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==", "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=6.0.0" } }, - "node_modules/callsites": { + "node_modules/@jridgewell/resolve-uri": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", "engines": { - "node": ">=6" + "node": ">=6.0.0" } }, - "node_modules/camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "dev": true, + "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==", "engines": { - "node": ">= 6" + "node": ">=6.0.0" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001456", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001456.tgz", - "integrity": "sha512-XFHJY5dUgmpMV25UqaD4kVq2LsiaU5rS8fb0f17pCoXQiQslzmFgnfOxfvo1bTpTqf7dwG/N/05CnLCnOEKmzA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - } - ] + "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==" }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" } }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], + "node_modules/@motionone/animation": { + "version": "10.15.1", + "resolved": "https://registry.npmjs.org/@motionone/animation/-/animation-10.15.1.tgz", + "integrity": "sha512-mZcJxLjHor+bhcPuIFErMDNyrdb2vJur8lSfMCsuCB4UyV8ILZLvK+t+pg56erv8ud9xQGK/1OGPt10agPrCyQ==", "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "@motionone/easing": "^10.15.1", + "@motionone/types": "^10.15.1", + "@motionone/utils": "^10.15.1", + "tslib": "^2.3.1" } }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, + "node_modules/@motionone/dom": { + "version": "10.15.5", + "resolved": "https://registry.npmjs.org/@motionone/dom/-/dom-10.15.5.tgz", + "integrity": "sha512-Xc5avlgyh3xukU9tydh9+8mB8+2zAq+WlLsC3eEIp7Ax7DnXgY7Bj/iv0a4X2R9z9ZFZiaXK3BO0xMYHKbAAdA==", "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" + "@motionone/animation": "^10.15.1", + "@motionone/generators": "^10.15.1", + "@motionone/types": "^10.15.1", + "@motionone/utils": "^10.15.1", + "hey-listen": "^1.0.8", + "tslib": "^2.3.1" } }, - "node_modules/client-only": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", - "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" - }, - "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==", + "node_modules/@motionone/easing": { + "version": "10.15.1", + "resolved": "https://registry.npmjs.org/@motionone/easing/-/easing-10.15.1.tgz", + "integrity": "sha512-6hIHBSV+ZVehf9dcKZLT7p5PEKHGhDwky2k8RKkmOvUoYP3S+dXsKupyZpqx5apjd9f+php4vXk4LuS+ADsrWw==", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "@motionone/utils": "^10.15.1", + "tslib": "^2.3.1" } }, - "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==" + "node_modules/@motionone/generators": { + "version": "10.15.1", + "resolved": "https://registry.npmjs.org/@motionone/generators/-/generators-10.15.1.tgz", + "integrity": "sha512-67HLsvHJbw6cIbLA/o+gsm7h+6D4Sn7AUrB/GPxvujse1cGZ38F5H7DzoH7PhX+sjvtDnt2IhFYF2Zp1QTMKWQ==", + "dependencies": { + "@motionone/types": "^10.15.1", + "@motionone/utils": "^10.15.1", + "tslib": "^2.3.1" + } }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "node_modules/@motionone/types": { + "version": "10.15.1", + "resolved": "https://registry.npmjs.org/@motionone/types/-/types-10.15.1.tgz", + "integrity": "sha512-iIUd/EgUsRZGrvW0jqdst8st7zKTzS9EsKkP+6c6n4MPZoQHwiHuVtTQLD6Kp0bsBLhNzKIBlHXponn/SDT4hA==" }, - "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==", + "node_modules/@motionone/utils": { + "version": "10.15.1", + "resolved": "https://registry.npmjs.org/@motionone/utils/-/utils-10.15.1.tgz", + "integrity": "sha512-p0YncgU+iklvYr/Dq4NobTRdAPv9PveRDUXabPEeOjBLSO/1FNB2phNTZxOxpi1/GZwYpAoECEa0Wam+nsmhSw==", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" + "@motionone/types": "^10.15.1", + "hey-listen": "^1.0.8", + "tslib": "^2.3.1" } }, - "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==", + "node_modules/@next/env": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/env/-/env-13.1.6.tgz", + "integrity": "sha512-s+W9Fdqh5MFk6ECrbnVmmAOwxKQuhGMT7xXHrkYIBMBcTiOqNWhv5KbJIboKR5STXxNXl32hllnvKaffzFaWQg==" + }, + "node_modules/@next/eslint-plugin-next": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.1.6.tgz", + "integrity": "sha512-o7cauUYsXjzSJkay8wKjpKJf2uLzlggCsGUkPu3lP09Pv97jYlekTC20KJrjQKmSv5DXV0R/uks2ZXhqjNkqAw==", "dev": true, - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" + "dependencies": { + "glob": "7.1.7" } }, - "node_modules/csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" - }, - "node_modules/damerau-levenshtein": { - "version": "1.0.8", + "node_modules/@next/swc-android-arm-eabi": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.1.6.tgz", + "integrity": "sha512-F3/6Z8LH/pGlPzR1AcjPFxx35mPqjE5xZcf+IL+KgbW9tMkp7CYi1y7qKrEWU7W4AumxX/8OINnDQWLiwLasLQ==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-android-arm64": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-13.1.6.tgz", + "integrity": "sha512-cMwQjnB8vrYkWyK/H0Rf2c2pKIH4RGjpKUDvbjVAit6SbwPDpmaijLio0LWFV3/tOnY6kvzbL62lndVA0mkYpw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.1.6.tgz", + "integrity": "sha512-KKRQH4DDE4kONXCvFMNBZGDb499Hs+xcFAwvj+rfSUssIDrZOlyfJNy55rH5t2Qxed1e4K80KEJgsxKQN1/fyw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.1.6.tgz", + "integrity": "sha512-/uOky5PaZDoaU99ohjtNcDTJ6ks/gZ5ykTQDvNZDjIoCxFe3+t06bxsTPY6tAO6uEAw5f6vVFX5H5KLwhrkZCA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-freebsd-x64": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.1.6.tgz", + "integrity": "sha512-qaEALZeV7to6weSXk3Br80wtFQ7cFTpos/q+m9XVRFggu+8Ib895XhMWdJBzew6aaOcMvYR6KQ6JmHA2/eMzWw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm-gnueabihf": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.1.6.tgz", + "integrity": "sha512-OybkbC58A1wJ+JrJSOjGDvZzrVEQA4sprJejGqMwiZyLqhr9Eo8FXF0y6HL+m1CPCpPhXEHz/2xKoYsl16kNqw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.1.6.tgz", + "integrity": "sha512-yCH+yDr7/4FDuWv6+GiYrPI9kcTAO3y48UmaIbrKy8ZJpi7RehJe3vIBRUmLrLaNDH3rY1rwoHi471NvR5J5NQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.1.6.tgz", + "integrity": "sha512-ECagB8LGX25P9Mrmlc7Q/TQBb9rGScxHbv/kLqqIWs2fIXy6Y/EiBBiM72NTwuXUFCNrWR4sjUPSooVBJJ3ESQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.1.6.tgz", + "integrity": "sha512-GT5w2mruk90V/I5g6ScuueE7fqj/d8Bui2qxdw6lFxmuTgMeol5rnzAv4uAoVQgClOUO/MULilzlODg9Ib3Y4Q==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.1.6.tgz", + "integrity": "sha512-keFD6KvwOPzmat4TCnlnuxJCQepPN+8j3Nw876FtULxo8005Y9Ghcl7ACcR8GoiKoddAq8gxNBrpjoxjQRHeAQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.1.6.tgz", + "integrity": "sha512-OwertslIiGQluFvHyRDzBCIB07qJjqabAmINlXUYt7/sY7Q7QPE8xVi5beBxX/rxTGPIbtyIe3faBE6Z2KywhQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-ia32-msvc": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.1.6.tgz", + "integrity": "sha512-g8zowiuP8FxUR9zslPmlju7qYbs2XBtTLVSxVikPtUDQedhcls39uKYLvOOd1JZg0ehyhopobRoH1q+MHlIN/w==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.1.6.tgz", + "integrity": "sha512-Ls2OL9hi3YlJKGNdKv8k3X/lLgc3VmLG3a/DeTkAd+lAituJp8ZHmRmm9f9SL84fT3CotlzcgbdaCDfFwFA6bA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgr/utils": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.3.1.tgz", + "integrity": "sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "is-glob": "^4.0.3", + "open": "^8.4.0", + "picocolors": "^1.0.0", + "tiny-glob": "^0.2.9", + "tslib": "^2.4.0" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz", + "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==", + "dev": true + }, + "node_modules/@swc/helpers": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.14.tgz", + "integrity": "sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "node_modules/@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + }, + "node_modules/@types/react": { + "version": "18.0.28", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.28.tgz", + "integrity": "sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew==", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.52.0.tgz", + "integrity": "sha512-e2KiLQOZRo4Y0D/b+3y08i3jsekoSkOYStROYmPUnGMEoA0h+k2qOH5H6tcjIc68WDvGwH+PaOrP1XRzLJ6QlA==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.52.0", + "@typescript-eslint/types": "5.52.0", + "@typescript-eslint/typescript-estree": "5.52.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.52.0.tgz", + "integrity": "sha512-AR7sxxfBKiNV0FWBSARxM8DmNxrwgnYMPwmpkC1Pl1n+eT8/I2NAUPuwDy/FmDcC6F8pBfmOcaxcxRHspgOBMw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.52.0", + "@typescript-eslint/visitor-keys": "5.52.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.52.0.tgz", + "integrity": "sha512-oV7XU4CHYfBhk78fS7tkum+/Dpgsfi91IIDy7fjCyq2k6KB63M6gMC0YIvy+iABzmXThCRI6xpCEyVObBdWSDQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.52.0.tgz", + "integrity": "sha512-WeWnjanyEwt6+fVrSR0MYgEpUAuROxuAH516WPjUblIrClzYJj0kBbjdnbQXLpgAN8qbEuGywiQsXUVDiAoEuQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.52.0", + "@typescript-eslint/visitor-keys": "5.52.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.52.0.tgz", + "integrity": "sha512-qMwpw6SU5VHCPr99y274xhbm+PRViK/NATY6qzt+Et7+mThGuFSl/ompj2/hrBlRP/kq+BFdgagnOSgw9TB0eA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.52.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@wry/context": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@wry/context/-/context-0.7.0.tgz", + "integrity": "sha512-LcDAiYWRtwAoSOArfk7cuYvFXytxfVrdX7yxoUmK7pPITLk5jYh2F8knCwS7LjgYL8u1eidPlKKV6Ikqq0ODqQ==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@wry/equality": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@wry/equality/-/equality-0.5.3.tgz", + "integrity": "sha512-avR+UXdSrsF2v8vIqIgmeTY0UR91UT+IyablCyKe/uk22uOJ8fusKZnH9JH9e1/EtLeNJBtagNmL3eJdnOV53g==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@wry/trie": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@wry/trie/-/trie-0.3.2.tgz", + "integrity": "sha512-yRTyhWSls2OY/pYLfwff867r8ekooZ4UI+/gxot5Wj8EFwSf2rG+n+Mo/6LoLQm1TKA4GRj2+LCpbfS937dClQ==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "dependencies": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "node_modules/acorn-node/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "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/algoliasearch": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.14.3.tgz", + "integrity": "sha512-GZTEuxzfWbP/vr7ZJfGzIl8fOsoxN916Z6FY2Egc9q2TmZ6hvq5KfAxY89pPW01oW/2HDEKA8d30f9iAH9eXYg==", + "dependencies": { + "@algolia/cache-browser-local-storage": "4.14.3", + "@algolia/cache-common": "4.14.3", + "@algolia/cache-in-memory": "4.14.3", + "@algolia/client-account": "4.14.3", + "@algolia/client-analytics": "4.14.3", + "@algolia/client-common": "4.14.3", + "@algolia/client-personalization": "4.14.3", + "@algolia/client-search": "4.14.3", + "@algolia/logger-common": "4.14.3", + "@algolia/logger-console": "4.14.3", + "@algolia/requester-browser-xhr": "4.14.3", + "@algolia/requester-common": "4.14.3", + "@algolia/requester-node-http": "4.14.3", + "@algolia/transporter": "4.14.3" + } + }, + "node_modules/algoliasearch-helper": { + "version": "3.11.3", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.11.3.tgz", + "integrity": "sha512-TbaEvLwiuGygHQIB8y+OsJKQQ40+JKUua5B91X66tMUHyyhbNHvqyr0lqd3wCoyKx7WybyQrC0WJvzoIeh24Aw==", + "dependencies": { + "@algolia/events": "^4.0.1" + }, + "peerDependencies": { + "algoliasearch": ">= 3.1 < 6" + } + }, + "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/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "dev": true, + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "node_modules/array-includes": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", + "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", + "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", + "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", + "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.1.3" + } + }, + "node_modules/ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", + "dev": true + }, + "node_modules/autoprefixer": { + "version": "10.4.13", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", + "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + ], + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-lite": "^1.0.30001426", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axe-core": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.6.3.tgz", + "integrity": "sha512-/BQzOX780JhsxDnPpH4ZiyrJAzcd8AfzFPkv+89veFSr1rcMjuq2JDCwypKaPeB6ljHp9KjXhPpjgCvQlWYuqg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/axobject-query": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz", + "integrity": "sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==", + "dev": true, + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "node_modules/babel-plugin-styled-components": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-2.0.7.tgz", + "integrity": "sha512-i7YhvPgVqRKfoQ66toiZ06jPNA3p6ierpfUuEWxNF+fV27Uv5gxBkf8KZLHUCc1nFA9j6+80pYoIpqCeyW3/bA==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.0", + "@babel/helper-module-imports": "^7.16.0", + "babel-plugin-syntax-jsx": "^6.18.0", + "lodash": "^4.17.11", + "picomatch": "^2.3.0" + }, + "peerDependencies": { + "styled-components": ">= 2" + } + }, + "node_modules/babel-plugin-syntax-jsx": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", + "integrity": "sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw==" + }, + "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/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", + "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/camelize": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", + "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001456", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001456.tgz", + "integrity": "sha512-XFHJY5dUgmpMV25UqaD4kVq2LsiaU5rS8fb0f17pCoXQiQslzmFgnfOxfvo1bTpTqf7dwG/N/05CnLCnOEKmzA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] + }, + "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/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/classnames": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz", + "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==" + }, + "node_modules/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" + }, + "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/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/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-blank-pseudo": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-5.0.2.tgz", + "integrity": "sha512-aCU4AZ7uEcVSUzagTlA9pHciz7aWPKA/YzrEkpdSopJ2pvhIxiQ5sYeMz1/KByxlIo4XBdvMNJAVKMg/GRnhfw==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-color-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", + "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/css-has-pseudo": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-5.0.2.tgz", + "integrity": "sha512-q+U+4QdwwB7T9VEW/LyO6CFrLAeLqOykC5mDqJXc7aKZAhDbq7BvGT13VGJe+IwBfdN2o3Xdw2kJ5IxwV1Sc9Q==", + "dev": true, + "dependencies": { + "@csstools/selector-specificity": "^2.0.1", + "postcss-selector-parser": "^6.0.10", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-prefers-color-scheme": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-8.0.2.tgz", + "integrity": "sha512-OvFghizHJ45x7nsJJUSYLyQNTzsCU8yWjxAc/nhPQg1pbs18LMoET8N3kOweFDPy0JV0OSXN2iqRFhPBHYOeMA==", + "dev": true, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-to-react-native": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz", + "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==", + "dependencies": { + "camelize": "^1.0.0", + "css-color-keywords": "^1.0.0", + "postcss-value-parser": "^4.0.2" + } + }, + "node_modules/cssdb": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.4.1.tgz", + "integrity": "sha512-0Q8NOMpXJ3iTDDbUv9grcmQAfdDx4qz+fN/+Md2FGbevT+6+bJNQ2LjB2YIUlLbpBTM32idU1Sb+tb/uGt6/XQ==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + }, + "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/csstype": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==" + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-equal": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.0.tgz", + "integrity": "sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "es-get-iterator": "^1.1.2", + "get-intrinsic": "^1.1.3", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.1", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "dev": true, + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/defined": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", + "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/detective": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", + "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", + "dev": true, + "dependencies": { + "acorn-node": "^1.8.2", + "defined": "^1.0.0", + "minimist": "^1.2.6" + }, + "bin": { + "detective": "bin/detective.js" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.302", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.302.tgz", + "integrity": "sha512-Uk7C+7aPBryUR1Fwvk9VmipBcN9fVsqBO57jV2ZjTm+IZ6BMNqu7EDVEg2HxCNufk6QcWlFsBkhQyQroB2VWKw==" }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/enhanced-resolve": { + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", + "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/es-abstract": { + "version": "1.21.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz", + "integrity": "sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.3", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.4", + "is-array-buffer": "^3.0.1", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.2", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.34.0.tgz", + "integrity": "sha512-1Z8iFsucw+7kSqXNZVslXS8Ioa4u2KM7GPwuKtkTFAqZ/cHMcEaR+1+Br0wLlot49cNxIiZk5wp8EAbPcYZxTg==", + "dev": true, + "dependencies": { + "@eslint/eslintrc": "^1.4.1", + "@humanwhocodes/config-array": "^0.11.8", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.4.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-next": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.1.6.tgz", + "integrity": "sha512-0cg7h5wztg/SoLAlxljZ0ZPUQ7i6QKqRiP4M2+MgTZtxWwNKb2JSwNc18nJ6/kXBI6xYvPraTbQSIhAuVw6czw==", + "dev": true, + "dependencies": { + "@next/eslint-plugin-next": "13.1.6", + "@rushstack/eslint-patch": "^1.1.3", + "@typescript-eslint/parser": "^5.42.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^3.5.2", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.31.7", + "eslint-plugin-react-hooks": "^4.5.0" + }, + "peerDependencies": { + "eslint": "^7.23.0 || ^8.0.0", + "typescript": ">=3.3.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", + "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.11.0", + "resolve": "^1.22.1" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-typescript": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.3.tgz", + "integrity": "sha512-njRcKYBc3isE42LaTcJNVANR3R99H9bAxBDMNDr2W7yq5gYPxbU3MkdhsQukxZ/Xg9C2vcyLlDsbKfRDg0QvCQ==", + "dev": true, "dependencies": { - "ms": "2.1.2" + "debug": "^4.3.4", + "enhanced-resolve": "^5.10.0", + "get-tsconfig": "^4.2.0", + "globby": "^13.1.2", + "is-core-module": "^2.10.0", + "is-glob": "^4.0.3", + "synckit": "^0.8.4" }, "engines": { - "node": ">=6.0" + "node": "^14.18.0 || >=16.0.0" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*" } }, - "node_modules/deep-equal": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.0.tgz", - "integrity": "sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==", + "node_modules/eslint-import-resolver-typescript/node_modules/globby": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz", + "integrity": "sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==", + "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "es-get-iterator": "^1.1.2", - "get-intrinsic": "^1.1.3", - "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.1", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "isarray": "^2.0.5", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "node_modules/eslint-import-resolver-typescript/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "node_modules/eslint-module-utils": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", + "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", + "dev": true, "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" + "debug": "^3.2.7" }, "engines": { - "node": ">= 0.4" + "node": ">=4" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependenciesMeta": { + "eslint": { + "optional": true + } } }, - "node_modules/defined": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", - "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "ms": "^2.1.1" } }, - "node_modules/detective": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", - "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", + "node_modules/eslint-plugin-import": { + "version": "2.27.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", + "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", "dev": true, "dependencies": { - "acorn-node": "^1.8.2", - "defined": "^1.0.0", - "minimist": "^1.2.6" + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.7.4", + "has": "^1.0.3", + "is-core-module": "^2.11.0", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.6", + "resolve": "^1.22.1", + "semver": "^6.3.0", + "tsconfig-paths": "^3.14.1" }, - "bin": { - "detective": "bin/detective.js" + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" }, "engines": { - "node": ">=0.8.0" + "node": ">=0.10.0" } }, - "node_modules/didyoumean": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "dev": true + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", + "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", + "dev": true, "dependencies": { - "path-type": "^4.0.0" + "@babel/runtime": "^7.20.7", + "aria-query": "^5.1.3", + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "ast-types-flow": "^0.0.7", + "axe-core": "^4.6.2", + "axobject-query": "^3.1.1", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "has": "^1.0.3", + "jsx-ast-utils": "^3.3.3", + "language-tags": "=1.0.5", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "semver": "^6.3.0" }, "engines": { - "node": ">=8" + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, - "node_modules/dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true + "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "node_modules/eslint-plugin-react": { + "version": "7.32.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz", + "integrity": "sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==", + "dev": true, "dependencies": { - "esutils": "^2.0.2" + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "array.prototype.tosorted": "^1.1.1", + "doctrine": "^2.1.0", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "object.hasown": "^1.1.2", + "object.values": "^1.1.6", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.4", + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.8" }, "engines": { - "node": ">=6.0.0" + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" } }, - "node_modules/electron-to-chromium": { - "version": "1.4.302", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.302.tgz", - "integrity": "sha512-Uk7C+7aPBryUR1Fwvk9VmipBcN9fVsqBO57jV2ZjTm+IZ6BMNqu7EDVEg2HxCNufk6QcWlFsBkhQyQroB2VWKw==", - "dev": true - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "node_modules/enhanced-resolve": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", - "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" + "esutils": "^2.0.2" }, "engines": { - "node": ">=10.13.0" + "node": ">=0.10.0" } }, - "node_modules/es-abstract": { - "version": "1.21.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz", - "integrity": "sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==", + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", + "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.4", - "is-array-buffer": "^3.0.1", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, - "engines": { - "node": ">= 0.4" + "bin": { + "resolve": "bin/resolve" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-get-iterator": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", - "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "is-arguments": "^1.1.1", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.7", - "isarray": "^2.0.5", - "stop-iteration-iterator": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "dependencies": { - "has": "^1.0.3" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "eslint-visitor-keys": "^2.0.0" }, "engines": { - "node": ">= 0.4" + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" } }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, "engines": { - "node": ">=10" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/espree": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "dev": true, + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint": { - "version": "8.34.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.34.0.tgz", - "integrity": "sha512-1Z8iFsucw+7kSqXNZVslXS8Ioa4u2KM7GPwuKtkTFAqZ/cHMcEaR+1+Br0wLlot49cNxIiZk5wp8EAbPcYZxTg==", + "node_modules/esquery": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.2.tgz", + "integrity": "sha512-JVSoLdTlTDkmjFmab7H/9SL9qGSyjElT3myyKp7krqjVFQCDLmj1QFaCLRFBszBKI0XVZaiiXvuPIX3ZwHe1Ng==", + "dev": true, "dependencies": { - "@eslint/eslintrc": "^1.4.1", - "@humanwhocodes/config-array": "^0.11.8", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" + "estraverse": "^5.1.0" }, - "bin": { - "eslint": "bin/eslint.js" + "engines": { + "node": ">=0.10" + } + }, + "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": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=4.0" + } + }, + "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/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/eslint-config-next": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.1.6.tgz", - "integrity": "sha512-0cg7h5wztg/SoLAlxljZ0ZPUQ7i6QKqRiP4M2+MgTZtxWwNKb2JSwNc18nJ6/kXBI6xYvPraTbQSIhAuVw6czw==", + "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-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, "dependencies": { - "@next/eslint-plugin-next": "13.1.6", - "@rushstack/eslint-patch": "^1.1.3", - "@typescript-eslint/parser": "^5.42.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-import-resolver-typescript": "^3.5.2", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.31.7", - "eslint-plugin-react-hooks": "^4.5.0" - }, - "peerDependencies": { - "eslint": "^7.23.0 || ^8.0.0", - "typescript": ">=3.3.1" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "engines": { + "node": ">=8.6.0" } }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", - "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.11.0", - "resolve": "^1.22.1" + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "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/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, "dependencies": { - "ms": "^2.1.1" + "reusify": "^1.0.4" } }, - "node_modules/eslint-import-resolver-typescript": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.3.tgz", - "integrity": "sha512-njRcKYBc3isE42LaTcJNVANR3R99H9bAxBDMNDr2W7yq5gYPxbU3MkdhsQukxZ/Xg9C2vcyLlDsbKfRDg0QvCQ==", + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, "dependencies": { - "debug": "^4.3.4", - "enhanced-resolve": "^5.10.0", - "get-tsconfig": "^4.2.0", - "globby": "^13.1.2", - "is-core-module": "^2.10.0", - "is-glob": "^4.0.3", - "synckit": "^0.8.4" + "flat-cache": "^3.0.4" }, "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" }, - "peerDependencies": { - "eslint": "*", - "eslint-plugin-import": "*" + "engines": { + "node": ">=8" } }, - "node_modules/eslint-import-resolver-typescript/node_modules/globby": { - "version": "13.1.3", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz", - "integrity": "sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==", + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-import-resolver-typescript/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, "engines": { - "node": ">=12" + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "engines": { + "node": "*" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "patreon", + "url": "https://www.patreon.com/infusion" } }, - "node_modules/eslint-module-utils": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", - "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", + "node_modules/framer-motion": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-9.0.4.tgz", + "integrity": "sha512-lZ1+2/WBn8iYRYmeEFpu/X2fI1GNwJL+X21EpnWwKP3vkJsnWBXZF5kHF29wIPk9sBU2xDIpDm9SAVo206bp9A==", "dependencies": { - "debug": "^3.2.7" + "@motionone/dom": "^10.15.3", + "hey-listen": "^1.0.8", + "tslib": "^2.4.0" }, - "engines": { - "node": ">=4" + "optionalDependencies": { + "@emotion/is-prop-valid": "^0.8.2" }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" } }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" + "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/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/eslint-plugin-import": { - "version": "2.27.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", - "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", + "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/function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "array.prototype.flatmap": "^1.3.1", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.7", - "eslint-module-utils": "^2.7.4", - "has": "^1.0.3", - "is-core-module": "^2.11.0", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.values": "^1.1.6", - "resolve": "^1.22.1", - "semver": "^6.3.0", - "tsconfig-paths": "^3.14.1" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" }, "engines": { - "node": ">=4" + "node": ">= 0.4" }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/get-intrinsic": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "dev": true, "dependencies": { - "ms": "^2.1.1" + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, "dependencies": { - "esutils": "^2.0.2" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" + "node_modules/get-tsconfig": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.4.0.tgz", + "integrity": "sha512-0Gdjo/9+FzsYhXCEFueo2aY1z1tpXrxWZzP7k8ul9qt1U5o8rYJwTJYmaeHdrVosYIVYkOy2iwCJ9FdpocJhPQ==", + "dev": true, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", - "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", + "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": { - "@babel/runtime": "^7.20.7", - "aria-query": "^5.1.3", - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.6.2", - "axobject-query": "^3.1.1", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.3.3", - "language-tags": "=1.0.5", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "semver": "^6.3.0" + "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": ">=4.0" + "node": "*" }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" } }, - "node_modules/eslint-plugin-react": { - "version": "7.32.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz", - "integrity": "sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==", + "node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", - "doctrine": "^2.1.0", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.8" + "type-fest": "^0.20.2" }, "engines": { - "node": ">=4" + "node": ">=8" }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "node_modules/globalyzer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", + "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", + "dev": true + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, "dependencies": { - "esutils": "^2.0.2" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "node_modules/globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "dev": true + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "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" + "get-intrinsic": "^1.1.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } + "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/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "node_modules/graphql": { + "version": "16.6.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.6.0.tgz", + "integrity": "sha512-KPIBPDlW7NxrbT/eh4qPXz5FiFdL5UbaA0XUNz2Rp3Z3hqBSkbj0GVjwFDztsWVauZUWsbKHgMg++sk8UX0bkw==", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" } }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "node_modules/graphql-tag": { + "version": "2.12.6", + "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz", + "integrity": "sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==", "dependencies": { - "eslint-visitor-keys": "^2.0.0" + "tslib": "^2.1.0" }, "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" + "node": ">=10" }, "peerDependencies": { - "eslint": ">=5" + "graphql": "^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "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": ">=10" + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "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": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=8" } }, - "node_modules/espree": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", - "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, "dependencies": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" + "get-intrinsic": "^1.1.1" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">= 0.4" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/esquery": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.2.tgz", - "integrity": "sha512-JVSoLdTlTDkmjFmab7H/9SL9qGSyjElT3myyKp7krqjVFQCDLmj1QFaCLRFBszBKI0XVZaiiXvuPIX3ZwHe1Ng==", - "dependencies": { - "estraverse": "^5.1.0" - }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, "engines": { - "node": ">=0.10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, "dependencies": { - "estraverse": "^5.2.0" + "has-symbols": "^1.0.2" }, "engines": { - "node": ">=4.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "engines": { - "node": ">=4.0" + "node_modules/hey-listen": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/hey-listen/-/hey-listen-1.0.8.tgz", + "integrity": "sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==" + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" } }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 4" } }, - "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==" - }, - "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "engines": { - "node": ">=8.6.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, + "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": ">= 6" + "node": ">=0.8.19" } }, - "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==" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "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": { - "reusify": "^1.0.4" + "once": "^1.3.0", + "wrappy": "1" } }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } + "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/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "node_modules/internal-slot": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "dev": true, "dependencies": { - "to-regex-range": "^5.0.1" + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" }, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "node_modules/is-array-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz", + "integrity": "sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==", + "dev": true, "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-typed-array": "^1.1.10" }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dependencies": { - "is-callable": "^1.1.3" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, - "engines": { - "node": "*" + "dependencies": { + "has-bigints": "^1.0.1" }, "funding": { - "type": "patreon", - "url": "https://www.patreon.com/infusion" + "url": "https://github.com/sponsors/ljharb" } }, - "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==" - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], + "dependencies": { + "binary-extensions": "^2.0.0" + }, "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": ">=8" } }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -1858,34 +3560,37 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "node_modules/is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" + "has": "^1.0.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -1894,65 +3599,56 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-tsconfig": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.4.0.tgz", - "integrity": "sha512-0Gdjo/9+FzsYhXCEFueo2aY1z1tpXrxWZzP7k8ul9qt1U5o8rYJwTJYmaeHdrVosYIVYkOy2iwCJ9FdpocJhPQ==", - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, - "node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "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" + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" }, "engines": { - "node": "*" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dependencies": { - "is-glob": "^4.0.3" - }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, "engines": { - "node": ">=10.13.0" + "node": ">=0.10.0" } }, - "node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, "dependencies": { - "type-fest": "^0.20.2" + "is-extglob": "^2.1.1" }, "engines": { - "node": ">=8" - }, + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dependencies": { - "define-properties": "^1.1.3" - }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -1960,98 +3656,84 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/globalyzer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", - "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==" - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.12.0" } }, - "node_modules/globrex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", - "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==" - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, "dependencies": { - "get-intrinsic": "^1.1.3" + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "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==" - }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, "dependencies": { - "function-bind": "^1.1.1" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "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==", - "engines": { - "node": ">=8" + "node_modules/is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, "dependencies": { - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.2" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -2059,10 +3741,14 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, "engines": { "node": ">= 0.4" }, @@ -2070,12 +3756,17 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "node_modules/is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dev": true, "dependencies": { - "has-symbols": "^1.0.2" + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -2084,302 +3775,452 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "engines": { - "node": ">= 4" + "node_modules/is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "call-bind": "^1.0.2" }, - "engines": { - "node": ">=6" + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, "engines": { - "node": ">=0.8.19" + "node": ">=8" } }, - "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==", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "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/js-sdsl": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", + "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "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==" }, - "node_modules/internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, "dependencies": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" + "argparse": "^2.0.1" }, - "engines": { - "node": ">= 0.4" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" }, "engines": { - "node": ">= 0.4" + "node": ">=4" + } + }, + "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-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "json5": "lib/cli.js" } }, - "node_modules/is-array-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz", - "integrity": "sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==", + "node_modules/jsx-ast-utils": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", + "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", + "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-typed-array": "^1.1.10" + "array-includes": "^3.1.5", + "object.assign": "^4.1.3" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=4.0" } }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "node_modules/language-subtag-registry": { + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", + "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", + "dev": true + }, + "node_modules/language-tags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", + "dev": true, "dependencies": { - "has-bigints": "^1.0.1" + "language-subtag-registry": "~0.3.2" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "node_modules/lilconfig": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", + "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "dependencies": { - "binary-extensions": "^2.0.0" + "p-locate": "^5.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" } }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "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": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "yallist": "^4.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=10" } }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 8" } }, - "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, "dependencies": { - "has": "^1.0.3" + "braces": "^3.0.2", + "picomatch": "^2.3.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=8.6" } }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "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": { - "has-tostringtag": "^1.0.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">= 0.4" - }, + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", "bin": { - "is-docker": "cli.js" + "nanoid": "bin/nanoid.cjs" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/next": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/next/-/next-13.1.6.tgz", + "integrity": "sha512-hHlbhKPj9pW+Cymvfzc15lvhaOZ54l+8sXDXJWm3OBNBzgrVj6hwGPmqqsXg40xO1Leq+kXpllzRPuncpC0Phw==", + "dependencies": { + "@next/env": "13.1.6", + "@swc/helpers": "0.4.14", + "caniuse-lite": "^1.0.30001406", + "postcss": "8.4.14", + "styled-jsx": "5.1.1" + }, + "bin": { + "next": "dist/bin/next" + }, "engines": { - "node": ">=0.10.0" + "node": ">=14.6.0" + }, + "optionalDependencies": { + "@next/swc-android-arm-eabi": "13.1.6", + "@next/swc-android-arm64": "13.1.6", + "@next/swc-darwin-arm64": "13.1.6", + "@next/swc-darwin-x64": "13.1.6", + "@next/swc-freebsd-x64": "13.1.6", + "@next/swc-linux-arm-gnueabihf": "13.1.6", + "@next/swc-linux-arm64-gnu": "13.1.6", + "@next/swc-linux-arm64-musl": "13.1.6", + "@next/swc-linux-x64-gnu": "13.1.6", + "@next/swc-linux-x64-musl": "13.1.6", + "@next/swc-win32-arm64-msvc": "13.1.6", + "@next/swc-win32-ia32-msvc": "13.1.6", + "@next/swc-win32-x64-msvc": "13.1.6" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^6.0.0 || ^7.0.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + } } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "node_modules/next/node_modules/postcss": { + "version": "8.4.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", + "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], "dependencies": { - "is-extglob": "^2.1.1" + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" }, "engines": { - "node": ">=0.10.0" + "node": "^10 || ^12 || >=14" } }, - "node_modules/is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "node_modules/node-releases": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", + "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==" }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", "engines": { - "node": ">=0.12.0" + "node": ">=0.10.0" } }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "node_modules/nprogress": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", + "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==" }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "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==", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 6" } }, - "node_modules/is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "node_modules/object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, "dependencies": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, "dependencies": { - "has-symbols": "^1.0.2" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" }, "engines": { "node": ">= 0.4" @@ -2388,174 +4229,126 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "node_modules/object.entries": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", + "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", + "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "node_modules/object.fromentries": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", + "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", + "dev": true, "dependencies": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "node_modules/object.hasown": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", + "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", + "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "node_modules/object.values": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", + "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "dev": true, "dependencies": { - "is-docker": "^2.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "node_modules/js-sdsl": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", - "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/js-sdsl" - } - }, - "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==" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" + "node": ">= 0.4" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" - }, - "node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "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": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" + "wrappy": "1" } }, - "node_modules/jsx-ast-utils": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", - "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", + "node_modules/open": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.1.tgz", + "integrity": "sha512-/4b7qZNhv6Uhd7jjnREh1NjnPxlTq+XNWPG88Ydkj5AILcA5m3ajvcg57pB24EQjKv0dK62XnDqk9c/hkIG5Kg==", + "dev": true, "dependencies": { - "array-includes": "^3.1.5", - "object.assign": "^4.1.3" + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" }, "engines": { - "node": ">=4.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/language-subtag-registry": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==" - }, - "node_modules/language-tags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", + "node_modules/optimism": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/optimism/-/optimism-0.16.2.tgz", + "integrity": "sha512-zWNbgWj+3vLEjZNIh/okkY2EUfX+vB9TJopzIZwT1xxaMqC5hRLLraePod4c5n4He08xuXNH+zhKFFCu390wiQ==", "dependencies": { - "language-subtag-registry": "~0.3.2" + "@wry/context": "^0.7.0", + "@wry/trie": "^0.3.0" } }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" }, "engines": { "node": ">= 0.8.0" } }, - "node_modules/lilconfig": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", - "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dependencies": { - "p-locate": "^5.0.0" + "yocto-queue": "^0.1.0" }, "engines": { "node": ">=10" @@ -2564,148 +4357,104 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "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==", + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, "dependencies": { - "yallist": "^4.0.0" + "p-limit": "^3.0.2" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, "engines": { - "node": ">= 8" + "node": ">=6" } }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, + "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.6" + "node": ">=8" } }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, + "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": "*" + "node": ">=0.10.0" } }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "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/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "node_modules/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/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "node": ">=8" } }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, - "node_modules/next": { - "version": "13.1.6", - "resolved": "https://registry.npmjs.org/next/-/next-13.1.6.tgz", - "integrity": "sha512-hHlbhKPj9pW+Cymvfzc15lvhaOZ54l+8sXDXJWm3OBNBzgrVj6hwGPmqqsXg40xO1Leq+kXpllzRPuncpC0Phw==", - "dependencies": { - "@next/env": "13.1.6", - "@swc/helpers": "0.4.14", - "caniuse-lite": "^1.0.30001406", - "postcss": "8.4.14", - "styled-jsx": "5.1.1" - }, - "bin": { - "next": "dist/bin/next" - }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "engines": { - "node": ">=14.6.0" - }, - "optionalDependencies": { - "@next/swc-android-arm-eabi": "13.1.6", - "@next/swc-android-arm64": "13.1.6", - "@next/swc-darwin-arm64": "13.1.6", - "@next/swc-darwin-x64": "13.1.6", - "@next/swc-freebsd-x64": "13.1.6", - "@next/swc-linux-arm-gnueabihf": "13.1.6", - "@next/swc-linux-arm64-gnu": "13.1.6", - "@next/swc-linux-arm64-musl": "13.1.6", - "@next/swc-linux-x64-gnu": "13.1.6", - "@next/swc-linux-x64-musl": "13.1.6", - "@next/swc-win32-arm64-msvc": "13.1.6", - "@next/swc-win32-ia32-msvc": "13.1.6", - "@next/swc-win32-x64-msvc": "13.1.6" - }, - "peerDependencies": { - "fibers": ">= 3.1.0", - "node-sass": "^6.0.0 || ^7.0.0", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "sass": "^1.3.0" + "node": ">=8.6" }, - "peerDependenciesMeta": { - "fibers": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/next/node_modules/postcss": { - "version": "8.4.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", - "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss": { + "version": "8.4.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", "funding": [ { "type": "opencollective", @@ -2725,399 +4474,634 @@ "node": "^10 || ^12 || >=14" } }, - "node_modules/node-releases": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", - "dev": true - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "node_modules/postcss-attribute-case-insensitive": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-6.0.2.tgz", + "integrity": "sha512-IRuCwwAAQbgaLhxQdQcIIK0dCVXg3XDUnzgKD8iwdiYdwU4rMWRWyl/W9/0nA4ihVpq5pyALiHB2veBJ0292pw==", "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, "engines": { - "node": ">=0.10.0" + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "node_modules/postcss-clamp": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", + "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "engines": { - "node": ">=0.10.0" + "node": ">=7.6.0" + }, + "peerDependencies": { + "postcss": "^8.4.6" } }, - "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "node_modules/postcss-color-functional-notation": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-5.0.2.tgz", + "integrity": "sha512-M6ygxWOyd6eWf3sd1Lv8xi4SeF4iBPfJvkfMU4ITh8ExJc1qhbvh/U8Cv/uOvBgUVOMDdScvCdlg8+hREQzs7w==", "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">= 0.4" + "node": "^14 || ^16 || >=18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "engines": { - "node": ">= 0.4" + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "node_modules/postcss-color-hex-alpha": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-9.0.2.tgz", + "integrity": "sha512-SfPjgr//VQ/DOCf80STIAsdAs7sbIbxATvVmd+Ec7JvR8onz9pjawhq3BJM3Pie40EE3TyB0P6hft16D33Nlyg==", + "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">= 0.4" + "node": "^14 || ^16 || >=18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" } - }, - "node_modules/object.entries": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", - "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", + }, + "node_modules/postcss-color-rebeccapurple": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-8.0.2.tgz", + "integrity": "sha512-xWf/JmAxVoB5bltHpXk+uGRoGFwu4WDAR7210el+iyvTdqiKpDhtcT8N3edXMoVJY0WHFMrKMUieql/wRNiXkw==", + "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">= 0.4" + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/object.fromentries": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", - "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", + "node_modules/postcss-custom-media": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-9.1.2.tgz", + "integrity": "sha512-osM9g4UKq4XKimAC7RAXroqi3BXpxfwTswAJQiZdrBjWGFGEyxQrY5H2eDWI8F+MEvEUfYDxA8scqi3QWROCSw==", + "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "@csstools/cascade-layer-name-parser": "^1.0.0", + "@csstools/css-parser-algorithms": "^2.0.0", + "@csstools/css-tokenizer": "^2.0.0", + "@csstools/media-query-list-parser": "^2.0.0" }, "engines": { - "node": ">= 0.4" + "node": "^14 || ^16 || >=18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/object.hasown": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", - "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", + "node_modules/postcss-custom-properties": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-13.1.3.tgz", + "integrity": "sha512-15equAsfqtnr7jyzes6vyaGdAiNmKd+50FZ35/E/huBNBt7PgGMSNL/4o765nnNoP2dmaMJklb3FwJf3fdRcpA==", + "dev": true, "dependencies": { - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "@csstools/cascade-layer-name-parser": "^1.0.0", + "@csstools/css-parser-algorithms": "^2.0.0", + "@csstools/css-tokenizer": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "node_modules/postcss-custom-selectors": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-7.1.2.tgz", + "integrity": "sha512-jX7VlE3jrgfBIOfxiGNRFq81xUoHSZhvxhQurzE7ZFRv+bUmMwB7/XnA0nNlts2CwNtbXm4Ozy0ZAYKHlCRmBQ==", + "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "@csstools/cascade-layer-name-parser": "^1.0.0", + "@csstools/css-parser-algorithms": "^2.0.0", + "@csstools/css-tokenizer": "^2.0.0", + "postcss-selector-parser": "^6.0.4" }, "engines": { - "node": ">= 0.4" + "node": "^14 || ^16 || >=18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "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==", + "node_modules/postcss-dir-pseudo-class": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-7.0.2.tgz", + "integrity": "sha512-cMnslilYxBf9k3qejnovrUONZx1rXeUZJw06fgIUBzABJe3D2LiLL5WAER7Imt3nrkaIgG05XZBztueLEf5P8w==", + "dev": true, "dependencies": { - "wrappy": "1" + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/open": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.1.tgz", - "integrity": "sha512-/4b7qZNhv6Uhd7jjnREh1NjnPxlTq+XNWPG88Ydkj5AILcA5m3ajvcg57pB24EQjKv0dK62XnDqk9c/hkIG5Kg==", + "node_modules/postcss-double-position-gradients": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-4.0.2.tgz", + "integrity": "sha512-GXL1RmFREDK4Q9aYvI2RhVrA6a6qqSMQQ5ke8gSH1xgV6exsqbcJpIumC7AOgooH6/WIG3/K/T8xxAiVHy/tJg==", + "dev": true, "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" + "@csstools/postcss-progressive-custom-properties": "^2.0.0", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=12" + "node": "^14 || ^16 || >=18" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "node_modules/postcss-focus-visible": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-8.0.2.tgz", + "integrity": "sha512-f/Vd+EC/GaKElknU59esVcRYr/Y3t1ZAQyL4u2xSOgkDy4bMCmG7VP5cGvj3+BTLNE9ETfEuz2nnt4qkZwTTeA==", + "dev": true, "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "postcss-selector-parser": "^6.0.10" }, "engines": { - "node": ">= 0.8.0" + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "node_modules/postcss-focus-within": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-7.0.2.tgz", + "integrity": "sha512-AHAJ89UQBcqBvFgQJE9XasGuwMNkKsGj4D/f9Uk60jFmEBHpAL14DrnSk3Rj+SwZTr/WUG+mh+Rvf8fid/346w==", + "dev": true, "dependencies": { - "yocto-queue": "^0.1.0" + "postcss-selector-parser": "^6.0.10" }, "engines": { - "node": ">=10" + "node": "^14 || ^16 || >=18" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/p-locate": { + "node_modules/postcss-font-variant": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", + "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", + "dev": true, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-gap-properties": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-4.0.1.tgz", + "integrity": "sha512-V5OuQGw4lBumPlwHWk/PRfMKjaq/LTGR4WDTemIMCaMevArVfCCA9wBJiL1VjDAd+rzuCIlkRoRvDsSiAaZ4Fg==", + "dev": true, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-image-set-function": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-5.0.2.tgz", + "integrity": "sha512-Sszjwo0ubETX0Fi5MvpYzsONwrsjeabjMoc5YqHvURFItXgIu3HdCjcVuVKGMPGzKRhgaknmdM5uVWInWPJmeg==", + "dev": true, "dependencies": { - "p-limit": "^3.0.2" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=10" + "node": "^14 || ^16 || >=18" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "node_modules/postcss-import": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", + "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", + "dev": true, "dependencies": { - "callsites": "^3.0.0" + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" }, "engines": { - "node": ">=6" + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" } }, - "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==", - "engines": { - "node": ">=8" + "node_modules/postcss-initial": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", + "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", + "dev": true, + "peerDependencies": { + "postcss": "^8.0.0" } }, - "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==", + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "dependencies": { + "camelcase-css": "^2.0.1" + }, "engines": { - "node": ">=0.10.0" + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" } }, - "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==", + "node_modules/postcss-lab-function": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-5.1.0.tgz", + "integrity": "sha512-iZApRTNcpc71uTn7PkzjHtj5cmuZpvu6okX4jHnM5OFi2fG97sodjxkq6SpL65xhW0NviQrAMSX97ntyGVRV0w==", + "dev": true, + "dependencies": { + "@csstools/color-helpers": "^1.0.0", + "@csstools/postcss-progressive-custom-properties": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, "engines": { - "node": ">=8" + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "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==" + "node_modules/postcss-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "dev": true, + "dependencies": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "node_modules/postcss-logical": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-6.1.0.tgz", + "integrity": "sha512-qb1+LpClhYjxac8SfOcWotnY3unKZesDqIOm+jnGt8rTl7xaIWpE2bPGZHxflOip1E/4ETo79qlJyRL3yrHn1g==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, "engines": { - "node": ">=8" + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "node_modules/postcss-media-minmax": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", + "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "node_modules/postcss-nested": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz", + "integrity": "sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, "engines": { - "node": ">=8.6" + "node": ">=12.0" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" } }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "node_modules/postcss-nesting": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-11.2.1.tgz", + "integrity": "sha512-E6Jq74Jo/PbRAtZioON54NPhUNJYxVWhwxbweYl1vAoBYuGlDIts5yhtKiZFLvkvwT73e/9nFrW3oMqAtgG+GQ==", "dev": true, + "dependencies": { + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" + }, "engines": { - "node": ">=0.10.0" + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/postcss": { - "version": "8.4.21", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", - "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", + "node_modules/postcss-opacity-percentage": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.3.tgz", + "integrity": "sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A==", "dev": true, "funding": [ { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "type": "kofi", + "url": "https://ko-fi.com/mrcgrtz" }, { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" + "type": "liberapay", + "url": "https://liberapay.com/mrcgrtz" } ], + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-overflow-shorthand": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-4.0.1.tgz", + "integrity": "sha512-HQZ0qi/9iSYHW4w3ogNqVNr2J49DHJAl7r8O2p0Meip38jsdnRPgiDW7r/LlLrrMBMe3KHkvNtAV2UmRVxzLIg==", + "dev": true, "dependencies": { - "nanoid": "^3.3.4", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >=14" + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/postcss-import": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", - "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", + "node_modules/postcss-page-break": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", + "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", + "dev": true, + "peerDependencies": { + "postcss": "^8" + } + }, + "node_modules/postcss-place": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-8.0.1.tgz", + "integrity": "sha512-Ow2LedN8sL4pq8ubukO77phSVt4QyCm35ZGCYXKvRFayAwcpgB0sjNJglDoTuRdUL32q/ZC1VkPBo0AOEr4Uiw==", "dev": true, "dependencies": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=10.0.0" + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" }, "peerDependencies": { - "postcss": "^8.0.0" + "postcss": "^8.4" } }, - "node_modules/postcss-js": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", - "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "node_modules/postcss-preset-env": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-8.0.1.tgz", + "integrity": "sha512-IUbymw0JlUbyVG+I85963PNWgPp3KhnFa1sxU7M/2dGthxV8e297P0VV5W9XcyypoH4hirH2fp1c6fmqh6YnSg==", "dev": true, "dependencies": { - "camelcase-css": "^2.0.1" + "@csstools/postcss-cascade-layers": "^3.0.0", + "@csstools/postcss-color-function": "^2.0.0", + "@csstools/postcss-font-format-keywords": "^2.0.0", + "@csstools/postcss-hwb-function": "^2.0.0", + "@csstools/postcss-ic-unit": "^2.0.0", + "@csstools/postcss-is-pseudo-class": "^3.0.0", + "@csstools/postcss-logical-float-and-clear": "^1.0.0", + "@csstools/postcss-logical-resize": "^1.0.0", + "@csstools/postcss-logical-viewport-units": "^1.0.0", + "@csstools/postcss-media-queries-aspect-ratio-number-values": "^1.0.0", + "@csstools/postcss-nested-calc": "^2.0.0", + "@csstools/postcss-normalize-display-values": "^2.0.0", + "@csstools/postcss-oklab-function": "^2.0.0", + "@csstools/postcss-progressive-custom-properties": "^2.0.0", + "@csstools/postcss-scope-pseudo-class": "^2.0.0", + "@csstools/postcss-stepped-value-functions": "^2.0.0", + "@csstools/postcss-text-decoration-shorthand": "^2.0.0", + "@csstools/postcss-trigonometric-functions": "^2.0.0", + "@csstools/postcss-unset-value": "^2.0.0", + "autoprefixer": "^10.4.13", + "browserslist": "^4.21.4", + "css-blank-pseudo": "^5.0.0", + "css-has-pseudo": "^5.0.0", + "css-prefers-color-scheme": "^8.0.0", + "cssdb": "^7.4.0", + "postcss-attribute-case-insensitive": "^6.0.0", + "postcss-clamp": "^4.1.0", + "postcss-color-functional-notation": "^5.0.0", + "postcss-color-hex-alpha": "^9.0.0", + "postcss-color-rebeccapurple": "^8.0.0", + "postcss-custom-media": "^9.1.0", + "postcss-custom-properties": "^13.1.0", + "postcss-custom-selectors": "^7.1.0", + "postcss-dir-pseudo-class": "^7.0.0", + "postcss-double-position-gradients": "^4.0.0", + "postcss-focus-visible": "^8.0.0", + "postcss-focus-within": "^7.0.0", + "postcss-font-variant": "^5.0.0", + "postcss-gap-properties": "^4.0.0", + "postcss-image-set-function": "^5.0.0", + "postcss-initial": "^4.0.1", + "postcss-lab-function": "^5.0.0", + "postcss-logical": "^6.0.0", + "postcss-media-minmax": "^5.0.0", + "postcss-nesting": "^11.0.0", + "postcss-opacity-percentage": "^1.1.3", + "postcss-overflow-shorthand": "^4.0.0", + "postcss-page-break": "^3.0.4", + "postcss-place": "^8.0.0", + "postcss-pseudo-class-any-link": "^8.0.0", + "postcss-replace-overflow-wrap": "^4.0.0", + "postcss-selector-not": "^7.0.0", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^12 || ^14 || >= 16" + "node": "^14 || ^16 || >=18" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "url": "https://opencollective.com/csstools" }, "peerDependencies": { - "postcss": "^8.4.21" + "postcss": "^8.4" } }, - "node_modules/postcss-load-config": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", - "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "node_modules/postcss-pseudo-class-any-link": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-8.0.2.tgz", + "integrity": "sha512-FYTIuRE07jZ2CW8POvctRgArQJ43yxhr5vLmImdKUvjFCkR09kh8pIdlCwdx/jbFm7MiW4QP58L4oOUv3grQYA==", "dev": true, "dependencies": { - "lilconfig": "^2.0.5", - "yaml": "^1.10.2" + "postcss-selector-parser": "^6.0.10" }, "engines": { - "node": ">= 10" + "node": "^14 || ^16 || >=18" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "url": "https://opencollective.com/csstools" }, "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } + "postcss": "^8.4" } }, - "node_modules/postcss-nested": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz", - "integrity": "sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==", + "node_modules/postcss-replace-overflow-wrap": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", + "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", + "dev": true, + "peerDependencies": { + "postcss": "^8.0.3" + } + }, + "node_modules/postcss-selector-not": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-7.0.1.tgz", + "integrity": "sha512-1zT5C27b/zeJhchN7fP0kBr16Cc61mu7Si9uWWLoA3Px/D9tIJPKchJCkUH3tPO5D0pCFmGeApAv8XpXBQJ8SQ==", "dev": true, "dependencies": { "postcss-selector-parser": "^6.0.10" }, "engines": { - "node": ">=12.0" + "node": "^14 || ^16 || >=18" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "url": "https://opencollective.com/csstools" }, "peerDependencies": { - "postcss": "^8.2.14" + "postcss": "^8.4" } }, "node_modules/postcss-selector-parser": { @@ -3136,17 +5120,32 @@ "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 + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, "engines": { "node": ">= 0.8.0" } }, + "node_modules/prettier": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz", + "integrity": "sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", @@ -3161,6 +5160,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, "engines": { "node": ">=6" } @@ -3169,6 +5169,7 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, "funding": [ { "type": "github", @@ -3219,6 +5220,59 @@ "react": "^18.2.0" } }, + "node_modules/react-fast-compare": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", + "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" + }, + "node_modules/react-hook-form": { + "version": "7.43.1", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.43.1.tgz", + "integrity": "sha512-+s3+s8LLytRMriwwuSqeLStVjRXFGxgjjx2jED7Z+wz1J/88vpxieRQGvJVvzrzVxshZ0BRuocFERb779m2kNg==", + "engines": { + "node": ">=12.22.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-hook-form" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18" + } + }, + "node_modules/react-instantsearch-core": { + "version": "6.39.0", + "resolved": "https://registry.npmjs.org/react-instantsearch-core/-/react-instantsearch-core-6.39.0.tgz", + "integrity": "sha512-UROe0jjXI56pu1uHuP5lDhyXMIrodkDBISBv5pLU9/1LIYMNF3o4C9FllTdfia3Jz3lDDsSEcPpc/77so2x3Ww==", + "dependencies": { + "@babel/runtime": "^7.1.2", + "algoliasearch-helper": "^3.11.3", + "prop-types": "^15.6.2", + "react-fast-compare": "^3.0.0" + }, + "peerDependencies": { + "algoliasearch": ">= 3.1 < 5", + "react": ">= 16.3.0 < 19" + } + }, + "node_modules/react-instantsearch-dom": { + "version": "6.39.0", + "resolved": "https://registry.npmjs.org/react-instantsearch-dom/-/react-instantsearch-dom-6.39.0.tgz", + "integrity": "sha512-wdFGDFugoCpO9buxjybyLTs7cblQ6g+NIiYIsZ9ua0FLUIdoeawXQYDV83dDzcNgbml5RTiKJsAFxlne8gguMg==", + "dependencies": { + "@babel/runtime": "^7.1.2", + "algoliasearch-helper": "^3.11.3", + "classnames": "^2.2.5", + "prop-types": "^15.6.2", + "react-fast-compare": "^3.0.0", + "react-instantsearch-core": "6.39.0" + }, + "peerDependencies": { + "algoliasearch": ">= 3.1 < 5", + "react": ">= 16.3.0 < 19", + "react-dom": ">= 16.3.0 < 19" + } + }, "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", @@ -3254,6 +5308,7 @@ "version": "1.4.3", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -3270,6 +5325,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, "engines": { "node": ">=8" }, @@ -3281,6 +5337,7 @@ "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", @@ -3297,14 +5354,24 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, "engines": { "node": ">=4" } }, + "node_modules/response-iterator": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/response-iterator/-/response-iterator-0.2.6.tgz", + "integrity": "sha512-pVzEEzrsg23Sh053rmDUvLSkGXluZio0qu8VT6ukrYuvtjVfCbDZH9d6PGXb8HZfzdNZt8feXv/jvUzlhRgLnw==", + "engines": { + "node": ">=0.8" + } + }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -3314,6 +5381,7 @@ "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" }, @@ -3328,6 +5396,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, "funding": [ { "type": "github", @@ -3350,6 +5419,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.3", @@ -3371,6 +5441,7 @@ "version": "7.3.8", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -3381,10 +5452,16 @@ "node": ">=10" } }, + "node_modules/shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, "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" }, @@ -3396,6 +5473,7 @@ "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" } @@ -3404,6 +5482,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -3417,6 +5496,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, "engines": { "node": ">=8" } @@ -3433,6 +5513,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "dev": true, "dependencies": { "internal-slot": "^1.0.4" }, @@ -3444,6 +5525,7 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -3462,6 +5544,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -3475,6 +5558,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -3488,6 +5572,7 @@ "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" }, @@ -3499,6 +5584,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, "engines": { "node": ">=4" } @@ -3507,6 +5593,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, "engines": { "node": ">=8" }, @@ -3514,6 +5601,68 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/styled-components": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.3.6.tgz", + "integrity": "sha512-hGTZquGAaTqhGWldX7hhfzjnIYBZ0IXQXkCYdvF1Sq3DsUaLx6+NTHC5Jj1ooM2F68sBiVz3lvhfwQs/S3l6qg==", + "hasInstallScript": true, + "dependencies": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/traverse": "^7.4.5", + "@emotion/is-prop-valid": "^1.1.0", + "@emotion/stylis": "^0.8.4", + "@emotion/unitless": "^0.7.4", + "babel-plugin-styled-components": ">= 1.12.0", + "css-to-react-native": "^3.0.0", + "hoist-non-react-statics": "^3.0.0", + "shallowequal": "^1.1.0", + "supports-color": "^5.5.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/styled-components" + }, + "peerDependencies": { + "react": ">= 16.8.0", + "react-dom": ">= 16.8.0", + "react-is": ">= 16.8.0" + } + }, + "node_modules/styled-components/node_modules/@emotion/is-prop-valid": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz", + "integrity": "sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg==", + "dependencies": { + "@emotion/memoize": "^0.8.0" + } + }, + "node_modules/styled-components/node_modules/@emotion/memoize": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.0.tgz", + "integrity": "sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==" + }, + "node_modules/styled-components/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==", + "engines": { + "node": ">=4" + } + }, + "node_modules/styled-components/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==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/styled-jsx": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", @@ -3540,6 +5689,7 @@ "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" }, @@ -3551,6 +5701,7 @@ "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" }, @@ -3558,10 +5709,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/symbol-observable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", + "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", + "engines": { + "node": ">=0.10" + } + }, "node_modules/synckit": { "version": "0.8.5", "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==", + "dev": true, "dependencies": { "@pkgr/utils": "^2.3.1", "tslib": "^2.5.0" @@ -3618,6 +5778,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, "engines": { "node": ">=6" } @@ -3625,21 +5786,32 @@ "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true }, "node_modules/tiny-glob": { "version": "0.2.9", "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", + "dev": true, "dependencies": { "globalyzer": "0.1.0", "globrex": "^0.1.2" } }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "engines": { + "node": ">=4" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, "dependencies": { "is-number": "^7.0.0" }, @@ -3647,10 +5819,22 @@ "node": ">=8.0" } }, + "node_modules/ts-invariant": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.10.3.tgz", + "integrity": "sha512-uivwYcQaxAucv1CzRp2n/QdYPo4ILf9VXgH19zEIjFx2EJufV16P0JtJVpYHy89DItG6Kwj2oIUjrcK5au+4tQ==", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/tsconfig-paths": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", + "dev": true, "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.1", @@ -3667,6 +5851,7 @@ "version": "3.21.0", "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, "dependencies": { "tslib": "^1.8.1" }, @@ -3680,12 +5865,14 @@ "node_modules/tsutils/node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, "dependencies": { "prelude-ls": "^1.2.1" }, @@ -3697,6 +5884,7 @@ "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, "engines": { "node": ">=10" }, @@ -3708,6 +5896,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "for-each": "^0.3.3", @@ -3721,6 +5910,8 @@ "version": "4.9.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true, + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -3733,6 +5924,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -3747,7 +5939,6 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "dev": true, "funding": [ { "type": "opencollective", @@ -3773,6 +5964,7 @@ "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" } @@ -3783,10 +5975,19 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, + "node_modules/uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "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" }, @@ -3801,6 +6002,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -3816,6 +6018,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, "dependencies": { "is-map": "^2.0.1", "is-set": "^2.0.1", @@ -3830,6 +6033,7 @@ "version": "1.1.9", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dev": true, "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", @@ -3849,6 +6053,7 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -3856,7 +6061,8 @@ "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==" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true }, "node_modules/xtend": { "version": "4.0.2", @@ -3870,7 +6076,8 @@ "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/yaml": { "version": "1.10.2", @@ -3885,12 +6092,26 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zen-observable": { + "version": "0.8.15", + "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.15.tgz", + "integrity": "sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==" + }, + "node_modules/zen-observable-ts": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-1.2.5.tgz", + "integrity": "sha512-QZWQekv6iB72Naeake9hS1KxHlotfRpe+WGNbNx5/ta+R3DNjVO2bswf63gXlWDcs+EMd7XY8HfVQyP1X6T4Zg==", + "dependencies": { + "zen-observable": "0.8.15" + } } } } diff --git a/refactor/package.json b/refactor/package.json index 0c1a0d2b3..47881cd6d 100644 --- a/refactor/package.json +++ b/refactor/package.json @@ -3,26 +3,44 @@ "version": "0.1.0", "private": true, "scripts": { - "dev": "next dev", + "dev": "next", "build": "next build", "start": "next start", - "lint": "next lint" + "lint": "next lint", + "format": "prettier --write \"**/*.{js,jsx,json}\"", + "refresh": "rm -rf node_modules && rm package-lock.json && npm i && npm run format" }, + "keywords": [ + "next.js", + "next", + "javascript", + "framer" + ], + "author": "w3bdesign", + "license": "ISC", "dependencies": { - "@next/font": "13.1.6", - "@types/node": "18.14.0", - "@types/react": "18.0.28", - "@types/react-dom": "18.0.11", - "eslint": "8.34.0", - "eslint-config-next": "13.1.6", - "next": "13.1.6", + "@apollo/client": "^3.7.8", + "@types/react": "^18.0.28", + "algoliasearch": "^4.14.3", + "autoprefixer": "^10.4.13", + "framer-motion": "9.0.4", + "graphql": "^16.6.0", + "next": "^13.1.6", + "nprogress": "^0.2.0", + "postcss": "^8.4.21", "react": "18.2.0", "react-dom": "18.2.0", - "typescript": "4.9.5" + "react-hook-form": "^7.43.1", + "react-instantsearch-dom": "^6.39.0", + "styled-components": "^5.3.6", + "uuid": "^9.0.0" }, "devDependencies": { - "autoprefixer": "^10.4.13", - "postcss": "^8.4.21", + "babel-plugin-styled-components": "^2.0.7", + "eslint": "8.34.0", + "eslint-config-next": "^13.1.6", + "postcss-preset-env": "^8.0.1", + "prettier": "^2.8.4", "tailwindcss": "^3.2.7" } } diff --git a/refactor/postcss.config.js b/refactor/postcss.config.js index 33ad091d2..12a703d90 100644 --- a/refactor/postcss.config.js +++ b/refactor/postcss.config.js @@ -3,4 +3,4 @@ module.exports = { tailwindcss: {}, autoprefixer: {}, }, -} +}; diff --git a/refactor/tailwind.config.js b/refactor/tailwind.config.js index 6d696d057..ae9d63714 100644 --- a/refactor/tailwind.config.js +++ b/refactor/tailwind.config.js @@ -5,4 +5,4 @@ module.exports = { extend: {}, }, plugins: [], -} +}; From 1c2d5f4748e4d294ac78e35844f181f5ed0795cf Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Sun, 19 Feb 2023 20:19:21 +0100 Subject: [PATCH 005/262] Finish initial setup --- refactor/package-lock.json | 7 +++++++ refactor/package.json | 1 + refactor/src/pages/_app.tsx | 14 +++----------- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/refactor/package-lock.json b/refactor/package-lock.json index 643fa20f6..7365da895 100644 --- a/refactor/package-lock.json +++ b/refactor/package-lock.json @@ -26,6 +26,7 @@ "uuid": "^9.0.0" }, "devDependencies": { + "@types/node": "18.14.0", "babel-plugin-styled-components": "^2.0.7", "eslint": "8.34.0", "eslint-config-next": "^13.1.6", @@ -1385,6 +1386,12 @@ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, + "node_modules/@types/node": { + "version": "18.14.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.0.tgz", + "integrity": "sha512-5EWrvLmglK+imbCJY0+INViFWUHg1AHel1sq4ZVSfdcNqGy9Edv3UB9IIzzg+xPaUcAgZYcfVs2fBcwDeZzU0A==", + "dev": true + }, "node_modules/@types/prop-types": { "version": "15.7.5", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", diff --git a/refactor/package.json b/refactor/package.json index 47881cd6d..3ea69f7bb 100644 --- a/refactor/package.json +++ b/refactor/package.json @@ -36,6 +36,7 @@ "uuid": "^9.0.0" }, "devDependencies": { + "@types/node": "18.14.0", "babel-plugin-styled-components": "^2.0.7", "eslint": "8.34.0", "eslint-config-next": "^13.1.6", diff --git a/refactor/src/pages/_app.tsx b/refactor/src/pages/_app.tsx index e012482ac..19e078d79 100644 --- a/refactor/src/pages/_app.tsx +++ b/refactor/src/pages/_app.tsx @@ -1,20 +1,12 @@ -// Imports -import { Lato } from "@next/font/google"; - // Types -import type { AppProps } from "next/app"; +import type { AppProps } from 'next/app'; // Styles -import "@/styles/globals.css"; - -const lato = Lato({ - weight: ["400", "700"], - subsets: ["latin"] -}); +import '@/styles/globals.css'; function MyApp({ Component, pageProps }: AppProps) { return ( -
+
); From ee975ac33734614267b68a0581a5f4a6080b6f76 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Sun, 19 Feb 2023 20:26:55 +0100 Subject: [PATCH 006/262] Prettier --- refactor/package.json | 2 +- refactor/src/pages/_document.tsx | 4 ++-- refactor/src/pages/api/hello.ts | 13 ------------- 3 files changed, 3 insertions(+), 16 deletions(-) delete mode 100644 refactor/src/pages/api/hello.ts diff --git a/refactor/package.json b/refactor/package.json index 3ea69f7bb..4598e133c 100644 --- a/refactor/package.json +++ b/refactor/package.json @@ -7,7 +7,7 @@ "build": "next build", "start": "next start", "lint": "next lint", - "format": "prettier --write \"**/*.{js,jsx,json}\"", + "format": "prettier --write \"**/*.{js,ts,tsx,json}\"", "refresh": "rm -rf node_modules && rm package-lock.json && npm i && npm run format" }, "keywords": [ diff --git a/refactor/src/pages/_document.tsx b/refactor/src/pages/_document.tsx index 54e8bf3e2..e1e9cbbb7 100644 --- a/refactor/src/pages/_document.tsx +++ b/refactor/src/pages/_document.tsx @@ -1,4 +1,4 @@ -import { Html, Head, Main, NextScript } from 'next/document' +import { Html, Head, Main, NextScript } from 'next/document'; export default function Document() { return ( @@ -9,5 +9,5 @@ export default function Document() { - ) + ); } diff --git a/refactor/src/pages/api/hello.ts b/refactor/src/pages/api/hello.ts deleted file mode 100644 index f8bcc7e5c..000000000 --- a/refactor/src/pages/api/hello.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Next.js API route support: https://nextjs.org/docs/api-routes/introduction -import type { NextApiRequest, NextApiResponse } from 'next' - -type Data = { - name: string -} - -export default function handler( - req: NextApiRequest, - res: NextApiResponse -) { - res.status(200).json({ name: 'John Doe' }) -} From dc208dd0d14884c9290e501ee1d3f318cb44800e Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Sun, 19 Feb 2023 20:30:13 +0100 Subject: [PATCH 007/262] Formatting --- refactor/README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/refactor/README.md b/refactor/README.md index a9613ac0c..01790fd2c 100644 --- a/refactor/README.md +++ b/refactor/README.md @@ -48,7 +48,6 @@ The current release has been tested and is confirmed working with the following (Chrome) - 3. Make sure WooCommerce has some products already or import some sample products The WooCommerce sample products CSV file is available at `wp-content/plugins/woocommerce/sample-data/sample_products.csv` or [Sample products](sample_products/) From c47b1d6f14a624d817647db41217467bb58a59fd Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Sun, 19 Feb 2023 21:15:08 +0100 Subject: [PATCH 008/262] Next dev --- refactor/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/refactor/package.json b/refactor/package.json index 4598e133c..8c7ef793c 100644 --- a/refactor/package.json +++ b/refactor/package.json @@ -3,7 +3,7 @@ "version": "0.1.0", "private": true, "scripts": { - "dev": "next", + "dev": "next dev", "build": "next build", "start": "next start", "lint": "next lint", From d2c036fc0f619d202c495f27f339a69abadbd8e7 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Sun, 19 Feb 2023 21:34:02 +0100 Subject: [PATCH 009/262] Typescript conversion of LINKS --- refactor/src/utils/constants/LINKS.ts | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 refactor/src/utils/constants/LINKS.ts diff --git a/refactor/src/utils/constants/LINKS.ts b/refactor/src/utils/constants/LINKS.ts new file mode 100644 index 000000000..178f900a8 --- /dev/null +++ b/refactor/src/utils/constants/LINKS.ts @@ -0,0 +1,25 @@ +interface ILinks { + id: number; + title: string; + href: string; +} + +const LINKS: ILinks[] = [ + { + id: 0, + title: 'Hjem', + href: '/', + }, + { + id: 1, + title: 'Produkter', + href: '/produkter', + }, + { + id: 2, + title: 'Kategorier', + href: '/kategorier', + }, +]; + +export default LINKS; From 4949b8e431503106d21c47680ebf1c3142d4df20 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Sun, 19 Feb 2023 21:34:12 +0100 Subject: [PATCH 010/262] .env example --- refactor/.env.example | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 refactor/.env.example diff --git a/refactor/.env.example b/refactor/.env.example new file mode 100644 index 000000000..e50d4b894 --- /dev/null +++ b/refactor/.env.example @@ -0,0 +1,7 @@ +NEXT_PUBLIC_GRAPHQL_URL="https://wordpress.url.com/graphql" +NEXT_PUBLIC_ALGOLIA_INDEX_NAME= "algolia" +NEXT_PUBLIC_PLACEHOLDER_SMALL_IMAGE_URL="https://res.cloudinary.com/placeholder-337_utsb7h.jpg" +NEXT_PUBLIC_PLACEHOLDER_LARGE_IMAGE_URL="https://res.cloudinary.com/placeholder-616-616_beecp5.jpg" +NEXT_PUBLIC_ALGOLIA_APP_ID = "changeme" +NEXT_PUBLIC_ALGOLIA_PUBLIC_API_KEY = "changeme" +NODE_ENV="development" \ No newline at end of file From e243cbd8da5103dac6e8437fd1d88f9bf9b2b861 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Sun, 19 Feb 2023 22:03:27 +0100 Subject: [PATCH 011/262] Uuid types --- refactor/package-lock.json | 7 +++++++ refactor/package.json | 1 + 2 files changed, 8 insertions(+) diff --git a/refactor/package-lock.json b/refactor/package-lock.json index 7365da895..63bfd5702 100644 --- a/refactor/package-lock.json +++ b/refactor/package-lock.json @@ -27,6 +27,7 @@ }, "devDependencies": { "@types/node": "18.14.0", + "@types/uuid": "^9.0.0", "babel-plugin-styled-components": "^2.0.7", "eslint": "8.34.0", "eslint-config-next": "^13.1.6", @@ -1412,6 +1413,12 @@ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" }, + "node_modules/@types/uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-kr90f+ERiQtKWMz5rP32ltJ/BtULDI5RVO0uavn1HQUOwjx0R1h0rnDYNL0CepF1zL5bSY6FISAfd9tOdDhU5Q==", + "dev": true + }, "node_modules/@typescript-eslint/parser": { "version": "5.52.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.52.0.tgz", diff --git a/refactor/package.json b/refactor/package.json index 8c7ef793c..f9212d3ba 100644 --- a/refactor/package.json +++ b/refactor/package.json @@ -37,6 +37,7 @@ }, "devDependencies": { "@types/node": "18.14.0", + "@types/uuid": "^9.0.0", "babel-plugin-styled-components": "^2.0.7", "eslint": "8.34.0", "eslint-config-next": "^13.1.6", From 49a18434389c7b21e7b763ba6142f7e4ee643469 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Mon, 20 Feb 2023 00:59:02 +0100 Subject: [PATCH 012/262] Basic design working on Index --- refactor/public/favicon.ico | Bin 25931 -> 0 bytes refactor/public/images/hero.jpg | Bin 0 -> 97216 bytes refactor/public/next.svg | 1 - refactor/public/thirteen.svg | 1 - refactor/public/vercel.svg | 1 - .../Cart/AddToCartButton.component.jsx | 111 ++++++++++++++ .../src/components/Cart/Cart.component.jsx | 53 +++++++ .../Cart/CartPage/CartItem.component.jsx | 66 +++++++++ .../CartPage/CartItemsContainer.component.jsx | 137 ++++++++++++++++++ .../Cart/CartPage/MobileCart.component.jsx | 45 ++++++ .../CartPage/MobileCartItem.component.jsx | 58 ++++++++ .../Cart/CartPage/RegularCart.component.jsx | 46 ++++++ .../components/Header/Header.component.tsx | 32 ++++ .../components/Header/Navbar.component.tsx | 75 ++++++++++ .../src/components/Index/Hero.component.tsx | 26 ++++ .../components/Layout/Layout.component.tsx | 27 ++++ .../components/Layout/PageTitle.component.tsx | 27 ++++ refactor/src/pages/_app.tsx | 6 +- refactor/src/pages/index.tsx | 50 +++++-- refactor/src/utils/apollo/ApolloClient.js | 88 +++++++++++ 20 files changed, 827 insertions(+), 23 deletions(-) delete mode 100644 refactor/public/favicon.ico create mode 100644 refactor/public/images/hero.jpg delete mode 100644 refactor/public/next.svg delete mode 100644 refactor/public/thirteen.svg delete mode 100644 refactor/public/vercel.svg create mode 100644 refactor/src/components/Cart/AddToCartButton.component.jsx create mode 100644 refactor/src/components/Cart/Cart.component.jsx create mode 100644 refactor/src/components/Cart/CartPage/CartItem.component.jsx create mode 100644 refactor/src/components/Cart/CartPage/CartItemsContainer.component.jsx create mode 100644 refactor/src/components/Cart/CartPage/MobileCart.component.jsx create mode 100644 refactor/src/components/Cart/CartPage/MobileCartItem.component.jsx create mode 100644 refactor/src/components/Cart/CartPage/RegularCart.component.jsx create mode 100644 refactor/src/components/Header/Header.component.tsx create mode 100644 refactor/src/components/Header/Navbar.component.tsx create mode 100644 refactor/src/components/Index/Hero.component.tsx create mode 100644 refactor/src/components/Layout/Layout.component.tsx create mode 100644 refactor/src/components/Layout/PageTitle.component.tsx create mode 100644 refactor/src/utils/apollo/ApolloClient.js diff --git a/refactor/public/favicon.ico b/refactor/public/favicon.ico deleted file mode 100644 index 718d6fea4835ec2d246af9800eddb7ffb276240c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25931 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 LrJugUA?W`A8`#=m diff --git a/refactor/public/images/hero.jpg b/refactor/public/images/hero.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6b36d68049efc1d797340cb5e1ce3d1f7d18e2d8 GIT binary patch literal 97216 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 A9{>OV literal 0 HcmV?d00001 diff --git a/refactor/public/next.svg b/refactor/public/next.svg deleted file mode 100644 index 5174b28c5..000000000 --- a/refactor/public/next.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/refactor/public/thirteen.svg b/refactor/public/thirteen.svg deleted file mode 100644 index 8977c1bd1..000000000 --- a/refactor/public/thirteen.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/refactor/public/vercel.svg b/refactor/public/vercel.svg deleted file mode 100644 index d2f842227..000000000 --- a/refactor/public/vercel.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/refactor/src/components/Cart/AddToCartButton.component.jsx b/refactor/src/components/Cart/AddToCartButton.component.jsx new file mode 100644 index 000000000..1fdd61c92 --- /dev/null +++ b/refactor/src/components/Cart/AddToCartButton.component.jsx @@ -0,0 +1,111 @@ +/*eslint complexity: ["error", 6]*/ + +import { useState, useContext } from 'react'; +import { v4 as uuidv4 } from 'uuid'; +import { useQuery, useMutation } from '@apollo/client'; + +import { AppContext } from 'utils/context/AppContext'; +import LoadingSpinner from 'components/LoadingSpinner/LoadingSpinner.component'; + +import { GET_CART } from 'utils/gql/GQL_QUERIES'; +import { ADD_TO_CART } from 'utils/gql/GQL_MUTATIONS'; + +import { getFormattedCart } from 'utils/functions/functions'; + +/** + * Display and process product object when we click on the Add To Cart button + * Adds product to shopping cart + * @param {Object} product + */ +const AddToCartButton = ({ product }) => { + const [, setCart] = useContext(AppContext); + const [, setRequestError] = useState(null); + const [, setShowViewCart] = useState(false); + const [showAddToCart, setshowAddToCart] = useState(false); + + const productId = product.databaseId ? product.databaseId : product; + + const productQueryInput = { + clientMutationId: uuidv4(), // Generate a unique id. + productId, + }; + + // Get Cart Data. + const { data, refetch } = useQuery(GET_CART, { + notifyOnNetworkStatusChange: true, + onCompleted: () => { + refetch(); + // Update cart in the localStorage. + const updatedCart = getFormattedCart(data); + + if (!updatedCart) { + return; + } + + localStorage.setItem('woocommerce-cart', JSON.stringify(updatedCart)); + + // Update cart data in React Context. + setCart(updatedCart); + }, + }); + + const [addToCart, { loading: addToCartLoading, error: addToCartError }] = + useMutation(ADD_TO_CART, { + variables: { + input: productQueryInput, + }, + onCompleted: () => { + // Update the cart with new values in React context. + refetch(); + // If error. + if (addToCartError) { + setRequestError(addToCartError.graphQLErrors[0].message); + } + // Show View Cart Button + setShowViewCart(true); + setshowAddToCart(true); + }, + onError: (error) => { + if (error) { + setRequestError(error); + } + }, + }); + + const handleAddToCartClick = () => { + setRequestError(null); + addToCart(); + refetch(); + }; + + // Separate out conditions here for increased readability + const fadeInButton = + addToCartLoading && `animate__animated animate__fadeOutUp`; + const fadeOutButton = + showAddToCart && `animate__animated animate__fadeInDown`; + + return ( + <> + + + {addToCartLoading && ( + <> +
+ Legger i handlekurv, vennligst vent ... +
+
+
+ +
+ + )} + + ); +}; + +export default AddToCartButton; diff --git a/refactor/src/components/Cart/Cart.component.jsx b/refactor/src/components/Cart/Cart.component.jsx new file mode 100644 index 000000000..f96bf5ab9 --- /dev/null +++ b/refactor/src/components/Cart/Cart.component.jsx @@ -0,0 +1,53 @@ +import { useContext } from 'react'; +import Link from 'next/link'; + +import { AppContext } from 'utils/context/AppContext'; + +/** + * Displays the shopping cart contents. * + * Displays amount of items in cart. + */ +const Cart = ({ stickyNav }) => { + const [cart] = useContext(AppContext); + + const productsCount = + null !== cart && Object.keys(cart).length ? cart.totalProductsCount : ''; + + return ( + <> + + + + + + + + + + + {productsCount && ( + + {productsCount} + + )} + + ); +}; + +export default Cart; diff --git a/refactor/src/components/Cart/CartPage/CartItem.component.jsx b/refactor/src/components/Cart/CartPage/CartItem.component.jsx new file mode 100644 index 000000000..5b033a54f --- /dev/null +++ b/refactor/src/components/Cart/CartPage/CartItem.component.jsx @@ -0,0 +1,66 @@ +/*eslint complexity: ["error", 6]*/ + +import { useState } from 'react'; + +import SVGX from 'components/SVG/SVGX.component'; +import { paddedPrice, handleQuantityChange } from 'utils/functions/functions'; + +const CartItem = ({ + item, + products, + handleRemoveProductClick, + updateCart, + updateCartProcessing, +}) => { + const [productCount, setProductCount] = useState(item.qty); + const totalPrice = paddedPrice(item.totalPrice, 'kr'); + + return ( + + + + + + {item.image.title} + + {item.name} + + kr {'string' !== typeof item.price ? item.price.toFixed(2) : item.price} + + + + handleQuantityChange( + event, + item.cartKey, + products, + updateCart, + updateCartProcessing, + setProductCount + ) + } + /> + + + {'string' !== typeof item.totalPrice + ? totalPrice.toFixed(2) + : totalPrice} + + + ); +}; + +export default CartItem; diff --git a/refactor/src/components/Cart/CartPage/CartItemsContainer.component.jsx b/refactor/src/components/Cart/CartPage/CartItemsContainer.component.jsx new file mode 100644 index 000000000..f86c66417 --- /dev/null +++ b/refactor/src/components/Cart/CartPage/CartItemsContainer.component.jsx @@ -0,0 +1,137 @@ +import Link from 'next/link'; +import { v4 as uuidv4 } from 'uuid'; +import { useContext, useState, useEffect } from 'react'; +import { useQuery, useMutation } from '@apollo/client'; + +import { AppContext } from 'utils/context/AppContext'; +import { getFormattedCart, getUpdatedItems } from 'utils/functions/functions'; + +import RegularCart from './RegularCart.component'; +import MobileCart from './MobileCart.component'; +import LoadingSpinner from 'components/LoadingSpinner/LoadingSpinner.component'; + +import { GET_CART } from 'utils/gql/GQL_QUERIES'; +import { UPDATE_CART } from 'utils/gql/GQL_MUTATIONS'; + +const CartItemsContainer = () => { + const [cart, setCart] = useContext(AppContext); + const [requestError, setRequestError] = useState(null); + + const { data, refetch } = useQuery(GET_CART, { + notifyOnNetworkStatusChange: true, + onCompleted: () => { + refetch(); + + // Update cart in the localStorage. + const updatedCart = getFormattedCart(data); + localStorage.setItem('woocommerce-cart', JSON.stringify(updatedCart)); + + // Update cart data in React Context. + setCart(updatedCart); + }, + onError: (error) => { + setRequestError(error); + }, + }); + + // Update Cart Mutation. + const [updateCart, { loading: updateCartProcessing }] = useMutation( + UPDATE_CART, + { + onCompleted: () => { + refetch(); + }, + onError: (error) => { + if (error) { + setRequestError(error); + } + }, + } + ); + + /* + * Handle remove product click. + * + * @param {Object} event event + * @param {Integer} Product Id. + * + * @return {void} + */ + const handleRemoveProductClick = (event, cartKey, products) => { + event.stopPropagation(); + if (products.length) { + // By passing the newQty to 0 in updateCart Mutation, it will remove the item. + const newQty = 0; + const updatedItems = getUpdatedItems(products, newQty, cartKey); + + updateCart({ + variables: { + input: { + clientMutationId: uuidv4(), + items: updatedItems, + }, + }, + }); + } + + refetch(); + }; + + useEffect(() => { + refetch(); + }, [refetch]); + + return ( +
+
+ {requestError &&
Error ...
} + + {cart ? ( +
+ + +
+ + + +
+ {updateCartProcessing && ( + <> +
+ Oppdaterer antall, vennligst vent ... +
+
+
+ +
+ + )} +
+ ) : ( +
+

Ingen varer i handlekurven

+ +
+ )} +
+
+ ); +}; + +export default CartItemsContainer; diff --git a/refactor/src/components/Cart/CartPage/MobileCart.component.jsx b/refactor/src/components/Cart/CartPage/MobileCart.component.jsx new file mode 100644 index 000000000..0d9a83e1b --- /dev/null +++ b/refactor/src/components/Cart/CartPage/MobileCart.component.jsx @@ -0,0 +1,45 @@ +import React from 'react'; +import { v4 as uuidv4 } from 'uuid'; + +import MobileCartItem from './MobileCartItem.component'; + +const MobileCart = ({ cart, handleRemoveProductClick, updateCart }) => ( +
+
+
+ + + {cart.products.length && + cart.products.map(() => ( + + + + + + + + ))} + + + {cart.products.length && + cart.products.map((item) => ( + + + + ))} + +
FjernNavnPrisAntallTotalpris
+
+
+
+); + +export default MobileCart; diff --git a/refactor/src/components/Cart/CartPage/MobileCartItem.component.jsx b/refactor/src/components/Cart/CartPage/MobileCartItem.component.jsx new file mode 100644 index 000000000..461480861 --- /dev/null +++ b/refactor/src/components/Cart/CartPage/MobileCartItem.component.jsx @@ -0,0 +1,58 @@ +/*eslint complexity: ["error", 6]*/ + +import { useState } from 'react'; + +import SVGX from 'components/SVG/SVGX.component'; +import { handleQuantityChange } from 'utils/functions/functions'; + +const MobileCartItem = ({ + item, + products, + handleRemoveProductClick, + updateCart, + updateCartProcessing, +}) => { + const [productCount, setProductCount] = useState(item.qty); + + return ( + + + + + {item.name} + + kr + {'string' !== typeof item.price ? item.price.toFixed(2) : item.price} + + + + handleQuantityChange( + event, + item.cartKey, + products, + updateCart, + updateCartProcessing, + setProductCount + ) + } + /> + + + {'string' !== typeof item.totalPrice + ? item.totalPrice.toFixed(2) + : item.totalPrice} + + + ); +}; + +export default MobileCartItem; diff --git a/refactor/src/components/Cart/CartPage/RegularCart.component.jsx b/refactor/src/components/Cart/CartPage/RegularCart.component.jsx new file mode 100644 index 000000000..b4e5ea4dc --- /dev/null +++ b/refactor/src/components/Cart/CartPage/RegularCart.component.jsx @@ -0,0 +1,46 @@ +import React from 'react'; +import CartItem from './CartItem.component'; + +const RegularCart = ({ + cart, + handleRemoveProductClick, + updateCart, + updateCartProcessing, +}) => ( + + + + + + + + + + + {cart.products.length && + cart.products.map((item) => ( + + + + ))} + +
+ + + Produkt + + Pris + + Antall + + Total +
+); + +export default RegularCart; diff --git a/refactor/src/components/Header/Header.component.tsx b/refactor/src/components/Header/Header.component.tsx new file mode 100644 index 000000000..1672b1e6c --- /dev/null +++ b/refactor/src/components/Header/Header.component.tsx @@ -0,0 +1,32 @@ +import Head from 'next/head'; + +import Navbar from './Navbar.component'; + +interface IHeaderProps { + title: string; +} + +/** + * Renders header for each page. + * @function Header + * @param {string} title - Title for the page. Is set in {title} + * @returns {JSX.Element} - Rendered component + */ + +const Header = ({ title }: IHeaderProps) => ( + <> + + Next.js webshop with WooCommerce {title ? title : ''} + + + + + + +); + +export default Header; diff --git a/refactor/src/components/Header/Navbar.component.tsx b/refactor/src/components/Header/Navbar.component.tsx new file mode 100644 index 000000000..86640ef48 --- /dev/null +++ b/refactor/src/components/Header/Navbar.component.tsx @@ -0,0 +1,75 @@ +import Link from 'next/link'; + +/*import Cart from '@/Cart/Cart.component'; +import Search from '@/AlgoliaSearch/AlgoliaSearchBox.component'; +import MobileSearch from '@/AlgoliaSearch/MobileSearch.component';*/ + +import { useResponsive } from '@/utils/hooks/useResponsive'; + +/** + * Navigation for the application. + * Includes mobile menu. + */ +const Navbar = () => { + const responsive = useResponsive(); + + return ( +
+ +
+ ); +}; + +export default Navbar; diff --git a/refactor/src/components/Index/Hero.component.tsx b/refactor/src/components/Index/Hero.component.tsx new file mode 100644 index 000000000..917d50acb --- /dev/null +++ b/refactor/src/components/Index/Hero.component.tsx @@ -0,0 +1,26 @@ +/** + * Initial hero content displayed on the front page, under the navigation bar. + */ +const Hero = () => ( +
+
+
+

+ Stripete Zig Zag Pute Sett +

+ + + se utvalget + +
+
+
+); + +export default Hero; diff --git a/refactor/src/components/Layout/Layout.component.tsx b/refactor/src/components/Layout/Layout.component.tsx new file mode 100644 index 000000000..51c5a3f35 --- /dev/null +++ b/refactor/src/components/Layout/Layout.component.tsx @@ -0,0 +1,27 @@ +import { ReactNode } from 'react'; + +import Header from '@/components/Header/Header.component'; +import PageTitle from './PageTitle.component'; + +interface ILayoutProps { + children?: ReactNode; + title: string; +} + +/** + * Renders layout for each page. Also passes along the title to the Header component. + * @function Layout + * @param {ReactNode} children - Children to be rendered by Layout component + * @param {TTitle} title - Title for the page. Is set in {title} + * @returns {JSX.Element} - Rendered component + */ + +const Layout = ({ children, title }: ILayoutProps): JSX.Element => ( + <> +
+ + {children} + +); + +export default Layout; diff --git a/refactor/src/components/Layout/PageTitle.component.tsx b/refactor/src/components/Layout/PageTitle.component.tsx new file mode 100644 index 000000000..716d835f9 --- /dev/null +++ b/refactor/src/components/Layout/PageTitle.component.tsx @@ -0,0 +1,27 @@ +interface IPageTitleProps { + title: string; + marginLeft?: boolean; +} + +/** + * Renders page title for each page. + * @function PageTitle + * @param {boolean} marginLeft - Adds extra margin left if true + * @param {string} title - Title for the page. Is set in {title} + * @returns {JSX.Element} - Rendered component + */ +const PageTitle = ({ title, marginLeft }: IPageTitleProps) => ( + <> +
+ + {title} + +
+ +); + +export default PageTitle; diff --git a/refactor/src/pages/_app.tsx b/refactor/src/pages/_app.tsx index 19e078d79..01f578f1e 100644 --- a/refactor/src/pages/_app.tsx +++ b/refactor/src/pages/_app.tsx @@ -5,11 +5,7 @@ import type { AppProps } from 'next/app'; import '@/styles/globals.css'; function MyApp({ Component, pageProps }: AppProps) { - return ( -
- -
- ); + return ; } export default MyApp; diff --git a/refactor/src/pages/index.tsx b/refactor/src/pages/index.tsx index a4edd46f5..df6d41b9a 100644 --- a/refactor/src/pages/index.tsx +++ b/refactor/src/pages/index.tsx @@ -1,17 +1,37 @@ -import Head from 'next/head'; +import Hero from '@/components/Index/Hero.component'; +//import IndexProducts from '@/components/Product/IndexProducts.component'; +import Layout from '@/components/Layout/Layout.component'; -export default function Home() { - return ( - <> - - Create Next App - - - - -
-
This text should be red
-
- - ); +import client from '@/utils/apollo/ApolloClient.js'; + +import { FETCH_ALL_PRODUCTS_QUERY } from '@/utils/gql/GQL_QUERIES'; + +/** + * Main index page + * @param {Object} products + * Initial static data is sent as props from getStaticProps and loaded through 'utils/gql/INITIAL_PRODUCTS' + */ +const HomePage = ({ products }: any) => ( + <> + + + + +); + +export default HomePage; + +export async function getStaticProps() { + const { data, loading, networkStatus } = await client.query({ + query: FETCH_ALL_PRODUCTS_QUERY, + }); + + return { + props: { + products: data.products.nodes, + loading, + networkStatus, + }, + revalidate: 10, + }; } diff --git a/refactor/src/utils/apollo/ApolloClient.js b/refactor/src/utils/apollo/ApolloClient.js new file mode 100644 index 000000000..b3ded3ee3 --- /dev/null +++ b/refactor/src/utils/apollo/ApolloClient.js @@ -0,0 +1,88 @@ +/*eslint complexity: ["error", 6]*/ + +import { + ApolloClient, + InMemoryCache, + createHttpLink, + ApolloLink, +} from '@apollo/client'; + +/** + * Middleware operation + * If we have a session token in localStorage, add it to the GraphQL request as a Session header. + */ +export const middleware = new ApolloLink((operation, forward) => { + /** + * If session data exist in local storage, set value as session header. + * Here we also delete the session if it is older than 24 hours + */ + const session = process.browser ? localStorage.getItem('woo-session') : null; + const sessionAge = process.browser + ? localStorage.getItem('woo-session-expiry') + : null; + const todaysDate = new Date(); + const oneDay = 60 * 60 * 24 * 1000; + const olderThan24h = new Date(todaysDate) - new Date(sessionAge) > oneDay; + + if (olderThan24h && process.browser) { + localStorage.removeItem('woo-session'); + localStorage.removeItem('woo-session-expiry'); + } + if (session) { + operation.setContext(() => ({ + headers: { + 'woocommerce-session': `Session ${session}`, + }, + })); + } + return forward(operation); +}); + +/** + * Afterware operation. + * + * This catches the incoming session token and stores it in localStorage, for future GraphQL requests. + */ +export const afterware = new ApolloLink((operation, forward) => + forward(operation).map((response) => { + /** + * Check for session header and update session in local storage accordingly. + */ + const context = operation.getContext(); + const { + response: { headers }, + } = context; + + const session = headers.get('woocommerce-session'); + + if (session && process.browser) { + // Remove session data if session destroyed. + if ('false' === session) { + localStorage.removeItem('woo-session'); + // Update session new data if changed. + } else if (localStorage.getItem('woo-session') !== session) { + localStorage.setItem('woo-session', headers.get('woocommerce-session')); + localStorage.setItem('woo-session-expiry', new Date()); + } + } + return response; + }) +); + +const clientSide = typeof window === 'undefined'; + +// Apollo GraphQL client. +const client = new ApolloClient({ + ssrMode: clientSide, + link: middleware.concat( + afterware.concat( + createHttpLink({ + uri: process.env.NEXT_PUBLIC_GRAPHQL_URL, + fetch, + }) + ) + ), + cache: new InMemoryCache(), +}); + +export default client; From f29adf9bdf2c565f7beb0b7b38b6855a6decce61 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Mon, 20 Feb 2023 01:04:17 +0100 Subject: [PATCH 013/262] Fix Hero image --- .../src/components/Index/Hero.component.tsx | 2 +- refactor/src/images/hero.jpg | Bin 0 -> 97216 bytes refactor/tailwind.config.js | 6 +++++- 3 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 refactor/src/images/hero.jpg diff --git a/refactor/src/components/Index/Hero.component.tsx b/refactor/src/components/Index/Hero.component.tsx index 917d50acb..83d84bca5 100644 --- a/refactor/src/components/Index/Hero.component.tsx +++ b/refactor/src/components/Index/Hero.component.tsx @@ -4,7 +4,7 @@ const Hero = () => (
diff --git a/refactor/src/images/hero.jpg b/refactor/src/images/hero.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6b36d68049efc1d797340cb5e1ce3d1f7d18e2d8 GIT binary patch literal 97216 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 A9{>OV literal 0 HcmV?d00001 diff --git a/refactor/tailwind.config.js b/refactor/tailwind.config.js index ae9d63714..c4a7e9a3d 100644 --- a/refactor/tailwind.config.js +++ b/refactor/tailwind.config.js @@ -2,7 +2,11 @@ module.exports = { content: ['./src/components/**/*.tsx', './src/pages/**/*.tsx'], theme: { - extend: {}, + extend: { + backgroundImage: { + 'hero-background': "url('/images/hero.jpg')", + }, + }, }, plugins: [], }; From f81a9a40de2d05943b5b97c37c181cb07db1ff66 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Mon, 20 Feb 2023 01:11:25 +0100 Subject: [PATCH 014/262] Add Footer --- .../components/Footer/Footer.component.tsx | 14 +++ .../components/Footer/Hamburger.component.tsx | 114 ++++++++++++++++++ .../components/Footer/Stickynav.component.jsx | 50 ++++++++ .../components/Layout/Layout.component.tsx | 2 + 4 files changed, 180 insertions(+) create mode 100644 refactor/src/components/Footer/Footer.component.tsx create mode 100644 refactor/src/components/Footer/Hamburger.component.tsx create mode 100644 refactor/src/components/Footer/Stickynav.component.jsx diff --git a/refactor/src/components/Footer/Footer.component.tsx b/refactor/src/components/Footer/Footer.component.tsx new file mode 100644 index 000000000..9be1f2810 --- /dev/null +++ b/refactor/src/components/Footer/Footer.component.tsx @@ -0,0 +1,14 @@ +/** + * Renders Footer of the application. + * @function Layout + * @returns {JSX.Element} - Rendered component + */ +const Footer = () => ( +
+
+ Copyright © {new Date().getFullYear()} Daniel / w3bdesign +
+
+); + +export default Footer; diff --git a/refactor/src/components/Footer/Hamburger.component.tsx b/refactor/src/components/Footer/Hamburger.component.tsx new file mode 100644 index 000000000..fdde4df72 --- /dev/null +++ b/refactor/src/components/Footer/Hamburger.component.tsx @@ -0,0 +1,114 @@ +import { useState, useEffect, useCallback } from 'react'; +import Link from 'next/link'; + +import FadeLeftToRight from '@/components/Animations/FadeLeftToRight.component'; +import FadeLeftToRightItem from '@/components/Animations/FadeLeftToRightItem.component'; + +import LINKS from '@/utils/constants/LINKS'; + +/** + * Hamburger component used in mobile menu. Animates to a X when clicked + * @function Hamburger + * @param {MouseEventHandler} onClick - onClick handler to respond to clicks + * @param {boolean} isExpanded - Should the hamburger animate to a X? + * @returns {JSX.Element} - Rendered component + */ + +const Hamburger = () => { + const [isExpanded, setisExpanded] = useState(false); + const [hidden, setHidden] = useState('invisible'); + + useEffect(() => { + if (isExpanded) { + setHidden(''); + } else { + setTimeout(() => { + setHidden('invisible'); + }, 1000); + } + }, [isExpanded]); + + const handleMobileMenuClick = useCallback(() => { + /** + * Anti-pattern: setisExpanded(!isExpanded) + * Even if your state updates are batched and multiple updates to the enabled/disabled state are made together + * each update will rely on the correct previous state so that you always end up with the result you expect. + */ + setisExpanded((prevExpanded) => !prevExpanded); + }, [setisExpanded]); + + const hamburgerLine = + 'h-1 w-10 my-1 rounded-full bg-white transition ease transform duration-300 not-sr-only'; + + const opacityFull = 'opacity-100 group-hover:opacity-100'; + + return ( +
+ + +
+
    + {LINKS.map(({ id, title, href }) => ( + +
  • + + { + setisExpanded((prevExpanded) => !prevExpanded); + }} + > + {title} + + +
  • +
    + ))} +
+
+
+
+ ); +}; + +export default Hamburger; diff --git a/refactor/src/components/Footer/Stickynav.component.jsx b/refactor/src/components/Footer/Stickynav.component.jsx new file mode 100644 index 000000000..80a977e25 --- /dev/null +++ b/refactor/src/components/Footer/Stickynav.component.jsx @@ -0,0 +1,50 @@ +import Link from 'next/link'; + +import Cart from '../Cart/Cart.component'; +import Search from '../AlgoliaSearch/AlgoliaSearchBox.component'; +import SVGMobileSearchIcon from '../SVG/SVGMobileSearchIcon.component'; + +import Hamburger from './Hamburger.component'; + +/** + * Navigation for the application. + * Includes mobile menu. + */ +const Stickynav = () => ( + +); + +export default Stickynav; diff --git a/refactor/src/components/Layout/Layout.component.tsx b/refactor/src/components/Layout/Layout.component.tsx index 51c5a3f35..a1368b30e 100644 --- a/refactor/src/components/Layout/Layout.component.tsx +++ b/refactor/src/components/Layout/Layout.component.tsx @@ -2,6 +2,7 @@ import { ReactNode } from 'react'; import Header from '@/components/Header/Header.component'; import PageTitle from './PageTitle.component'; +import Footer from '@/components/Footer/Footer.component'; interface ILayoutProps { children?: ReactNode; @@ -21,6 +22,7 @@ const Layout = ({ children, title }: ILayoutProps): JSX.Element => (
{children} +
); From d54cf331d45c7cba3680fa3e887423233398ef30 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Mon, 20 Feb 2023 01:19:26 +0100 Subject: [PATCH 015/262] Show products on Index --- .../Product/DisplayProducts.component.tsx | 116 ++++++++++++++ .../Product/SingleProduct.component.jsx | 145 ++++++++++++++++++ refactor/src/pages/index.tsx | 3 +- 3 files changed, 263 insertions(+), 1 deletion(-) create mode 100644 refactor/src/components/Product/DisplayProducts.component.tsx create mode 100644 refactor/src/components/Product/SingleProduct.component.jsx diff --git a/refactor/src/components/Product/DisplayProducts.component.tsx b/refactor/src/components/Product/DisplayProducts.component.tsx new file mode 100644 index 000000000..b51bceedb --- /dev/null +++ b/refactor/src/components/Product/DisplayProducts.component.tsx @@ -0,0 +1,116 @@ +import Link from 'next/link'; +import { v4 as uuidv4 } from 'uuid'; + +import { filteredVariantPrice, paddedPrice } from '@/utils/functions/functions'; + +/** + * Displays all of the products as long as length is defined. + * Does a map() over the props array and utilizes uuidv4 for unique key values. + * @function DisplayProducts + * @param {object} products Products to render + * @returns {JSX.Element} - Rendered component + */ +const DisplayProducts = ({ products }: any) => { + return ( +
+
+ {products ? ( + products.map( + ({ + databaseId, + name, + price, + regularPrice, + salePrice, + onSale, + slug, + image, + variations, + }: any) => { + // Add padding/empty character after currency symbol here + if (price) { + price = paddedPrice(price, 'kr'); + } + if (regularPrice) { + regularPrice = paddedPrice(regularPrice, 'kr'); + } + if (salePrice) { + salePrice = paddedPrice(salePrice, 'kr'); + } + + return ( +
+ + + {image ? ( + {name} + ) : ( + {name} + )} + + + + + +
+

+ {name} +

+
+
+ + {/* Display sale price when on sale */} + {onSale && ( +
+
+ {variations && filteredVariantPrice(price, '')} + {!variations && salePrice} +
+
+ {variations && filteredVariantPrice(price, 'right')} + {!variations && regularPrice} +
+
+ )} + {/* Display regular price when not on sale */} + {!onSale && ( +

{price}

+ )} +
+ ); + } + ) + ) : ( +
+ Ingen produkter funnet +
+ )} +
+
+ ); +}; + +export default DisplayProducts; diff --git a/refactor/src/components/Product/SingleProduct.component.jsx b/refactor/src/components/Product/SingleProduct.component.jsx new file mode 100644 index 000000000..c9e7c7edc --- /dev/null +++ b/refactor/src/components/Product/SingleProduct.component.jsx @@ -0,0 +1,145 @@ +import { useState, useEffect } from 'react'; + +import AddToCartButton from 'components/Cart/AddToCartButton.component'; +import LoadingSpinner from 'components/LoadingSpinner/LoadingSpinner.component'; + +import { filteredVariantPrice, paddedPrice } from 'utils/functions/functions'; + +/** + * Shows a single product with an Add To Cart button. + * Uses GraphQL for product data + * @param {Object} product // Product data + */ +const SingleProduct = ({ product }) => { + const [isLoading, setIsLoading] = useState(true); + const [selectedVariation, setselectedVariation] = useState(); + + useEffect(() => { + setIsLoading(false); + if (product.variations) { + const firstVariant = product.variations.nodes[0].databaseId; + setselectedVariation(firstVariant); + } + }, [product.variations]); + + let { description, image, name, onSale, price, regularPrice, salePrice } = + product; + + // Add padding/empty character after currency symbol here + if (price) { + price = paddedPrice(price, 'kr'); + } + if (regularPrice) { + regularPrice = paddedPrice(regularPrice, 'kr'); + } + if (salePrice) { + salePrice = paddedPrice(salePrice, 'kr'); + } + + // Strip out HTML from description + const DESCRIPTION_WITHOUT_HTML = description.replace(/(<([^>]+)>)/gi, ''); + + return ( +
+ {/* Show loading spinner while loading, and hide content while loading */} + {isLoading ? ( +
+

Laster produkt ...

+
+ +
+ ) : ( +
+
+ {image && ( + {name} + )} + {!image && ( + {name} + )} +
+

{name}

+
+ {/* Display sale price when on sale */} + {onSale && ( +
+

+ {product.variations && filteredVariantPrice(price)} + {!product.variations && salePrice} +

+

+ {product.variations && filteredVariantPrice(price, 'right')} + {!product.variations && regularPrice} +

+
+ )} + {/* Display regular price when not on sale */} + {!onSale && ( +

{price}

+ )} +
+

+ {DESCRIPTION_WITHOUT_HTML} +

+ {product.stockQuantity && ( +

+ {product.stockQuantity} på lager +

+ )} + {product.variations && ( +

+ Varianter + +

+ )} +
+ { + // Display default AddToCart button if we do not have variations. + // If we do, send the variationId to AddToCart button + } + {product.variations && ( + + )} + {!product.variations && } +
+
+
+
+ )} +
+ ); +}; + +export default SingleProduct; diff --git a/refactor/src/pages/index.tsx b/refactor/src/pages/index.tsx index df6d41b9a..0042f585f 100644 --- a/refactor/src/pages/index.tsx +++ b/refactor/src/pages/index.tsx @@ -1,5 +1,5 @@ import Hero from '@/components/Index/Hero.component'; -//import IndexProducts from '@/components/Product/IndexProducts.component'; +import DisplayProducts from '@/components/Product/DisplayProducts.component'; import Layout from '@/components/Layout/Layout.component'; import client from '@/utils/apollo/ApolloClient.js'; @@ -15,6 +15,7 @@ const HomePage = ({ products }: any) => ( <> + {products && } ); From 7199ce26fddb94b1892e9c34607170b325b17fb0 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Mon, 20 Feb 2023 01:34:52 +0100 Subject: [PATCH 016/262] Fix Typescript on products --- .../Product/DisplayProducts.component.tsx | 41 +++++++++++++++++-- refactor/src/pages/index.tsx | 15 +++++-- 2 files changed, 50 insertions(+), 6 deletions(-) diff --git a/refactor/src/components/Product/DisplayProducts.component.tsx b/refactor/src/components/Product/DisplayProducts.component.tsx index b51bceedb..d132bfb9c 100644 --- a/refactor/src/components/Product/DisplayProducts.component.tsx +++ b/refactor/src/components/Product/DisplayProducts.component.tsx @@ -3,14 +3,49 @@ import { v4 as uuidv4 } from 'uuid'; import { filteredVariantPrice, paddedPrice } from '@/utils/functions/functions'; +interface Image { + __typename: string; + sourceUrl: string; +} + +interface Node { + __typename: string; + price: string; + regularPrice: string; + salePrice?: string; +} + +interface Variations { + __typename: string; + nodes: Node[]; +} + +interface RootObject { + __typename: string; + databaseId: number; + name: string; + onSale: boolean; + slug: string; + image: Image; + price: string; + regularPrice: string; + salePrice?: string; + variations: Variations; +} + +interface IDisplayProductsProps { + products: RootObject[]; +} + /** * Displays all of the products as long as length is defined. * Does a map() over the props array and utilizes uuidv4 for unique key values. * @function DisplayProducts - * @param {object} products Products to render + * @param {IDisplayProductsProps} products Products to render * @returns {JSX.Element} - Rendered component */ -const DisplayProducts = ({ products }: any) => { + +const DisplayProducts = ({ products }: IDisplayProductsProps): JSX.Element => { return (
@@ -26,7 +61,7 @@ const DisplayProducts = ({ products }: any) => { slug, image, variations, - }: any) => { + }) => { // Add padding/empty character after currency symbol here if (price) { price = paddedPrice(price, 'kr'); diff --git a/refactor/src/pages/index.tsx b/refactor/src/pages/index.tsx index 0042f585f..9f9a4eb84 100644 --- a/refactor/src/pages/index.tsx +++ b/refactor/src/pages/index.tsx @@ -1,9 +1,15 @@ +// Components import Hero from '@/components/Index/Hero.component'; import DisplayProducts from '@/components/Product/DisplayProducts.component'; import Layout from '@/components/Layout/Layout.component'; +// Utilities import client from '@/utils/apollo/ApolloClient.js'; +// Types +import type { NextPage, GetStaticProps, InferGetStaticPropsType } from 'next'; + +// GraphQL import { FETCH_ALL_PRODUCTS_QUERY } from '@/utils/gql/GQL_QUERIES'; /** @@ -11,18 +17,21 @@ import { FETCH_ALL_PRODUCTS_QUERY } from '@/utils/gql/GQL_QUERIES'; * @param {Object} products * Initial static data is sent as props from getStaticProps and loaded through 'utils/gql/INITIAL_PRODUCTS' */ -const HomePage = ({ products }: any) => ( +const HomePage: NextPage = ({ + products, +}: InferGetStaticPropsType) => ( <> {products && } +
{JSON.stringify(products)}
); export default HomePage; -export async function getStaticProps() { +export const getStaticProps: GetStaticProps = async () => { const { data, loading, networkStatus } = await client.query({ query: FETCH_ALL_PRODUCTS_QUERY, }); @@ -35,4 +44,4 @@ export async function getStaticProps() { }, revalidate: 10, }; -} +}; From 552783c1940c4b99c98fc82b3d674cc20c496ed0 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Mon, 20 Feb 2023 01:35:14 +0100 Subject: [PATCH 017/262] Remove debug --- refactor/src/pages/index.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/refactor/src/pages/index.tsx b/refactor/src/pages/index.tsx index 9f9a4eb84..c37feda6a 100644 --- a/refactor/src/pages/index.tsx +++ b/refactor/src/pages/index.tsx @@ -24,7 +24,6 @@ const HomePage: NextPage = ({ {products && } -
{JSON.stringify(products)}
); From f8b6ef08539b0c9fc5bf7be4f7166c608c28ba17 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Mon, 20 Feb 2023 01:45:02 +0100 Subject: [PATCH 018/262] Add page Produkter --- refactor/src/pages/index.tsx | 6 +++-- refactor/src/pages/produkter.tsx | 46 ++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 refactor/src/pages/produkter.tsx diff --git a/refactor/src/pages/index.tsx b/refactor/src/pages/index.tsx index c37feda6a..8f418bbce 100644 --- a/refactor/src/pages/index.tsx +++ b/refactor/src/pages/index.tsx @@ -14,9 +14,11 @@ import { FETCH_ALL_PRODUCTS_QUERY } from '@/utils/gql/GQL_QUERIES'; /** * Main index page - * @param {Object} products - * Initial static data is sent as props from getStaticProps and loaded through 'utils/gql/INITIAL_PRODUCTS' + * @function HomePage + * @param {InferGetStaticPropsType} products + * @returns {JSX.Element} - Rendered component */ + const HomePage: NextPage = ({ products, }: InferGetStaticPropsType) => ( diff --git a/refactor/src/pages/produkter.tsx b/refactor/src/pages/produkter.tsx new file mode 100644 index 000000000..5bf1d3dd1 --- /dev/null +++ b/refactor/src/pages/produkter.tsx @@ -0,0 +1,46 @@ +// Components +import DisplayProducts from '@/components/Product/DisplayProducts.component'; +import Layout from '@/components/Layout/Layout.component'; + +// GraphQL +import { FETCH_ALL_PRODUCTS_QUERY } from '@/utils/gql/GQL_QUERIES'; + +// Utilities +import client from '@/utils/apollo/ApolloClient.js'; + +// Types +import type { NextPage, GetStaticProps, InferGetStaticPropsType } from 'next'; + +/** + * Displays all of the products. + * @function HomePage + * @param {InferGetStaticPropsType} products + * @returns {JSX.Element} - Rendered component + */ + +const Produkter: NextPage = ({ + products, +}: InferGetStaticPropsType) => ( + <> + + {products && } + + +); + +export default Produkter; + +export const getStaticProps: GetStaticProps = async () => { + const { data, loading, networkStatus } = await client.query({ + query: FETCH_ALL_PRODUCTS_QUERY, + }); + + return { + props: { + products: data.products.nodes, + loading, + networkStatus, + }, + revalidate: 10, + }; +}; From 3d2ae8de300e3622af9b32f8c005580ff85b6363 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Mon, 20 Feb 2023 02:09:41 +0100 Subject: [PATCH 019/262] Single product basic design --- .../components/Layout/PageTitle.component.tsx | 2 +- ...ponent.jsx => SingleProduct.component.tsx} | 26 +++----- refactor/src/pages/produkt/[slug].tsx | 63 +++++++++++++++++++ 3 files changed, 74 insertions(+), 17 deletions(-) rename refactor/src/components/Product/{SingleProduct.component.jsx => SingleProduct.component.tsx} (84%) create mode 100644 refactor/src/pages/produkt/[slug].tsx diff --git a/refactor/src/components/Layout/PageTitle.component.tsx b/refactor/src/components/Layout/PageTitle.component.tsx index 716d835f9..a9f368bc6 100644 --- a/refactor/src/components/Layout/PageTitle.component.tsx +++ b/refactor/src/components/Layout/PageTitle.component.tsx @@ -17,7 +17,7 @@ const PageTitle = ({ title, marginLeft }: IPageTitleProps) => ( marginLeft ? 'pl-8' : 'pl-4' } pl-4 mx-auto mt-32 text-center bg-white`} > - + {title}
diff --git a/refactor/src/components/Product/SingleProduct.component.jsx b/refactor/src/components/Product/SingleProduct.component.tsx similarity index 84% rename from refactor/src/components/Product/SingleProduct.component.jsx rename to refactor/src/components/Product/SingleProduct.component.tsx index c9e7c7edc..d260f80ea 100644 --- a/refactor/src/components/Product/SingleProduct.component.jsx +++ b/refactor/src/components/Product/SingleProduct.component.tsx @@ -1,18 +1,18 @@ import { useState, useEffect } from 'react'; -import AddToCartButton from 'components/Cart/AddToCartButton.component'; -import LoadingSpinner from 'components/LoadingSpinner/LoadingSpinner.component'; +//import AddToCartButton from 'components/Cart/AddToCartButton.component'; +//import LoadingSpinner from 'components/LoadingSpinner/LoadingSpinner.component'; -import { filteredVariantPrice, paddedPrice } from 'utils/functions/functions'; +import { filteredVariantPrice, paddedPrice } from '@/utils/functions/functions'; /** * Shows a single product with an Add To Cart button. * Uses GraphQL for product data * @param {Object} product // Product data */ -const SingleProduct = ({ product }) => { +const SingleProduct = ({ product }: any) => { const [isLoading, setIsLoading] = useState(true); - const [selectedVariation, setselectedVariation] = useState(); + const [selectedVariation, setselectedVariation] = useState(); useEffect(() => { setIsLoading(false); @@ -46,7 +46,7 @@ const SingleProduct = ({ product }) => {

Laster produkt ...


- + LoadingSpinner
) : (
@@ -74,7 +74,7 @@ const SingleProduct = ({ product }) => { {onSale && (

- {product.variations && filteredVariantPrice(price)} + {product.variations && filteredVariantPrice(price, '')} {!product.variations && salePrice}

@@ -111,7 +111,7 @@ const SingleProduct = ({ product }) => { }} > {product.variations.nodes.map( - ({ id, name, databaseId, stockQuantity }) => { + ({ id, name, databaseId, stockQuantity }: any) => { // Remove product name from variation name const filteredName = name.split('- ').pop(); return ( @@ -125,14 +125,8 @@ const SingleProduct = ({ product }) => {

)}
- { - // Display default AddToCart button if we do not have variations. - // If we do, send the variationId to AddToCart button - } - {product.variations && ( - - )} - {!product.variations && } + +
diff --git a/refactor/src/pages/produkt/[slug].tsx b/refactor/src/pages/produkt/[slug].tsx new file mode 100644 index 000000000..24f7f6906 --- /dev/null +++ b/refactor/src/pages/produkt/[slug].tsx @@ -0,0 +1,63 @@ +// Imports +import { withRouter } from 'next/router'; + +// Components +import SingleProduct from '@/components/Product/SingleProduct.component'; +import Layout from '@/components/Layout/Layout.component'; + +// Utilities +import client from '@/utils/apollo/ApolloClient'; + +// Types +import type { + NextPage, + GetServerSideProps, + InferGetServerSidePropsType, +} from 'next'; + +// GraphQL +import { GET_SINGLE_PRODUCT } from '@/utils/gql/GQL_QUERIES'; + +/** + * Display a single product with dynamic pretty urls + * @function Produkt + * @param {InferGetServerSidePropsType} products + * @returns {JSX.Element} - Rendered component + */ +const Produkt: NextPage = ({ + product, + networkStatus, +}: InferGetServerSidePropsType) => { + const hasError = networkStatus === '8'; + return ( + <> + + {product ? ( + + ) : ( +
Laster produkt ...
+ )} + {hasError && ( +
+ Feil under lasting av produkt ... +
+ )} +
+ + ); +}; + +export default withRouter(Produkt); + +export const getServerSideProps: GetServerSideProps = async ({ + query: { id }, +}) => { + const { data, loading, networkStatus } = await client.query({ + query: GET_SINGLE_PRODUCT, + variables: { id }, + }); + + return { + props: { product: data.product, loading, networkStatus }, + }; +}; From d6ec531bab4191e647e4ae6fb9850ba3d7695053 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Mon, 20 Feb 2023 06:24:56 +0100 Subject: [PATCH 020/262] Playwright and animations --- refactor/.github/workflows/playwright.yml | 27 ++ refactor/.gitignore | 3 + refactor/package-lock.json | 29 ++ refactor/package.json | 1 + refactor/playwright.config.ts | 90 ++++ .../Animations/FadeLeftToRight.component.tsx | 55 +++ .../FadeLeftToRightItem.component.tsx | 28 ++ .../Animations/FadeUp.component.tsx | 35 ++ .../Animations/types/Animations.types.ts | 26 ++ .../components/Footer/Stickynav.component.jsx | 6 +- refactor/src/pages/index.tsx | 8 +- refactor/src/pages/produkter.tsx | 2 +- refactor/tests-examples/demo-todo-app.spec.ts | 437 ++++++++++++++++++ refactor/tests/example.spec.ts | 18 + 14 files changed, 757 insertions(+), 8 deletions(-) create mode 100644 refactor/.github/workflows/playwright.yml create mode 100644 refactor/playwright.config.ts create mode 100644 refactor/src/components/Animations/FadeLeftToRight.component.tsx create mode 100644 refactor/src/components/Animations/FadeLeftToRightItem.component.tsx create mode 100644 refactor/src/components/Animations/FadeUp.component.tsx create mode 100644 refactor/src/components/Animations/types/Animations.types.ts create mode 100644 refactor/tests-examples/demo-todo-app.spec.ts create mode 100644 refactor/tests/example.spec.ts diff --git a/refactor/.github/workflows/playwright.yml b/refactor/.github/workflows/playwright.yml new file mode 100644 index 000000000..041160cce --- /dev/null +++ b/refactor/.github/workflows/playwright.yml @@ -0,0 +1,27 @@ +name: Playwright Tests +on: + push: + branches: [ main, master ] + pull_request: + branches: [ main, master ] +jobs: + test: + timeout-minutes: 60 + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: 16 + - name: Install dependencies + run: npm ci + - name: Install Playwright Browsers + run: npx playwright install --with-deps + - name: Run Playwright tests + run: npx playwright test + - uses: actions/upload-artifact@v3 + if: always() + with: + name: playwright-report + path: playwright-report/ + retention-days: 30 diff --git a/refactor/.gitignore b/refactor/.gitignore index c87c9b392..ec4165f61 100644 --- a/refactor/.gitignore +++ b/refactor/.gitignore @@ -34,3 +34,6 @@ yarn-error.log* # typescript *.tsbuildinfo next-env.d.ts +/test-results/ +/playwright-report/ +/playwright/.cache/ diff --git a/refactor/package-lock.json b/refactor/package-lock.json index 63bfd5702..bf67717c1 100644 --- a/refactor/package-lock.json +++ b/refactor/package-lock.json @@ -26,6 +26,7 @@ "uuid": "^9.0.0" }, "devDependencies": { + "@playwright/test": "^1.30.0", "@types/node": "18.14.0", "@types/uuid": "^9.0.0", "babel-plugin-styled-components": "^2.0.7", @@ -1367,6 +1368,22 @@ "url": "https://opencollective.com/unts" } }, + "node_modules/@playwright/test": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.30.0.tgz", + "integrity": "sha512-SVxkQw1xvn/Wk/EvBnqWIq6NLo1AppwbYOjNLmyU0R1RoQ3rLEBtmjTnElcnz8VEtn11fptj1ECxK0tgURhajw==", + "dev": true, + "dependencies": { + "@types/node": "*", + "playwright-core": "1.30.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=14" + } + }, "node_modules/@rushstack/eslint-patch": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz", @@ -4465,6 +4482,18 @@ "node": ">=0.10.0" } }, + "node_modules/playwright-core": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.30.0.tgz", + "integrity": "sha512-7AnRmTCf+GVYhHbLJsGUtskWTE33SwMZkybJ0v6rqR1boxq2x36U7p1vDRV7HO2IwTZgmycracLxPEJI49wu4g==", + "dev": true, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=14" + } + }, "node_modules/postcss": { "version": "8.4.21", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", diff --git a/refactor/package.json b/refactor/package.json index f9212d3ba..377ae6a77 100644 --- a/refactor/package.json +++ b/refactor/package.json @@ -36,6 +36,7 @@ "uuid": "^9.0.0" }, "devDependencies": { + "@playwright/test": "^1.30.0", "@types/node": "18.14.0", "@types/uuid": "^9.0.0", "babel-plugin-styled-components": "^2.0.7", diff --git a/refactor/playwright.config.ts b/refactor/playwright.config.ts new file mode 100644 index 000000000..5e5154bed --- /dev/null +++ b/refactor/playwright.config.ts @@ -0,0 +1,90 @@ +import { defineConfig, devices } from '@playwright/test'; + +/** + * Read environment variables from file. + * https://github.com/motdotla/dotenv + */ +// require('dotenv').config(); + +/** + * See https://playwright.dev/docs/test-configuration. + */ +export default defineConfig({ + testDir: './tests', + /* Maximum time one test can run for. */ + timeout: 30 * 1000, + expect: { + /** + * Maximum time expect() should wait for the condition to be met. + * For example in `await expect(locator).toHaveText();` + */ + timeout: 5000 + }, + /* Run tests in files in parallel */ + fullyParallel: true, + /* Fail the build on CI if you accidentally left test.only in the source code. */ + forbidOnly: !!process.env.CI, + /* Retry on CI only */ + retries: process.env.CI ? 2 : 0, + /* Opt out of parallel tests on CI. */ + workers: process.env.CI ? 1 : undefined, + /* Reporter to use. See https://playwright.dev/docs/test-reporters */ + reporter: 'html', + /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ + use: { + /* Maximum time each action such as `click()` can take. Defaults to 0 (no limit). */ + actionTimeout: 0, + /* Base URL to use in actions like `await page.goto('/')`. */ + // baseURL: 'http://localhost:3000', + + /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ + trace: 'on-first-retry', + }, + + /* Configure projects for major browsers */ + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + + { + name: 'firefox', + use: { ...devices['Desktop Firefox'] }, + }, + + { + name: 'webkit', + use: { ...devices['Desktop Safari'] }, + }, + + /* Test against mobile viewports. */ + // { + // name: 'Mobile Chrome', + // use: { ...devices['Pixel 5'] }, + // }, + // { + // name: 'Mobile Safari', + // use: { ...devices['iPhone 12'] }, + // }, + + /* Test against branded browsers. */ + // { + // name: 'Microsoft Edge', + // use: { channel: 'msedge' }, + // }, + // { + // name: 'Google Chrome', + // use: { channel: 'chrome' }, + // }, + ], + + /* Folder for test artifacts such as screenshots, videos, traces, etc. */ + // outputDir: 'test-results/', + + /* Run your local dev server before starting the tests */ + // webServer: { + // command: 'npm run start', + // port: 3000, + // }, +}); diff --git a/refactor/src/components/Animations/FadeLeftToRight.component.tsx b/refactor/src/components/Animations/FadeLeftToRight.component.tsx new file mode 100644 index 000000000..1cfee7917 --- /dev/null +++ b/refactor/src/components/Animations/FadeLeftToRight.component.tsx @@ -0,0 +1,55 @@ +// CircleCI doesn't like import { motion } from "framer-motion" here, so we use require +const { motion } = require('framer-motion'); + +/** + * Fade content left to right. Needs to be used with FadeLeftToRightItem + * @function FadeLeftToRight + * @param {ReactNode} children - Children content to render + * @param {string} cssClass - CSS classes to apply to component + * @param {number} delay - Time to wait before starting animation + * @param {number} staggerDelay - Time to wait before starting animation for children items + * @param {boolean} animateNotReverse - Start animation backwards + * @returns {JSX.Element} - Rendered component + */ + +const FadeLeftToRight = ({ + children, + cssClass, + delay, + staggerDelay, + animateNotReverse, +}: any) => { + const FadeLeftToRightVariants = { + visible: { + opacity: 1, + transition: { + when: 'beforeChildren', + staggerChildren: staggerDelay ? staggerDelay : 0.5, + delay, + ease: 'easeInOut', + staggerDirection: 1, + }, + }, + hidden: { + opacity: 0, + transition: { + when: 'afterChildren', + staggerChildren: staggerDelay ? staggerDelay : 0.5, + staggerDirection: -1, + }, + }, + }; + return ( + + {children} + + ); +}; + +export default FadeLeftToRight; diff --git a/refactor/src/components/Animations/FadeLeftToRightItem.component.tsx b/refactor/src/components/Animations/FadeLeftToRightItem.component.tsx new file mode 100644 index 000000000..f1e82fcca --- /dev/null +++ b/refactor/src/components/Animations/FadeLeftToRightItem.component.tsx @@ -0,0 +1,28 @@ +// CircleCI doesn't like import { motion } from "framer-motion" here, so we use require +const { motion } = require('framer-motion'); + +/** + * Fade content left to right. Needs to be used with FadeLeftToRight as parent container + * @function FadeLeftToRightItem + * @param {ReactNode} children - Children content to render + * @param {string} cssClass - CSS classes to apply to component + * @returns {JSX.Element} - Rendered component + */ + +const FadeLeftToRightItem = ({ children, cssClass }: any) => { + const FadeLeftToRightItemVariants = { + visible: { opacity: 1, x: 0 }, + hidden: { opacity: 0, x: -20 }, + }; + return ( + + {children} + + ); +}; + +export default FadeLeftToRightItem; diff --git a/refactor/src/components/Animations/FadeUp.component.tsx b/refactor/src/components/Animations/FadeUp.component.tsx new file mode 100644 index 000000000..7a13393c4 --- /dev/null +++ b/refactor/src/components/Animations/FadeUp.component.tsx @@ -0,0 +1,35 @@ +// CircleCI doesn't like import { motion } from "framer-motion" here, so we use require +const { motion } = require('framer-motion'); + +/** + * Fade up content animation + * @function FadeUp + * @param {ReactNode} children - Children content to render + * @param {string} cssClass - CSS classes to apply to component + * @param {number} delay - Time to wait before starting animation + * @returns {JSX.Element} - Rendered component + */ + +const FadeUp = ({ children, cssClass, delay }: any) => { + const fadeUpVariants = { + initial: { opacity: 0, y: 20 }, + animate: { + y: 0, + opacity: 1, + transition: { delay, type: 'spring', duration: 0.5, stiffness: 110 }, + }, + }; + return ( + + {children} + + ); +}; + +export default FadeUp; diff --git a/refactor/src/components/Animations/types/Animations.types.ts b/refactor/src/components/Animations/types/Animations.types.ts new file mode 100644 index 000000000..c6d0a36ab --- /dev/null +++ b/refactor/src/components/Animations/types/Animations.types.ts @@ -0,0 +1,26 @@ +import { ReactNode } from "react"; + +export interface IAnimateProps { + children: ReactNode; + cssClass?: string; +} + +export interface IAnimateBounceProps { + children: ReactNode; + cssClass?: string; + viewAmount?: "some" | "all" | number; +} + +export interface IAnimateWithDelayProps { + children: ReactNode; + cssClass?: string; + delay: number; +} + +export interface IAnimateStaggerWithDelayProps { + children: ReactNode; + cssClass?: string; + delay: number; + staggerDelay?: number; + animateNotReverse: boolean; +} diff --git a/refactor/src/components/Footer/Stickynav.component.jsx b/refactor/src/components/Footer/Stickynav.component.jsx index 80a977e25..107c5b45d 100644 --- a/refactor/src/components/Footer/Stickynav.component.jsx +++ b/refactor/src/components/Footer/Stickynav.component.jsx @@ -1,8 +1,8 @@ import Link from 'next/link'; -import Cart from '../Cart/Cart.component'; -import Search from '../AlgoliaSearch/AlgoliaSearchBox.component'; -import SVGMobileSearchIcon from '../SVG/SVGMobileSearchIcon.component'; +import Cart from '@/components/Cart/Cart.component'; +import Search from '@/components/AlgoliaSearch/AlgoliaSearchBox.component'; +import SVGMobileSearchIcon from '@/components/SVG/SVGMobileSearchIcon.component'; import Hamburger from './Hamburger.component'; diff --git a/refactor/src/pages/index.tsx b/refactor/src/pages/index.tsx index 8f418bbce..8c55f878b 100644 --- a/refactor/src/pages/index.tsx +++ b/refactor/src/pages/index.tsx @@ -14,12 +14,12 @@ import { FETCH_ALL_PRODUCTS_QUERY } from '@/utils/gql/GQL_QUERIES'; /** * Main index page - * @function HomePage + * @function Index * @param {InferGetStaticPropsType} products * @returns {JSX.Element} - Rendered component */ -const HomePage: NextPage = ({ +const Index: NextPage = ({ products, }: InferGetStaticPropsType) => ( <> @@ -30,7 +30,7 @@ const HomePage: NextPage = ({ ); -export default HomePage; +export default Index; export const getStaticProps: GetStaticProps = async () => { const { data, loading, networkStatus } = await client.query({ @@ -43,6 +43,6 @@ export const getStaticProps: GetStaticProps = async () => { loading, networkStatus, }, - revalidate: 10, + revalidate: 60, }; }; diff --git a/refactor/src/pages/produkter.tsx b/refactor/src/pages/produkter.tsx index 5bf1d3dd1..7bdb2aca1 100644 --- a/refactor/src/pages/produkter.tsx +++ b/refactor/src/pages/produkter.tsx @@ -41,6 +41,6 @@ export const getStaticProps: GetStaticProps = async () => { loading, networkStatus, }, - revalidate: 10, + revalidate: 60, }; }; diff --git a/refactor/tests-examples/demo-todo-app.spec.ts b/refactor/tests-examples/demo-todo-app.spec.ts new file mode 100644 index 000000000..2fd6016fe --- /dev/null +++ b/refactor/tests-examples/demo-todo-app.spec.ts @@ -0,0 +1,437 @@ +import { test, expect, type Page } from '@playwright/test'; + +test.beforeEach(async ({ page }) => { + await page.goto('https://demo.playwright.dev/todomvc'); +}); + +const TODO_ITEMS = [ + 'buy some cheese', + 'feed the cat', + 'book a doctors appointment' +]; + +test.describe('New Todo', () => { + test('should allow me to add todo items', async ({ page }) => { + // create a new todo locator + const newTodo = page.getByPlaceholder('What needs to be done?'); + + // Create 1st todo. + await newTodo.fill(TODO_ITEMS[0]); + await newTodo.press('Enter'); + + // Make sure the list only has one todo item. + await expect(page.getByTestId('todo-title')).toHaveText([ + TODO_ITEMS[0] + ]); + + // Create 2nd todo. + await newTodo.fill(TODO_ITEMS[1]); + await newTodo.press('Enter'); + + // Make sure the list now has two todo items. + await expect(page.getByTestId('todo-title')).toHaveText([ + TODO_ITEMS[0], + TODO_ITEMS[1] + ]); + + await checkNumberOfTodosInLocalStorage(page, 2); + }); + + test('should clear text input field when an item is added', async ({ page }) => { + // create a new todo locator + const newTodo = page.getByPlaceholder('What needs to be done?'); + + // Create one todo item. + await newTodo.fill(TODO_ITEMS[0]); + await newTodo.press('Enter'); + + // Check that input is empty. + await expect(newTodo).toBeEmpty(); + await checkNumberOfTodosInLocalStorage(page, 1); + }); + + test('should append new items to the bottom of the list', async ({ page }) => { + // Create 3 items. + await createDefaultTodos(page); + + // create a todo count locator + const todoCount = page.getByTestId('todo-count') + + // Check test using different methods. + await expect(page.getByText('3 items left')).toBeVisible(); + await expect(todoCount).toHaveText('3 items left'); + await expect(todoCount).toContainText('3'); + await expect(todoCount).toHaveText(/3/); + + // Check all items in one call. + await expect(page.getByTestId('todo-title')).toHaveText(TODO_ITEMS); + await checkNumberOfTodosInLocalStorage(page, 3); + }); +}); + +test.describe('Mark all as completed', () => { + test.beforeEach(async ({ page }) => { + await createDefaultTodos(page); + await checkNumberOfTodosInLocalStorage(page, 3); + }); + + test.afterEach(async ({ page }) => { + await checkNumberOfTodosInLocalStorage(page, 3); + }); + + test('should allow me to mark all items as completed', async ({ page }) => { + // Complete all todos. + await page.getByLabel('Mark all as complete').check(); + + // Ensure all todos have 'completed' class. + await expect(page.getByTestId('todo-item')).toHaveClass(['completed', 'completed', 'completed']); + await checkNumberOfCompletedTodosInLocalStorage(page, 3); + }); + + test('should allow me to clear the complete state of all items', async ({ page }) => { + const toggleAll = page.getByLabel('Mark all as complete'); + // Check and then immediately uncheck. + await toggleAll.check(); + await toggleAll.uncheck(); + + // Should be no completed classes. + await expect(page.getByTestId('todo-item')).toHaveClass(['', '', '']); + }); + + test('complete all checkbox should update state when items are completed / cleared', async ({ page }) => { + const toggleAll = page.getByLabel('Mark all as complete'); + await toggleAll.check(); + await expect(toggleAll).toBeChecked(); + await checkNumberOfCompletedTodosInLocalStorage(page, 3); + + // Uncheck first todo. + const firstTodo = page.getByTestId('todo-item').nth(0); + await firstTodo.getByRole('checkbox').uncheck(); + + // Reuse toggleAll locator and make sure its not checked. + await expect(toggleAll).not.toBeChecked(); + + await firstTodo.getByRole('checkbox').check(); + await checkNumberOfCompletedTodosInLocalStorage(page, 3); + + // Assert the toggle all is checked again. + await expect(toggleAll).toBeChecked(); + }); +}); + +test.describe('Item', () => { + + test('should allow me to mark items as complete', async ({ page }) => { + // create a new todo locator + const newTodo = page.getByPlaceholder('What needs to be done?'); + + // Create two items. + for (const item of TODO_ITEMS.slice(0, 2)) { + await newTodo.fill(item); + await newTodo.press('Enter'); + } + + // Check first item. + const firstTodo = page.getByTestId('todo-item').nth(0); + await firstTodo.getByRole('checkbox').check(); + await expect(firstTodo).toHaveClass('completed'); + + // Check second item. + const secondTodo = page.getByTestId('todo-item').nth(1); + await expect(secondTodo).not.toHaveClass('completed'); + await secondTodo.getByRole('checkbox').check(); + + // Assert completed class. + await expect(firstTodo).toHaveClass('completed'); + await expect(secondTodo).toHaveClass('completed'); + }); + + test('should allow me to un-mark items as complete', async ({ page }) => { + // create a new todo locator + const newTodo = page.getByPlaceholder('What needs to be done?'); + + // Create two items. + for (const item of TODO_ITEMS.slice(0, 2)) { + await newTodo.fill(item); + await newTodo.press('Enter'); + } + + const firstTodo = page.getByTestId('todo-item').nth(0); + const secondTodo = page.getByTestId('todo-item').nth(1); + const firstTodoCheckbox = firstTodo.getByRole('checkbox'); + + await firstTodoCheckbox.check(); + await expect(firstTodo).toHaveClass('completed'); + await expect(secondTodo).not.toHaveClass('completed'); + await checkNumberOfCompletedTodosInLocalStorage(page, 1); + + await firstTodoCheckbox.uncheck(); + await expect(firstTodo).not.toHaveClass('completed'); + await expect(secondTodo).not.toHaveClass('completed'); + await checkNumberOfCompletedTodosInLocalStorage(page, 0); + }); + + test('should allow me to edit an item', async ({ page }) => { + await createDefaultTodos(page); + + const todoItems = page.getByTestId('todo-item'); + const secondTodo = todoItems.nth(1); + await secondTodo.dblclick(); + await expect(secondTodo.getByRole('textbox', { name: 'Edit' })).toHaveValue(TODO_ITEMS[1]); + await secondTodo.getByRole('textbox', { name: 'Edit' }).fill('buy some sausages'); + await secondTodo.getByRole('textbox', { name: 'Edit' }).press('Enter'); + + // Explicitly assert the new text value. + await expect(todoItems).toHaveText([ + TODO_ITEMS[0], + 'buy some sausages', + TODO_ITEMS[2] + ]); + await checkTodosInLocalStorage(page, 'buy some sausages'); + }); +}); + +test.describe('Editing', () => { + test.beforeEach(async ({ page }) => { + await createDefaultTodos(page); + await checkNumberOfTodosInLocalStorage(page, 3); + }); + + test('should hide other controls when editing', async ({ page }) => { + const todoItem = page.getByTestId('todo-item').nth(1); + await todoItem.dblclick(); + await expect(todoItem.getByRole('checkbox')).not.toBeVisible(); + await expect(todoItem.locator('label', { + hasText: TODO_ITEMS[1], + })).not.toBeVisible(); + await checkNumberOfTodosInLocalStorage(page, 3); + }); + + test('should save edits on blur', async ({ page }) => { + const todoItems = page.getByTestId('todo-item'); + await todoItems.nth(1).dblclick(); + await todoItems.nth(1).getByRole('textbox', { name: 'Edit' }).fill('buy some sausages'); + await todoItems.nth(1).getByRole('textbox', { name: 'Edit' }).dispatchEvent('blur'); + + await expect(todoItems).toHaveText([ + TODO_ITEMS[0], + 'buy some sausages', + TODO_ITEMS[2], + ]); + await checkTodosInLocalStorage(page, 'buy some sausages'); + }); + + test('should trim entered text', async ({ page }) => { + const todoItems = page.getByTestId('todo-item'); + await todoItems.nth(1).dblclick(); + await todoItems.nth(1).getByRole('textbox', { name: 'Edit' }).fill(' buy some sausages '); + await todoItems.nth(1).getByRole('textbox', { name: 'Edit' }).press('Enter'); + + await expect(todoItems).toHaveText([ + TODO_ITEMS[0], + 'buy some sausages', + TODO_ITEMS[2], + ]); + await checkTodosInLocalStorage(page, 'buy some sausages'); + }); + + test('should remove the item if an empty text string was entered', async ({ page }) => { + const todoItems = page.getByTestId('todo-item'); + await todoItems.nth(1).dblclick(); + await todoItems.nth(1).getByRole('textbox', { name: 'Edit' }).fill(''); + await todoItems.nth(1).getByRole('textbox', { name: 'Edit' }).press('Enter'); + + await expect(todoItems).toHaveText([ + TODO_ITEMS[0], + TODO_ITEMS[2], + ]); + }); + + test('should cancel edits on escape', async ({ page }) => { + const todoItems = page.getByTestId('todo-item'); + await todoItems.nth(1).dblclick(); + await todoItems.nth(1).getByRole('textbox', { name: 'Edit' }).fill('buy some sausages'); + await todoItems.nth(1).getByRole('textbox', { name: 'Edit' }).press('Escape'); + await expect(todoItems).toHaveText(TODO_ITEMS); + }); +}); + +test.describe('Counter', () => { + test('should display the current number of todo items', async ({ page }) => { + // create a new todo locator + const newTodo = page.getByPlaceholder('What needs to be done?'); + + // create a todo count locator + const todoCount = page.getByTestId('todo-count') + + await newTodo.fill(TODO_ITEMS[0]); + await newTodo.press('Enter'); + + await expect(todoCount).toContainText('1'); + + await newTodo.fill(TODO_ITEMS[1]); + await newTodo.press('Enter'); + await expect(todoCount).toContainText('2'); + + await checkNumberOfTodosInLocalStorage(page, 2); + }); +}); + +test.describe('Clear completed button', () => { + test.beforeEach(async ({ page }) => { + await createDefaultTodos(page); + }); + + test('should display the correct text', async ({ page }) => { + await page.locator('.todo-list li .toggle').first().check(); + await expect(page.getByRole('button', { name: 'Clear completed' })).toBeVisible(); + }); + + test('should remove completed items when clicked', async ({ page }) => { + const todoItems = page.getByTestId('todo-item'); + await todoItems.nth(1).getByRole('checkbox').check(); + await page.getByRole('button', { name: 'Clear completed' }).click(); + await expect(todoItems).toHaveCount(2); + await expect(todoItems).toHaveText([TODO_ITEMS[0], TODO_ITEMS[2]]); + }); + + test('should be hidden when there are no items that are completed', async ({ page }) => { + await page.locator('.todo-list li .toggle').first().check(); + await page.getByRole('button', { name: 'Clear completed' }).click(); + await expect(page.getByRole('button', { name: 'Clear completed' })).toBeHidden(); + }); +}); + +test.describe('Persistence', () => { + test('should persist its data', async ({ page }) => { + // create a new todo locator + const newTodo = page.getByPlaceholder('What needs to be done?'); + + for (const item of TODO_ITEMS.slice(0, 2)) { + await newTodo.fill(item); + await newTodo.press('Enter'); + } + + const todoItems = page.getByTestId('todo-item'); + const firstTodoCheck = todoItems.nth(0).getByRole('checkbox'); + await firstTodoCheck.check(); + await expect(todoItems).toHaveText([TODO_ITEMS[0], TODO_ITEMS[1]]); + await expect(firstTodoCheck).toBeChecked(); + await expect(todoItems).toHaveClass(['completed', '']); + + // Ensure there is 1 completed item. + await checkNumberOfCompletedTodosInLocalStorage(page, 1); + + // Now reload. + await page.reload(); + await expect(todoItems).toHaveText([TODO_ITEMS[0], TODO_ITEMS[1]]); + await expect(firstTodoCheck).toBeChecked(); + await expect(todoItems).toHaveClass(['completed', '']); + }); +}); + +test.describe('Routing', () => { + test.beforeEach(async ({ page }) => { + await createDefaultTodos(page); + // make sure the app had a chance to save updated todos in storage + // before navigating to a new view, otherwise the items can get lost :( + // in some frameworks like Durandal + await checkTodosInLocalStorage(page, TODO_ITEMS[0]); + }); + + test('should allow me to display active items', async ({ page }) => { + const todoItem = page.getByTestId('todo-item'); + await page.getByTestId('todo-item').nth(1).getByRole('checkbox').check(); + + await checkNumberOfCompletedTodosInLocalStorage(page, 1); + await page.getByRole('link', { name: 'Active' }).click(); + await expect(todoItem).toHaveCount(2); + await expect(todoItem).toHaveText([TODO_ITEMS[0], TODO_ITEMS[2]]); + }); + + test('should respect the back button', async ({ page }) => { + const todoItem = page.getByTestId('todo-item'); + await page.getByTestId('todo-item').nth(1).getByRole('checkbox').check(); + + await checkNumberOfCompletedTodosInLocalStorage(page, 1); + + await test.step('Showing all items', async () => { + await page.getByRole('link', { name: 'All' }).click(); + await expect(todoItem).toHaveCount(3); + }); + + await test.step('Showing active items', async () => { + await page.getByRole('link', { name: 'Active' }).click(); + }); + + await test.step('Showing completed items', async () => { + await page.getByRole('link', { name: 'Completed' }).click(); + }); + + await expect(todoItem).toHaveCount(1); + await page.goBack(); + await expect(todoItem).toHaveCount(2); + await page.goBack(); + await expect(todoItem).toHaveCount(3); + }); + + test('should allow me to display completed items', async ({ page }) => { + await page.getByTestId('todo-item').nth(1).getByRole('checkbox').check(); + await checkNumberOfCompletedTodosInLocalStorage(page, 1); + await page.getByRole('link', { name: 'Completed' }).click(); + await expect(page.getByTestId('todo-item')).toHaveCount(1); + }); + + test('should allow me to display all items', async ({ page }) => { + await page.getByTestId('todo-item').nth(1).getByRole('checkbox').check(); + await checkNumberOfCompletedTodosInLocalStorage(page, 1); + await page.getByRole('link', { name: 'Active' }).click(); + await page.getByRole('link', { name: 'Completed' }).click(); + await page.getByRole('link', { name: 'All' }).click(); + await expect(page.getByTestId('todo-item')).toHaveCount(3); + }); + + test('should highlight the currently applied filter', async ({ page }) => { + await expect(page.getByRole('link', { name: 'All' })).toHaveClass('selected'); + + //create locators for active and completed links + const activeLink = page.getByRole('link', { name: 'Active' }); + const completedLink = page.getByRole('link', { name: 'Completed' }); + await activeLink.click(); + + // Page change - active items. + await expect(activeLink).toHaveClass('selected'); + await completedLink.click(); + + // Page change - completed items. + await expect(completedLink).toHaveClass('selected'); + }); +}); + +async function createDefaultTodos(page: Page) { + // create a new todo locator + const newTodo = page.getByPlaceholder('What needs to be done?'); + + for (const item of TODO_ITEMS) { + await newTodo.fill(item); + await newTodo.press('Enter'); + } +} + +async function checkNumberOfTodosInLocalStorage(page: Page, expected: number) { + return await page.waitForFunction(e => { + return JSON.parse(localStorage['react-todos']).length === e; + }, expected); +} + +async function checkNumberOfCompletedTodosInLocalStorage(page: Page, expected: number) { + return await page.waitForFunction(e => { + return JSON.parse(localStorage['react-todos']).filter((todo: any) => todo.completed).length === e; + }, expected); +} + +async function checkTodosInLocalStorage(page: Page, title: string) { + return await page.waitForFunction(t => { + return JSON.parse(localStorage['react-todos']).map((todo: any) => todo.title).includes(t); + }, title); +} diff --git a/refactor/tests/example.spec.ts b/refactor/tests/example.spec.ts new file mode 100644 index 000000000..c511525c1 --- /dev/null +++ b/refactor/tests/example.spec.ts @@ -0,0 +1,18 @@ +import { test, expect } from '@playwright/test'; + +test('has title', async ({ page }) => { + await page.goto('https://playwright.dev/'); + + // Expect a title "to contain" a substring. + await expect(page).toHaveTitle(/Playwright/); +}); + +test('get started link', async ({ page }) => { + await page.goto('https://playwright.dev/'); + + // Click the get started link. + await page.getByRole('link', { name: 'Get started' }).click(); + + // Expects the URL to contain intro. + await expect(page).toHaveURL(/.*intro/); +}); From bce872c46a30b5216754cd381aa8adb378a75510 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Mon, 20 Feb 2023 23:09:57 +0100 Subject: [PATCH 021/262] Typescript animations --- .../src/components/Animations/FadeLeftToRight.component.tsx | 4 +++- .../components/Animations/FadeLeftToRightItem.component.tsx | 4 +++- refactor/src/components/Animations/FadeUp.component.tsx | 4 +++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/refactor/src/components/Animations/FadeLeftToRight.component.tsx b/refactor/src/components/Animations/FadeLeftToRight.component.tsx index 1cfee7917..0d6d4e283 100644 --- a/refactor/src/components/Animations/FadeLeftToRight.component.tsx +++ b/refactor/src/components/Animations/FadeLeftToRight.component.tsx @@ -1,6 +1,8 @@ // CircleCI doesn't like import { motion } from "framer-motion" here, so we use require const { motion } = require('framer-motion'); +import type { IAnimateStaggerWithDelayProps } from './types/Animations.types'; + /** * Fade content left to right. Needs to be used with FadeLeftToRightItem * @function FadeLeftToRight @@ -18,7 +20,7 @@ const FadeLeftToRight = ({ delay, staggerDelay, animateNotReverse, -}: any) => { +}: IAnimateStaggerWithDelayProps) => { const FadeLeftToRightVariants = { visible: { opacity: 1, diff --git a/refactor/src/components/Animations/FadeLeftToRightItem.component.tsx b/refactor/src/components/Animations/FadeLeftToRightItem.component.tsx index f1e82fcca..5f6fa5240 100644 --- a/refactor/src/components/Animations/FadeLeftToRightItem.component.tsx +++ b/refactor/src/components/Animations/FadeLeftToRightItem.component.tsx @@ -1,6 +1,8 @@ // CircleCI doesn't like import { motion } from "framer-motion" here, so we use require const { motion } = require('framer-motion'); +import type { IAnimateProps } from './types/Animations.types'; + /** * Fade content left to right. Needs to be used with FadeLeftToRight as parent container * @function FadeLeftToRightItem @@ -9,7 +11,7 @@ const { motion } = require('framer-motion'); * @returns {JSX.Element} - Rendered component */ -const FadeLeftToRightItem = ({ children, cssClass }: any) => { +const FadeLeftToRightItem = ({ children, cssClass }: IAnimateProps) => { const FadeLeftToRightItemVariants = { visible: { opacity: 1, x: 0 }, hidden: { opacity: 0, x: -20 }, diff --git a/refactor/src/components/Animations/FadeUp.component.tsx b/refactor/src/components/Animations/FadeUp.component.tsx index 7a13393c4..e350a2f84 100644 --- a/refactor/src/components/Animations/FadeUp.component.tsx +++ b/refactor/src/components/Animations/FadeUp.component.tsx @@ -1,6 +1,8 @@ // CircleCI doesn't like import { motion } from "framer-motion" here, so we use require const { motion } = require('framer-motion'); +import type { IAnimateWithDelayProps } from './types/Animations.types'; + /** * Fade up content animation * @function FadeUp @@ -10,7 +12,7 @@ const { motion } = require('framer-motion'); * @returns {JSX.Element} - Rendered component */ -const FadeUp = ({ children, cssClass, delay }: any) => { +const FadeUp = ({ children, cssClass, delay }: IAnimateWithDelayProps) => { const fadeUpVariants = { initial: { opacity: 0, y: 20 }, animate: { From 73f707d98a0eec03c7c522795d737f8dbf05aae1 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Mon, 20 Feb 2023 23:26:42 +0100 Subject: [PATCH 022/262] Update JSDoc Hero --- refactor/src/components/Index/Hero.component.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/refactor/src/components/Index/Hero.component.tsx b/refactor/src/components/Index/Hero.component.tsx index 83d84bca5..2423628f0 100644 --- a/refactor/src/components/Index/Hero.component.tsx +++ b/refactor/src/components/Index/Hero.component.tsx @@ -1,5 +1,7 @@ /** - * Initial hero content displayed on the front page, under the navigation bar. + * Renders Hero section for Index page + * @function PageTitle + * @returns {JSX.Element} - Rendered component */ const Hero = () => (
Date: Mon, 20 Feb 2023 23:26:52 +0100 Subject: [PATCH 023/262] Reusable button --- .../src/components/UI/Button.component.tsx | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 refactor/src/components/UI/Button.component.tsx diff --git a/refactor/src/components/UI/Button.component.tsx b/refactor/src/components/UI/Button.component.tsx new file mode 100644 index 000000000..82a09bf39 --- /dev/null +++ b/refactor/src/components/UI/Button.component.tsx @@ -0,0 +1,33 @@ +import { ReactNode } from 'react'; + +/** + * Renders a clickable button + * @function PageTitle + * @param {void} handleButtonClick - Handle button click + * @param {boolean?} buttonDisabled - Is button disabled? * + * @param {ReactNode} children - Children for button + * @returns {JSX.Element} - Rendered component + */ + +interface IButtonProps { + handleButtonClick?: () => void; + buttonDisabled?: boolean; + children: ReactNode; +} +const Button = ({ + handleButtonClick, + buttonDisabled, + children, +}: IButtonProps) => { + return ( + + ); +}; + +export default Button; From ec3218d0109dda5c4916f27c4b37190e3ebd0175 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Mon, 20 Feb 2023 23:57:35 +0100 Subject: [PATCH 024/262] Nprogress types --- refactor/package-lock.json | 7 +++++++ refactor/package.json | 1 + 2 files changed, 8 insertions(+) diff --git a/refactor/package-lock.json b/refactor/package-lock.json index bf67717c1..ab7863149 100644 --- a/refactor/package-lock.json +++ b/refactor/package-lock.json @@ -28,6 +28,7 @@ "devDependencies": { "@playwright/test": "^1.30.0", "@types/node": "18.14.0", + "@types/nprogress": "^0.2.0", "@types/uuid": "^9.0.0", "babel-plugin-styled-components": "^2.0.7", "eslint": "8.34.0", @@ -1410,6 +1411,12 @@ "integrity": "sha512-5EWrvLmglK+imbCJY0+INViFWUHg1AHel1sq4ZVSfdcNqGy9Edv3UB9IIzzg+xPaUcAgZYcfVs2fBcwDeZzU0A==", "dev": true }, + "node_modules/@types/nprogress": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@types/nprogress/-/nprogress-0.2.0.tgz", + "integrity": "sha512-1cYJrqq9GezNFPsWTZpFut/d4CjpZqA0vhqDUPFWYKF1oIyBz5qnoYMzR+0C/T96t3ebLAC1SSnwrVOm5/j74A==", + "dev": true + }, "node_modules/@types/prop-types": { "version": "15.7.5", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", diff --git a/refactor/package.json b/refactor/package.json index 377ae6a77..0b8b64eb3 100644 --- a/refactor/package.json +++ b/refactor/package.json @@ -38,6 +38,7 @@ "devDependencies": { "@playwright/test": "^1.30.0", "@types/node": "18.14.0", + "@types/nprogress": "^0.2.0", "@types/uuid": "^9.0.0", "babel-plugin-styled-components": "^2.0.7", "eslint": "8.34.0", From 89d94d46c89b4392c7449eb853c1d3791423c653 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Mon, 20 Feb 2023 23:58:05 +0100 Subject: [PATCH 025/262] Nprogress and Cart provider testing --- refactor/src/pages/_app.tsx | 21 +++++++++++++++- refactor/src/utils/context/CartProvider.tsx | 27 +++++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 refactor/src/utils/context/CartProvider.tsx diff --git a/refactor/src/pages/_app.tsx b/refactor/src/pages/_app.tsx index 01f578f1e..47631fa1c 100644 --- a/refactor/src/pages/_app.tsx +++ b/refactor/src/pages/_app.tsx @@ -1,11 +1,30 @@ +// Imports +import Router from 'next/router'; +import NProgress from 'nprogress'; + +// State import +import { CartProvider } from '@/utils/context/CartProvider'; + // Types import type { AppProps } from 'next/app'; // Styles import '@/styles/globals.css'; +import 'nprogress/nprogress.css'; + +// NProgress +Router.events.on('routeChangeStart', () => NProgress.start()); +Router.events.on('routeChangeComplete', () => NProgress.done()); +Router.events.on('routeChangeError', () => NProgress.done()); function MyApp({ Component, pageProps }: AppProps) { - return ; + return ( + <> + + + + + ); } export default MyApp; diff --git a/refactor/src/utils/context/CartProvider.tsx b/refactor/src/utils/context/CartProvider.tsx new file mode 100644 index 000000000..eaf8728f1 --- /dev/null +++ b/refactor/src/utils/context/CartProvider.tsx @@ -0,0 +1,27 @@ +import { useState, useEffect, createContext } from 'react'; + +const CartContext = createContext(null); + +/** + * Provides a global application context for the entire application with the cart contents + * @param {Object} props + */ +export const CartProvider = ({ children }: any) => { + const [cart, setCart] = useState(null); + + useEffect(() => { + // Check if we are client-side before we access the localStorage + if (!process.browser) { + return; + } + let cartData = localStorage.getItem('woocommerce-cart'); + cartData = null !== cartData ? JSON.parse(cartData) : ''; + setCart(cartData); + }, []); + + return ( + + {children} + + ); +}; From 705b67c9c558561daecd5e58e7026b07e54c9e4c Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Tue, 21 Feb 2023 01:11:42 +0100 Subject: [PATCH 026/262] Cart context --- refactor/src/utils/context/CartProvider.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/refactor/src/utils/context/CartProvider.tsx b/refactor/src/utils/context/CartProvider.tsx index eaf8728f1..a11bd43ed 100644 --- a/refactor/src/utils/context/CartProvider.tsx +++ b/refactor/src/utils/context/CartProvider.tsx @@ -1,6 +1,6 @@ import { useState, useEffect, createContext } from 'react'; -const CartContext = createContext(null); +export const CartContext = createContext(null); /** * Provides a global application context for the entire application with the cart contents From a8d955db36129cab76aa79b3b0d683fe2d305f26 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Tue, 21 Feb 2023 01:11:50 +0100 Subject: [PATCH 027/262] Loading spinner --- .../LoadingSpinner.component.jsx | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 refactor/src/components/LoadingSpinner/LoadingSpinner.component.jsx diff --git a/refactor/src/components/LoadingSpinner/LoadingSpinner.component.jsx b/refactor/src/components/LoadingSpinner/LoadingSpinner.component.jsx new file mode 100644 index 000000000..59db2ec50 --- /dev/null +++ b/refactor/src/components/LoadingSpinner/LoadingSpinner.component.jsx @@ -0,0 +1,41 @@ +import styled, { keyframes } from 'styled-components'; + +/** + * Loading spinner, shows while loading products or categories. + * Uses Styled-Components + */ +const LoadingSpinner = () => ( + + + +); + +export default LoadingSpinner; + +const rotateAnimation = keyframes` + 0% { transform: rotate(0deg); } + 50% { transform: rotate(180deg); } + 100% { transform: rotate(360deg); } +`; + +const Circle = styled.div` + width: 50px; + height: 50px; + border-radius: 50px; + border: 10px solid black; + border-right: 10px solid white; + border-bottom: 10px solid white; + animation-name: ${rotateAnimation}; + animation-duration: 2s; + animation-iteration-count: infinite; + animation-timing-function: linear; + -webkit-animation-timing-function: linear; +`; + +const Container = styled.div` + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; + height: 110px; +`; From af213b5b829b4caba18b78f809744faa6b482604 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Tue, 21 Feb 2023 01:24:34 +0100 Subject: [PATCH 028/262] Apollo provider --- refactor/src/pages/_app.tsx | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/refactor/src/pages/_app.tsx b/refactor/src/pages/_app.tsx index 47631fa1c..0cff5b6f6 100644 --- a/refactor/src/pages/_app.tsx +++ b/refactor/src/pages/_app.tsx @@ -1,9 +1,11 @@ // Imports import Router from 'next/router'; import NProgress from 'nprogress'; +import { ApolloProvider } from '@apollo/client'; // State import import { CartProvider } from '@/utils/context/CartProvider'; +import client from '@/utils/apollo/ApolloClient'; // Types import type { AppProps } from 'next/app'; @@ -20,9 +22,11 @@ Router.events.on('routeChangeError', () => NProgress.done()); function MyApp({ Component, pageProps }: AppProps) { return ( <> - - - + + + + + ); } From 5d3aa5c4c5e37157127e1c14588920f766fe6248 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Tue, 21 Feb 2023 01:27:32 +0100 Subject: [PATCH 029/262] Language --- refactor/src/pages/_document.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/refactor/src/pages/_document.tsx b/refactor/src/pages/_document.tsx index e1e9cbbb7..c97853d63 100644 --- a/refactor/src/pages/_document.tsx +++ b/refactor/src/pages/_document.tsx @@ -2,7 +2,7 @@ import { Html, Head, Main, NextScript } from 'next/document'; export default function Document() { return ( - +
From e9dafd7787f575ec59a59beab3360ba01fcc8f59 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Tue, 21 Feb 2023 01:27:39 +0100 Subject: [PATCH 030/262] Add to cart --- .../Product/AddToCart.component.tsx | 71 +++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 refactor/src/components/Product/AddToCart.component.tsx diff --git a/refactor/src/components/Product/AddToCart.component.tsx b/refactor/src/components/Product/AddToCart.component.tsx new file mode 100644 index 000000000..51a8233e0 --- /dev/null +++ b/refactor/src/components/Product/AddToCart.component.tsx @@ -0,0 +1,71 @@ +// Imports +import { useContext, useState } from 'react'; +import { useQuery, useMutation } from '@apollo/client'; +import { v4 as uuidv4 } from 'uuid'; + +// Components +import Button from '@/components/UI/Button.component'; + +// State +import { CartContext } from '@/utils/context/CartProvider'; + +// GraphQL +import { GET_CART } from '@/utils/gql/GQL_QUERIES'; +import { ADD_TO_CART } from '@/utils/gql/GQL_MUTATIONS'; + +/** + * Handles the Add to cart functionality. + * Uses GraphQL for product data + * @param {Object} product // Product data + */ +const AddToCart = ({ product }: any) => { + const [, setCart] = useContext(CartContext); + const [requestError, setRequestError] = useState(false); + + const productId = product.databaseId ? product.databaseId : product; + + const productQueryInput = { + clientMutationId: uuidv4(), // Generate a unique id. + productId, + }; + + const [addToCart, { loading: addToCartLoading, error: addToCartError }] = + useMutation(ADD_TO_CART, { + variables: { + input: productQueryInput, + }, + onCompleted: () => { + // Update the cart with new values in React context. + // refetch(); + // If error. + + console.log('Added to cart ...', product); + + if (addToCartError) { + setRequestError(true); + } + }, + onError: () => { + setRequestError(true); + }, + }); + + const handleAddToCart = () => { + console.log('Tried to add product ', product); + setCart(product); + addToCart(); + }; + + return ( + <> + + + ); +}; + +export default AddToCart; From 6ba32052a59021d1c6946f7d16b2726fc6606461 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Tue, 21 Feb 2023 01:27:58 +0100 Subject: [PATCH 031/262] Single product --- .../Product/SingleProduct.component.tsx | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/refactor/src/components/Product/SingleProduct.component.tsx b/refactor/src/components/Product/SingleProduct.component.tsx index d260f80ea..9d96bf11c 100644 --- a/refactor/src/components/Product/SingleProduct.component.tsx +++ b/refactor/src/components/Product/SingleProduct.component.tsx @@ -1,18 +1,21 @@ +// Imports import { useState, useEffect } from 'react'; -//import AddToCartButton from 'components/Cart/AddToCartButton.component'; -//import LoadingSpinner from 'components/LoadingSpinner/LoadingSpinner.component'; - +// Utils import { filteredVariantPrice, paddedPrice } from '@/utils/functions/functions'; +// Components +import AddToCart from './AddToCart.component'; +import LoadingSpinner from '@/components/LoadingSpinner/LoadingSpinner.component'; + /** * Shows a single product with an Add To Cart button. * Uses GraphQL for product data * @param {Object} product // Product data */ const SingleProduct = ({ product }: any) => { - const [isLoading, setIsLoading] = useState(true); - const [selectedVariation, setselectedVariation] = useState(); + const [isLoading, setIsLoading] = useState(true); + const [_, setselectedVariation] = useState(); useEffect(() => { setIsLoading(false); @@ -20,7 +23,7 @@ const SingleProduct = ({ product }: any) => { const firstVariant = product.variations.nodes[0].databaseId; setselectedVariation(firstVariant); } - }, [product.variations]); + }, []); let { description, image, name, onSale, price, regularPrice, salePrice } = product; @@ -46,7 +49,7 @@ const SingleProduct = ({ product }: any) => {

Laster produkt ...


- LoadingSpinner +
) : (
@@ -125,8 +128,7 @@ const SingleProduct = ({ product }: any) => {

)}
- - +
From 6fde7bcc800a4738af534b73132576cbdc12e243 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Tue, 21 Feb 2023 01:28:16 +0100 Subject: [PATCH 032/262] GQL --- refactor/src/utils/gql/GQL_MUTATIONS.ts | 169 ++++++++++++++ refactor/src/utils/gql/GQL_QUERIES.ts | 297 ++++++++++++++++++++++++ 2 files changed, 466 insertions(+) create mode 100644 refactor/src/utils/gql/GQL_MUTATIONS.ts create mode 100644 refactor/src/utils/gql/GQL_QUERIES.ts diff --git a/refactor/src/utils/gql/GQL_MUTATIONS.ts b/refactor/src/utils/gql/GQL_MUTATIONS.ts new file mode 100644 index 000000000..1a52815ae --- /dev/null +++ b/refactor/src/utils/gql/GQL_MUTATIONS.ts @@ -0,0 +1,169 @@ +import { gql } from '@apollo/client'; +export const ADD_TO_CART = gql` + mutation ($input: AddToCartInput!) { + addToCart(input: $input) { + cartItem { + key + product { + node { + id + databaseId + name + description + type + onSale + slug + averageRating + reviewCount + image { + id + sourceUrl + altText + } + galleryImages { + nodes { + id + sourceUrl + altText + } + } + } + } + variation { + node { + id + databaseId + name + description + type + onSale + price + regularPrice + salePrice + image { + id + sourceUrl + altText + } + attributes { + nodes { + id + attributeId + name + value + } + } + } + } + quantity + total + subtotal + subtotalTax + } + } + } +`; +export const CHECKOUT_MUTATION = gql` + mutation CHECKOUT_MUTATION($input: CheckoutInput!) { + checkout(input: $input) { + result + redirect + } + } +`; +export const UPDATE_CART = gql` + mutation ($input: UpdateItemQuantitiesInput!) { + updateItemQuantities(input: $input) { + items { + key + product { + node { + id + databaseId + name + description + type + onSale + slug + averageRating + reviewCount + image { + id + sourceUrl + altText + } + galleryImages { + nodes { + id + sourceUrl + altText + } + } + } + } + + variation { + node { + id + databaseId + name + description + type + onSale + price + regularPrice + salePrice + image { + id + sourceUrl + altText + } + attributes { + nodes { + id + attributeId + name + value + } + } + } + } + quantity + total + subtotal + subtotalTax + } + removed { + key + product { + node { + id + databaseId + } + } + variation { + node { + id + databaseId + } + } + } + updated { + key + product { + node { + id + databaseId + } + } + + variation { + node { + id + databaseId + } + } + } + } + } +`; diff --git a/refactor/src/utils/gql/GQL_QUERIES.ts b/refactor/src/utils/gql/GQL_QUERIES.ts new file mode 100644 index 000000000..22e7e8b4b --- /dev/null +++ b/refactor/src/utils/gql/GQL_QUERIES.ts @@ -0,0 +1,297 @@ +import { gql } from '@apollo/client'; + +export const GET_SINGLE_PRODUCT = gql` + query Product($id: ID!) { + product(id: $id, idType: DATABASE_ID) { + id + databaseId + averageRating + slug + description + onSale + image { + id + uri + title + srcSet + sourceUrl + } + name + ... on SimpleProduct { + salePrice + regularPrice + price + id + stockQuantity + } + ... on VariableProduct { + salePrice + regularPrice + price + id + allPaColors { + nodes { + name + } + } + allPaSizes { + nodes { + name + } + } + variations { + nodes { + id + databaseId + name + stockStatus + stockQuantity + purchasable + onSale + salePrice + regularPrice + } + } + } + ... on ExternalProduct { + price + id + externalUrl + } + ... on GroupProduct { + products { + nodes { + ... on SimpleProduct { + id + price + } + } + } + id + } + } + } +`; + +/** + * Fetch first 4 products from a specific category + */ + +export const FETCH_FIRST_PRODUCTS_FROM_HOODIES_QUERY = ` + query MyQuery { + products(first: 4, where: {category: "Hoodies"}) { + nodes { + productId + name + onSale + slug + image { + sourceUrl + } + ... on SimpleProduct { + price + regularPrice + salePrice + } + ... on VariableProduct { + price + regularPrice + salePrice + } + } + } +} + `; + +/** + * Fetch first 200 Woocommerce products from GraphQL + */ +export const FETCH_ALL_PRODUCTS_QUERY = gql` + query MyQuery { + products(first: 50) { + nodes { + databaseId + name + onSale + slug + image { + sourceUrl + } + ... on SimpleProduct { + databaseId + price + regularPrice + salePrice + } + ... on VariableProduct { + databaseId + price + regularPrice + salePrice + variations { + nodes { + price + regularPrice + salePrice + } + } + } + } + } + } +`; + +/** + * Fetch first 20 categories from GraphQL + */ +export const FETCH_ALL_CATEGORIES_QUERY = gql` + query Categories { + productCategories(first: 20) { + nodes { + id + name + slug + } + } + } +`; + +export const GET_PRODUCTS_FROM_CATEGORY = gql` + query ProductsFromCategory($id: ID!) { + productCategory(id: $id) { + id + name + products(first: 50) { + nodes { + id + databaseId + onSale + averageRating + slug + description + image { + id + uri + title + srcSet + sourceUrl + } + name + ... on SimpleProduct { + salePrice + regularPrice + onSale + price + id + } + ... on VariableProduct { + salePrice + regularPrice + onSale + price + id + } + ... on ExternalProduct { + price + id + externalUrl + } + ... on GroupProduct { + products { + nodes { + ... on SimpleProduct { + id + price + } + } + } + id + } + } + } + } + } +`; + +export const GET_CART = gql` + query GET_CART { + cart { + contents { + nodes { + key + product { + node { + id + databaseId + name + description + type + onSale + slug + averageRating + reviewCount + image { + id + sourceUrl + srcSet + altText + title + } + galleryImages { + nodes { + id + sourceUrl + srcSet + altText + title + } + } + } + } + variation { + node { + id + databaseId + name + description + type + onSale + price + regularPrice + salePrice + image { + id + sourceUrl + srcSet + altText + title + } + attributes { + nodes { + id + name + value + } + } + } + } + quantity + total + subtotal + subtotalTax + } + } + + subtotal + subtotalTax + shippingTax + shippingTotal + total + totalTax + feeTax + feeTotal + discountTax + discountTotal + } + } +`; From fe1affd797ee2ea01da2aba813df310938cf7e9b Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Tue, 21 Feb 2023 01:28:54 +0100 Subject: [PATCH 033/262] Remove debug --- refactor/src/components/Product/AddToCart.component.tsx | 3 --- 1 file changed, 3 deletions(-) diff --git a/refactor/src/components/Product/AddToCart.component.tsx b/refactor/src/components/Product/AddToCart.component.tsx index 51a8233e0..730bea7f7 100644 --- a/refactor/src/components/Product/AddToCart.component.tsx +++ b/refactor/src/components/Product/AddToCart.component.tsx @@ -39,8 +39,6 @@ const AddToCart = ({ product }: any) => { // refetch(); // If error. - console.log('Added to cart ...', product); - if (addToCartError) { setRequestError(true); } @@ -51,7 +49,6 @@ const AddToCart = ({ product }: any) => { }); const handleAddToCart = () => { - console.log('Tried to add product ', product); setCart(product); addToCart(); }; From 2c37193a3b3b8c96aa9ac6ff69731ddec6e796bf Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Tue, 21 Feb 2023 02:15:09 +0100 Subject: [PATCH 034/262] Work on Cart --- .../Cart.component.tsx} | 10 ++++-- .../components/Header/Header.component.tsx | 2 +- .../components/Header/Navbar.component.tsx | 7 ++--- .../Product/AddToCart.component.tsx | 31 ++++++++----------- refactor/src/pages/handlekurv.js | 13 ++++++++ 5 files changed, 37 insertions(+), 26 deletions(-) rename refactor/src/components/{Cart/Cart.component.jsx => Header/Cart.component.tsx} (86%) create mode 100644 refactor/src/pages/handlekurv.js diff --git a/refactor/src/components/Cart/Cart.component.jsx b/refactor/src/components/Header/Cart.component.tsx similarity index 86% rename from refactor/src/components/Cart/Cart.component.jsx rename to refactor/src/components/Header/Cart.component.tsx index f96bf5ab9..f24be3d03 100644 --- a/refactor/src/components/Cart/Cart.component.jsx +++ b/refactor/src/components/Header/Cart.component.tsx @@ -1,18 +1,22 @@ import { useContext } from 'react'; import Link from 'next/link'; -import { AppContext } from 'utils/context/AppContext'; +import { CartContext } from '@/utils/context/CartProvider'; /** * Displays the shopping cart contents. * * Displays amount of items in cart. */ -const Cart = ({ stickyNav }) => { - const [cart] = useContext(AppContext); +const Cart = ({ stickyNav }: any) => { + const [cart] = useContext(CartContext); const productsCount = null !== cart && Object.keys(cart).length ? cart.totalProductsCount : ''; + console.log("Cart: ", cart) + + console.log("productsCount: ", productsCount) + return ( <> diff --git a/refactor/src/components/Header/Header.component.tsx b/refactor/src/components/Header/Header.component.tsx index 1672b1e6c..e1634df18 100644 --- a/refactor/src/components/Header/Header.component.tsx +++ b/refactor/src/components/Header/Header.component.tsx @@ -16,7 +16,7 @@ interface IHeaderProps { const Header = ({ title }: IHeaderProps) => ( <> - Next.js webshop with WooCommerce {title ? title : ''} + Next.js webshop with WooCommerce {title} { className="flex items-center order-2 md:order-3" id="nav-content" > - - - +
diff --git a/refactor/src/components/Product/AddToCart.component.tsx b/refactor/src/components/Product/AddToCart.component.tsx index 730bea7f7..d59c32653 100644 --- a/refactor/src/components/Product/AddToCart.component.tsx +++ b/refactor/src/components/Product/AddToCart.component.tsx @@ -29,24 +29,19 @@ const AddToCart = ({ product }: any) => { productId, }; - const [addToCart, { loading: addToCartLoading, error: addToCartError }] = - useMutation(ADD_TO_CART, { - variables: { - input: productQueryInput, - }, - onCompleted: () => { - // Update the cart with new values in React context. - // refetch(); - // If error. - - if (addToCartError) { - setRequestError(true); - } - }, - onError: () => { - setRequestError(true); - }, - }); + const [addToCart, { loading: addToCartLoading }] = useMutation(ADD_TO_CART, { + variables: { + input: productQueryInput, + }, + onCompleted: () => { + // Update the cart with new values in React context. + // refetch(); + // If error. + }, + onError: () => { + setRequestError(true); + }, + }); const handleAddToCart = () => { setCart(product); diff --git a/refactor/src/pages/handlekurv.js b/refactor/src/pages/handlekurv.js new file mode 100644 index 000000000..15f6f44a6 --- /dev/null +++ b/refactor/src/pages/handlekurv.js @@ -0,0 +1,13 @@ +import Header from 'components/Header/Header.component'; +import CartItemsContainer from 'components/Cart/CartPage/CartItemsContainer.component'; +import PageTitle from 'components/Title/PageTitle.component'; + +const Handlekurv = () => ( + <> +
+ + + +); + +export default Handlekurv; From 0b4c13660f276a60118b87fd3d9157f2a05bae4e Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Tue, 21 Feb 2023 04:43:23 +0100 Subject: [PATCH 035/262] Show cart content --- .../Cart/AddToCartButton.component.jsx | 111 ------------------ .../Cart/CartContents.component.tsx | 73 ++++++++++++ .../Cart/CartPage/CartItem.component.jsx | 12 +- .../CartPage/CartItemsContainer.component.jsx | 31 ++--- .../Cart/CartPage/RegularCart.component.jsx | 6 +- .../Product/AddToCart.component.tsx | 5 - refactor/src/pages/handlekurv.js | 13 -- refactor/src/pages/handlekurv.tsx | 16 +++ 8 files changed, 113 insertions(+), 154 deletions(-) delete mode 100644 refactor/src/components/Cart/AddToCartButton.component.jsx create mode 100644 refactor/src/components/Cart/CartContents.component.tsx delete mode 100644 refactor/src/pages/handlekurv.js create mode 100644 refactor/src/pages/handlekurv.tsx diff --git a/refactor/src/components/Cart/AddToCartButton.component.jsx b/refactor/src/components/Cart/AddToCartButton.component.jsx deleted file mode 100644 index 1fdd61c92..000000000 --- a/refactor/src/components/Cart/AddToCartButton.component.jsx +++ /dev/null @@ -1,111 +0,0 @@ -/*eslint complexity: ["error", 6]*/ - -import { useState, useContext } from 'react'; -import { v4 as uuidv4 } from 'uuid'; -import { useQuery, useMutation } from '@apollo/client'; - -import { AppContext } from 'utils/context/AppContext'; -import LoadingSpinner from 'components/LoadingSpinner/LoadingSpinner.component'; - -import { GET_CART } from 'utils/gql/GQL_QUERIES'; -import { ADD_TO_CART } from 'utils/gql/GQL_MUTATIONS'; - -import { getFormattedCart } from 'utils/functions/functions'; - -/** - * Display and process product object when we click on the Add To Cart button - * Adds product to shopping cart - * @param {Object} product - */ -const AddToCartButton = ({ product }) => { - const [, setCart] = useContext(AppContext); - const [, setRequestError] = useState(null); - const [, setShowViewCart] = useState(false); - const [showAddToCart, setshowAddToCart] = useState(false); - - const productId = product.databaseId ? product.databaseId : product; - - const productQueryInput = { - clientMutationId: uuidv4(), // Generate a unique id. - productId, - }; - - // Get Cart Data. - const { data, refetch } = useQuery(GET_CART, { - notifyOnNetworkStatusChange: true, - onCompleted: () => { - refetch(); - // Update cart in the localStorage. - const updatedCart = getFormattedCart(data); - - if (!updatedCart) { - return; - } - - localStorage.setItem('woocommerce-cart', JSON.stringify(updatedCart)); - - // Update cart data in React Context. - setCart(updatedCart); - }, - }); - - const [addToCart, { loading: addToCartLoading, error: addToCartError }] = - useMutation(ADD_TO_CART, { - variables: { - input: productQueryInput, - }, - onCompleted: () => { - // Update the cart with new values in React context. - refetch(); - // If error. - if (addToCartError) { - setRequestError(addToCartError.graphQLErrors[0].message); - } - // Show View Cart Button - setShowViewCart(true); - setshowAddToCart(true); - }, - onError: (error) => { - if (error) { - setRequestError(error); - } - }, - }); - - const handleAddToCartClick = () => { - setRequestError(null); - addToCart(); - refetch(); - }; - - // Separate out conditions here for increased readability - const fadeInButton = - addToCartLoading && `animate__animated animate__fadeOutUp`; - const fadeOutButton = - showAddToCart && `animate__animated animate__fadeInDown`; - - return ( - <> - - - {addToCartLoading && ( - <> -
- Legger i handlekurv, vennligst vent ... -
-
-
- -
- - )} - - ); -}; - -export default AddToCartButton; diff --git a/refactor/src/components/Cart/CartContents.component.tsx b/refactor/src/components/Cart/CartContents.component.tsx new file mode 100644 index 000000000..5c23b8bdf --- /dev/null +++ b/refactor/src/components/Cart/CartContents.component.tsx @@ -0,0 +1,73 @@ +// Imports +import { useContext, useState, useEffect } from 'react'; +import { useQuery, useMutation } from '@apollo/client'; + +// State +import { CartContext } from '@/utils/context/CartProvider'; + +// GraphQL +import { GET_CART } from '@/utils/gql/GQL_QUERIES'; +//import { UPDATE_CART } from '@/utils/gql/GQL_MUTATIONS'; + +const CartContents = () => { + const [cart, setCart] = useContext(CartContext); + + return ( + <> +
+
+ + {cart ? ( + cart.products.map((item: any) => ( +
+
+ + Remove:
+
+ + REMOVE + +
+ +
+ + Name:
+
+ + {item.name} + +
+ +
+ + Quantity:
+
+ + {item.qty} + +
+ +
+ + Subtotal:
+
+ + {item.totalPrice} + +
+
+ )) + ) : ( +

Empty cart

+ )} +
+
+ + ); +}; + +export default CartContents; diff --git a/refactor/src/components/Cart/CartPage/CartItem.component.jsx b/refactor/src/components/Cart/CartPage/CartItem.component.jsx index 5b033a54f..4ffd46b39 100644 --- a/refactor/src/components/Cart/CartPage/CartItem.component.jsx +++ b/refactor/src/components/Cart/CartPage/CartItem.component.jsx @@ -2,8 +2,8 @@ import { useState } from 'react'; -import SVGX from 'components/SVG/SVGX.component'; -import { paddedPrice, handleQuantityChange } from 'utils/functions/functions'; +//import SVGX from 'components/SVG/SVGX.component'; +import { paddedPrice, handleQuantityChange } from '@/utils/functions/functions'; const CartItem = ({ item, @@ -17,13 +17,7 @@ const CartItem = ({ return ( - - - + SVGX { - const [cart, setCart] = useContext(AppContext); + const [cart, setCart] = useContext(CartContext); const [requestError, setRequestError] = useState(null); const { data, refetch } = useQuery(GET_CART, { notifyOnNetworkStatusChange: true, onCompleted: () => { - refetch(); + //refetch(); // Update cart in the localStorage. const updatedCart = getFormattedCart(data); @@ -79,7 +81,7 @@ const CartItemsContainer = () => { useEffect(() => { refetch(); - }, [refetch]); + }, []); return (
@@ -88,18 +90,17 @@ const CartItemsContainer = () => { {cart ? (
+ Regularcart: - + + + Mobilecart +
-
-
-); - -export default MobileCart; diff --git a/refactor/src/components/Cart/CartPage/MobileCartItem.component.jsx b/refactor/src/components/Cart/CartPage/MobileCartItem.component.jsx deleted file mode 100644 index a6f36619c..000000000 --- a/refactor/src/components/Cart/CartPage/MobileCartItem.component.jsx +++ /dev/null @@ -1,58 +0,0 @@ -/*eslint complexity: ["error", 6]*/ - -import { useState } from 'react'; - -import SVGX from 'components/SVG/SVGX.component'; -import { handleQuantityChange } from 'utils/functions/functions'; - -const MobileCartItem = ({ - item, - products, - handleRemoveProductClick, - updateCart, - updateCartProcessing, -}) => { - const [productCount, setProductCount] = useState(item.qty); - - return ( - - - - - {item.name} - - kr - {'string' === typeof item.price ? item.price : item.price.toFixed(2)} - - - - handleQuantityChange( - event, - item.cartKey, - products, - updateCart, - updateCartProcessing, - setProductCount - ) - } - /> - - - {'string' === typeof item.totalPrice - ? item.totalPrice - : item.totalPrice.toFixed(2)} - - - ); -}; - -export default MobileCartItem; diff --git a/refactor/src/components/Cart/CartPage/RegularCart.component.jsx b/refactor/src/components/Cart/CartPage/RegularCart.component.jsx deleted file mode 100644 index ef1854b2f..000000000 --- a/refactor/src/components/Cart/CartPage/RegularCart.component.jsx +++ /dev/null @@ -1,50 +0,0 @@ -import React from 'react'; - -import CartItem from './CartItem.component'; - -const RegularCart = ({ - cart, - handleRemoveProductClick, - updateCart, - updateCartProcessing, -}) => ( - - - - - - - - - - - - - - {cart.products.length && - cart.products.map((item) => ( - - - - ))} - -
- - - Produkt - - Pris - - Antall - - Total -
-); - -export default RegularCart; From 501c182e1970553c2e1c5125917817a167f2a196 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Wed, 22 Feb 2023 05:34:56 +0100 Subject: [PATCH 062/262] Remove responsive hook --- refactor/src/components/Header/Cart.component.tsx | 2 +- refactor/src/components/Header/Navbar.component.tsx | 11 ++++------- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/refactor/src/components/Header/Cart.component.tsx b/refactor/src/components/Header/Cart.component.tsx index 41db311fc..f783f3745 100644 --- a/refactor/src/components/Header/Cart.component.tsx +++ b/refactor/src/components/Header/Cart.component.tsx @@ -4,7 +4,7 @@ import Link from 'next/link'; import { CartContext } from '@/utils/context/CartProvider'; interface ICartProps { - stickyNav: boolean; + stickyNav?: boolean; } /** diff --git a/refactor/src/components/Header/Navbar.component.tsx b/refactor/src/components/Header/Navbar.component.tsx index 32ee22dc5..619094a5e 100644 --- a/refactor/src/components/Header/Navbar.component.tsx +++ b/refactor/src/components/Header/Navbar.component.tsx @@ -1,19 +1,14 @@ import Link from 'next/link'; import Cart from './Cart.component'; -/* -import Search from '@/AlgoliaSearch/AlgoliaSearchBox.component'; -import MobileSearch from '@/AlgoliaSearch/MobileSearch.component';*/ -import { useResponsive } from '@/utils/hooks/useResponsive'; +// TODO Algolia search /** * Navigation for the application. * Includes mobile menu. */ const Navbar = () => { - const responsive = useResponsive(); - return (
From e4d89b195320fb75f4ee8d89805d2e42849a41ff Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Wed, 22 Feb 2023 05:49:14 +0100 Subject: [PATCH 063/262] useIsMobile hook for cart --- refactor/package-lock.json | 8 ++++++++ refactor/package.json | 2 ++ .../components/Header/Navbar.component.tsx | 8 +++++--- refactor/src/utils/hooks/useIsMobile.ts | 20 +++++++++++++++++++ 4 files changed, 35 insertions(+), 3 deletions(-) create mode 100644 refactor/src/utils/hooks/useIsMobile.ts diff --git a/refactor/package-lock.json b/refactor/package-lock.json index ab7863149..26ff7abac 100644 --- a/refactor/package-lock.json +++ b/refactor/package-lock.json @@ -15,6 +15,7 @@ "autoprefixer": "^10.4.13", "framer-motion": "9.0.4", "graphql": "^16.6.0", + "lodash": "^4.17.21", "next": "^13.1.6", "nprogress": "^0.2.0", "postcss": "^8.4.21", @@ -27,6 +28,7 @@ }, "devDependencies": { "@playwright/test": "^1.30.0", + "@types/lodash": "^4.14.191", "@types/node": "18.14.0", "@types/nprogress": "^0.2.0", "@types/uuid": "^9.0.0", @@ -1405,6 +1407,12 @@ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, + "node_modules/@types/lodash": { + "version": "4.14.191", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.191.tgz", + "integrity": "sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==", + "dev": true + }, "node_modules/@types/node": { "version": "18.14.0", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.0.tgz", diff --git a/refactor/package.json b/refactor/package.json index 0b8b64eb3..d9022020b 100644 --- a/refactor/package.json +++ b/refactor/package.json @@ -25,6 +25,7 @@ "autoprefixer": "^10.4.13", "framer-motion": "9.0.4", "graphql": "^16.6.0", + "lodash": "^4.17.21", "next": "^13.1.6", "nprogress": "^0.2.0", "postcss": "^8.4.21", @@ -37,6 +38,7 @@ }, "devDependencies": { "@playwright/test": "^1.30.0", + "@types/lodash": "^4.14.191", "@types/node": "18.14.0", "@types/nprogress": "^0.2.0", "@types/uuid": "^9.0.0", diff --git a/refactor/src/components/Header/Navbar.component.tsx b/refactor/src/components/Header/Navbar.component.tsx index 619094a5e..0aa98ef6c 100644 --- a/refactor/src/components/Header/Navbar.component.tsx +++ b/refactor/src/components/Header/Navbar.component.tsx @@ -1,7 +1,10 @@ + import Link from 'next/link'; import Cart from './Cart.component'; +import useIsMobile from '@/utils/hooks/useIsMobile'; + // TODO Algolia search /** @@ -9,6 +12,7 @@ import Cart from './Cart.component'; * Includes mobile menu. */ const Navbar = () => { + const isMobile = useIsMobile(); return (
diff --git a/refactor/src/utils/hooks/useIsMobile.ts b/refactor/src/utils/hooks/useIsMobile.ts new file mode 100644 index 000000000..1fb7f62d4 --- /dev/null +++ b/refactor/src/utils/hooks/useIsMobile.ts @@ -0,0 +1,20 @@ +import { useLayoutEffect, useState } from 'react'; +import debounce from 'lodash/debounce'; + +const useIsMobile = (): boolean => { + const [isMobile, setIsMobile] = useState(false); + + useLayoutEffect(() => { + const updateSize = (): void => { + setIsMobile(window.innerWidth < 768); + }; + window.addEventListener('resize', debounce(updateSize, 250)); + updateSize(); + + return (): void => window.removeEventListener('resize', updateSize); + }, []); + + return isMobile; +}; + +export default useIsMobile; From 26edfe549e925765e0a1ee193f3036c71073b8b2 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Wed, 22 Feb 2023 06:00:08 +0100 Subject: [PATCH 064/262] Start work on kategorier --- .../Category/Categories.component.jsx | 30 +++++++++++++++++++ refactor/src/pages/kategorier.js | 27 +++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 refactor/src/components/Category/Categories.component.jsx create mode 100644 refactor/src/pages/kategorier.js diff --git a/refactor/src/components/Category/Categories.component.jsx b/refactor/src/components/Category/Categories.component.jsx new file mode 100644 index 000000000..584ea8fcb --- /dev/null +++ b/refactor/src/components/Category/Categories.component.jsx @@ -0,0 +1,30 @@ +import Link from 'next/link'; +import { v4 as uuidv4 } from 'uuid'; + +/** + * Map over the categories and display them individually. + * Uses uuidv4 for unique key IDs + * @param {Object} categories Product categories + */ +const Categories = ({ categories }) => ( +
+
+ {categories.map(({ id, name, slug }) => ( + +
+
+

{name}

+
+
+ + ))} +
+
+); + +export default Categories; diff --git a/refactor/src/pages/kategorier.js b/refactor/src/pages/kategorier.js new file mode 100644 index 000000000..a5b5bef2c --- /dev/null +++ b/refactor/src/pages/kategorier.js @@ -0,0 +1,27 @@ +import Categories from '@/components/Category/Categories.component'; + +import client from '@/utils/apollo/ApolloClient.js'; + +import { FETCH_ALL_CATEGORIES_QUERY } from '@/utils/gql/GQL_QUERIES'; + +/** + * Category page displays all of the categories + */ +const CategoryPage = ({ categories }) => ( +
{categories && }
+); + +export default CategoryPage; + +export async function getStaticProps() { + const result = await client.query({ + query: FETCH_ALL_CATEGORIES_QUERY, + }); + + return { + props: { + categories: result.data.productCategories.nodes, + }, + revalidate: 10, + }; +} From 5a3e5b1bc59b50cb2599120acc8081b8231600d1 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Wed, 22 Feb 2023 06:00:37 +0100 Subject: [PATCH 065/262] Fix empty cart text --- refactor/src/components/Cart/CartContents.component.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/refactor/src/components/Cart/CartContents.component.tsx b/refactor/src/components/Cart/CartContents.component.tsx index ee3928ada..280a95fa5 100644 --- a/refactor/src/components/Cart/CartContents.component.tsx +++ b/refactor/src/components/Cart/CartContents.component.tsx @@ -55,7 +55,9 @@ const CartContents = () => { )) ) : ( -

Empty cart

+

+ Ingen produkter i handlekurven +

)} From 3373610fe0139cf0b5840a8b7edf228f1217cbe6 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Wed, 22 Feb 2023 06:02:00 +0100 Subject: [PATCH 066/262] Kategorier --- refactor/src/pages/{kategorier.js => kategorier.tsx} | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) rename refactor/src/pages/{kategorier.js => kategorier.tsx} (77%) diff --git a/refactor/src/pages/kategorier.js b/refactor/src/pages/kategorier.tsx similarity index 77% rename from refactor/src/pages/kategorier.js rename to refactor/src/pages/kategorier.tsx index a5b5bef2c..09dafeb36 100644 --- a/refactor/src/pages/kategorier.js +++ b/refactor/src/pages/kategorier.tsx @@ -1,4 +1,5 @@ import Categories from '@/components/Category/Categories.component'; +import Layout from '@/components/Layout/Layout.component'; import client from '@/utils/apollo/ApolloClient.js'; @@ -8,7 +9,9 @@ import { FETCH_ALL_CATEGORIES_QUERY } from '@/utils/gql/GQL_QUERIES'; * Category page displays all of the categories */ const CategoryPage = ({ categories }) => ( -
{categories && }
+ + {categories && } + ); export default CategoryPage; From c2ce0ee30e9a064683e94582508a3bde9c945d7b Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Wed, 22 Feb 2023 06:03:51 +0100 Subject: [PATCH 067/262] Kategorier Typescript start --- .../{Categories.component.jsx => Categories.component.tsx} | 4 ++-- refactor/src/pages/kategorier.tsx | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) rename refactor/src/components/Category/{Categories.component.jsx => Categories.component.tsx} (90%) diff --git a/refactor/src/components/Category/Categories.component.jsx b/refactor/src/components/Category/Categories.component.tsx similarity index 90% rename from refactor/src/components/Category/Categories.component.jsx rename to refactor/src/components/Category/Categories.component.tsx index 584ea8fcb..39265a555 100644 --- a/refactor/src/components/Category/Categories.component.jsx +++ b/refactor/src/components/Category/Categories.component.tsx @@ -6,10 +6,10 @@ import { v4 as uuidv4 } from 'uuid'; * Uses uuidv4 for unique key IDs * @param {Object} categories Product categories */ -const Categories = ({ categories }) => ( +const Categories = ({ categories }: any) => (
- {categories.map(({ id, name, slug }) => ( + {categories.map(({ id, name, slug }: any) => ( ( +const CategoryPage = ({ categories }: any) => ( {categories && } From 93bfd80206efd08d8f14d0b998f2d31f60483bc8 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Wed, 22 Feb 2023 06:08:01 +0100 Subject: [PATCH 068/262] Remove commented code --- refactor/playwright.config.ts | 43 ++++++----------------------------- 1 file changed, 7 insertions(+), 36 deletions(-) diff --git a/refactor/playwright.config.ts b/refactor/playwright.config.ts index 5e5154bed..1f68f3a98 100644 --- a/refactor/playwright.config.ts +++ b/refactor/playwright.config.ts @@ -1,14 +1,5 @@ import { defineConfig, devices } from '@playwright/test'; -/** - * Read environment variables from file. - * https://github.com/motdotla/dotenv - */ -// require('dotenv').config(); - -/** - * See https://playwright.dev/docs/test-configuration. - */ export default defineConfig({ testDir: './tests', /* Maximum time one test can run for. */ @@ -18,7 +9,7 @@ export default defineConfig({ * Maximum time expect() should wait for the condition to be met. * For example in `await expect(locator).toHaveText();` */ - timeout: 5000 + timeout: 5000, }, /* Run tests in files in parallel */ fullyParallel: true, @@ -35,7 +26,7 @@ export default defineConfig({ /* Maximum time each action such as `click()` can take. Defaults to 0 (no limit). */ actionTimeout: 0, /* Base URL to use in actions like `await page.goto('/')`. */ - // baseURL: 'http://localhost:3000', + baseURL: 'http://localhost:3000', /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ trace: 'on-first-retry', @@ -57,34 +48,14 @@ export default defineConfig({ name: 'webkit', use: { ...devices['Desktop Safari'] }, }, - - /* Test against mobile viewports. */ - // { - // name: 'Mobile Chrome', - // use: { ...devices['Pixel 5'] }, - // }, - // { - // name: 'Mobile Safari', - // use: { ...devices['iPhone 12'] }, - // }, - - /* Test against branded browsers. */ - // { - // name: 'Microsoft Edge', - // use: { channel: 'msedge' }, - // }, - // { - // name: 'Google Chrome', - // use: { channel: 'chrome' }, - // }, ], /* Folder for test artifacts such as screenshots, videos, traces, etc. */ - // outputDir: 'test-results/', + outputDir: 'test-results/', /* Run your local dev server before starting the tests */ - // webServer: { - // command: 'npm run start', - // port: 3000, - // }, + webServer: { + command: 'npm run start', + port: 3000, + }, }); From bd599842d5bbeb2772e14ac67ca04f4807e706c2 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Wed, 22 Feb 2023 06:11:57 +0100 Subject: [PATCH 069/262] Delete demo-todo-app.spec.ts --- refactor/tests-examples/demo-todo-app.spec.ts | 437 ------------------ 1 file changed, 437 deletions(-) delete mode 100644 refactor/tests-examples/demo-todo-app.spec.ts diff --git a/refactor/tests-examples/demo-todo-app.spec.ts b/refactor/tests-examples/demo-todo-app.spec.ts deleted file mode 100644 index 2fd6016fe..000000000 --- a/refactor/tests-examples/demo-todo-app.spec.ts +++ /dev/null @@ -1,437 +0,0 @@ -import { test, expect, type Page } from '@playwright/test'; - -test.beforeEach(async ({ page }) => { - await page.goto('https://demo.playwright.dev/todomvc'); -}); - -const TODO_ITEMS = [ - 'buy some cheese', - 'feed the cat', - 'book a doctors appointment' -]; - -test.describe('New Todo', () => { - test('should allow me to add todo items', async ({ page }) => { - // create a new todo locator - const newTodo = page.getByPlaceholder('What needs to be done?'); - - // Create 1st todo. - await newTodo.fill(TODO_ITEMS[0]); - await newTodo.press('Enter'); - - // Make sure the list only has one todo item. - await expect(page.getByTestId('todo-title')).toHaveText([ - TODO_ITEMS[0] - ]); - - // Create 2nd todo. - await newTodo.fill(TODO_ITEMS[1]); - await newTodo.press('Enter'); - - // Make sure the list now has two todo items. - await expect(page.getByTestId('todo-title')).toHaveText([ - TODO_ITEMS[0], - TODO_ITEMS[1] - ]); - - await checkNumberOfTodosInLocalStorage(page, 2); - }); - - test('should clear text input field when an item is added', async ({ page }) => { - // create a new todo locator - const newTodo = page.getByPlaceholder('What needs to be done?'); - - // Create one todo item. - await newTodo.fill(TODO_ITEMS[0]); - await newTodo.press('Enter'); - - // Check that input is empty. - await expect(newTodo).toBeEmpty(); - await checkNumberOfTodosInLocalStorage(page, 1); - }); - - test('should append new items to the bottom of the list', async ({ page }) => { - // Create 3 items. - await createDefaultTodos(page); - - // create a todo count locator - const todoCount = page.getByTestId('todo-count') - - // Check test using different methods. - await expect(page.getByText('3 items left')).toBeVisible(); - await expect(todoCount).toHaveText('3 items left'); - await expect(todoCount).toContainText('3'); - await expect(todoCount).toHaveText(/3/); - - // Check all items in one call. - await expect(page.getByTestId('todo-title')).toHaveText(TODO_ITEMS); - await checkNumberOfTodosInLocalStorage(page, 3); - }); -}); - -test.describe('Mark all as completed', () => { - test.beforeEach(async ({ page }) => { - await createDefaultTodos(page); - await checkNumberOfTodosInLocalStorage(page, 3); - }); - - test.afterEach(async ({ page }) => { - await checkNumberOfTodosInLocalStorage(page, 3); - }); - - test('should allow me to mark all items as completed', async ({ page }) => { - // Complete all todos. - await page.getByLabel('Mark all as complete').check(); - - // Ensure all todos have 'completed' class. - await expect(page.getByTestId('todo-item')).toHaveClass(['completed', 'completed', 'completed']); - await checkNumberOfCompletedTodosInLocalStorage(page, 3); - }); - - test('should allow me to clear the complete state of all items', async ({ page }) => { - const toggleAll = page.getByLabel('Mark all as complete'); - // Check and then immediately uncheck. - await toggleAll.check(); - await toggleAll.uncheck(); - - // Should be no completed classes. - await expect(page.getByTestId('todo-item')).toHaveClass(['', '', '']); - }); - - test('complete all checkbox should update state when items are completed / cleared', async ({ page }) => { - const toggleAll = page.getByLabel('Mark all as complete'); - await toggleAll.check(); - await expect(toggleAll).toBeChecked(); - await checkNumberOfCompletedTodosInLocalStorage(page, 3); - - // Uncheck first todo. - const firstTodo = page.getByTestId('todo-item').nth(0); - await firstTodo.getByRole('checkbox').uncheck(); - - // Reuse toggleAll locator and make sure its not checked. - await expect(toggleAll).not.toBeChecked(); - - await firstTodo.getByRole('checkbox').check(); - await checkNumberOfCompletedTodosInLocalStorage(page, 3); - - // Assert the toggle all is checked again. - await expect(toggleAll).toBeChecked(); - }); -}); - -test.describe('Item', () => { - - test('should allow me to mark items as complete', async ({ page }) => { - // create a new todo locator - const newTodo = page.getByPlaceholder('What needs to be done?'); - - // Create two items. - for (const item of TODO_ITEMS.slice(0, 2)) { - await newTodo.fill(item); - await newTodo.press('Enter'); - } - - // Check first item. - const firstTodo = page.getByTestId('todo-item').nth(0); - await firstTodo.getByRole('checkbox').check(); - await expect(firstTodo).toHaveClass('completed'); - - // Check second item. - const secondTodo = page.getByTestId('todo-item').nth(1); - await expect(secondTodo).not.toHaveClass('completed'); - await secondTodo.getByRole('checkbox').check(); - - // Assert completed class. - await expect(firstTodo).toHaveClass('completed'); - await expect(secondTodo).toHaveClass('completed'); - }); - - test('should allow me to un-mark items as complete', async ({ page }) => { - // create a new todo locator - const newTodo = page.getByPlaceholder('What needs to be done?'); - - // Create two items. - for (const item of TODO_ITEMS.slice(0, 2)) { - await newTodo.fill(item); - await newTodo.press('Enter'); - } - - const firstTodo = page.getByTestId('todo-item').nth(0); - const secondTodo = page.getByTestId('todo-item').nth(1); - const firstTodoCheckbox = firstTodo.getByRole('checkbox'); - - await firstTodoCheckbox.check(); - await expect(firstTodo).toHaveClass('completed'); - await expect(secondTodo).not.toHaveClass('completed'); - await checkNumberOfCompletedTodosInLocalStorage(page, 1); - - await firstTodoCheckbox.uncheck(); - await expect(firstTodo).not.toHaveClass('completed'); - await expect(secondTodo).not.toHaveClass('completed'); - await checkNumberOfCompletedTodosInLocalStorage(page, 0); - }); - - test('should allow me to edit an item', async ({ page }) => { - await createDefaultTodos(page); - - const todoItems = page.getByTestId('todo-item'); - const secondTodo = todoItems.nth(1); - await secondTodo.dblclick(); - await expect(secondTodo.getByRole('textbox', { name: 'Edit' })).toHaveValue(TODO_ITEMS[1]); - await secondTodo.getByRole('textbox', { name: 'Edit' }).fill('buy some sausages'); - await secondTodo.getByRole('textbox', { name: 'Edit' }).press('Enter'); - - // Explicitly assert the new text value. - await expect(todoItems).toHaveText([ - TODO_ITEMS[0], - 'buy some sausages', - TODO_ITEMS[2] - ]); - await checkTodosInLocalStorage(page, 'buy some sausages'); - }); -}); - -test.describe('Editing', () => { - test.beforeEach(async ({ page }) => { - await createDefaultTodos(page); - await checkNumberOfTodosInLocalStorage(page, 3); - }); - - test('should hide other controls when editing', async ({ page }) => { - const todoItem = page.getByTestId('todo-item').nth(1); - await todoItem.dblclick(); - await expect(todoItem.getByRole('checkbox')).not.toBeVisible(); - await expect(todoItem.locator('label', { - hasText: TODO_ITEMS[1], - })).not.toBeVisible(); - await checkNumberOfTodosInLocalStorage(page, 3); - }); - - test('should save edits on blur', async ({ page }) => { - const todoItems = page.getByTestId('todo-item'); - await todoItems.nth(1).dblclick(); - await todoItems.nth(1).getByRole('textbox', { name: 'Edit' }).fill('buy some sausages'); - await todoItems.nth(1).getByRole('textbox', { name: 'Edit' }).dispatchEvent('blur'); - - await expect(todoItems).toHaveText([ - TODO_ITEMS[0], - 'buy some sausages', - TODO_ITEMS[2], - ]); - await checkTodosInLocalStorage(page, 'buy some sausages'); - }); - - test('should trim entered text', async ({ page }) => { - const todoItems = page.getByTestId('todo-item'); - await todoItems.nth(1).dblclick(); - await todoItems.nth(1).getByRole('textbox', { name: 'Edit' }).fill(' buy some sausages '); - await todoItems.nth(1).getByRole('textbox', { name: 'Edit' }).press('Enter'); - - await expect(todoItems).toHaveText([ - TODO_ITEMS[0], - 'buy some sausages', - TODO_ITEMS[2], - ]); - await checkTodosInLocalStorage(page, 'buy some sausages'); - }); - - test('should remove the item if an empty text string was entered', async ({ page }) => { - const todoItems = page.getByTestId('todo-item'); - await todoItems.nth(1).dblclick(); - await todoItems.nth(1).getByRole('textbox', { name: 'Edit' }).fill(''); - await todoItems.nth(1).getByRole('textbox', { name: 'Edit' }).press('Enter'); - - await expect(todoItems).toHaveText([ - TODO_ITEMS[0], - TODO_ITEMS[2], - ]); - }); - - test('should cancel edits on escape', async ({ page }) => { - const todoItems = page.getByTestId('todo-item'); - await todoItems.nth(1).dblclick(); - await todoItems.nth(1).getByRole('textbox', { name: 'Edit' }).fill('buy some sausages'); - await todoItems.nth(1).getByRole('textbox', { name: 'Edit' }).press('Escape'); - await expect(todoItems).toHaveText(TODO_ITEMS); - }); -}); - -test.describe('Counter', () => { - test('should display the current number of todo items', async ({ page }) => { - // create a new todo locator - const newTodo = page.getByPlaceholder('What needs to be done?'); - - // create a todo count locator - const todoCount = page.getByTestId('todo-count') - - await newTodo.fill(TODO_ITEMS[0]); - await newTodo.press('Enter'); - - await expect(todoCount).toContainText('1'); - - await newTodo.fill(TODO_ITEMS[1]); - await newTodo.press('Enter'); - await expect(todoCount).toContainText('2'); - - await checkNumberOfTodosInLocalStorage(page, 2); - }); -}); - -test.describe('Clear completed button', () => { - test.beforeEach(async ({ page }) => { - await createDefaultTodos(page); - }); - - test('should display the correct text', async ({ page }) => { - await page.locator('.todo-list li .toggle').first().check(); - await expect(page.getByRole('button', { name: 'Clear completed' })).toBeVisible(); - }); - - test('should remove completed items when clicked', async ({ page }) => { - const todoItems = page.getByTestId('todo-item'); - await todoItems.nth(1).getByRole('checkbox').check(); - await page.getByRole('button', { name: 'Clear completed' }).click(); - await expect(todoItems).toHaveCount(2); - await expect(todoItems).toHaveText([TODO_ITEMS[0], TODO_ITEMS[2]]); - }); - - test('should be hidden when there are no items that are completed', async ({ page }) => { - await page.locator('.todo-list li .toggle').first().check(); - await page.getByRole('button', { name: 'Clear completed' }).click(); - await expect(page.getByRole('button', { name: 'Clear completed' })).toBeHidden(); - }); -}); - -test.describe('Persistence', () => { - test('should persist its data', async ({ page }) => { - // create a new todo locator - const newTodo = page.getByPlaceholder('What needs to be done?'); - - for (const item of TODO_ITEMS.slice(0, 2)) { - await newTodo.fill(item); - await newTodo.press('Enter'); - } - - const todoItems = page.getByTestId('todo-item'); - const firstTodoCheck = todoItems.nth(0).getByRole('checkbox'); - await firstTodoCheck.check(); - await expect(todoItems).toHaveText([TODO_ITEMS[0], TODO_ITEMS[1]]); - await expect(firstTodoCheck).toBeChecked(); - await expect(todoItems).toHaveClass(['completed', '']); - - // Ensure there is 1 completed item. - await checkNumberOfCompletedTodosInLocalStorage(page, 1); - - // Now reload. - await page.reload(); - await expect(todoItems).toHaveText([TODO_ITEMS[0], TODO_ITEMS[1]]); - await expect(firstTodoCheck).toBeChecked(); - await expect(todoItems).toHaveClass(['completed', '']); - }); -}); - -test.describe('Routing', () => { - test.beforeEach(async ({ page }) => { - await createDefaultTodos(page); - // make sure the app had a chance to save updated todos in storage - // before navigating to a new view, otherwise the items can get lost :( - // in some frameworks like Durandal - await checkTodosInLocalStorage(page, TODO_ITEMS[0]); - }); - - test('should allow me to display active items', async ({ page }) => { - const todoItem = page.getByTestId('todo-item'); - await page.getByTestId('todo-item').nth(1).getByRole('checkbox').check(); - - await checkNumberOfCompletedTodosInLocalStorage(page, 1); - await page.getByRole('link', { name: 'Active' }).click(); - await expect(todoItem).toHaveCount(2); - await expect(todoItem).toHaveText([TODO_ITEMS[0], TODO_ITEMS[2]]); - }); - - test('should respect the back button', async ({ page }) => { - const todoItem = page.getByTestId('todo-item'); - await page.getByTestId('todo-item').nth(1).getByRole('checkbox').check(); - - await checkNumberOfCompletedTodosInLocalStorage(page, 1); - - await test.step('Showing all items', async () => { - await page.getByRole('link', { name: 'All' }).click(); - await expect(todoItem).toHaveCount(3); - }); - - await test.step('Showing active items', async () => { - await page.getByRole('link', { name: 'Active' }).click(); - }); - - await test.step('Showing completed items', async () => { - await page.getByRole('link', { name: 'Completed' }).click(); - }); - - await expect(todoItem).toHaveCount(1); - await page.goBack(); - await expect(todoItem).toHaveCount(2); - await page.goBack(); - await expect(todoItem).toHaveCount(3); - }); - - test('should allow me to display completed items', async ({ page }) => { - await page.getByTestId('todo-item').nth(1).getByRole('checkbox').check(); - await checkNumberOfCompletedTodosInLocalStorage(page, 1); - await page.getByRole('link', { name: 'Completed' }).click(); - await expect(page.getByTestId('todo-item')).toHaveCount(1); - }); - - test('should allow me to display all items', async ({ page }) => { - await page.getByTestId('todo-item').nth(1).getByRole('checkbox').check(); - await checkNumberOfCompletedTodosInLocalStorage(page, 1); - await page.getByRole('link', { name: 'Active' }).click(); - await page.getByRole('link', { name: 'Completed' }).click(); - await page.getByRole('link', { name: 'All' }).click(); - await expect(page.getByTestId('todo-item')).toHaveCount(3); - }); - - test('should highlight the currently applied filter', async ({ page }) => { - await expect(page.getByRole('link', { name: 'All' })).toHaveClass('selected'); - - //create locators for active and completed links - const activeLink = page.getByRole('link', { name: 'Active' }); - const completedLink = page.getByRole('link', { name: 'Completed' }); - await activeLink.click(); - - // Page change - active items. - await expect(activeLink).toHaveClass('selected'); - await completedLink.click(); - - // Page change - completed items. - await expect(completedLink).toHaveClass('selected'); - }); -}); - -async function createDefaultTodos(page: Page) { - // create a new todo locator - const newTodo = page.getByPlaceholder('What needs to be done?'); - - for (const item of TODO_ITEMS) { - await newTodo.fill(item); - await newTodo.press('Enter'); - } -} - -async function checkNumberOfTodosInLocalStorage(page: Page, expected: number) { - return await page.waitForFunction(e => { - return JSON.parse(localStorage['react-todos']).length === e; - }, expected); -} - -async function checkNumberOfCompletedTodosInLocalStorage(page: Page, expected: number) { - return await page.waitForFunction(e => { - return JSON.parse(localStorage['react-todos']).filter((todo: any) => todo.completed).length === e; - }, expected); -} - -async function checkTodosInLocalStorage(page: Page, title: string) { - return await page.waitForFunction(t => { - return JSON.parse(localStorage['react-todos']).map((todo: any) => todo.title).includes(t); - }, title); -} From 8c915e70606778e8ad9464d28e3e6ce68275023b Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Wed, 22 Feb 2023 17:34:55 +0100 Subject: [PATCH 070/262] Typescript fix CartContents --- refactor/src/components/Cart/CartContents.component.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/refactor/src/components/Cart/CartContents.component.tsx b/refactor/src/components/Cart/CartContents.component.tsx index 280a95fa5..f7ae054cd 100644 --- a/refactor/src/components/Cart/CartContents.component.tsx +++ b/refactor/src/components/Cart/CartContents.component.tsx @@ -11,7 +11,7 @@ const CartContents = () => {
{cart ? ( - cart.products.map((item: any) => ( + cart.products.map((item) => (
Date: Wed, 22 Feb 2023 17:44:50 +0100 Subject: [PATCH 071/262] Fetch and update cart in Layout --- .../components/Layout/Layout.component.tsx | 53 ++++++++++++++++--- 1 file changed, 45 insertions(+), 8 deletions(-) diff --git a/refactor/src/components/Layout/Layout.component.tsx b/refactor/src/components/Layout/Layout.component.tsx index a1368b30e..49b67de86 100644 --- a/refactor/src/components/Layout/Layout.component.tsx +++ b/refactor/src/components/Layout/Layout.component.tsx @@ -1,9 +1,24 @@ +// Imports import { ReactNode } from 'react'; +import { useQuery } from '@apollo/client'; +// Components import Header from '@/components/Header/Header.component'; import PageTitle from './PageTitle.component'; import Footer from '@/components/Footer/Footer.component'; +// Imports +import { useContext, useEffect } from 'react'; + +// State +import { CartContext } from '@/utils/context/CartProvider'; + +// Utils +import { getFormattedCart } from '@/utils/functions/functions'; + +// GraphQL +import { GET_CART } from '@/utils/gql/GQL_QUERIES'; + interface ILayoutProps { children?: ReactNode; title: string; @@ -17,13 +32,35 @@ interface ILayoutProps { * @returns {JSX.Element} - Rendered component */ -const Layout = ({ children, title }: ILayoutProps): JSX.Element => ( - <> -
- - {children} -
- -); +const Layout = ({ children, title }: ILayoutProps): JSX.Element => { + const { setCart } = useContext(CartContext); + + useEffect(() => { + refetch(); + }, []); + + const { data, refetch } = useQuery(GET_CART, { + notifyOnNetworkStatusChange: true, + onCompleted: () => { + refetch(); + + // Update cart in the localStorage. + const updatedCart: any = getFormattedCart(data); // TODO Remove this any later + localStorage.setItem('woocommerce-cart', JSON.stringify(updatedCart)); + + // Update cart data in React Context. + setCart(updatedCart); + }, + }); + + return ( + <> +
+ + {children} +
+ + ); +}; export default Layout; From d5a9194de2177b2698e96a523d3bf81676f9c9a4 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Wed, 22 Feb 2023 17:45:01 +0100 Subject: [PATCH 072/262] Remove unneeded fragment --- .../components/Layout/PageTitle.component.tsx | 22 +++++++++---------- 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/refactor/src/components/Layout/PageTitle.component.tsx b/refactor/src/components/Layout/PageTitle.component.tsx index a9f368bc6..3572e95ca 100644 --- a/refactor/src/components/Layout/PageTitle.component.tsx +++ b/refactor/src/components/Layout/PageTitle.component.tsx @@ -4,24 +4,22 @@ interface IPageTitleProps { } /** - * Renders page title for each page. + * Renders page title for each page. * @function PageTitle * @param {boolean} marginLeft - Adds extra margin left if true * @param {string} title - Title for the page. Is set in {title} * @returns {JSX.Element} - Rendered component */ const PageTitle = ({ title, marginLeft }: IPageTitleProps) => ( - <> -
- - {title} - -
- +
+ + {title} + +
); export default PageTitle; From 26dd7a3e1027aad824e6f72e99cf08908b4a3c19 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Wed, 22 Feb 2023 18:01:07 +0100 Subject: [PATCH 073/262] Todo --- refactor/src/components/Product/AddToCart.component.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/refactor/src/components/Product/AddToCart.component.tsx b/refactor/src/components/Product/AddToCart.component.tsx index 01e6a20c3..9894558f3 100644 --- a/refactor/src/components/Product/AddToCart.component.tsx +++ b/refactor/src/components/Product/AddToCart.component.tsx @@ -10,7 +10,7 @@ import Button from '@/components/UI/Button.component'; import { CartContext, Product, RootObject } from '@/utils/context/CartProvider'; // Utils -import { getFormattedCart } from '@/utils/functions/functions'; +// import { getFormattedCart } from '@/utils/functions/functions'; // GraphQL import { GET_CART } from '@/utils/gql/GQL_QUERIES'; @@ -62,6 +62,7 @@ export interface testRootObject { subtotalTax: string; } +// TODO Import this from functions.tsx const testFormattedCart = (data: { cart: { contents: { nodes: testRootObject[] }; total: number }; }) => { From 083bb3333682b80d4b6a6152eb6b91fcf1358b97 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Wed, 22 Feb 2023 18:01:18 +0100 Subject: [PATCH 074/262] Typescript functions --- refactor/src/utils/functions/functions.tsx | 79 +++++++++++++++++----- 1 file changed, 61 insertions(+), 18 deletions(-) diff --git a/refactor/src/utils/functions/functions.tsx b/refactor/src/utils/functions/functions.tsx index ef6d1ad5a..6bc76293e 100644 --- a/refactor/src/utils/functions/functions.tsx +++ b/refactor/src/utils/functions/functions.tsx @@ -1,5 +1,9 @@ import { v4 as uuidv4 } from 'uuid'; +import { testRootObject } from '@/components/Product/AddToCart.component'; + +import { RootObject, Product } from '@/utils/context/CartProvider'; + interface IPaddedPriceProps { price: string; symbol: string; @@ -18,6 +22,27 @@ interface IGetCustomNumberValidationProps { patternValue: RegExp; } +interface IFormattedCartProps { + data: { + cart: { contents: { nodes: testRootObject[] }; total: number }; + }; +} + +interface ICheckoutDataProps { + firstName: string; + lastName: string; + address1: string; + address2: string; + city: string; + country: string; + state: string; + postcode: number; + email: string; + phone: number; + company: string; + paymentMethod: string; +} + /** * Add empty character after currency symbol * @param {string} price The price string that we input @@ -60,7 +85,7 @@ export const getCustomNumberValidation = ({ pattern, value, patternValue = /^\d+$/i, -}: IGetCustomNumberValidationProps): any => { +}: IGetCustomNumberValidationProps) => { const validationObj = { minLength: { value, message: minLength }, maxLength: { value, message: maxLength }, @@ -107,37 +132,54 @@ export const getFloatVal = (string) => { * Returns cart data in the required format. * @param {String} data Cart data */ -export const getFormattedCart = (data) => { - let formattedCart = null; + +export const getFormattedCart = ({ data }: IFormattedCartProps) => { + const formattedCart: RootObject = { + products: [], + totalProductsCount: 0, + totalProductsPrice: 0, + }; + if (!data || !data.cart.contents.nodes.length || !data.cart) { - return formattedCart; + return; } const givenProducts = data.cart.contents.nodes; // Create an empty object. - formattedCart = {}; formattedCart.products = []; + + const product: Product = { + productId: 0, + cartKey: '', + name: '', + qty: 0, + price: 0, + totalPrice: '0', + image: { sourceUrl: '', srcSet: '', title: '' }, + }; + let totalProductsCount = 0; let i = 0; + + if (!givenProducts.length) { + return; + } + givenProducts.forEach(() => { - const givenProduct = givenProducts[parseInt(i, 10)].product.node; + const givenProduct = givenProducts[i].product.node; - const product = {}; // Convert price to a float value - const convertedCurrency = givenProducts[parseInt(i, 10)].total.replace( - /[^0-9.-]+/g, - '' - ); + const convertedCurrency = givenProducts[i].total.replace(/[^0-9.-]+/g, ''); product.productId = givenProduct.productId; - product.cartKey = givenProducts[parseInt(i, 10)].key; - + product.cartKey = givenProducts[i].key; product.name = givenProduct.name; + product.qty = givenProducts[i].quantity; + product.price = Number(convertedCurrency) / product.qty; + product.totalPrice = givenProducts[i].total; - product.qty = givenProducts[parseInt(i, 10)].quantity; - product.price = convertedCurrency / product.qty; - product.totalPrice = givenProducts[parseInt(i, 10)].total; // Ensure we can add products without images to the cart + product.image = givenProduct.image.sourceUrl ? { sourceUrl: givenProduct.image.sourceUrl, @@ -150,7 +192,8 @@ export const getFormattedCart = (data) => { title: givenProduct.name, }; - totalProductsCount += givenProducts[parseInt(i, 10)].quantity; + totalProductsCount += givenProducts[i].quantity; + // Push each item into the products array. formattedCart.products.push(product); i++; @@ -161,7 +204,7 @@ export const getFormattedCart = (data) => { return formattedCart; }; -export const createCheckoutData = (order) => ({ +export const createCheckoutData = (order: ICheckoutDataProps) => ({ clientMutationId: uuidv4(), billing: { firstName: order.firstName, From f26ea221f1d5141ade13a5690917bf2cbd1b4ef8 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Wed, 22 Feb 2023 18:18:36 +0100 Subject: [PATCH 075/262] Remove undefined --- refactor/playwright.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/refactor/playwright.config.ts b/refactor/playwright.config.ts index 1f68f3a98..e8b5bbde7 100644 --- a/refactor/playwright.config.ts +++ b/refactor/playwright.config.ts @@ -18,7 +18,7 @@ export default defineConfig({ /* Retry on CI only */ retries: process.env.CI ? 2 : 0, /* Opt out of parallel tests on CI. */ - workers: process.env.CI ? 1 : undefined, + workers: process.env.CI && 1, /* Reporter to use. See https://playwright.dev/docs/test-reporters */ reporter: 'html', /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ From 6cba425cb0bb4e4813c795803d222a9d65309b1f Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Wed, 22 Feb 2023 18:19:31 +0100 Subject: [PATCH 076/262] Fix used before defined --- refactor/src/components/Layout/Layout.component.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/refactor/src/components/Layout/Layout.component.tsx b/refactor/src/components/Layout/Layout.component.tsx index 49b67de86..8ce742867 100644 --- a/refactor/src/components/Layout/Layout.component.tsx +++ b/refactor/src/components/Layout/Layout.component.tsx @@ -35,10 +35,6 @@ interface ILayoutProps { const Layout = ({ children, title }: ILayoutProps): JSX.Element => { const { setCart } = useContext(CartContext); - useEffect(() => { - refetch(); - }, []); - const { data, refetch } = useQuery(GET_CART, { notifyOnNetworkStatusChange: true, onCompleted: () => { @@ -53,6 +49,10 @@ const Layout = ({ children, title }: ILayoutProps): JSX.Element => { }, }); + useEffect(() => { + refetch(); + }, []); + return ( <>
From 2445c93cec3a7972225030750c127d10abed0228 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Wed, 22 Feb 2023 18:32:20 +0100 Subject: [PATCH 077/262] Rename typescript functions --- refactor/src/utils/functions/{functions.tsx => tfunctions.tsx} | 1 - 1 file changed, 1 deletion(-) rename refactor/src/utils/functions/{functions.tsx => tfunctions.tsx} (98%) diff --git a/refactor/src/utils/functions/functions.tsx b/refactor/src/utils/functions/tfunctions.tsx similarity index 98% rename from refactor/src/utils/functions/functions.tsx rename to refactor/src/utils/functions/tfunctions.tsx index 6bc76293e..f2c7d39e0 100644 --- a/refactor/src/utils/functions/functions.tsx +++ b/refactor/src/utils/functions/tfunctions.tsx @@ -78,7 +78,6 @@ export const trimmedStringToLength = ({ * @param {RegExp} patternValue Regular expression pattern for validation */ -//export const getCustomNumberValidation = ({ minLength, maxLength, pattern },value,patternValue = /^\d+$/i) => { export const getCustomNumberValidation = ({ minLength, maxLength, From fb1e70629dedffb381becdabb8d7dc748344c89a Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Wed, 22 Feb 2023 18:50:49 +0100 Subject: [PATCH 078/262] Update Layout.component.tsx --- refactor/src/components/Layout/Layout.component.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/refactor/src/components/Layout/Layout.component.tsx b/refactor/src/components/Layout/Layout.component.tsx index 8ce742867..52fcf088f 100644 --- a/refactor/src/components/Layout/Layout.component.tsx +++ b/refactor/src/components/Layout/Layout.component.tsx @@ -38,7 +38,7 @@ const Layout = ({ children, title }: ILayoutProps): JSX.Element => { const { data, refetch } = useQuery(GET_CART, { notifyOnNetworkStatusChange: true, onCompleted: () => { - refetch(); + //refetch(); // Update cart in the localStorage. const updatedCart: any = getFormattedCart(data); // TODO Remove this any later From a77575abf15de958c5cd647d83e5ca82702ae464 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Thu, 23 Feb 2023 00:41:12 +0100 Subject: [PATCH 079/262] Remove any --- refactor/src/components/Header/Cart.component.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/refactor/src/components/Header/Cart.component.tsx b/refactor/src/components/Header/Cart.component.tsx index f783f3745..f1fed58c0 100644 --- a/refactor/src/components/Header/Cart.component.tsx +++ b/refactor/src/components/Header/Cart.component.tsx @@ -12,7 +12,7 @@ interface ICartProps { * Displays amount of items in cart. */ const Cart = ({ stickyNav }: ICartProps) => { - const { cart } = useContext(CartContext); + const { cart } = useContext(CartContext); const productsCount = cart && Object.keys(cart).length ? cart.totalProductsCount : ''; From 0df52f9fb469ae385cb41b14ed74ec8311dfeff2 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Thu, 23 Feb 2023 00:57:48 +0100 Subject: [PATCH 080/262] Fix bugs --- .../components/Layout/Layout.component.tsx | 6 +- .../Product/AddToCart.component.tsx | 83 ++----------------- refactor/src/utils/functions/tfunctions.tsx | 10 +-- 3 files changed, 14 insertions(+), 85 deletions(-) diff --git a/refactor/src/components/Layout/Layout.component.tsx b/refactor/src/components/Layout/Layout.component.tsx index 52fcf088f..a3dc9a380 100644 --- a/refactor/src/components/Layout/Layout.component.tsx +++ b/refactor/src/components/Layout/Layout.component.tsx @@ -38,10 +38,12 @@ const Layout = ({ children, title }: ILayoutProps): JSX.Element => { const { data, refetch } = useQuery(GET_CART, { notifyOnNetworkStatusChange: true, onCompleted: () => { - //refetch(); - // Update cart in the localStorage. const updatedCart: any = getFormattedCart(data); // TODO Remove this any later + + if (!updatedCart) { + return; + } localStorage.setItem('woocommerce-cart', JSON.stringify(updatedCart)); // Update cart data in React Context. diff --git a/refactor/src/components/Product/AddToCart.component.tsx b/refactor/src/components/Product/AddToCart.component.tsx index 9894558f3..d89eb637d 100644 --- a/refactor/src/components/Product/AddToCart.component.tsx +++ b/refactor/src/components/Product/AddToCart.component.tsx @@ -7,10 +7,10 @@ import { v4 as uuidv4 } from 'uuid'; import Button from '@/components/UI/Button.component'; // State -import { CartContext, Product, RootObject } from '@/utils/context/CartProvider'; +import { CartContext } from '@/utils/context/CartProvider'; // Utils -// import { getFormattedCart } from '@/utils/functions/functions'; +import { getFormattedCart } from '@/utils/functions/tfunctions'; // GraphQL import { GET_CART } from '@/utils/gql/GQL_QUERIES'; @@ -62,80 +62,6 @@ export interface testRootObject { subtotalTax: string; } -// TODO Import this from functions.tsx -const testFormattedCart = (data: { - cart: { contents: { nodes: testRootObject[] }; total: number }; -}) => { - const formattedCart: RootObject = { - products: [], - totalProductsCount: 0, - totalProductsPrice: 0, - }; - - if (!data || !data.cart.contents.nodes.length || !data.cart) { - return; - } - const givenProducts = data.cart.contents.nodes; - - // Create an empty object. - formattedCart.products = []; - - const product: Product = { - productId: 0, - cartKey: '', - name: '', - qty: 0, - price: 0, - totalPrice: '0', - image: { sourceUrl: '', srcSet: '', title: '' }, - }; - - let totalProductsCount = 0; - let i = 0; - - if (!givenProducts.length) { - return; - } - - givenProducts.forEach(() => { - const givenProduct = givenProducts[i].product.node; - - // Convert price to a float value - const convertedCurrency = givenProducts[i].total.replace(/[^0-9.-]+/g, ''); - - product.productId = givenProduct.productId; - product.cartKey = givenProducts[i].key; - product.name = givenProduct.name; - product.qty = givenProducts[i].quantity; - product.price = Number(convertedCurrency) / product.qty; - product.totalPrice = givenProducts[i].total; - - // Ensure we can add products without images to the cart - - product.image = givenProduct.image.sourceUrl - ? { - sourceUrl: givenProduct.image.sourceUrl, - srcSet: givenProduct.image.srcSet, - title: givenProduct.image.title, - } - : { - sourceUrl: process.env.NEXT_PUBLIC_PLACEHOLDER_SMALL_IMAGE_URL, - srcSet: process.env.NEXT_PUBLIC_PLACEHOLDER_SMALL_IMAGE_URL, - title: givenProduct.name, - }; - - totalProductsCount += givenProducts[i].quantity; - - // Push each item into the products array. - formattedCart.products.push(product); - i++; - }); - formattedCart.totalProductsCount = totalProductsCount; - formattedCart.totalProductsPrice = data.cart.total; - - return formattedCart; -}; - /** * Handles the Add to cart functionality. * Uses GraphQL for product data @@ -145,7 +71,7 @@ const AddToCart = ({ product }: any) => { const { setCart } = useContext(CartContext); const [requestError, setRequestError] = useState(false); - const productId = product.databaseId ? product.databaseId : product; + const productId = product.databaseId; const productQueryInput = { clientMutationId: uuidv4(), // Generate a unique id. @@ -153,11 +79,12 @@ const AddToCart = ({ product }: any) => { }; // Get cart data query + const { data, refetch } = useQuery(GET_CART, { notifyOnNetworkStatusChange: true, onCompleted: () => { // Update cart in the localStorage. - const updatedCart = testFormattedCart(data); + const updatedCart = getFormattedCart(data); if (!updatedCart) { return; diff --git a/refactor/src/utils/functions/tfunctions.tsx b/refactor/src/utils/functions/tfunctions.tsx index f2c7d39e0..bd1e1dcc8 100644 --- a/refactor/src/utils/functions/tfunctions.tsx +++ b/refactor/src/utils/functions/tfunctions.tsx @@ -23,9 +23,7 @@ interface IGetCustomNumberValidationProps { } interface IFormattedCartProps { - data: { - cart: { contents: { nodes: testRootObject[] }; total: number }; - }; + cart: { contents: { nodes: testRootObject[] }; total: number }; } interface ICheckoutDataProps { @@ -132,14 +130,14 @@ export const getFloatVal = (string) => { * @param {String} data Cart data */ -export const getFormattedCart = ({ data }: IFormattedCartProps) => { +export const getFormattedCart = (data: IFormattedCartProps) => { const formattedCart: RootObject = { products: [], totalProductsCount: 0, totalProductsPrice: 0, }; - if (!data || !data.cart.contents.nodes.length || !data.cart) { + if (!data) { return; } const givenProducts = data.cart.contents.nodes; @@ -200,6 +198,8 @@ export const getFormattedCart = ({ data }: IFormattedCartProps) => { formattedCart.totalProductsCount = totalProductsCount; formattedCart.totalProductsPrice = data.cart.total; + console.log('Returning formattedCart: ', formattedCart); + return formattedCart; }; From 9066261b5e52072c101236dc3c32238b8c71f14e Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Thu, 23 Feb 2023 00:58:19 +0100 Subject: [PATCH 081/262] Remove debug --- refactor/src/utils/functions/tfunctions.tsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/refactor/src/utils/functions/tfunctions.tsx b/refactor/src/utils/functions/tfunctions.tsx index bd1e1dcc8..89a0cae25 100644 --- a/refactor/src/utils/functions/tfunctions.tsx +++ b/refactor/src/utils/functions/tfunctions.tsx @@ -198,8 +198,6 @@ export const getFormattedCart = (data: IFormattedCartProps) => { formattedCart.totalProductsCount = totalProductsCount; formattedCart.totalProductsPrice = data.cart.total; - console.log('Returning formattedCart: ', formattedCart); - return formattedCart; }; From 97c0facd4bdfbf9114013019324869a6061bb232 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Thu, 23 Feb 2023 03:00:14 +0100 Subject: [PATCH 082/262] Update cart regularly --- .../src/components/Header/Cart.component.tsx | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/refactor/src/components/Header/Cart.component.tsx b/refactor/src/components/Header/Cart.component.tsx index f1fed58c0..5f101ab3e 100644 --- a/refactor/src/components/Header/Cart.component.tsx +++ b/refactor/src/components/Header/Cart.component.tsx @@ -1,4 +1,4 @@ -import { useContext } from 'react'; +import { useContext, useState, useEffect } from 'react'; import Link from 'next/link'; import { CartContext } from '@/utils/context/CartProvider'; @@ -13,9 +13,17 @@ interface ICartProps { */ const Cart = ({ stickyNav }: ICartProps) => { const { cart } = useContext(CartContext); + const [productCount, setProductCount] = useState(); - const productsCount = - cart && Object.keys(cart).length ? cart.totalProductsCount : ''; + useEffect(() => { + const interval = setInterval(() => { + const productsCount = cart && cart.totalProductsCount; + if (productsCount) { + setProductCount(productsCount); + } + }, 1000); + return () => clearInterval(interval); + }, [cart]); return ( <> @@ -42,12 +50,12 @@ const Cart = ({ stickyNav }: ICartProps) => { - {productsCount && ( + {productCount && ( - {productsCount} + {productCount} )} From 5dcb3a1a9c7e250cece97f69e6b2fe771de48f1e Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Thu, 23 Feb 2023 03:00:29 +0100 Subject: [PATCH 083/262] Fix Apollo bug --- refactor/src/utils/apollo/ApolloClient.js | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/refactor/src/utils/apollo/ApolloClient.js b/refactor/src/utils/apollo/ApolloClient.js index b3ded3ee3..3730b2773 100644 --- a/refactor/src/utils/apollo/ApolloClient.js +++ b/refactor/src/utils/apollo/ApolloClient.js @@ -28,6 +28,7 @@ export const middleware = new ApolloLink((operation, forward) => { localStorage.removeItem('woo-session'); localStorage.removeItem('woo-session-expiry'); } + if (session) { operation.setContext(() => ({ headers: { @@ -56,15 +57,19 @@ export const afterware = new ApolloLink((operation, forward) => const session = headers.get('woocommerce-session'); if (session && process.browser) { - // Remove session data if session destroyed. if ('false' === session) { + // Remove session data if session destroyed. localStorage.removeItem('woo-session'); // Update session new data if changed. - } else if (localStorage.getItem('woo-session') !== session) { - localStorage.setItem('woo-session', headers.get('woocommerce-session')); - localStorage.setItem('woo-session-expiry', new Date()); + } else if (!localStorage.getItem('woo-session')) { + let currentTime = new Date().getTime(); + let oneDayFromNow = new Date(currentTime + 24 * 60 * 60 * 1000); + + localStorage.setItem('woo-session', session); + localStorage.setItem('woo-session-expiry', oneDayFromNow); } } + return response; }) ); From 8c1209ba36ee79f719bb747faa33508cbd60b6bd Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Thu, 23 Feb 2023 03:10:16 +0100 Subject: [PATCH 084/262] Jsx global --- refactor/.eslintrc.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/refactor/.eslintrc.json b/refactor/.eslintrc.json index f0f3abee4..0c5d8a70c 100644 --- a/refactor/.eslintrc.json +++ b/refactor/.eslintrc.json @@ -2,5 +2,6 @@ "extends": "next/core-web-vitals", "rules": { "@next/next/no-img-element": "off" - } + }, + "globals": { "JSX": true } } From fcfc75d81bc4d765a67bd1361f207d2dea2bc360 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Thu, 23 Feb 2023 03:11:53 +0100 Subject: [PATCH 085/262] More globals --- refactor/.eslintrc.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/refactor/.eslintrc.json b/refactor/.eslintrc.json index 0c5d8a70c..c0e3d8b2b 100644 --- a/refactor/.eslintrc.json +++ b/refactor/.eslintrc.json @@ -3,5 +3,10 @@ "rules": { "@next/next/no-img-element": "off" }, - "globals": { "JSX": true } + "globals": { "JSX": true }, + "env": { + "browser": true, + "node": true, + "es2022": true + } } From 00a64d5620c17358e4bdd72de857826f1e7e880f Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Thu, 23 Feb 2023 03:19:14 +0100 Subject: [PATCH 086/262] Remove JSX Element --- refactor/src/components/Layout/Layout.component.tsx | 2 +- refactor/src/components/Product/DisplayProducts.component.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/refactor/src/components/Layout/Layout.component.tsx b/refactor/src/components/Layout/Layout.component.tsx index a3dc9a380..b239836f9 100644 --- a/refactor/src/components/Layout/Layout.component.tsx +++ b/refactor/src/components/Layout/Layout.component.tsx @@ -32,7 +32,7 @@ interface ILayoutProps { * @returns {JSX.Element} - Rendered component */ -const Layout = ({ children, title }: ILayoutProps): JSX.Element => { +const Layout = ({ children, title }: ILayoutProps) => { const { setCart } = useContext(CartContext); const { data, refetch } = useQuery(GET_CART, { diff --git a/refactor/src/components/Product/DisplayProducts.component.tsx b/refactor/src/components/Product/DisplayProducts.component.tsx index 3b179fbff..4b27133d3 100644 --- a/refactor/src/components/Product/DisplayProducts.component.tsx +++ b/refactor/src/components/Product/DisplayProducts.component.tsx @@ -45,7 +45,7 @@ interface IDisplayProductsProps { * @returns {JSX.Element} - Rendered component */ -const DisplayProducts = ({ products }: IDisplayProductsProps): JSX.Element => { +const DisplayProducts = ({ products }: IDisplayProductsProps) => { return (
From 598f71026a48f6b18506c8f5d2f076a8035d01d7 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Thu, 23 Feb 2023 04:09:21 +0100 Subject: [PATCH 087/262] Import React --- refactor/src/utils/context/CartProvider.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/refactor/src/utils/context/CartProvider.tsx b/refactor/src/utils/context/CartProvider.tsx index 7f4325e8f..51e951a5b 100644 --- a/refactor/src/utils/context/CartProvider.tsx +++ b/refactor/src/utils/context/CartProvider.tsx @@ -1,4 +1,4 @@ -import { +import React, { useState, useEffect, createContext, From 665eba666e7f2061a964348cdec9775e7a2987a9 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Thu, 23 Feb 2023 04:20:32 +0100 Subject: [PATCH 088/262] Eslint complexity --- refactor/.eslintrc.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/refactor/.eslintrc.json b/refactor/.eslintrc.json index c0e3d8b2b..0caec1b76 100644 --- a/refactor/.eslintrc.json +++ b/refactor/.eslintrc.json @@ -1,12 +1,12 @@ { "extends": "next/core-web-vitals", "rules": { - "@next/next/no-img-element": "off" + "@next/next/no-img-element": "off", + "complexity": ["warn", { "max": 20 }] }, "globals": { "JSX": true }, "env": { "browser": true, - "node": true, - "es2022": true + "es6": true } } From 3627595255792bd7b0ba09bb29b72c5c95d66a9a Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Thu, 23 Feb 2023 04:22:07 +0100 Subject: [PATCH 089/262] Eslint recommended --- refactor/.eslintrc.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/refactor/.eslintrc.json b/refactor/.eslintrc.json index 0caec1b76..c7590c23c 100644 --- a/refactor/.eslintrc.json +++ b/refactor/.eslintrc.json @@ -1,5 +1,5 @@ { - "extends": "next/core-web-vitals", + "extends": ["next/core-web-vitals", "eslint:recommended"], "rules": { "@next/next/no-img-element": "off", "complexity": ["warn", { "max": 20 }] From cd9830ecf909c1d06f487fa001a6e05a21ca31fa Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Thu, 23 Feb 2023 04:24:31 +0100 Subject: [PATCH 090/262] Refactor --- refactor/src/components/Layout/Layout.component.tsx | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/refactor/src/components/Layout/Layout.component.tsx b/refactor/src/components/Layout/Layout.component.tsx index b239836f9..de59b1c19 100644 --- a/refactor/src/components/Layout/Layout.component.tsx +++ b/refactor/src/components/Layout/Layout.component.tsx @@ -1,5 +1,5 @@ // Imports -import { ReactNode } from 'react'; +import { ReactNode, useContext, useEffect } from 'react'; import { useQuery } from '@apollo/client'; // Components @@ -7,9 +7,6 @@ import Header from '@/components/Header/Header.component'; import PageTitle from './PageTitle.component'; import Footer from '@/components/Footer/Footer.component'; -// Imports -import { useContext, useEffect } from 'react'; - // State import { CartContext } from '@/utils/context/CartProvider'; From b6c3c849c29c472eacc6c93e5f99906b906624d7 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Thu, 23 Feb 2023 17:46:14 +0100 Subject: [PATCH 091/262] Try to fix cart fetch bug --- refactor/src/components/Product/AddToCart.component.tsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/refactor/src/components/Product/AddToCart.component.tsx b/refactor/src/components/Product/AddToCart.component.tsx index d89eb637d..7a7c39d52 100644 --- a/refactor/src/components/Product/AddToCart.component.tsx +++ b/refactor/src/components/Product/AddToCart.component.tsx @@ -115,6 +115,10 @@ const AddToCart = ({ product }: any) => { const handleAddToCart = () => { addToCart(); + // Refetch cart after 2 seconds + setTimeout(() => { + refetch(); + }, 2000); }; return ( From 26740a3d97a9781a25fa8aa75a8a25f07fbe4821 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Thu, 23 Feb 2023 17:53:33 +0100 Subject: [PATCH 092/262] Add to cart product --- .../Product/AddToCart.component.tsx | 49 ++++++------------- 1 file changed, 14 insertions(+), 35 deletions(-) diff --git a/refactor/src/components/Product/AddToCart.component.tsx b/refactor/src/components/Product/AddToCart.component.tsx index 7a7c39d52..50952de55 100644 --- a/refactor/src/components/Product/AddToCart.component.tsx +++ b/refactor/src/components/Product/AddToCart.component.tsx @@ -16,50 +16,29 @@ import { getFormattedCart } from '@/utils/functions/tfunctions'; import { GET_CART } from '@/utils/gql/GQL_QUERIES'; import { ADD_TO_CART } from '@/utils/gql/GQL_MUTATIONS'; -export interface MyImage { +interface IImage { __typename: string; id: string; - sourceUrl?: string; - srcSet?: string; - altText: string; + uri: string; title: string; + srcSet: string; + sourceUrl: string; } -export interface GalleryImages { - __typename: string; - nodes: any[]; -} - -export interface Node { +export interface IProduct { __typename: string; id: string; databaseId: number; - name: string; + averageRating: number; + slug: string; description: string; - type: string; onSale: boolean; - slug: string; - averageRating: number; - reviewCount: number; - image: MyImage; - galleryImages: GalleryImages; - productId: number; -} - -export interface MyProduct { - __typename: string; - node: Node; -} - -export interface testRootObject { - __typename: string; - key: string; - product: MyProduct; - variation?: any; - quantity: number; - total: string; - subtotal: string; - subtotalTax: string; + image: IImage; + name: string; + salePrice?: any; + regularPrice: string; + price: string; + stockQuantity: number; } /** @@ -67,7 +46,7 @@ export interface testRootObject { * Uses GraphQL for product data * @param {Object} product // Product data */ -const AddToCart = ({ product }: any) => { +const AddToCart = (product: IProduct) => { const { setCart } = useContext(CartContext); const [requestError, setRequestError] = useState(false); From ba810aee78c4ae90b2cbfa727ac904a9624772f5 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Thu, 23 Feb 2023 18:07:24 +0100 Subject: [PATCH 093/262] Remove unused function --- refactor/src/utils/functions/tfunctions.tsx | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/refactor/src/utils/functions/tfunctions.tsx b/refactor/src/utils/functions/tfunctions.tsx index 89a0cae25..b3f73ea3f 100644 --- a/refactor/src/utils/functions/tfunctions.tsx +++ b/refactor/src/utils/functions/tfunctions.tsx @@ -113,18 +113,6 @@ export const filteredVariantPrice = (price, side) => { return price.substring(0, price.indexOf('-')).replace('-', ''); }; -/** - * Convert price from string to floating value and convert it to use two decimals - * @param {String} string - */ -export const getFloatVal = (string) => { - const stringWithoutKr = string.substring(2); - const floatValue = parseFloat(stringWithoutKr); - return null !== floatValue - ? parseFloat(parseFloat(floatValue).toFixed(2)) - : ''; -}; - /** * Returns cart data in the required format. * @param {String} data Cart data From dcd00466bdcab6469fbe47453f408ce15a96e76f Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Thu, 23 Feb 2023 18:19:58 +0100 Subject: [PATCH 094/262] Move const to top --- refactor/src/components/Footer/Hamburger.component.tsx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/refactor/src/components/Footer/Hamburger.component.tsx b/refactor/src/components/Footer/Hamburger.component.tsx index fdde4df72..2fd4bb11d 100644 --- a/refactor/src/components/Footer/Hamburger.component.tsx +++ b/refactor/src/components/Footer/Hamburger.component.tsx @@ -18,6 +18,11 @@ const Hamburger = () => { const [isExpanded, setisExpanded] = useState(false); const [hidden, setHidden] = useState('invisible'); + const hamburgerLine = + 'h-1 w-10 my-1 rounded-full bg-white transition ease transform duration-300 not-sr-only'; + + const opacityFull = 'opacity-100 group-hover:opacity-100'; + useEffect(() => { if (isExpanded) { setHidden(''); @@ -37,11 +42,6 @@ const Hamburger = () => { setisExpanded((prevExpanded) => !prevExpanded); }, [setisExpanded]); - const hamburgerLine = - 'h-1 w-10 my-1 rounded-full bg-white transition ease transform duration-300 not-sr-only'; - - const opacityFull = 'opacity-100 group-hover:opacity-100'; - return (
From 2dd1493ca5d0e44e3a01b3ac835f43bb3d18e549 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Thu, 23 Feb 2023 21:51:49 +0100 Subject: [PATCH 115/262] JSDoc CartContents --- refactor/src/components/Cart/CartContents.component.tsx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/refactor/src/components/Cart/CartContents.component.tsx b/refactor/src/components/Cart/CartContents.component.tsx index 558c72815..59ff106ea 100644 --- a/refactor/src/components/Cart/CartContents.component.tsx +++ b/refactor/src/components/Cart/CartContents.component.tsx @@ -15,6 +15,11 @@ import { import { GET_CART } from '@/utils/gql/GQL_QUERIES'; import { UPDATE_CART } from '@/utils/gql/GQL_MUTATIONS'; +/** + * Renders cart contents. + * @function CartContents + * @returns {JSX.Element} - Rendered component + */ const CartContents = () => { const { cart, setCart } = useContext(CartContext); const [, setProductCount] = useState(1); From 83b707b8bb57ab659cdf76d760f3dabd5ae450fe Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Thu, 23 Feb 2023 22:44:04 +0100 Subject: [PATCH 116/262] Typescript improvements --- .../Cart/CartContents.component.tsx | 4 +- refactor/src/utils/functions/tfunctions.tsx | 93 +++++++++++++++++++ 2 files changed, 95 insertions(+), 2 deletions(-) diff --git a/refactor/src/components/Cart/CartContents.component.tsx b/refactor/src/components/Cart/CartContents.component.tsx index 59ff106ea..c56d6a497 100644 --- a/refactor/src/components/Cart/CartContents.component.tsx +++ b/refactor/src/components/Cart/CartContents.component.tsx @@ -22,7 +22,7 @@ import { UPDATE_CART } from '@/utils/gql/GQL_MUTATIONS'; */ const CartContents = () => { const { cart, setCart } = useContext(CartContext); - const [, setProductCount] = useState(1); + const [, setProductCount] = useState(1); // Get cart data query const { data, refetch } = useQuery(GET_CART, { @@ -102,7 +102,7 @@ const CartContents = () => { setTimeout(() => { refetch(); - }, 2000); + }, 3000); }} /> diff --git a/refactor/src/utils/functions/tfunctions.tsx b/refactor/src/utils/functions/tfunctions.tsx index 089b0cdc8..c59e919d0 100644 --- a/refactor/src/utils/functions/tfunctions.tsx +++ b/refactor/src/utils/functions/tfunctions.tsx @@ -1,6 +1,14 @@ import { v4 as uuidv4 } from 'uuid'; import { RootObject, Product } from '@/utils/context/CartProvider'; +import { + MutationFunctionOptions, + OperationVariables, + DefaultContext, + ApolloCache, + FetchResult, +} from '@apollo/client'; +import { ChangeEvent, SetStateAction } from 'react'; /* Interface for products*/ @@ -50,6 +58,8 @@ interface IProductRootObject { subtotalTax: string; } +type TUpdatedItems = { key: string; quantity: number }[]; + /* Interface for props */ interface IPaddedPriceProps { @@ -280,3 +290,86 @@ export const createCheckoutData = (order: ICheckoutDataProps) => ({ isPaid: false, transactionId: 'fhggdfjgfi', }); + +/** + * Get the updated items in the below format required for mutation input. + * + * Creates an array in above format with the newQty (updated Qty ). + * + */ +export const getUpdatedItems = ( + products: Product[], + newQty: number, + cartKey: string +) => { + // Create an empty array. + //const updatedItems: { key: any; quantity: any; }[] = []; + const updatedItems: TUpdatedItems = []; + + // Loop through the product array. + products.map((cartItem) => { + // If you find the cart key of the product user is trying to update, push the key and new qty. + if (cartItem.cartKey === cartKey) { + updatedItems.push({ + key: cartItem.cartKey, + quantity: newQty, + }); + + // Otherwise just push the existing qty without updating. + } else { + updatedItems.push({ + key: cartItem.cartKey, + quantity: cartItem.qty, + }); + } + }); + + // Return the updatedItems array with new Qtys. + return updatedItems; +}; + +/* + * When user changes the quantity, update the cart in localStorage + * Also update the cart in the global Context + */ +export const handleQuantityChange = ( + event: ChangeEvent, + cartKey: string, + products: Product[], + updateCart: { + (): Promise, Record>>; + (arg0: { + variables: { input: { clientMutationId: string; items: TUpdatedItems } }; + }): void; + }, + updateCartProcessing: boolean, + setProductCount: { + (value: SetStateAction): void; + (arg0: number): void; + } +) => { + if (process.browser) { + event.stopPropagation(); + // Return if the previous update cart mutation request is still processing + if (updateCartProcessing) { + return; + } + // If the user tries to delete the count of product, set that to 1 by default ( This will not allow him to reduce it less than zero ) + const newQty = event.target.value ? parseInt(event.target.value, 10) : 1; + + // Set the new quantity in state. + setProductCount(newQty); + if (products.length) { + const updatedItems = getUpdatedItems(products, newQty, cartKey); + + updateCart({ + variables: { + input: { + clientMutationId: uuidv4(), + items: updatedItems, + }, + }, + }); + } + } +}; From 95f70b47dd311b6a688a5a0da75b5bb7feef8868 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Thu, 23 Feb 2023 22:48:47 +0100 Subject: [PATCH 117/262] Cleanup --- refactor/src/utils/functions/tfunctions.tsx | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/refactor/src/utils/functions/tfunctions.tsx b/refactor/src/utils/functions/tfunctions.tsx index c59e919d0..8836a120a 100644 --- a/refactor/src/utils/functions/tfunctions.tsx +++ b/refactor/src/utils/functions/tfunctions.tsx @@ -1,13 +1,7 @@ import { v4 as uuidv4 } from 'uuid'; import { RootObject, Product } from '@/utils/context/CartProvider'; -import { - MutationFunctionOptions, - OperationVariables, - DefaultContext, - ApolloCache, - FetchResult, -} from '@apollo/client'; +import { FetchResult } from '@apollo/client'; import { ChangeEvent, SetStateAction } from 'react'; /* Interface for products*/ From 8bfce2e44924571f710f388c25570e34bfd109be Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Thu, 23 Feb 2023 22:55:59 +0100 Subject: [PATCH 118/262] Test --- refactor/src/utils/functions/tfunctions.tsx | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/refactor/src/utils/functions/tfunctions.tsx b/refactor/src/utils/functions/tfunctions.tsx index 8836a120a..2ae84e343 100644 --- a/refactor/src/utils/functions/tfunctions.tsx +++ b/refactor/src/utils/functions/tfunctions.tsx @@ -1,7 +1,13 @@ import { v4 as uuidv4 } from 'uuid'; import { RootObject, Product } from '@/utils/context/CartProvider'; -import { FetchResult } from '@apollo/client'; +import { + ApolloCache, + DefaultContext, + FetchResult, + MutationFunctionOptions, + OperationVariables, +} from '@apollo/client'; import { ChangeEvent, SetStateAction } from 'react'; /* Interface for products*/ @@ -331,15 +337,24 @@ export const handleQuantityChange = ( cartKey: string, products: Product[], updateCart: { - (): Promise, Record>>; + ( + options?: + | MutationFunctionOptions< + any, + OperationVariables, + DefaultContext, + ApolloCache + > + | undefined + ): Promise, Record>>; (arg0: { variables: { input: { clientMutationId: string; items: TUpdatedItems } }; }): void; }, + updateCartProcessing: boolean, setProductCount: { (value: SetStateAction): void; - (arg0: number): void; } ) => { if (process.browser) { From 7e65d56aba0217e288505e8a9b853745990869d8 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Thu, 23 Feb 2023 23:00:48 +0100 Subject: [PATCH 119/262] Replace map with forEach --- refactor/src/utils/functions/tfunctions.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/refactor/src/utils/functions/tfunctions.tsx b/refactor/src/utils/functions/tfunctions.tsx index 2ae84e343..85d0269ca 100644 --- a/refactor/src/utils/functions/tfunctions.tsx +++ b/refactor/src/utils/functions/tfunctions.tsx @@ -307,7 +307,7 @@ export const getUpdatedItems = ( const updatedItems: TUpdatedItems = []; // Loop through the product array. - products.map((cartItem) => { + products.forEach((cartItem) => { // If you find the cart key of the product user is trying to update, push the key and new qty. if (cartItem.cartKey === cartKey) { updatedItems.push({ From 03a61c063490072c33ab4dc0a743766a24f57a56 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Thu, 23 Feb 2023 23:05:49 +0100 Subject: [PATCH 120/262] Update tfunctions.tsx --- refactor/src/utils/functions/tfunctions.tsx | 25 ++------------------- 1 file changed, 2 insertions(+), 23 deletions(-) diff --git a/refactor/src/utils/functions/tfunctions.tsx b/refactor/src/utils/functions/tfunctions.tsx index 85d0269ca..864230e37 100644 --- a/refactor/src/utils/functions/tfunctions.tsx +++ b/refactor/src/utils/functions/tfunctions.tsx @@ -1,13 +1,7 @@ import { v4 as uuidv4 } from 'uuid'; import { RootObject, Product } from '@/utils/context/CartProvider'; -import { - ApolloCache, - DefaultContext, - FetchResult, - MutationFunctionOptions, - OperationVariables, -} from '@apollo/client'; + import { ChangeEvent, SetStateAction } from 'react'; /* Interface for products*/ @@ -336,22 +330,7 @@ export const handleQuantityChange = ( event: ChangeEvent, cartKey: string, products: Product[], - updateCart: { - ( - options?: - | MutationFunctionOptions< - any, - OperationVariables, - DefaultContext, - ApolloCache - > - | undefined - ): Promise, Record>>; - (arg0: { - variables: { input: { clientMutationId: string; items: TUpdatedItems } }; - }): void; - }, - + updateCart: any, // Lazy solution, but saves us from a lot of warnings updateCartProcessing: boolean, setProductCount: { (value: SetStateAction): void; From 556e44ea7ea5880e89a676c71652a14d3b0af568 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Fri, 24 Feb 2023 00:51:16 +0100 Subject: [PATCH 121/262] Eslint complexity --- refactor/src/utils/functions/tfunctions.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/refactor/src/utils/functions/tfunctions.tsx b/refactor/src/utils/functions/tfunctions.tsx index 864230e37..747c78ac9 100644 --- a/refactor/src/utils/functions/tfunctions.tsx +++ b/refactor/src/utils/functions/tfunctions.tsx @@ -1,3 +1,5 @@ +/*eslint complexity: ["error", 20]*/ + import { v4 as uuidv4 } from 'uuid'; import { RootObject, Product } from '@/utils/context/CartProvider'; From 6857a6383467f15fed6d406897b7c7f82e524e51 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Fri, 24 Feb 2023 00:55:30 +0100 Subject: [PATCH 122/262] Cleanup --- refactor/src/components/Cart/CartContents.component.tsx | 6 +++--- refactor/src/utils/functions/tfunctions.tsx | 7 +------ 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/refactor/src/components/Cart/CartContents.component.tsx b/refactor/src/components/Cart/CartContents.component.tsx index c56d6a497..1b92bc938 100644 --- a/refactor/src/components/Cart/CartContents.component.tsx +++ b/refactor/src/components/Cart/CartContents.component.tsx @@ -22,7 +22,7 @@ import { UPDATE_CART } from '@/utils/gql/GQL_MUTATIONS'; */ const CartContents = () => { const { cart, setCart } = useContext(CartContext); - const [, setProductCount] = useState(1); + // Get cart data query const { data, refetch } = useQuery(GET_CART, { @@ -96,8 +96,8 @@ const CartContents = () => { item.cartKey, cart.products, updateCart, - updateCartProcessing, - setProductCount + updateCartProcessing + ); setTimeout(() => { diff --git a/refactor/src/utils/functions/tfunctions.tsx b/refactor/src/utils/functions/tfunctions.tsx index 747c78ac9..d40faafdc 100644 --- a/refactor/src/utils/functions/tfunctions.tsx +++ b/refactor/src/utils/functions/tfunctions.tsx @@ -333,10 +333,7 @@ export const handleQuantityChange = ( cartKey: string, products: Product[], updateCart: any, // Lazy solution, but saves us from a lot of warnings - updateCartProcessing: boolean, - setProductCount: { - (value: SetStateAction): void; - } + updateCartProcessing: boolean ) => { if (process.browser) { event.stopPropagation(); @@ -347,8 +344,6 @@ export const handleQuantityChange = ( // If the user tries to delete the count of product, set that to 1 by default ( This will not allow him to reduce it less than zero ) const newQty = event.target.value ? parseInt(event.target.value, 10) : 1; - // Set the new quantity in state. - setProductCount(newQty); if (products.length) { const updatedItems = getUpdatedItems(products, newQty, cartKey); From fe94308dae2a5edea5fb4c55e254c552d3209010 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Fri, 24 Feb 2023 01:03:30 +0100 Subject: [PATCH 123/262] Remove unused import --- refactor/src/components/Cart/CartContents.component.tsx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/refactor/src/components/Cart/CartContents.component.tsx b/refactor/src/components/Cart/CartContents.component.tsx index 1b92bc938..546f4f00b 100644 --- a/refactor/src/components/Cart/CartContents.component.tsx +++ b/refactor/src/components/Cart/CartContents.component.tsx @@ -1,5 +1,5 @@ // Imports -import { useContext, useState } from 'react'; +import { useContext } from 'react'; import { useMutation, useQuery } from '@apollo/client'; // State @@ -22,7 +22,6 @@ import { UPDATE_CART } from '@/utils/gql/GQL_MUTATIONS'; */ const CartContents = () => { const { cart, setCart } = useContext(CartContext); - // Get cart data query const { data, refetch } = useQuery(GET_CART, { @@ -97,7 +96,6 @@ const CartContents = () => { cart.products, updateCart, updateCartProcessing - ); setTimeout(() => { From f9cc47a288de655154fdd6de21b92edad996c9b3 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Fri, 24 Feb 2023 01:06:21 +0100 Subject: [PATCH 124/262] Remove unused import --- refactor/src/utils/functions/tfunctions.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/refactor/src/utils/functions/tfunctions.tsx b/refactor/src/utils/functions/tfunctions.tsx index d40faafdc..c123d35bc 100644 --- a/refactor/src/utils/functions/tfunctions.tsx +++ b/refactor/src/utils/functions/tfunctions.tsx @@ -4,7 +4,7 @@ import { v4 as uuidv4 } from 'uuid'; import { RootObject, Product } from '@/utils/context/CartProvider'; -import { ChangeEvent, SetStateAction } from 'react'; +import { ChangeEvent } from 'react'; /* Interface for products*/ From 8173eadd2673ea82caf3fe3035a109b0a470e5a4 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Fri, 24 Feb 2023 02:10:33 +0100 Subject: [PATCH 125/262] Checkout form test --- .../Cart/CartContents.component.tsx | 10 ++ .../components/Checkout/Billing.component.jsx | 51 ++++++++ .../Checkout/CheckoutForm.component.jsx | 109 ++++++++++++++++++ .../Checkout/MobileOrderDetails.component.jsx | 40 +++++++ .../MobileOrderDetailsCartItem.component.jsx | 16 +++ .../Checkout/OrderDetails.component.jsx | 45 ++++++++ .../OrderDetailsCartItem.component.jsx | 30 +++++ .../components/Checkout/Payment.component.jsx | 16 +++ .../components/Input/InputField.component.jsx | 46 ++++++++ refactor/src/pages/kasse.tsx | 14 +++ 10 files changed, 377 insertions(+) create mode 100644 refactor/src/components/Checkout/Billing.component.jsx create mode 100644 refactor/src/components/Checkout/CheckoutForm.component.jsx create mode 100644 refactor/src/components/Checkout/MobileOrderDetails.component.jsx create mode 100644 refactor/src/components/Checkout/MobileOrderDetailsCartItem.component.jsx create mode 100644 refactor/src/components/Checkout/OrderDetails.component.jsx create mode 100644 refactor/src/components/Checkout/OrderDetailsCartItem.component.jsx create mode 100644 refactor/src/components/Checkout/Payment.component.jsx create mode 100644 refactor/src/components/Input/InputField.component.jsx create mode 100644 refactor/src/pages/kasse.tsx diff --git a/refactor/src/components/Cart/CartContents.component.tsx b/refactor/src/components/Cart/CartContents.component.tsx index 546f4f00b..4a996de82 100644 --- a/refactor/src/components/Cart/CartContents.component.tsx +++ b/refactor/src/components/Cart/CartContents.component.tsx @@ -1,6 +1,7 @@ // Imports import { useContext } from 'react'; import { useMutation, useQuery } from '@apollo/client'; +import Link from 'next/link'; // State import { CartContext } from '@/utils/context/CartProvider'; @@ -14,6 +15,7 @@ import { // GraphQL import { GET_CART } from '@/utils/gql/GQL_QUERIES'; import { UPDATE_CART } from '@/utils/gql/GQL_MUTATIONS'; +import Button from '../UI/Button.component'; /** * Renders cart contents. @@ -121,6 +123,14 @@ const CartContents = () => { Ingen produkter i handlekurven )} + +
+ + + +
+ +
); diff --git a/refactor/src/components/Checkout/Billing.component.jsx b/refactor/src/components/Checkout/Billing.component.jsx new file mode 100644 index 000000000..c4ce81a77 --- /dev/null +++ b/refactor/src/components/Checkout/Billing.component.jsx @@ -0,0 +1,51 @@ +import { useForm } from 'react-hook-form'; + +import { InputField } from '@/components/Input/InputField.component'; + +import { INPUT_FIELDS } from '@/utils/constants/INPUT_FIELDS'; + +const Billing = ({ onSubmit }) => { + const { + register, + handleSubmit, + formState: { errors }, + } = useForm(); + + return ( +
+
+
+ {INPUT_FIELDS.map(({ label, name, customValidation }, key) => ( + + ))} + +
+
+
+ ); +}; + +export default Billing; + +const OrderButton = ({ register }) => ( +
+ + +
+); diff --git a/refactor/src/components/Checkout/CheckoutForm.component.jsx b/refactor/src/components/Checkout/CheckoutForm.component.jsx new file mode 100644 index 000000000..90dbd506b --- /dev/null +++ b/refactor/src/components/Checkout/CheckoutForm.component.jsx @@ -0,0 +1,109 @@ +import { useState, useContext, useEffect } from 'react'; +import { useQuery, useMutation } from '@apollo/client'; + +import Billing from './Billing.component'; +import OrderDetails from './OrderDetails.component'; +import MobileOrderDetails from './MobileOrderDetails.component'; +import LoadingSpinner from '../LoadingSpinner/LoadingSpinner.component'; + +import { GET_CART } from '@/utils/gql/GQL_QUERIES'; +import { CHECKOUT_MUTATION } from '@/utils/gql/GQL_MUTATIONS'; +import { CartContext } from '@/utils/context/CartProvider'; + +import { + getFormattedCart, + createCheckoutData, +} from '@/utils/functions/functions'; + +const CheckoutForm = () => { + const {cart, setCart} = useContext(CartContext); + const [orderData, setOrderData] = useState(null); + const [requestError, setRequestError] = useState(null); + const [orderCompleted, setorderCompleted] = useState(false); + + // Get Cart Data. + const { data, refetch } = useQuery(GET_CART, { + notifyOnNetworkStatusChange: true, + onCompleted: () => { + // Update cart in the localStorage. + const updatedCart = getFormattedCart(data); + localStorage.setItem('woocommerce-cart', JSON.stringify(updatedCart)); + // Update cart data in React Context. + setCart(updatedCart); + }, + }); + + // Checkout GraphQL mutation + const [checkout, { loading: checkoutLoading }] = useMutation( + CHECKOUT_MUTATION, + { + variables: { + input: orderData, + }, + onCompleted: () => { + setorderCompleted(true); + refetch(); + }, + onError: (error) => { + setRequestError(error); + refetch(); + }, + } + ); + + useEffect(() => { + if (null !== orderData) { + // Perform checkout mutation when the value for orderData changes. + checkout(); + } + }, [checkout, orderData]); + + useEffect(() => { + refetch(); + }, []); + + const onSubmit = (submitData) => { + const checkOutData = createCheckoutData(submitData); + setOrderData(checkOutData); + setRequestError(null); + }; + + return ( + <> + {cart && !orderCompleted ? ( +
+ {/* Order*/} + + + {/*Payment Details*/} + + {/*Error display*/} + {requestError && ( +
+ En feil har oppstått. Feilmeldingen er:
$ + {requestError.toString()} +
+ )} + {/* Checkout Loading*/} + {checkoutLoading && ( +
+ Behandler ordre, vennligst vent ... +
+ +
+ )} +
+ ) : ( + <> + {orderCompleted && ( +
+ Takk for din ordre! +
+ )} + + )} + + ); +}; + +export default CheckoutForm; diff --git a/refactor/src/components/Checkout/MobileOrderDetails.component.jsx b/refactor/src/components/Checkout/MobileOrderDetails.component.jsx new file mode 100644 index 000000000..b6c340347 --- /dev/null +++ b/refactor/src/components/Checkout/MobileOrderDetails.component.jsx @@ -0,0 +1,40 @@ +import { v4 as uuidv4 } from 'uuid'; + +import MobileOrderDetailsCartItem from './MobileOrderDetailsCartItem.component'; + +const MobileOrderDetails = ({ cart }) => ( +
+
+
+ + + {cart.products.length && + cart.products.map(() => ( + + + + + + + ))} + + + {cart.products.length && + cart.products.map((item) => ( + + ))} + +
NavnPrisAntallTotalpris
+
+
+
+); + +export default MobileOrderDetails; diff --git a/refactor/src/components/Checkout/MobileOrderDetailsCartItem.component.jsx b/refactor/src/components/Checkout/MobileOrderDetailsCartItem.component.jsx new file mode 100644 index 000000000..201ed3e5b --- /dev/null +++ b/refactor/src/components/Checkout/MobileOrderDetailsCartItem.component.jsx @@ -0,0 +1,16 @@ +const MobileOrderDetailsCartItem = ({ item }) => ( + + {item.name} + + kr{'string' !== typeof item.price ? item.price.toFixed(2) : item.price} + + {item.qty} + + {'string' !== typeof item.totalPrice + ? item.totalPrice.toFixed(2) + : item.totalPrice} + + +); + +export default MobileOrderDetailsCartItem; diff --git a/refactor/src/components/Checkout/OrderDetails.component.jsx b/refactor/src/components/Checkout/OrderDetails.component.jsx new file mode 100644 index 000000000..8bfed5804 --- /dev/null +++ b/refactor/src/components/Checkout/OrderDetails.component.jsx @@ -0,0 +1,45 @@ +import OrderDetailsCartItem from './OrderDetailsCartItem.component'; + +const OrderDetails = ({ cart }) => ( +
+
+ {cart ? ( +
+ + + + + + + + + + + {cart.products.length && + cart.products.map((item) => ( + + ))} + +
+ + Produkt + + Pris + + Antall + + Total +
+
+ ) : ( + '' + )} +
+
+); + +export default OrderDetails; diff --git a/refactor/src/components/Checkout/OrderDetailsCartItem.component.jsx b/refactor/src/components/Checkout/OrderDetailsCartItem.component.jsx new file mode 100644 index 000000000..f68a7dfd4 --- /dev/null +++ b/refactor/src/components/Checkout/OrderDetailsCartItem.component.jsx @@ -0,0 +1,30 @@ +import { paddedPrice } from '@/utils/functions/functions'; + +const OrderDetailsCartItem = ({ item }) => { + const totalPrice = paddedPrice(item.totalPrice, 'kr'); + return ( + + + {item.image.title} + + {item.name} + + kr {'string' !== typeof item.price ? item.price.toFixed(2) : item.price} + + {item.qty} + + {'string' !== typeof item.totalPrice + ? totalPrice.toFixed(2) + : totalPrice} + + + ); +}; + +export default OrderDetailsCartItem; diff --git a/refactor/src/components/Checkout/Payment.component.jsx b/refactor/src/components/Checkout/Payment.component.jsx new file mode 100644 index 000000000..590a8ffdf --- /dev/null +++ b/refactor/src/components/Checkout/Payment.component.jsx @@ -0,0 +1,16 @@ +const Payment = ({ input, handleOnChange }) => ( +
+ +
+); + +export default Payment; diff --git a/refactor/src/components/Input/InputField.component.jsx b/refactor/src/components/Input/InputField.component.jsx new file mode 100644 index 000000000..4e1b16dc6 --- /dev/null +++ b/refactor/src/components/Input/InputField.component.jsx @@ -0,0 +1,46 @@ +/** + * Input field component displays a text input in a form, with label. + * The various properties of the input field can be determined with the props: + * @param {Object} [customValidation] - the validation rules to apply to the input field + * @param {Object} errors - the form errors object provided by react-hook-form + * @param {string} label - used for the display label + * @param {string} name - the key of the value in the submitted data. Must be unique + * @param {function} register - register function from react-hook-form + * @param {boolean} [required=true] - whether or not this field is required. default true + * @param {'text'|'number'} [type='text'] - the input type. defaults to text + */ +export const InputField = ({ + customValidation = {}, + errors, + label, + name, + register, + required = true, + type = 'text', +}) => ( +
+ + + {errors[`${name}`] && ( + FEIL: {errors[`${name}`].message} + )} +
+); diff --git a/refactor/src/pages/kasse.tsx b/refactor/src/pages/kasse.tsx new file mode 100644 index 000000000..94cd74cc7 --- /dev/null +++ b/refactor/src/pages/kasse.tsx @@ -0,0 +1,14 @@ +// Components +import Layout from '@/components/Layout/Layout.component'; +import CheckoutForm from '@/components/Checkout/CheckoutForm.component'; + +// Types +import type { NextPage } from 'next'; + +const Kasse: NextPage = () => ( + + + +); + +export default Kasse; From 7c2ca6f418c9f75a5b42f9f51c20b14636c7d133 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Fri, 24 Feb 2023 02:12:58 +0100 Subject: [PATCH 126/262] Delete Woo session after checkout --- refactor/src/components/Checkout/CheckoutForm.component.jsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/refactor/src/components/Checkout/CheckoutForm.component.jsx b/refactor/src/components/Checkout/CheckoutForm.component.jsx index 90dbd506b..181ab623b 100644 --- a/refactor/src/components/Checkout/CheckoutForm.component.jsx +++ b/refactor/src/components/Checkout/CheckoutForm.component.jsx @@ -16,7 +16,7 @@ import { } from '@/utils/functions/functions'; const CheckoutForm = () => { - const {cart, setCart} = useContext(CartContext); + const { cart, setCart } = useContext(CartContext); const [orderData, setOrderData] = useState(null); const [requestError, setRequestError] = useState(null); const [orderCompleted, setorderCompleted] = useState(false); @@ -41,6 +41,9 @@ const CheckoutForm = () => { input: orderData, }, onCompleted: () => { + localStorage.removeItem('woo-session'); + localStorage.removeItem('woo-session-expiry'); + localStorage.removeItem('wooocommerce-cart'); setorderCompleted(true); refetch(); }, From d9e634492187c3f1828f0a0bdffb859fb65320a9 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Fri, 24 Feb 2023 02:37:39 +0100 Subject: [PATCH 127/262] Checkout Typescript --- .../Cart/CartContents.component.tsx | 22 +++++---- ...ng.component.jsx => Billing.component.tsx} | 4 +- ...mponent.jsx => CheckoutForm.component.tsx} | 30 ++++++++----- .../Checkout/MobileOrderDetails.component.jsx | 40 ----------------- .../MobileOrderDetailsCartItem.component.jsx | 16 ------- .../Checkout/OrderDetails.component.jsx | 45 ------------------- .../OrderDetailsCartItem.component.jsx | 30 ------------- ...component.jsx => InputField.component.tsx} | 2 +- 8 files changed, 35 insertions(+), 154 deletions(-) rename refactor/src/components/Checkout/{Billing.component.jsx => Billing.component.tsx} (93%) rename refactor/src/components/Checkout/{CheckoutForm.component.jsx => CheckoutForm.component.tsx} (83%) delete mode 100644 refactor/src/components/Checkout/MobileOrderDetails.component.jsx delete mode 100644 refactor/src/components/Checkout/MobileOrderDetailsCartItem.component.jsx delete mode 100644 refactor/src/components/Checkout/OrderDetails.component.jsx delete mode 100644 refactor/src/components/Checkout/OrderDetailsCartItem.component.jsx rename refactor/src/components/Input/{InputField.component.jsx => InputField.component.tsx} (99%) diff --git a/refactor/src/components/Cart/CartContents.component.tsx b/refactor/src/components/Cart/CartContents.component.tsx index 4a996de82..d06625d1d 100644 --- a/refactor/src/components/Cart/CartContents.component.tsx +++ b/refactor/src/components/Cart/CartContents.component.tsx @@ -2,10 +2,14 @@ import { useContext } from 'react'; import { useMutation, useQuery } from '@apollo/client'; import Link from 'next/link'; +import { useRouter } from 'next/router'; // State import { CartContext } from '@/utils/context/CartProvider'; +// Components +import Button from '@/components/UI/Button.component'; + // Utils import { getFormattedCart, @@ -15,7 +19,6 @@ import { // GraphQL import { GET_CART } from '@/utils/gql/GQL_QUERIES'; import { UPDATE_CART } from '@/utils/gql/GQL_MUTATIONS'; -import Button from '../UI/Button.component'; /** * Renders cart contents. @@ -23,8 +26,11 @@ import Button from '../UI/Button.component'; * @returns {JSX.Element} - Rendered component */ const CartContents = () => { + const router = useRouter(); const { cart, setCart } = useContext(CartContext); + const isCheckoutPage = router.pathname === '/kasse'; + // Get cart data query const { data, refetch } = useQuery(GET_CART, { notifyOnNetworkStatusChange: true, @@ -124,13 +130,13 @@ const CartContents = () => { )} -
- - - -
- - + {!isCheckoutPage && ( +
+ + + +
+ )}
); diff --git a/refactor/src/components/Checkout/Billing.component.jsx b/refactor/src/components/Checkout/Billing.component.tsx similarity index 93% rename from refactor/src/components/Checkout/Billing.component.jsx rename to refactor/src/components/Checkout/Billing.component.tsx index c4ce81a77..9f1220f0c 100644 --- a/refactor/src/components/Checkout/Billing.component.jsx +++ b/refactor/src/components/Checkout/Billing.component.tsx @@ -4,7 +4,7 @@ import { InputField } from '@/components/Input/InputField.component'; import { INPUT_FIELDS } from '@/utils/constants/INPUT_FIELDS'; -const Billing = ({ onSubmit }) => { +const Billing = ({ onSubmit }: any) => { const { register, handleSubmit, @@ -34,7 +34,7 @@ const Billing = ({ onSubmit }) => { export default Billing; -const OrderButton = ({ register }) => ( +const OrderButton = ({ register }: any) => (
{ const { cart, setCart } = useContext(CartContext); - const [orderData, setOrderData] = useState(null); - const [requestError, setRequestError] = useState(null); + const [orderData, setOrderData] = useState(null); + const [requestError, setRequestError] = useState(null); const [orderCompleted, setorderCompleted] = useState(false); - // Get Cart Data. + // Get cart data query const { data, refetch } = useQuery(GET_CART, { notifyOnNetworkStatusChange: true, onCompleted: () => { // Update cart in the localStorage. const updatedCart = getFormattedCart(data); + + if (!updatedCart) { + return; + } + localStorage.setItem('woocommerce-cart', JSON.stringify(updatedCart)); + // Update cart data in React Context. setCart(updatedCart); }, @@ -65,7 +74,7 @@ const CheckoutForm = () => { refetch(); }, []); - const onSubmit = (submitData) => { + const onSubmit = (submitData: any) => { const checkOutData = createCheckoutData(submitData); setOrderData(checkOutData); setRequestError(null); @@ -76,22 +85,19 @@ const CheckoutForm = () => { {cart && !orderCompleted ? (
{/* Order*/} - - + {/*Payment Details*/} {/*Error display*/} {requestError && (
- En feil har oppstått. Feilmeldingen er:
$ - {requestError.toString()} + En feil har oppstått.
)} {/* Checkout Loading*/} {checkoutLoading && (
Behandler ordre, vennligst vent ... -
)} diff --git a/refactor/src/components/Checkout/MobileOrderDetails.component.jsx b/refactor/src/components/Checkout/MobileOrderDetails.component.jsx deleted file mode 100644 index b6c340347..000000000 --- a/refactor/src/components/Checkout/MobileOrderDetails.component.jsx +++ /dev/null @@ -1,40 +0,0 @@ -import { v4 as uuidv4 } from 'uuid'; - -import MobileOrderDetailsCartItem from './MobileOrderDetailsCartItem.component'; - -const MobileOrderDetails = ({ cart }) => ( -
-
-
- - - {cart.products.length && - cart.products.map(() => ( - - - - - - - ))} - - - {cart.products.length && - cart.products.map((item) => ( - - ))} - -
NavnPrisAntallTotalpris
-
-
-
-); - -export default MobileOrderDetails; diff --git a/refactor/src/components/Checkout/MobileOrderDetailsCartItem.component.jsx b/refactor/src/components/Checkout/MobileOrderDetailsCartItem.component.jsx deleted file mode 100644 index 201ed3e5b..000000000 --- a/refactor/src/components/Checkout/MobileOrderDetailsCartItem.component.jsx +++ /dev/null @@ -1,16 +0,0 @@ -const MobileOrderDetailsCartItem = ({ item }) => ( - - {item.name} - - kr{'string' !== typeof item.price ? item.price.toFixed(2) : item.price} - - {item.qty} - - {'string' !== typeof item.totalPrice - ? item.totalPrice.toFixed(2) - : item.totalPrice} - - -); - -export default MobileOrderDetailsCartItem; diff --git a/refactor/src/components/Checkout/OrderDetails.component.jsx b/refactor/src/components/Checkout/OrderDetails.component.jsx deleted file mode 100644 index 8bfed5804..000000000 --- a/refactor/src/components/Checkout/OrderDetails.component.jsx +++ /dev/null @@ -1,45 +0,0 @@ -import OrderDetailsCartItem from './OrderDetailsCartItem.component'; - -const OrderDetails = ({ cart }) => ( -
-
- {cart ? ( -
- - - - - - - - - - - {cart.products.length && - cart.products.map((item) => ( - - ))} - -
- - Produkt - - Pris - - Antall - - Total -
-
- ) : ( - '' - )} -
-
-); - -export default OrderDetails; diff --git a/refactor/src/components/Checkout/OrderDetailsCartItem.component.jsx b/refactor/src/components/Checkout/OrderDetailsCartItem.component.jsx deleted file mode 100644 index f68a7dfd4..000000000 --- a/refactor/src/components/Checkout/OrderDetailsCartItem.component.jsx +++ /dev/null @@ -1,30 +0,0 @@ -import { paddedPrice } from '@/utils/functions/functions'; - -const OrderDetailsCartItem = ({ item }) => { - const totalPrice = paddedPrice(item.totalPrice, 'kr'); - return ( - - - {item.image.title} - - {item.name} - - kr {'string' !== typeof item.price ? item.price.toFixed(2) : item.price} - - {item.qty} - - {'string' !== typeof item.totalPrice - ? totalPrice.toFixed(2) - : totalPrice} - - - ); -}; - -export default OrderDetailsCartItem; diff --git a/refactor/src/components/Input/InputField.component.jsx b/refactor/src/components/Input/InputField.component.tsx similarity index 99% rename from refactor/src/components/Input/InputField.component.jsx rename to refactor/src/components/Input/InputField.component.tsx index 4e1b16dc6..6c18b9485 100644 --- a/refactor/src/components/Input/InputField.component.jsx +++ b/refactor/src/components/Input/InputField.component.tsx @@ -17,7 +17,7 @@ export const InputField = ({ register, required = true, type = 'text', -}) => ( +}: any) => (
+); export default DisplayProducts; From ca11c93a86e9a72c3986dc8b932f3cb126756e34 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Fri, 24 Feb 2023 04:26:08 +0100 Subject: [PATCH 140/262] Use id as key --- .../components/Checkout/Billing.component.tsx | 4 +- refactor/src/utils/constants/INPUT_FIELDS.ts | 38 +++++++++++++++++++ 2 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 refactor/src/utils/constants/INPUT_FIELDS.ts diff --git a/refactor/src/components/Checkout/Billing.component.tsx b/refactor/src/components/Checkout/Billing.component.tsx index b95f05ab3..b74d35e4b 100644 --- a/refactor/src/components/Checkout/Billing.component.tsx +++ b/refactor/src/components/Checkout/Billing.component.tsx @@ -18,9 +18,9 @@ const Billing = ({ onSubmit }: any) => {
- {INPUT_FIELDS.map(({ label, name, customValidation }, key) => ( + {INPUT_FIELDS.map(({ id, label, name, customValidation }) => ( Date: Fri, 24 Feb 2023 04:28:22 +0100 Subject: [PATCH 141/262] Documentation --- refactor/src/components/Header/Navbar.component.tsx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/refactor/src/components/Header/Navbar.component.tsx b/refactor/src/components/Header/Navbar.component.tsx index 0aa98ef6c..0ed2f5b98 100644 --- a/refactor/src/components/Header/Navbar.component.tsx +++ b/refactor/src/components/Header/Navbar.component.tsx @@ -1,8 +1,11 @@ +// Imports import Link from 'next/link'; +// Components import Cart from './Cart.component'; +// Utils import useIsMobile from '@/utils/hooks/useIsMobile'; // TODO Algolia search From 1b24c5df5355589183ea85b5009a79a0d1f154b2 Mon Sep 17 00:00:00 2001 From: w3bdesign <45217974+w3bdesign@users.noreply.github.com> Date: Fri, 24 Feb 2023 04:34:15 +0100 Subject: [PATCH 142/262] Mobile design --- .../AlgoliaSearchBox.component.jsx | 59 +++++++++++++++ .../AlgoliaSearch/MobileSearch.component.jsx | 52 ++++++++++++++ .../AlgoliaSearch/SearchResults.component.jsx | 71 +++++++++++++++++++ .../components/Footer/Stickynav.component.jsx | 9 ++- .../components/Layout/Layout.component.tsx | 4 +- .../SVG/SVGMobileSearchIcon.component.jsx | 30 ++++++++ .../src/components/SVG/SVGX.component.jsx | 27 +++++++ 7 files changed, 249 insertions(+), 3 deletions(-) create mode 100644 refactor/src/components/AlgoliaSearch/AlgoliaSearchBox.component.jsx create mode 100644 refactor/src/components/AlgoliaSearch/MobileSearch.component.jsx create mode 100644 refactor/src/components/AlgoliaSearch/SearchResults.component.jsx create mode 100644 refactor/src/components/SVG/SVGMobileSearchIcon.component.jsx create mode 100644 refactor/src/components/SVG/SVGX.component.jsx diff --git a/refactor/src/components/AlgoliaSearch/AlgoliaSearchBox.component.jsx b/refactor/src/components/AlgoliaSearch/AlgoliaSearchBox.component.jsx new file mode 100644 index 000000000..1feac27a4 --- /dev/null +++ b/refactor/src/components/AlgoliaSearch/AlgoliaSearchBox.component.jsx @@ -0,0 +1,59 @@ +import algoliasearch from 'algoliasearch'; +import { InstantSearch, SearchBox, Hits } from 'react-instantsearch-dom'; +import { useState } from 'react'; + +import SearchResults from './SearchResults.component'; + +const searchClient = algoliasearch( + process.env.NEXT_PUBLIC_ALGOLIA_APP_ID, + process.env.NEXT_PUBLIC_ALGOLIA_PUBLIC_API_KEY +); + +// https://www.algolia.com/doc/api-reference/widgets/instantsearch/react/ + +/** + * Displays Algolia search for larger resolutions that do not show the mobile menu + */ +const AlgoliaSearchBox = () => { + const [search, setSearch] = useState(null); + const [hasFocus, sethasFocus] = useState(false); + + return ( +
+
+ + {/*We need to conditionally add a border because the element has position:fixed*/} + { + sethasFocus(true); + }} + onBlur={() => { + sethasFocus(false); + }} + onReset={() => { + setSearch(null); + }} + onChange={(text) => { + setSearch(text.target.value); + }} + /> + {search && } + +
+
+ ); +}; + +export default AlgoliaSearchBox; diff --git a/refactor/src/components/AlgoliaSearch/MobileSearch.component.jsx b/refactor/src/components/AlgoliaSearch/MobileSearch.component.jsx new file mode 100644 index 000000000..0fb000be3 --- /dev/null +++ b/refactor/src/components/AlgoliaSearch/MobileSearch.component.jsx @@ -0,0 +1,52 @@ +import algoliasearch from 'algoliasearch'; +import { InstantSearch, SearchBox, Hits } from 'react-instantsearch-dom'; +import { useState } from 'react'; + +import SearchResults from './SearchResults.component'; + +const searchClient = algoliasearch( + process.env.NEXT_PUBLIC_ALGOLIA_APP_ID, + process.env.NEXT_PUBLIC_ALGOLIA_PUBLIC_API_KEY +); + +/** + * Algolia search for mobile menu. + */ +const MobileSearch = () => { + const [search, setSearch] = useState(null); + const [hasFocus, sethasFocus] = useState(false); + return ( +
+ + { + sethasFocus(true); + }} + onBlur={() => { + sethasFocus(false); + }} + onReset={() => { + setSearch(null); + }} + onChange={(text) => { + setSearch(text.target.value); + }} + /> + {search && } + +
+ ); +}; + +export default MobileSearch; diff --git a/refactor/src/components/AlgoliaSearch/SearchResults.component.jsx b/refactor/src/components/AlgoliaSearch/SearchResults.component.jsx new file mode 100644 index 000000000..ed08ee384 --- /dev/null +++ b/refactor/src/components/AlgoliaSearch/SearchResults.component.jsx @@ -0,0 +1,71 @@ +import Link from 'next/link'; + +import { trimmedStringToLength } from '@/utils/functions/functions'; + +/** + * Displays search results from Algolia + * @param {Object} hit { + * @param {String} product_image Product image from WooCommerce + * @param {String} product_name Name of product + * @param {Float} regular_price Price without discount + * @param {Float} sale_price Price when on sale + * @param {Boolean} on_sale Is the product on sale? True or false + * @param {String} short_description Short description of product + * @param {Integer} objectID ID of product + } + */ +const SearchResults = ({ + hit: { + product_image, + product_name, + regular_price, + sale_price, + on_sale, + short_description, + objectID, + }, +}) => { + // Replace empty spaces with dash (-) + const trimmedProductName = product_name.replace(/ /g, '-'); + + return ( +
+ +
+
+ {product_name} +
+
+ {product_name && ( + {product_name} + )} +
+ {on_sale && ( + <> + + kr {regular_price} + + kr {sale_price} + + )} + {!on_sale && kr {regular_price}} +
+ + {trimmedStringToLength(short_description, 30)} + +
+
+ +
+ ); +}; + +export default SearchResults; diff --git a/refactor/src/components/Footer/Stickynav.component.jsx b/refactor/src/components/Footer/Stickynav.component.jsx index 107c5b45d..782d5c085 100644 --- a/refactor/src/components/Footer/Stickynav.component.jsx +++ b/refactor/src/components/Footer/Stickynav.component.jsx @@ -1,6 +1,6 @@ import Link from 'next/link'; -import Cart from '@/components/Cart/Cart.component'; +import Cart from '@/components/Header/Cart.component'; import Search from '@/components/AlgoliaSearch/AlgoliaSearchBox.component'; import SVGMobileSearchIcon from '@/components/SVG/SVGMobileSearchIcon.component'; @@ -39,10 +39,17 @@ const Stickynav = () => (
+ + + ); diff --git a/refactor/src/components/Layout/Layout.component.tsx b/refactor/src/components/Layout/Layout.component.tsx index 6f07c5fbe..2e26cf064 100644 --- a/refactor/src/components/Layout/Layout.component.tsx +++ b/refactor/src/components/Layout/Layout.component.tsx @@ -6,6 +6,7 @@ import { useQuery } from '@apollo/client'; import Header from '@/components/Header/Header.component'; import PageTitle from './PageTitle.component'; import Footer from '@/components/Footer/Footer.component'; +import Stickynav from '@/components/Footer/Stickynav.component'; // State import { CartContext } from '@/utils/context/CartProvider'; @@ -45,8 +46,6 @@ const Layout = ({ children, title }: ILayoutProps) => { // Update cart data in React Context. setCart(updatedCart); - - }, }); @@ -60,6 +59,7 @@ const Layout = ({ children, title }: ILayoutProps) => { {children}