From 2a6984513a41d1f5cf1ba94accf36acb2f3657df Mon Sep 17 00:00:00 2001 From: Sam Hillier Date: Tue, 15 Aug 2023 00:03:02 +0100 Subject: [PATCH] Initial commit --- .github/CODEOWNERS | 1 + .github/ISSUE_TEMPLATE/01-suggest-changes.yml | 25 + .github/ISSUE_TEMPLATE/02-bug-report.yml | 43 + .../ISSUE_TEMPLATE/03-feature-suggestion.yml | 12 + .github/ISSUE_TEMPLATE/04-something-else.yml | 12 + .github/ISSUE_TEMPLATE/config.yml | 8 + .github/workflows/deploy.yml | 47 + .gitignore | 27 + CNAME | 1 + README.md | 55 + frontend/.eslintrc.cjs | 18 + frontend/index.html | 19 + frontend/package-lock.json | 3475 +++++++++++++++++ frontend/package.json | 38 + frontend/public/enjindex.svg | 1 + frontend/src/App.css | 15 + frontend/src/App.tsx | 95 + frontend/src/assets/fonts/manrope.regular.otf | Bin 0 -> 70728 bytes frontend/src/assets/images/enjinCoin.webp | Bin 0 -> 1892 bytes frontend/src/assets/images/enjinLogo.webp | Bin 0 -> 34630 bytes frontend/src/assets/images/enjindex.png | Bin 0 -> 604 bytes frontend/src/assets/images/nftioLogo.webp | Bin 0 -> 5570 bytes .../src/assets/images/nftioLogoHover.webp | Bin 0 -> 2856 bytes frontend/src/assets/images/ntuLogo.webp | Bin 0 -> 12514 bytes frontend/src/assets/images/ntuLogoTitle.webp | Bin 0 -> 34102 bytes .../src/assets/images/ntuLogoTitleHover.webp | Bin 0 -> 16400 bytes frontend/src/components/Card.module.css | 110 + frontend/src/components/Card.tsx | 36 + frontend/src/components/Footer.module.css | 56 + frontend/src/components/Footer.tsx | 101 + frontend/src/components/Nav.module.css | 174 + frontend/src/components/Nav.tsx | 119 + .../src/components/PriceTracker.module.css | 29 + frontend/src/components/PriceTracker.tsx | 54 + frontend/src/components/TokenModal.module.css | 146 + frontend/src/components/TokenModal.tsx | 90 + frontend/src/index.css | 113 + frontend/src/main.tsx | 10 + frontend/src/tokens.ts | 280 ++ frontend/src/vite-env.d.ts | 1 + frontend/tsconfig.json | 25 + frontend/tsconfig.node.json | 10 + frontend/vite.config.ts | 20 + 43 files changed, 5266 insertions(+) create mode 100644 .github/CODEOWNERS create mode 100644 .github/ISSUE_TEMPLATE/01-suggest-changes.yml create mode 100644 .github/ISSUE_TEMPLATE/02-bug-report.yml create mode 100644 .github/ISSUE_TEMPLATE/03-feature-suggestion.yml create mode 100644 .github/ISSUE_TEMPLATE/04-something-else.yml create mode 100644 .github/ISSUE_TEMPLATE/config.yml create mode 100644 .github/workflows/deploy.yml create mode 100644 .gitignore create mode 100644 CNAME create mode 100644 README.md create mode 100644 frontend/.eslintrc.cjs create mode 100644 frontend/index.html create mode 100644 frontend/package-lock.json create mode 100644 frontend/package.json create mode 100644 frontend/public/enjindex.svg create mode 100644 frontend/src/App.css create mode 100644 frontend/src/App.tsx create mode 100644 frontend/src/assets/fonts/manrope.regular.otf create mode 100644 frontend/src/assets/images/enjinCoin.webp create mode 100644 frontend/src/assets/images/enjinLogo.webp create mode 100644 frontend/src/assets/images/enjindex.png create mode 100644 frontend/src/assets/images/nftioLogo.webp create mode 100644 frontend/src/assets/images/nftioLogoHover.webp create mode 100644 frontend/src/assets/images/ntuLogo.webp create mode 100644 frontend/src/assets/images/ntuLogoTitle.webp create mode 100644 frontend/src/assets/images/ntuLogoTitleHover.webp create mode 100644 frontend/src/components/Card.module.css create mode 100644 frontend/src/components/Card.tsx create mode 100644 frontend/src/components/Footer.module.css create mode 100644 frontend/src/components/Footer.tsx create mode 100644 frontend/src/components/Nav.module.css create mode 100644 frontend/src/components/Nav.tsx create mode 100644 frontend/src/components/PriceTracker.module.css create mode 100644 frontend/src/components/PriceTracker.tsx create mode 100644 frontend/src/components/TokenModal.module.css create mode 100644 frontend/src/components/TokenModal.tsx create mode 100644 frontend/src/index.css create mode 100644 frontend/src/main.tsx create mode 100644 frontend/src/tokens.ts create mode 100644 frontend/src/vite-env.d.ts create mode 100644 frontend/tsconfig.json create mode 100644 frontend/tsconfig.node.json create mode 100644 frontend/vite.config.ts diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000..4aecab5 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1 @@ +* @SamHillierDev \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/01-suggest-changes.yml b/.github/ISSUE_TEMPLATE/01-suggest-changes.yml new file mode 100644 index 0000000..60bc119 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/01-suggest-changes.yml @@ -0,0 +1,25 @@ +name: "✍️ ​​Suggest Changes" +description: Help me improve my Final Year Project by suggesting changes. +labels: [suggestion] +assignees: [] +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to help me improve my Final Year Project with your suggestions. + - type: input + id: url + attributes: + label: URL + description: Please provide the URL of where you are suggesting changes to. + placeholder: https://enjindex.com + validations: + required: true + - type: textarea + id: suggestions + attributes: + label: Suggestions + description: What changes would you like to suggest? + placeholder: Enter your suggestions here. + validations: + required: true \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/02-bug-report.yml b/.github/ISSUE_TEMPLATE/02-bug-report.yml new file mode 100644 index 0000000..e38554d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/02-bug-report.yml @@ -0,0 +1,43 @@ +name: "🐛 ​​Bug Report" +description: Report an issue or possible bug. +labels: [bug] +assignees: [] +body: + - type: input + id: url + attributes: + label: What is the URL where the issue is happening. + placeholder: https://enjindex.com + validations: + required: true + - type: dropdown + id: browsers + attributes: + label: What browsers are you seeing the problem on? + multiple: true + options: + - Chrome + - Safari + - Microsoft Edge + - Firefox + - Opera + - Other + - type: textarea + id: bug + attributes: + label: Describe the Bug + description: A clear and concise description of what the bug is and the steps to reproduce. + validations: + required: true + - type: textarea + id: logs + attributes: + label: Output from browser console (if any) + description: Please provide any relevant log output. + - type: checkboxes + id: participation + attributes: + label: Participation + options: + - label: I am willing to submit a pull request for this issue. + required: false \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/03-feature-suggestion.yml b/.github/ISSUE_TEMPLATE/03-feature-suggestion.yml new file mode 100644 index 0000000..a68ee2a --- /dev/null +++ b/.github/ISSUE_TEMPLATE/03-feature-suggestion.yml @@ -0,0 +1,12 @@ +name: "✨ ​​Feature Suggestion" +description: Is there a feature you'd like to see? Let me know! +labels: [feature request] +assignees: [] +body: + - type: textarea + id: feature + attributes: + label: Feature Description + description: Please provide a detailed description of the feature you are suggesting and how it would help you/others. + validations: + required: true \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/04-something-else.yml b/.github/ISSUE_TEMPLATE/04-something-else.yml new file mode 100644 index 0000000..6729076 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/04-something-else.yml @@ -0,0 +1,12 @@ +name: "🤷‍♂️ ​​Something else" +description: If none of the above templates fit your needs, please use this template to submit your issue. +labels: [] +assignees: [] +body: + - type: textarea + id: description + attributes: + label: Description + description: Please provide a detailed description of the issue. + validations: + required: true \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..7bf7348 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,8 @@ +blank_issues_enabled: false +contact_links: + - name: 📝 ​​Typo or Grammatical Mistake + url: https://github.com/SamHillierDev/enjindex/pulls + about: Please submit a pull request instead of reporting it as an issue. + - name: 🤝 ​Community + url: https://discord.com/invite/XfZHVfPr9C + about: Join my community Discord server. \ No newline at end of file diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..83bf972 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,47 @@ +name: Deploy static content to Pages + +on: + push: + branches: ['main'] + + workflow_dispatch: + +permissions: + contents: read + pages: write + id-token: write + +concurrency: + group: 'pages' + cancel-in-progress: true + +jobs: + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Set up Node + uses: actions/setup-node@v3 + with: + node-version: 18 + cache: 'npm' + cache-dependency-path: frontend/package-lock.json + - name: Install dependencies + run: npm install + working-directory: ./frontend + - name: Build + run: npm run build + working-directory: ./frontend + - name: Setup Pages + uses: actions/configure-pages@v3 + - name: Upload artifact + uses: actions/upload-pages-artifact@v1 + with: + path: './frontend/dist' + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v1 \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..24e5756 --- /dev/null +++ b/.gitignore @@ -0,0 +1,27 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +# Environment Variables +.env + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? \ No newline at end of file diff --git a/CNAME b/CNAME new file mode 100644 index 0000000..090b523 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +enjindex.com \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..5f0324c --- /dev/null +++ b/README.md @@ -0,0 +1,55 @@ +# ENJindex, explore NFTs and crypto collectibles + +
+ Nottingham Trent University Logo +
+ +--- + +ENJindex, explore NFTs and crypto collectibles. +Final Year Project (FYP) for the Computer Science 2024 academic year at [Nottingham Trent University](https://ntu.ac.uk) (NTU). + +## Requirements + +Make sure you have Node and NPM installed: + +```bash +node -v +# v22.10.0 +``` + +```bash +npm -v +# 10.9.0 +``` + +## Installation + +Run the commands: + +```bash +cd frontend +``` + +```bash +npm install +``` + +```bash +npm run dev +``` + +## Security Vulnerabilities + +Please review our [security policy](https://github.com/SamHillierDev/enjindex/security/policy) on how to report security vulnerabilities. + +## Credits + +- [Sam Hillier](https://github.com/SamHillierDev) +- [All Contributors](https://github.com/SamHillierDev/enjindex/contributors) + +## License + +Please see [License File](https://github.com/SamHillierDev/enjindex/blob/main/LICENSE) for more information. + +© 2024 Samuel Hillier. All Rights Reserved. diff --git a/frontend/.eslintrc.cjs b/frontend/.eslintrc.cjs new file mode 100644 index 0000000..d6c9537 --- /dev/null +++ b/frontend/.eslintrc.cjs @@ -0,0 +1,18 @@ +module.exports = { + root: true, + env: { browser: true, es2020: true }, + extends: [ + 'eslint:recommended', + 'plugin:@typescript-eslint/recommended', + 'plugin:react-hooks/recommended', + ], + ignorePatterns: ['dist', '.eslintrc.cjs'], + parser: '@typescript-eslint/parser', + plugins: ['react-refresh'], + rules: { + 'react-refresh/only-export-components': [ + 'warn', + { allowConstantExport: true }, + ], + }, +} diff --git a/frontend/index.html b/frontend/index.html new file mode 100644 index 0000000..dee90bb --- /dev/null +++ b/frontend/index.html @@ -0,0 +1,19 @@ + + + + + + ENJindex, explore NFTs + + + + + + + + + +
+ + + diff --git a/frontend/package-lock.json b/frontend/package-lock.json new file mode 100644 index 0000000..ff044a2 --- /dev/null +++ b/frontend/package-lock.json @@ -0,0 +1,3475 @@ +{ + "name": "enjindex", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "enjindex", + "version": "0.0.0", + "dependencies": { + "@fortawesome/fontawesome-svg-core": "^6.5.1", + "@fortawesome/free-brands-svg-icons": "^6.5.1", + "@fortawesome/free-solid-svg-icons": "^6.5.1", + "@fortawesome/react-fontawesome": "^0.2.0", + "axios": "^1.6.7", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-icons": "^5.0.1" + }, + "devDependencies": { + "@types/react": "^18.2.15", + "@types/react-dom": "^18.2.7", + "@types/semver": "^7.5.8", + "@typescript-eslint/eslint-plugin": "^6.0.0", + "@typescript-eslint/parser": "^6.0.0", + "@vitejs/plugin-react": "^4.0.3", + "eslint": "^8.45.0", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.4.3", + "gh-pages": "^6.0.0", + "typescript": "^5.0.2", + "vite": "^4.4.5" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz", + "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", + "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-module-transforms": "^7.25.2", + "@babel/helpers": "^7.25.0", + "@babel/parser": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.2", + "@babel/types": "^7.25.2", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", + "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.25.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", + "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.25.2", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", + "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", + "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", + "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz", + "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.25.2" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.7.tgz", + "integrity": "sha512-fOPQYbGSgH0HUp4UJO4sMBFjY6DuWq+2i8rixyUMb3CdGixs/gccURvYOAhajBdKDoGajFr3mUq5rH3phtkGzw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.7.tgz", + "integrity": "sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", + "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz", + "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/parser": "^7.25.3", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.2", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", + "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", + "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.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/@eslint/eslintrc/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/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@fortawesome/fontawesome-common-types": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.6.0.tgz", + "integrity": "sha512-xyX0X9mc0kyz9plIyryrRbl7ngsA9jz77mCZJsUkLl+ZKs0KWObgaEBoSgQiYWAsSmjz/yjl0F++Got0Mdp4Rw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/fontawesome-svg-core": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.6.0.tgz", + "integrity": "sha512-KHwPkCk6oRT4HADE7smhfsKudt9N/9lm6EJ5BVg0tD1yPA5hht837fB87F8pn15D8JfTqQOjhKTktwmLMiD7Kg==", + "dependencies": { + "@fortawesome/fontawesome-common-types": "6.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/free-brands-svg-icons": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-6.6.0.tgz", + "integrity": "sha512-1MPD8lMNW/earme4OQi1IFHtmHUwAKgghXlNwWi9GO7QkTfD+IIaYpIai4m2YJEzqfEji3jFHX1DZI5pbY/biQ==", + "dependencies": { + "@fortawesome/fontawesome-common-types": "6.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/free-solid-svg-icons": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.6.0.tgz", + "integrity": "sha512-IYv/2skhEDFc2WGUcqvFJkeK39Q+HyPf5GHUrT/l2pKbtgEIv1al1TKd6qStR5OIwQdN1GZP54ci3y4mroJWjA==", + "dependencies": { + "@fortawesome/fontawesome-common-types": "6.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/react-fontawesome": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.2.2.tgz", + "integrity": "sha512-EnkrprPNqI6SXJl//m29hpaNzOp1bruISWaOiRtkMi/xSvHJlzc2j2JAYS7egxt/EbjSNV/k6Xy0AQI6vB2+1g==", + "dependencies": { + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "@fortawesome/fontawesome-svg-core": "~1 || ~6", + "react": ">=16.3" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "deprecated": "Use @eslint/config-array instead", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/config-array/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/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@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, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "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/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/prop-types": { + "version": "15.7.12", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", + "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", + "dev": true + }, + "node_modules/@types/react": { + "version": "18.3.3", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz", + "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==", + "dev": true, + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.0", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz", + "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/semver": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", + "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/type-utils": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", + "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", + "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", + "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", + "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", + "dev": true, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", + "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", + "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "semver": "^7.5.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", + "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.1.tgz", + "integrity": "sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.24.5", + "@babel/plugin-transform-react-jsx-self": "^7.24.5", + "@babel/plugin-transform-react-jsx-source": "^7.24.1", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.14.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0" + } + }, + "node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "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/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/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": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/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/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-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", + "dev": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/axios": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.3.tgz", + "integrity": "sha512-Ar7ND9pU99eJ9GpoGQKhKf58GpUOgnzuaB7ueNQ5BMi0p+LZ5oaEnfF999fAArcTIBwXTCHAmGcHOZJaWPq9Nw==", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "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/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz", + "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001640", + "electron-to-chromium": "^1.4.820", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "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/caniuse-lite": { + "version": "1.0.30001646", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001646.tgz", + "integrity": "sha512-dRg00gudiBDDTmUhClSdv3hqRfpbOnU28IpI1T6PBTLWa+kOj0681C8uML3PifYfREuBrVjDGhL3adYpBT6spw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "dev": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "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/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "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/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "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/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "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/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.5.4", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.4.tgz", + "integrity": "sha512-orzA81VqLyIGUEA77YkVA1D+N+nNfl2isJVjjmOyrlxuooZ19ynb+dOlaDTqd/idKRS9lDCSBmtzM+kyCsMnkA==", + "dev": true + }, + "node_modules/email-addresses": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/email-addresses/-/email-addresses-5.0.0.tgz", + "integrity": "sha512-4OIPYlA6JXqtVn8zpHpGiI7vE6EQOAg16aGnDMIAlZVinnoZ8208tW1hAbjWydgN/4PLTT9q+O1K6AH/vALJGw==", + "dev": true + }, + "node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "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.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "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", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "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.3", + "strip-ansi": "^6.0.1", + "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-plugin-react-hooks": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", + "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/eslint-plugin-react-refresh": { + "version": "0.4.9", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.9.tgz", + "integrity": "sha512-QK49YrBAo5CLNLseZ7sZgvgTy21E6NEw22eZqc4teZfH8pxV3yXc9XXOYfUI6JNpw7mfHNkAeWtBxrTyykB6HA==", + "dev": true, + "peerDependencies": { + "eslint": ">=7" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/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/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==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/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/eslint/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/eslint/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/eslint/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/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "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==", + "dev": true, + "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==", + "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/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.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "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" + }, + "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==", + "dev": true, + "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==", + "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.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/filename-reserved-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", + "integrity": "sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/filenamify": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.3.0.tgz", + "integrity": "sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==", + "dev": true, + "dependencies": { + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.1", + "trim-repeated": "^1.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "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": { + "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.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fs-extra": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "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.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/gh-pages": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-6.1.1.tgz", + "integrity": "sha512-upnohfjBwN5hBP9w2dPE7HO5JJTHzSGMV1JrLrHvNuqmjoYHg6TBrCcnEoorjG/e0ejbuvnwyKMdTyM40PEByw==", + "dev": true, + "dependencies": { + "async": "^3.2.4", + "commander": "^11.0.0", + "email-addresses": "^5.0.0", + "filenamify": "^4.3.0", + "find-cache-dir": "^3.3.1", + "fs-extra": "^11.1.1", + "globby": "^6.1.0" + }, + "bin": { + "gh-pages": "bin/gh-pages.js", + "gh-pages-clean": "bin/gh-pages-clean.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gh-pages/node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", + "dev": true, + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gh-pages/node_modules/globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", + "dev": true, + "dependencies": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-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/glob/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/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "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": { + "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/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/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": ">=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==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "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==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "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/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-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==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-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": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "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" + }, + "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==", + "dev": true, + "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==", + "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/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "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": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "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==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": 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/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "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.5" + }, + "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==", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/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": ">=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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-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": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "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/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "dev": true, + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/postcss": { + "version": "8.4.40", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.40.tgz", + "integrity": "sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.1", + "source-map-js": "^1.2.0" + }, + "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==", + "dev": true, + "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/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "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==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-icons": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.2.1.tgz", + "integrity": "sha512-zdbW5GstTzXaVKvGSyTaBalt7HSfuK5ovrzlpyiWHAFXndXTdd/1hdDHI4xBM1Mn7YriT6aqESucFl9kEXzrdw==", + "peerDependencies": { + "react": "*" + } + }, + "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/react-refresh": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "3.29.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", + "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "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==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-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==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-outer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", + "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/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==", + "dev": true + }, + "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==", + "dev": true, + "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" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/trim-repeated": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", + "integrity": "sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ts-api-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "dev": true, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "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" + }, + "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==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/vite": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.3.tgz", + "integrity": "sha512-kQL23kMeX92v3ph7IauVkXkikdDRsYMGTVl5KY2E9OY4ONLvkHf04MDTbnfo6NKxZiDLWzVpP5oTa8hQD8U3dg==", + "dev": true, + "dependencies": { + "esbuild": "^0.18.10", + "postcss": "^8.4.27", + "rollup": "^3.27.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "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==", + "dev": true + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "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==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 0000000..54aa700 --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,38 @@ +{ + "name": "enjindex", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "predeploy": "npm run build", + "deploy": "gh-pages -d dist", + "build": "tsc && vite build", + "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", + "preview": "vite preview" + }, + "dependencies": { + "@fortawesome/fontawesome-svg-core": "^6.5.1", + "@fortawesome/free-brands-svg-icons": "^6.5.1", + "@fortawesome/free-solid-svg-icons": "^6.5.1", + "@fortawesome/react-fontawesome": "^0.2.0", + "axios": "^1.6.7", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-icons": "^5.0.1" + }, + "devDependencies": { + "@types/react": "^18.2.15", + "@types/react-dom": "^18.2.7", + "@types/semver": "^7.5.8", + "@typescript-eslint/eslint-plugin": "^6.0.0", + "@typescript-eslint/parser": "^6.0.0", + "@vitejs/plugin-react": "^4.0.3", + "eslint": "^8.45.0", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.4.3", + "gh-pages": "^6.0.0", + "typescript": "^5.0.2", + "vite": "^4.4.5" + } +} diff --git a/frontend/public/enjindex.svg b/frontend/public/enjindex.svg new file mode 100644 index 0000000..6eb31bb --- /dev/null +++ b/frontend/public/enjindex.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/App.css b/frontend/src/App.css new file mode 100644 index 0000000..45c85bb --- /dev/null +++ b/frontend/src/App.css @@ -0,0 +1,15 @@ +.App { + display: flex; + flex-direction: column; + max-width: 1200px; + margin: 0 auto; + padding: 20px; + text-align: left; +} + +header { + display: flex; + justify-content: space-between; + align-items: center; + width: 100%; +} diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx new file mode 100644 index 0000000..6538897 --- /dev/null +++ b/frontend/src/App.tsx @@ -0,0 +1,95 @@ +import "./App.css"; +import { useState, useMemo } from "react"; +import PriceTracker from "./components/PriceTracker"; +import Nav from "./components/Nav"; +import Footer from "./components/Footer"; +import Card from "./components/Card"; +import tokens from "./tokens"; +import TokenModal from "./components/TokenModal"; + +interface Token { + name: string; + id: string; + collection: string; + type: string; + imageUrl: string; + link: string; +} + +const App = () => { + const [currentFilter, setCurrentFilter] = useState("All"); + const [searchQuery, setSearchQuery] = useState(""); + const [selectedToken, setSelectedToken] = useState(null); + + const handleFilterChange = (filterName: string) => { + setCurrentFilter(filterName); + }; + + const handleSearchChange = (query: string) => { + setSearchQuery(query); + }; + + const filteredTokens = useMemo(() => { + let result = tokens.filter((token: Token) => { + return currentFilter === "All" || token.type === currentFilter; + }); + if (searchQuery) { + result = result.filter( + (token: Token) => + token.name.toLowerCase().includes(searchQuery.toLowerCase()) || + token.collection.toLowerCase().includes(searchQuery.toLowerCase()) + ); + } + return result; + }, [currentFilter, tokens, searchQuery]); + + const openModal = (token: Token) => { + setSelectedToken(token); + }; + + const closeModal = () => { + setSelectedToken(null); + }; + + return ( +
+
+

Explore Tokens

+ +
+
+ ); +}; + +export default App; diff --git a/frontend/src/assets/fonts/manrope.regular.otf b/frontend/src/assets/fonts/manrope.regular.otf new file mode 100644 index 0000000000000000000000000000000000000000..ea9d6867c662ade432bb5c8022ee3b534f2cd563 GIT binary patch literal 70728 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⪼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 literal 0 HcmV?d00001 diff --git a/frontend/src/assets/images/enjinLogo.webp b/frontend/src/assets/images/enjinLogo.webp new file mode 100644 index 0000000000000000000000000000000000000000..1f9218603066c1d0dfd319c77296f85f23e75166 GIT binary patch literal 34630 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 literal 0 HcmV?d00001 diff --git a/frontend/src/assets/images/ntuLogoTitle.webp b/frontend/src/assets/images/ntuLogoTitle.webp new file mode 100644 index 0000000000000000000000000000000000000000..90741e337235fbb42154a283ffb1d460b0c10a0c GIT binary patch literal 34102 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 literal 0 HcmV?d00001 diff --git a/frontend/src/assets/images/ntuLogoTitleHover.webp b/frontend/src/assets/images/ntuLogoTitleHover.webp new file mode 100644 index 0000000000000000000000000000000000000000..ebaed04520bade16e96273077bc8a4cca962cfa3 GIT binary patch literal 16400 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 literal 0 HcmV?d00001 diff --git a/frontend/src/components/Card.module.css b/frontend/src/components/Card.module.css new file mode 100644 index 0000000..467c4b8 --- /dev/null +++ b/frontend/src/components/Card.module.css @@ -0,0 +1,110 @@ +.card { + display: flex; + width: 300px; + height: 400px; + box-shadow: 3px 3px 5px 0px rgba(0, 0, 0, 0.25); + border-radius: 10px; + padding: 16px; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); + text-align: center; + background-image: radial-gradient(circle at center, #48555a 0%, #383d40 100%); + flex-direction: column; + align-items: center; + overflow: hidden; + transition: transform 0.5s ease, background-color 0.1s ease, + box-shadow 0.1s ease; +} + +.card:hover { + background-image: radial-gradient(circle at center, #4f6267 0%, #383c3f 100%); + transform: scale(1.02); + cursor: pointer; + box-shadow: 0 0 5px 2px hsl(var(--text2)); +} + +.card:active { + background-image: radial-gradient(circle at center, #48555a 0%, #383d40 100%); + transform: scale(1); +} + +.card h3, +.card h4, +.card p { + flex-shrink: 0; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + width: 100%; + box-sizing: border-box; +} + +.card h3 { + color: white; + font-size: 18px; + min-height: 24px; + transition: color 0.1s ease, text-shadow 0.1s ease; +} + +.card:hover h3 { + color: hsl(var(--text2)); + text-shadow: 1px 1px 8px rgba(0, 0, 0, 0.25); +} + +.card:active h3 { + color: #fff; + text-shadow: 0 0 8px hsl(var(--text3)); +} + +.card h4 { + margin-bottom: 8px; + font-size: 14px; + color: #919292; +} + +.card p { + color: white; + margin-bottom: 10px; + width: 100%; + min-height: 22px; + font-size: 16px; + background-image: radial-gradient( + circle at center, + #7569b5 0%, + #8376d8 50%, + #6258a4 100% + ); + border-radius: 50px; + padding: 5px 0; +} + +.card img { + width: 100%; + height: 275px; + border-radius: 10px; + object-fit: cover; + object-position: center; +} + +/* Media Queries */ +@media (max-width: 768px) { + .card { + width: 250px; + height: 350px; + } + + .card h3 { + font-size: 16px; + } + + .card h4 { + font-size: 14px; + } + + .card p { + font-size: 14px; + } + + .card img { + height: 225px; + } +} diff --git a/frontend/src/components/Card.tsx b/frontend/src/components/Card.tsx new file mode 100644 index 0000000..e8332fa --- /dev/null +++ b/frontend/src/components/Card.tsx @@ -0,0 +1,36 @@ +import styles from "./Card.module.css"; + +interface CardProps { + name: string; + id: string; + collection: string; + type: string; + imageUrl: string; + link: string; + onCardClick: (token: any) => void; +} + +function Card({ + name, + collection, + type, + imageUrl, + link, + onCardClick, +}: CardProps) { + const handleClick = () => { + const token = { name, collection, type, imageUrl, link }; + onCardClick(token); + }; + + return ( +
+

{name}

+

{collection}

+

{type}

+ {name} +
+ ); +} + +export default Card; diff --git a/frontend/src/components/Footer.module.css b/frontend/src/components/Footer.module.css new file mode 100644 index 0000000..0445c70 --- /dev/null +++ b/frontend/src/components/Footer.module.css @@ -0,0 +1,56 @@ +footer { + width: 100%; + padding: 10px; + border-radius: 10px; +} + +.footerContainer { + display: flex; + justify-content: space-between; + align-items: center; +} + +.footerContainer:first-of-type { + margin-bottom: 12px; +} + +/* Footer Logo */ +.footerLogo img { + max-height: 30px; +} + +/* Footer Page Links */ +.footerContainer ul { + display: flex; + list-style: none; + flex-wrap: wrap; + gap: var(--space-lg); +} + +/* Footer Social Media Links */ +.footerSocial { + font-size: var(--fs-300); +} + +/* Footer Copyright */ +.footerLegal { + color: #707070; +} + +/* Media Queries */ +@media (max-width: 768px) { + footer { + padding: 20px; + font-size: var(--fs-100); + } + + .footerContainer { + flex-direction: column; + gap: var(--space-md); + } + + .footerContainer ul { + justify-content: center; + gap: var(--space-md); + } +} diff --git a/frontend/src/components/Footer.tsx b/frontend/src/components/Footer.tsx new file mode 100644 index 0000000..d3f2a80 --- /dev/null +++ b/frontend/src/components/Footer.tsx @@ -0,0 +1,101 @@ +import { useState } from "react"; +import styles from "./Footer.module.css"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { + faXTwitter, + faLinkedin, + faGithub, + faYoutube, + faDiscord, +} from "@fortawesome/free-brands-svg-icons"; +import ntuLogoTitle from "../assets/images/ntuLogoTitle.webp"; +import ntuLogoTitleHover from "../assets/images/ntuLogoTitleHover.webp"; + +const Footer = () => { + // Social Media Links + const socialMediaLinks = [ + { name: "Twitter", url: "https://x.com/Zyphaex", icon: faXTwitter }, + { + name: "LinkedIn", + url: "https://linkedin.com/in/samhillier/", + icon: faLinkedin, + }, + { name: "GitHub", url: "https://github.com/Zyphaex", icon: faGithub }, + { name: "YouTube", url: "https://youtube.com/@Zyphaex", icon: faYoutube }, + { + name: "Discord", + url: "https://discord.com/invite/XfZHVfPr9C", + icon: faDiscord, + }, + ]; + + // Footer Links + const footerLinks = [ + { name: "About", href: "about" }, + { name: "Contact", href: "contact" }, + { name: "Terms & Conditions", href: "terms" }, + { name: "Privacy Policy", href: "privacy" }, + ]; + + const [isHovered, setIsHovered] = useState(false); + + const renderSocialMediaLinks = () => { + return ( +
+ ); + }; + + const renderFooterLinks = () => { + return ( +
    + {footerLinks.map((link, index) => ( +
  • + {link.name} +
  • + ))} +
+ ); + }; + + return ( + + ); +}; + +export default Footer; diff --git a/frontend/src/components/Nav.module.css b/frontend/src/components/Nav.module.css new file mode 100644 index 0000000..0c40202 --- /dev/null +++ b/frontend/src/components/Nav.module.css @@ -0,0 +1,174 @@ +nav { + display: flex; + margin: 20px 0; + padding: 10px 20px; + background-color: #383d40; + border-radius: 50px; + font-size: var(--fs-300); + justify-content: space-between; + align-items: center; + gap: var(--space-lg); + position: sticky; + top: 0; + z-index: 1000; +} + +/* Page Links */ +.navLinks { + display: flex; + margin: 0; + list-style: none; +} + +.navLinks a { + padding: 20px; +} + +.navHome { + vertical-align: middle; + font-size: 20px; +} + +/* Search Bar */ +.searchContainer { + display: flex; + align-items: center; +} + +.searchInput { + width: 100%; + padding: 12px 40px 12px 20px; + border: 2px solid #494949; + border-radius: 50px; + background-color: #55585a; + color: hsl(var(--text3)); + transition: border-color 0.1s ease, background-color 0.1s ease, + box-shadow 0.1s ease; + font-size: var(--fs-200); +} + +.searchInput:hover { + border-color: hsl(var(--text2)); +} + +.searchInput:focus { + border-color: hsl(var(--text2)); + outline: none; + box-shadow: 0 0 1px hsl(var(--text2)); +} + +.searchInput::placeholder { + color: hsl(var(--text3)); + opacity: 0.5; +} + +.searchInput:focus::placeholder { + opacity: 0.3; +} + +/* Search Button */ +.searchButton { + border: none; + background: transparent; + cursor: pointer; + padding: 10px; + margin-left: -47px; + color: white; + transition: color 0.1s ease, text-shadow 0.1s ease; +} + +.searchButton:hover { + color: hsl(var(--text2)); + text-shadow: 1px 1px 8px rgba(0, 0, 0, 0.25); +} + +.searchButton svg { + width: 20px; + height: 20px; + vertical-align: middle; +} + +.mobileSearch { + display: none; +} + +/* Hamburger Icon */ +.hamburger { + display: none; + width: 25px; + height: 25px; + min-width: 25px; + min-height: 25px; + margin: 0 5px; + flex-direction: column; + justify-content: space-around; + cursor: pointer; +} + +.hamburger span { + display: block; + width: 100%; + height: 3px; + background: white; + border-radius: 3px; + transition: background-color 0.1s ease, box-shadow 0.1s ease; +} + +.hamburger:hover span { + background-color: hsl(var(--text2)); + box-shadow: 1px 1px 8px rgba(0, 0, 0, 0.25); +} + +/* Media Queries */ +@media (max-width: 768px) { + nav { + flex-direction: column; + border-radius: 25px; + gap: var(--space-md); + } + + .mobileSearch { + display: flex; + width: 100%; + justify-content: space-between; + align-items: center; + gap: 10px; + } + + .navLinks { + display: none; + width: 100%; + padding: 10px 0; + flex-direction: column; + align-items: stretch; + gap: 20px; + } + + .navLinks a { + display: block; + width: 100%; + padding: 5px 0; + font-size: var(--fs-200); + } + + .hamburger, + .searchContainer { + display: none; + } + + .navLinks.showNav, + .mobileSearch .hamburger, + .mobileSearch .searchContainer { + display: flex; + } + + .searchContainer, + .searchInput, + .searchButton { + width: 100%; + } + + .searchContainer button { + width: auto; + } +} diff --git a/frontend/src/components/Nav.tsx b/frontend/src/components/Nav.tsx new file mode 100644 index 0000000..1193050 --- /dev/null +++ b/frontend/src/components/Nav.tsx @@ -0,0 +1,119 @@ +import { useState, useEffect, useRef } from "react"; +import { FaHome, FaSearch } from "react-icons/fa"; +import styles from "./Nav.module.css"; + +interface NavProps { + links?: { name: string; href: string }[]; + onNavLinkClick: (filterName: string) => void; + onSearchChange: (searchQuery: string) => void; +} + +const navLinks = [ + { name: "All", href: "#" }, + { name: "Avatars", href: "#avatars" }, + { name: "Metaverse", href: "#metaverse" }, + { name: "Art", href: "#art" }, + { name: "Memberships", href: "#memberships" }, + { name: "Commemorative", href: "#commemorative" }, +]; + +const Nav = ({ + links = navLinks, + onNavLinkClick, + onSearchChange, +}: NavProps) => { + const [isNavVisible, setIsNavVisible] = useState(false); + const [searchQuery, setSearchQuery] = useState(""); + const navRef = useRef(null); + + const toggleNav = () => { + setIsNavVisible(!isNavVisible); + }; + + const handleLinkClick = ( + e: React.MouseEvent, + name: string + ) => { + e.preventDefault(); + onNavLinkClick(name); + if (name === "All") { + setSearchQuery(""); + onSearchChange(""); + } + }; + + useEffect(() => { + function handleClickOutside(event: MouseEvent) { + if (navRef.current && !navRef.current.contains(event.target as Node)) { + setIsNavVisible(false); + } + } + + document.addEventListener("mousedown", handleClickOutside); + return () => { + document.removeEventListener("mousedown", handleClickOutside); + }; + }, [navRef]); + + const handleSearchChange = (e: React.ChangeEvent) => { + setSearchQuery(e.target.value); + onSearchChange(e.target.value); + }; + + return ( + + ); +}; + +export default Nav; diff --git a/frontend/src/components/PriceTracker.module.css b/frontend/src/components/PriceTracker.module.css new file mode 100644 index 0000000..42b18a7 --- /dev/null +++ b/frontend/src/components/PriceTracker.module.css @@ -0,0 +1,29 @@ +.ticker { + display: flex; + align-items: center; + font-size: var(--fs-300); + color: hsl(var(--text2)); + transition: color 0.1s ease, text-shadow 0.1s ease; +} + +.icon { + height: 25px; + margin-right: 7px; +} + +.value { + color: #fff; + margin-left: 5px; + transition: color 0.1s ease, text-shadow 0.1s ease; +} + +.ticker:hover, +.ticker:hover .value { + color: hsl(var(--text2)); + text-shadow: 1px 1px 8px rgba(0, 0, 0, 0.25); +} + +.ticker:active .value { + color: #fff; + text-shadow: 0 0 8px hsl(var(--text3)); +} diff --git a/frontend/src/components/PriceTracker.tsx b/frontend/src/components/PriceTracker.tsx new file mode 100644 index 0000000..d469b41 --- /dev/null +++ b/frontend/src/components/PriceTracker.tsx @@ -0,0 +1,54 @@ +import { useState, useEffect } from "react"; +import axios from "axios"; +import styles from "./PriceTracker.module.css"; +import enjinLogo from "../assets/images/enjinLogo.webp"; + +const PriceTracker = () => { + const [price, setPrice] = useState(null); + + useEffect(() => { + const fetchPrice = async () => { + try { + const response = await axios.get( + "/api/cryptocurrency/quotes/latest?symbol=ENJ", + { + headers: { + "X-CMC_PRO_API_KEY": import.meta.env.VITE_CMC_API_KEY, + }, + } + ); + const fetchedPrice = response.data?.data?.ENJ?.quote?.USD?.price; + if (typeof fetchedPrice === "number") { + setPrice(fetchedPrice); + } else { + console.error("Invalid price format:", fetchedPrice); + } + } catch (error) { + console.error("Error fetching ENJ price:", error); + } + }; + + fetchPrice(); + }, []); + + return ( + +
+ Enjin Coin + ENJ + {price !== null ? ( + ${price.toFixed(2)} + ) : ( + $?.?? + )} +
+
+ ); +}; + +export default PriceTracker; diff --git a/frontend/src/components/TokenModal.module.css b/frontend/src/components/TokenModal.module.css new file mode 100644 index 0000000..b5eba85 --- /dev/null +++ b/frontend/src/components/TokenModal.module.css @@ -0,0 +1,146 @@ +.modalOverlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.5); + display: flex; + justify-content: center; + align-items: center; + z-index: 9999; +} + +.modalContent { + background: radial-gradient(circle at center, #48555a 0%, #383d40 100%); + border-radius: 10px; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); + padding: 20px; + text-align: center; + max-width: 400px; + overflow: hidden; + box-shadow: 0 0 5px 2px hsl(var(--text2)); +} + +.modalContent h3, +.modalContent h4 { + transition: color 0.1s ease; +} + +.modalContent h3 { + color: white; + font-size: 24px; + min-height: 24px; +} + +.modalContent h4 { + color: #919292; + font-size: 14px; + margin-bottom: 8px; +} + +.modalContent p { + color: white; + font-size: 16px; + background-image: radial-gradient( + circle at center, + #7569b5 0%, + #8376d8 50%, + #6258a4 100% + ); + border-radius: 50px; + padding: 5px 0; + margin-bottom: 10px; + width: 100%; + min-height: 22px; +} + +.modalContent img { + max-width: 100%; + border-radius: 10px; + object-fit: cover; +} + +.modalContent .nftioContainer { + display: flex; + justify-content: space-between; + align-items: center; + margin-top: 10px; +} + +.modalContent .tokenIdImportContainer { + display: flex; + align-items: center; + gap: 2px; +} + +.modalContent .tokenIdImportContainer span { + background-color: #616161; + padding: 5px 10px; + border-radius: 5px; + max-width: 100px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.modalContent .tokenIdImportContainer button { + padding: 5px 10px; + border-radius: 5px; + background-image: radial-gradient( + circle at center, + #7569b5 0%, + #8376d8 50%, + #6258a4 100% + ); + cursor: pointer; +} + +.modalContent .viewOnLink { + display: flex; + align-items: center; + text-decoration: none; + color: inherit; + cursor: pointer; +} + +.modalContent .nftioLogo { + width: 50px; + height: auto; + margin-left: 5px; + border-radius: 0; +} + +.modalContent button { + background-color: transparent; + border: none; + color: white; + font-size: 18px; + cursor: pointer; + float: right; + transition: color 0.1s ease; +} + +.modalContent button:hover, +.modalContent .viewOnLink:hover { + color: hsl(var(--text2)); +} + +/* Media Queries */ +@media (max-width: 768px) { + .modalContent { + width: 300px; + } + + .modalContent h3 { + font-size: 16px; + } + + .modalContent h4 { + font-size: 14px; + } + + .modalContent p { + font-size: 14px; + } +} diff --git a/frontend/src/components/TokenModal.tsx b/frontend/src/components/TokenModal.tsx new file mode 100644 index 0000000..69e688d --- /dev/null +++ b/frontend/src/components/TokenModal.tsx @@ -0,0 +1,90 @@ +import { useEffect, useState } from "react"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { faCopy } from "@fortawesome/free-solid-svg-icons"; +import styles from "./TokenModal.module.css"; +import nftioLogo from "../assets/images/nftioLogo.webp"; +import nftioLogoHover from "../assets/images/nftioLogoHover.webp"; + +interface TokenModalProps { + isOpen: boolean; + onClose: () => void; + token: { + name: string; + id: string; + collection: string; + type: string; + imageUrl: string; + link: string; + }; +} + +const TokenModal: React.FC = ({ isOpen, onClose, token }) => { + const [isHovered, setIsHovered] = useState(false); + + const handleCopyToClipboard = () => { + navigator.clipboard + .writeText(token.id) + .then(() => { + alert("Token ID copied to clipboard!"); + }) + .catch((err) => { + console.error("Error copying ID to clipboard", err); + }); + }; + + useEffect(() => { + const handleOutsideClick = (event: MouseEvent) => { + const target = event.target as Element; + if (isOpen && target.classList.contains(styles.modalOverlay)) { + onClose(); + } + }; + + if (isOpen) { + document.addEventListener("click", handleOutsideClick); + } + + return () => { + document.removeEventListener("click", handleOutsideClick); + }; + }, [isOpen, onClose]); + + if (!isOpen) return null; + + return ( +
+
+ +

{token.name}

+

{token.collection}

+

{token.type}

+ {token.name} + +
+
+ ); +}; + +export default TokenModal; diff --git a/frontend/src/index.css b/frontend/src/index.css new file mode 100644 index 0000000..cac308e --- /dev/null +++ b/frontend/src/index.css @@ -0,0 +1,113 @@ +*, +*::before, +*::after { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +@font-face { + font-family: "Manrope"; + src: url("./assets/fonts/manrope.regular.otf") format("opentype"); + font-weight: normal; + font-style: normal; +} + +:root { + /* fonts */ + --fs-100: 14px; + --fs-200: 16px; + --fs-300: 18px; + --fs-400: 32px; + --fs-500: 44px; + --lh-1: 1; + --lh-1-2: 1.2; + --lh-1-4: 1.4; + + /* colours */ + --bkg: 0, 0%, 12%; + --text: 0, 0%, 100%; + --text2: 248, 56%, 65%; + --text3: #e6e6e6; + + /* utils */ + --space-sm: 5px; + --space-md: 10px; + --space-lg: 20px; + --content: 50ch; + --round-sm: 4px; + --round-md: 10px; + --round-lg: 20px; + --round-full: 100vmax; + --box-shadow: 3px 3px 5px 0px rgba(0, 0, 0, 0.25); +} + +body { + display: block; + place-items: center; + min-height: 100vh; + font-family: "Manrope", sans-serif; + font-size: var(--fs-200); + line-height: var(--lh-1-4); + font-weight: 400; + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + -webkit-text-size-adjust: 100%; + background-color: hsl(var(--bkg)); + color: hsl(var(--text)); + background: linear-gradient(to bottom right, #000000, #333333), #333333; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + font-weight: 600; + line-height: var(--lh-1-2); + font-size: var(--fs-500); + color: hsl(var(--text2)); +} + +a { + text-decoration: none; + color: hsl(var(--text3)); + transition: color 0.1s ease, text-shadow 0.1s ease; +} + +a:hover { + color: hsl(var(--text2)); + text-shadow: 1px 1px 8px rgba(0, 0, 0, 0.25); +} + +a:active { + color: hsl(var(--text2)); + text-shadow: 0 0 8px hsl(var(--text3)); +} + +.cardContainer { + width: 100%; + display: flex; + flex-wrap: wrap; + justify-content: center; + gap: 30px; +} + +/* Media Queries */ +@media (max-width: 768px) { + h1, + h2, + h3, + h4, + h5, + h6 { + font-size: var(--fs-400); + } + + .cardContainer { + gap: 20px; + } +} diff --git a/frontend/src/main.tsx b/frontend/src/main.tsx new file mode 100644 index 0000000..966f17a --- /dev/null +++ b/frontend/src/main.tsx @@ -0,0 +1,10 @@ +import React from "react"; +import ReactDOM from "react-dom/client"; +import App from "./App.tsx"; +import "./index.css"; + +ReactDOM.createRoot(document.getElementById("root")!).render( + + + +); diff --git a/frontend/src/tokens.ts b/frontend/src/tokens.ts new file mode 100644 index 0000000..e45aa9d --- /dev/null +++ b/frontend/src/tokens.ts @@ -0,0 +1,280 @@ +const tokens = [ + { + name: "Enjin MFT", + id: "3312-6000000000000113", + collection: "Enjin Collection", + type: "Metaverse", + imageUrl: + "https://openseauserdata.com/files/34a76f843b3470272726fabe515eccba.jpg", + link: "https://nft.io/asset/3312-127605887595351928871620098057039773696", + }, + { + name: "The Green Box", + id: "3404-70C000000000026A", + collection: "Green Box by Maxim", + type: "Metaverse", + imageUrl: + "https://nft.production.enjinusercontent.com/metadata/enjin/media/f18b934aeda7301560809bf002be0eb2bcb8316db01baec1418ee4c97aee4d00.png", + link: "https://nft.io/collection/green-box-by-maxim/", + }, + { + name: "Degens", + id: "2", + collection: "Degens", + type: "Avatars", + imageUrl: + "https://platform.production.enjinusercontent.com/enterprise/degens/assets/media/29.png", + link: "#", + }, + + { + name: "Imperial Sovereign", + id: "2100-1", + collection: "The Etherscape", + type: "Memberships", + imageUrl: + "https://nft.production.enjinusercontent.com/metadata/enjin/media/cc624a9397569e36883d97c5f19a638b4e490f63dd0bddb65b9332111ec16b28.png", + link: "https://nft.io/asset/2100-1", + }, + { + name: "Founders Token ENJ Beam Club", + id: "2190-7", + collection: "ENJ Beam Club", + type: "Memberships", + imageUrl: + "https://nft.production.enjinusercontent.com/uploads/files/5fijlg0p5nx88r67.png", + link: "https://nft.io/asset/2190-7", + }, + { + name: "Tipper Token", + id: "2479-9", + collection: "NFT Tipper (Bot)", + type: "Memberships", + imageUrl: + "https://nft.production.enjinusercontent.com/uploads/files/tzk5om2pvhpw8cbj.jpg", + link: "https://nft.io/asset/2479-9", + }, + + { + name: "Epochrome Sword", + id: "2967-5080000000000029", + collection: "The Multiverse", + type: "Metaverse", + imageUrl: + "https://nft.production.enjinusercontent.com/metadata/enjin/media/9a1752e040920a53ee6cbb8c585c6a85da87f8fa6f20c16e37d8cb24f14ac385.jpg", + link: "https://nft.io/asset/2967-107002853660685728525072975374659358631", + }, + { + name: "Starbow", + id: "2967-50800000000006E", + collection: "The Multiverse", + type: "Metaverse", + imageUrl: + "https://nft.production.enjinusercontent.com/metadata/enjin/media/5b3c74aba4d392e2665e2f911210a4a600ee3ec8780f44bbf4cd05f4bd39d12c.jpeg", + link: "https://nft.io/asset/2967-107002853660685760308813014376216789618", + }, + { + name: "APG-M55", + id: "2967-508000000000002B", + collection: "The Multiverse", + type: "Metaverse", + imageUrl: + "https://nft.production.enjinusercontent.com/metadata/enjin/media/9b9c766dba960c17a0b114dd68ad005d5f0f4c5c6d0ccf774a967dd93fb5f873.jpg", + link: "https://nft.io/asset/2967-107002853660685728561966463522078458491", + }, + { + name: "Oindrasdin", + id: "2967-5080000000000027", + collection: "The Multiverse", + type: "Metaverse", + imageUrl: + "https://nft.production.enjinusercontent.com/metadata/enjin/media/2b8402c0b3a2c7a78a3579d4e8c7fbe045aa448b4964e547b6efed7e4118f431.jpg", + link: "https://nft.io/asset/2967-107002853660685728488179487227240255171", + }, + { + name: "ForgeHammer", + id: "2967-508000000000002A", + collection: "The Multiverse", + type: "Metaverse", + imageUrl: + "https://nft.production.enjinusercontent.com/metadata/enjin/media/f1f42d0fc10cd1f89fcfabba95acd5ca5477162e9551f5ba3c85f5effa50f45c.jpg", + link: "https://nft.io/asset/2967-107002853660685728543519719448368909321", + }, + { + name: "Soulshift Armor", + id: "2967-508000000000002D", + collection: "The Multiverse", + type: "Metaverse", + imageUrl: + "https://nft.production.enjinusercontent.com/metadata/enjin/media/23d9054c219b1f310f809161dd930f0ad3882ee73f2d8b8e34268735c54e2b4b.jpg", + link: "https://nft.io/asset/2967-107002853660685728598859951669497561717", + }, + { + name: "Stormwall", + id: "2967-508000000000002C", + collection: "The Multiverse", + type: "Metaverse", + imageUrl: + "https://nft.production.enjinusercontent.com/metadata/enjin/media/006d26a8479356fddae2b76170baf51d04e2d663f851f09ba975780f0d6d7577.jpg", + link: "https://nft.io/asset/2967-107002853660685728580413207595788010096", + }, + { + name: "Aeonclipse Key", + id: "2967-50000000000000F9", + collection: "The Multiverse", + type: "Metaverse", + imageUrl: + "https://nft.production.enjinusercontent.com/metadata/enjin/media/807f05cd0ae3dd6ca57ae56a6dfec3fce0ea66286a30043e27f99b4d59ce128d.jpg", + link: "https://nft.io/asset/2967-106338239662793274425543839176105918464", + }, + { + name: "Archspire", + id: "2967-50000000000000C4", + collection: "The Multiverse", + type: "Metaverse", + imageUrl: + "https://nft.production.enjinusercontent.com/metadata/enjin/media/395a0e11130e05ef0c3e751baa8ff2690c904f04eca0d9e287bc5a80eafb739d.jpg", + link: "https://nft.io/asset/2967-106338239662793273447866403269499682816", + }, + + { + name: "The N-Chip", + id: "3312-70C0000000002BCE", + collection: "Enjin Collection", + type: "Commemorative", + imageUrl: + "https://nft.production.enjinusercontent.com/metadata/enjin/media/433533c0d1058c547c35322124b57613e643e3a13d1137ca0f0c8056a043d4bb.png", + link: "https://nft.io/asset/3312-149870456524749471531692288625520682901", + }, + { + name: "Rakku, Mecha Clan Shockslinger", + id: "3044-78C0000000003377", + collection: "#MyFirstNFT", + type: "Avatars", + imageUrl: + "https://nft.production.enjinusercontent.com/metadata/enjin/media/d1010448b3c61556a88ef787c2027d8005c29a75998e0712db371120c2036153.gif", + link: "https://nft.io/asset/3044-160504280491028834688987873652194148353", + }, + { + name: "Thresh, Mecha Clan Bounty Hunter", + id: "3044-78C0000000003376", + collection: "#MyFirstNFT", + type: "Avatars", + imageUrl: + "https://nft.production.enjinusercontent.com/metadata/enjin/media/badb13912192394e16bbc8a0f9b9f7d675677f67eaf5a0215fed1478af948a9b.gif", + link: "https://nft.io/asset/3044-160504280491028834670541129578484596741", + }, + { + name: "Pyjama Clan Warrior", + id: "3044-78C0000000003375", + collection: "#MyFirstNFT", + type: "Avatars", + imageUrl: + "https://nft.production.enjinusercontent.com/metadata/enjin/media/89fa4b8a7931400dbe8d1d9d6f4266400d359c581d85cec6e395de5840b35280.gif", + link: "https://nft.io/asset/3044-160504280491028834652094385504775045145", + }, + { + name: "Pyjama Clan Apprentice", + id: "3044-78C0000000003374", + collection: "#MyFirstNFT", + type: "Avatars", + imageUrl: + "https://nft.production.enjinusercontent.com/metadata/enjin/media/c6c1cef2e5e62a4cf3a8484da1678123d376caa6a56d43231868acb1a0670543.gif", + link: "https://nft.io/asset/3044-160504280491028834633647641431065493919", + }, + + { + name: "Enjin Website Builder Service Medal", + id: "2088", + collection: "Enjin Website Builder Service Medal", + type: "Commemorative", + imageUrl: + "https://nft.production.enjinusercontent.com/metadata/enjin/media/3c83e2a693a068eb35bb2e19e6f68ae2d1075e2e569e23a6c4f6e0d01c5621c9.gif", + link: "https://nft.io/collection/enjin-website-builder-service-medal/", + }, + { + name: "Enjin Wallet 2.0 Beta Tester Badge", + id: "3312-70C0000000003379", + collection: "Enjin Collection", + type: "Commemorative", + imageUrl: + "https://nft.production.enjinusercontent.com/metadata/enjin/media/601be4206b4e32a39d2d86ed1b82d120fa6aeabef524a300be582113a3d173ab.gif", + link: "https://nft.io/asset/3312-149870456524749507742650905317370513202", + }, + { + name: "EnjinX Launch Token", + id: "3312-70000000000001A1", + collection: "Enjin Collection", + type: "Commemorative", + imageUrl: + "https://nft.production.enjinusercontent.com/metadata/enjin/media/de1335aee52e0c05c59dfb768c3cb4a1e4e6acfd1a7fbeab0176fae035197a01.jpg", + link: "https://nft.io/asset/3312-148873535527910585457518669488281616384", + }, + { + name: "Emi the Fearless Woman", + id: "2091", + collection: "Emi the Fearless Woman", + type: "Commemorative", + imageUrl: + "https://nft.production.enjinusercontent.com/metadata/enjin/media/59bda0bee24c43b092b9ee6e19622a22822db74e9f70c8253dbf00ddc37d37b4.png", + link: "https://nft.io/collection/emi-the-fearless-woman", + }, + + { + name: "Priceless Binance Hoodie", + id: "3363-70C0000000000028", + collection: "Binance", + type: "Metaverse", + imageUrl: + "https://nft.production.enjinusercontent.com/metadata/enjin/media/67d254c8ee72edcb151789f7fc44dfa718c637fa5fbcebf5da444bd7e5bc4525.png", + link: "https://nft.io/asset/3363-149870456524749265407774008994990915585", + }, + { + name: "Exclusive Binance Hoodie", + id: "3363-70C0000000000029", + collection: "Binance", + type: "Metaverse", + imageUrl: + "https://nft.production.enjinusercontent.com/metadata/enjin/media/051b12ebcc25652a6027cbef0fb8e832b9c8b202887c39f6c3c4acb4153099e6.png", + link: "https://nft.io/asset/3363-149870456524749265426220753068700467201", + }, + { + name: "Iconic Binance Hoodie", + id: "3363-70C000000000002E", + collection: "Binance", + type: "Metaverse", + imageUrl: + "https://nft.production.enjinusercontent.com/metadata/enjin/media/aa1b96178ba14b57be1802052f40538ea6aba4275dd6f65cf5530043b695e257.png", + link: "https://nft.io/asset/3363-149870456524749265518454473437248225507", + }, + + { + name: "Goblin Cart", + id: "3892-1", + collection: "ENJ Excavators", + type: "Metaverse", + imageUrl: + "https://nft.production.enjinusercontent.com/uploads/files/zoofqmufcxkgqhxw.jpg", + link: "https://nft.io/asset/3892-1", + }, + { + name: "Goblin Drill", + id: "3892-2", + collection: "ENJ Excavators", + type: "Metaverse", + imageUrl: + "https://nft.production.enjinusercontent.com/uploads/files/dmjpdsoxpmqj0wrb.jpg", + link: "https://nft.io/asset/3892-2", + }, + { + name: "Goblin Drill Squad", + id: "3892-3", + collection: "ENJ Excavators", + type: "Metaverse", + imageUrl: + "https://nft.production.enjinusercontent.com/uploads/files/urkldvd7oygqvdz4.jpg", + link: "https://nft.io/asset/3892-3", + }, +]; + +export default tokens; diff --git a/frontend/src/vite-env.d.ts b/frontend/src/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/frontend/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json new file mode 100644 index 0000000..a7fc6fb --- /dev/null +++ b/frontend/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["src"], + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/frontend/tsconfig.node.json b/frontend/tsconfig.node.json new file mode 100644 index 0000000..42872c5 --- /dev/null +++ b/frontend/tsconfig.node.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "composite": true, + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts new file mode 100644 index 0000000..739295c --- /dev/null +++ b/frontend/vite.config.ts @@ -0,0 +1,20 @@ +import { defineConfig } from 'vite'; +import react from '@vitejs/plugin-react'; + +export default defineConfig(({ command }) => { + const config = { + plugins: [react()], + base: '/', + server: { + proxy: { + '/api': { + target: 'https://pro-api.coinmarketcap.com', + changeOrigin: true, + rewrite: (path) => path.replace(/^\/api/, '/v1') + } + } + } + }; + + return config; +});