From 53984d9c891a36da5e638628a9180d15c5418dc1 Mon Sep 17 00:00:00 2001 From: andres Date: Thu, 2 May 2024 23:50:42 +0200 Subject: [PATCH 01/14] wip --- .eslintrc.json | 6 +- package.json | 9 +- pnpm-lock.yaml | 4049 ++++++++++------- prettier.config.cjs | 5 +- src/components/button/index.tsx | 33 +- src/components/input/index.tsx | 10 +- src/components/todolist/index.tsx | 112 +- src/components/toggle-group/toggle-group.tsx | 83 + src/env/client.mjs | 6 +- src/env/server.mjs | 2 +- src/helpers/classnames/classnames.ts | 6 + src/helpers/classnames/index.ts | 1 + src/helpers/handle-error/index.ts | 10 +- src/helpers/index.ts | 1 + src/pages/index.tsx | 11 +- src/services/auth/auth.api.ts | 28 - src/services/auth/auth.instance.ts | 6 - src/services/index.ts | 4 +- src/services/todolist-api/auth/auth.api.ts | 35 + .../{ => todolist-api}/auth/auth.hooks.ts | 2 +- src/services/{ => todolist-api}/auth/index.ts | 0 .../todolist-api/todolist-api.instance.ts | 90 + .../{ => todolist-api}/todolists/index.ts | 0 .../todolists/todolists.api.ts | 36 +- .../todolists/todolists.hooks.ts | 6 +- .../todolists/todolists.types.ts | 50 +- src/services/todolists/todolists.instance.ts | 6 - src/styles/globals.css | 74 +- tsconfig.json | 1 - 29 files changed, 2818 insertions(+), 1864 deletions(-) create mode 100644 src/components/toggle-group/toggle-group.tsx create mode 100644 src/helpers/classnames/classnames.ts create mode 100644 src/helpers/classnames/index.ts delete mode 100644 src/services/auth/auth.api.ts delete mode 100644 src/services/auth/auth.instance.ts create mode 100644 src/services/todolist-api/auth/auth.api.ts rename src/services/{ => todolist-api}/auth/auth.hooks.ts (93%) rename src/services/{ => todolist-api}/auth/index.ts (100%) create mode 100644 src/services/todolist-api/todolist-api.instance.ts rename src/services/{ => todolist-api}/todolists/index.ts (100%) rename src/services/{ => todolist-api}/todolists/todolists.api.ts (55%) rename src/services/{ => todolist-api}/todolists/todolists.hooks.ts (93%) rename src/services/{ => todolist-api}/todolists/todolists.types.ts (55%) delete mode 100644 src/services/todolists/todolists.instance.ts diff --git a/.eslintrc.json b/.eslintrc.json index 4b23e3d..434de89 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -4,7 +4,11 @@ "project": "./tsconfig.json" }, "plugins": ["@typescript-eslint"], - "extends": ["next/core-web-vitals", "plugin:@typescript-eslint/recommended", "@it-incubator/eslint-config"], + "extends": [ + "next/core-web-vitals", + "plugin:@typescript-eslint/recommended", + "@it-incubator/eslint-config" + ], "rules": { "@typescript-eslint/consistent-type-imports": "warn" } diff --git a/package.json b/package.json index e4a7554..77c5ec1 100644 --- a/package.json +++ b/package.json @@ -6,14 +6,21 @@ "build": "next build", "dev": "next dev", "lint": "next lint", - "start": "next start" + "start": "next start", + "format": "prettier --write ." }, "dependencies": { + "@radix-ui/react-toggle-group": "^1.0.4", "@tanstack/react-query": "^4.28.0", + "async-mutex": "^0.5.0", "axios": "^1.3.4", + "class-variance-authority": "^0.7.0", + "clsx": "^2.1.1", + "lucide-react": "^0.377.0", "next": "13.2.4", "react": "18.2.0", "react-dom": "18.2.0", + "tailwind-merge": "^2.3.0", "zod": "^3.21.4" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ec7a815..216bf57 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,336 +1,391 @@ -lockfileVersion: '6.0' +lockfileVersion: '9.0' -dependencies: - '@tanstack/react-query': - specifier: ^4.28.0 - version: 4.28.0(react-dom@18.2.0)(react@18.2.0) - axios: - specifier: ^1.3.4 - version: 1.3.4 - next: - specifier: 13.2.4 - version: 13.2.4(react-dom@18.2.0)(react@18.2.0) - react: - specifier: 18.2.0 - version: 18.2.0 - react-dom: - specifier: 18.2.0 - version: 18.2.0(react@18.2.0) - zod: - specifier: ^3.21.4 - version: 3.21.4 +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false -devDependencies: - '@it-incubator/eslint-config': - specifier: ^0.1.0 - version: 0.1.0(prettier@2.8.7)(typescript@5.0.3) - '@it-incubator/prettier-config': - specifier: ^0.1.0 - version: 0.1.0 - '@types/node': - specifier: ^18.15.11 - version: 18.15.11 - '@types/react': - specifier: ^18.0.33 - version: 18.0.33 - '@types/react-dom': - specifier: ^18.0.11 - version: 18.0.11 - '@typescript-eslint/eslint-plugin': - specifier: ^5.57.1 - version: 5.57.1(@typescript-eslint/parser@5.57.1)(eslint@8.37.0)(typescript@5.0.3) - '@typescript-eslint/parser': - specifier: ^5.57.1 - version: 5.57.1(eslint@8.37.0)(typescript@5.0.3) - autoprefixer: - specifier: ^10.4.14 - version: 10.4.14(postcss@8.4.21) - eslint: - specifier: ^8.37.0 - version: 8.37.0 - eslint-config-next: - specifier: 13.2.4 - version: 13.2.4(eslint@8.37.0)(typescript@5.0.3) - postcss: - specifier: ^8.4.21 - version: 8.4.21 - prettier: - specifier: ^2.8.7 - version: 2.8.7 - prettier-plugin-tailwindcss: - specifier: ^0.2.6 - version: 0.2.6(prettier@2.8.7) - tailwindcss: - specifier: ^3.3.1 - version: 3.3.1(postcss@8.4.21) - typescript: - specifier: ^5.0.3 - version: 5.0.3 +importers: + + .: + dependencies: + '@radix-ui/react-toggle-group': + specifier: ^1.0.4 + version: 1.0.4(@types/react-dom@18.0.11)(@types/react@18.0.33)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@tanstack/react-query': + specifier: ^4.28.0 + version: 4.28.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + async-mutex: + specifier: ^0.5.0 + version: 0.5.0 + axios: + specifier: ^1.3.4 + version: 1.3.4 + class-variance-authority: + specifier: ^0.7.0 + version: 0.7.0 + clsx: + specifier: ^2.1.1 + version: 2.1.1 + lucide-react: + specifier: ^0.377.0 + version: 0.377.0(react@18.2.0) + next: + specifier: 13.2.4 + version: 13.2.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react: + specifier: 18.2.0 + version: 18.2.0 + react-dom: + specifier: 18.2.0 + version: 18.2.0(react@18.2.0) + tailwind-merge: + specifier: ^2.3.0 + version: 2.3.0 + zod: + specifier: ^3.21.4 + version: 3.21.4 + devDependencies: + '@it-incubator/eslint-config': + specifier: ^0.1.0 + version: 0.1.0(prettier@2.8.7)(typescript@5.0.3) + '@it-incubator/prettier-config': + specifier: ^0.1.0 + version: 0.1.0 + '@types/node': + specifier: ^18.15.11 + version: 18.15.11 + '@types/react': + specifier: ^18.0.33 + version: 18.0.33 + '@types/react-dom': + specifier: ^18.0.11 + version: 18.0.11 + '@typescript-eslint/eslint-plugin': + specifier: ^5.57.1 + version: 5.57.1(@typescript-eslint/parser@5.57.1(eslint@8.37.0)(typescript@5.0.3))(eslint@8.37.0)(typescript@5.0.3) + '@typescript-eslint/parser': + specifier: ^5.57.1 + version: 5.57.1(eslint@8.37.0)(typescript@5.0.3) + autoprefixer: + specifier: ^10.4.14 + version: 10.4.14(postcss@8.4.21) + eslint: + specifier: ^8.37.0 + version: 8.37.0 + eslint-config-next: + specifier: 13.2.4 + version: 13.2.4(eslint@8.37.0)(typescript@5.0.3) + postcss: + specifier: ^8.4.21 + version: 8.4.21 + prettier: + specifier: ^2.8.7 + version: 2.8.7 + prettier-plugin-tailwindcss: + specifier: ^0.2.6 + version: 0.2.6(prettier@2.8.7) + tailwindcss: + specifier: ^3.3.1 + version: 3.3.1(postcss@8.4.21) + typescript: + specifier: ^5.0.3 + version: 5.0.3 packages: - /@babel/runtime@7.21.0: + '@babel/runtime@7.21.0': resolution: {integrity: sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==} engines: {node: '>=6.9.0'} - dependencies: - regenerator-runtime: 0.13.11 - dev: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.37.0): + '@babel/runtime@7.24.5': + resolution: {integrity: sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==} + engines: {node: '>=6.9.0'} + + '@eslint-community/eslint-utils@4.4.0': resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - dependencies: - eslint: 8.37.0 - eslint-visitor-keys: 3.4.0 - dev: true - /@eslint-community/regexpp@4.5.0: + '@eslint-community/regexpp@4.5.0': resolution: {integrity: sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - dev: true - /@eslint/eslintrc@2.0.2: + '@eslint/eslintrc@2.0.2': resolution: {integrity: sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - ajv: 6.12.6 - debug: 4.3.4 - espree: 9.5.1 - globals: 13.20.0 - ignore: 5.2.4 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - dev: true - /@eslint/js@8.37.0: + '@eslint/js@8.37.0': resolution: {integrity: sha512-x5vzdtOOGgFVDCUs81QRB2+liax8rFg3+7hqM+QhBG0/G3F1ZsoYl97UrqgHgQ9KKT7G6c4V+aTUCgu/n22v1A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - /@humanwhocodes/config-array@0.11.8: + '@humanwhocodes/config-array@0.11.8': resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==} engines: {node: '>=10.10.0'} - dependencies: - '@humanwhocodes/object-schema': 1.2.1 - debug: 4.3.4 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - dev: true - /@humanwhocodes/module-importer@1.0.1: + '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - dev: true - /@humanwhocodes/object-schema@1.2.1: + '@humanwhocodes/object-schema@1.2.1': resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} - dev: true - /@it-incubator/eslint-config@0.1.0(prettier@2.8.7)(typescript@5.0.3): + '@it-incubator/eslint-config@0.1.0': resolution: {integrity: sha512-bQ0T6gwY992+lSk1sQX7aQt0++ILCkp0p6jb6GwL4GCBaHkjPmbnEbaNyqVS+Q5tT5TR48AMnU0Sg9vl5nLNUg==} - dependencies: - '@typescript-eslint/eslint-plugin': 5.57.1(@typescript-eslint/parser@5.57.1)(eslint@8.37.0)(typescript@5.0.3) - '@typescript-eslint/parser': 5.57.1(eslint@8.37.0)(typescript@5.0.3) - eslint: 8.37.0 - eslint-config-prettier: 8.8.0(eslint@8.37.0) - eslint-import-resolver-node: 0.3.7 - eslint-import-resolver-typescript: 3.5.4(eslint-plugin-import@2.27.5)(eslint@8.37.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.57.1)(eslint-import-resolver-typescript@3.5.4)(eslint@8.37.0) - eslint-plugin-prettier: 4.2.1(eslint-config-prettier@8.8.0)(eslint@8.37.0)(prettier@2.8.7) - eslint-plugin-react: 7.32.2(eslint@8.37.0) - transitivePeerDependencies: - - eslint-import-resolver-webpack - - prettier - - supports-color - - typescript - dev: true - /@it-incubator/prettier-config@0.1.0: + '@it-incubator/prettier-config@0.1.0': resolution: {integrity: sha512-z6MUhhOpVWsJYxBlLUQr3ocoKlZeTR1sJNAqwf2eM+1iOtUQzq864Q9UOUhQRpkVHlFiWRzEQCRzbI/rPWWQDw==} - dev: true - /@next/env@13.2.4: + '@next/env@13.2.4': resolution: {integrity: sha512-+Mq3TtpkeeKFZanPturjcXt+KHfKYnLlX6jMLyCrmpq6OOs4i1GqBOAauSkii9QeKCMTYzGppar21JU57b/GEA==} - dev: false - /@next/eslint-plugin-next@13.2.4: + '@next/eslint-plugin-next@13.2.4': resolution: {integrity: sha512-ck1lI+7r1mMJpqLNa3LJ5pxCfOB1lfJncKmRJeJxcJqcngaFwylreLP7da6Rrjr6u2gVRTfmnkSkjc80IiQCwQ==} - dependencies: - glob: 7.1.7 - dev: true - /@next/swc-android-arm-eabi@13.2.4: + '@next/swc-android-arm-eabi@13.2.4': resolution: {integrity: sha512-DWlalTSkLjDU11MY11jg17O1gGQzpRccM9Oes2yTqj2DpHndajrXHGxj9HGtJ+idq2k7ImUdJVWS2h2l/EDJOw==} engines: {node: '>= 10'} cpu: [arm] os: [android] - requiresBuild: true - dev: false - optional: true - /@next/swc-android-arm64@13.2.4: + '@next/swc-android-arm64@13.2.4': resolution: {integrity: sha512-sRavmUImUCf332Gy+PjIfLkMhiRX1Ez4SI+3vFDRs1N5eXp+uNzjFUK/oLMMOzk6KFSkbiK/3Wt8+dHQR/flNg==} engines: {node: '>= 10'} cpu: [arm64] os: [android] - requiresBuild: true - dev: false - optional: true - /@next/swc-darwin-arm64@13.2.4: + '@next/swc-darwin-arm64@13.2.4': resolution: {integrity: sha512-S6vBl+OrInP47TM3LlYx65betocKUUlTZDDKzTiRDbsRESeyIkBtZ6Qi5uT2zQs4imqllJznVjFd1bXLx3Aa6A==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - requiresBuild: true - dev: false - optional: true - /@next/swc-darwin-x64@13.2.4: + '@next/swc-darwin-x64@13.2.4': resolution: {integrity: sha512-a6LBuoYGcFOPGd4o8TPo7wmv5FnMr+Prz+vYHopEDuhDoMSHOnC+v+Ab4D7F0NMZkvQjEJQdJS3rqgFhlZmKlw==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - requiresBuild: true - dev: false - optional: true - /@next/swc-freebsd-x64@13.2.4: + '@next/swc-freebsd-x64@13.2.4': resolution: {integrity: sha512-kkbzKVZGPaXRBPisoAQkh3xh22r+TD+5HwoC5bOkALraJ0dsOQgSMAvzMXKsN3tMzJUPS0tjtRf1cTzrQ0I5vQ==} engines: {node: '>= 10'} cpu: [x64] os: [freebsd] - requiresBuild: true - dev: false - optional: true - /@next/swc-linux-arm-gnueabihf@13.2.4: + '@next/swc-linux-arm-gnueabihf@13.2.4': resolution: {integrity: sha512-7qA1++UY0fjprqtjBZaOA6cas/7GekpjVsZn/0uHvquuITFCdKGFCsKNBx3S0Rpxmx6WYo0GcmhNRM9ru08BGg==} engines: {node: '>= 10'} cpu: [arm] os: [linux] - requiresBuild: true - dev: false - optional: true - /@next/swc-linux-arm64-gnu@13.2.4: + '@next/swc-linux-arm64-gnu@13.2.4': resolution: {integrity: sha512-xzYZdAeq883MwXgcwc72hqo/F/dwUxCukpDOkx/j1HTq/J0wJthMGjinN9wH5bPR98Mfeh1MZJ91WWPnZOedOg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - requiresBuild: true - dev: false - optional: true - /@next/swc-linux-arm64-musl@13.2.4: + '@next/swc-linux-arm64-musl@13.2.4': resolution: {integrity: sha512-8rXr3WfmqSiYkb71qzuDP6I6R2T2tpkmf83elDN8z783N9nvTJf2E7eLx86wu2OJCi4T05nuxCsh4IOU3LQ5xw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - requiresBuild: true - dev: false - optional: true - /@next/swc-linux-x64-gnu@13.2.4: + '@next/swc-linux-x64-gnu@13.2.4': resolution: {integrity: sha512-Ngxh51zGSlYJ4EfpKG4LI6WfquulNdtmHg1yuOYlaAr33KyPJp4HeN/tivBnAHcZkoNy0hh/SbwDyCnz5PFJQQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - requiresBuild: true - dev: false - optional: true - /@next/swc-linux-x64-musl@13.2.4: + '@next/swc-linux-x64-musl@13.2.4': resolution: {integrity: sha512-gOvwIYoSxd+j14LOcvJr+ekd9fwYT1RyMAHOp7znA10+l40wkFiMONPLWiZuHxfRk+Dy7YdNdDh3ImumvL6VwA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - requiresBuild: true - dev: false - optional: true - /@next/swc-win32-arm64-msvc@13.2.4: + '@next/swc-win32-arm64-msvc@13.2.4': resolution: {integrity: sha512-q3NJzcfClgBm4HvdcnoEncmztxrA5GXqKeiZ/hADvC56pwNALt3ngDC6t6qr1YW9V/EPDxCYeaX4zYxHciW4Dw==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - requiresBuild: true - dev: false - optional: true - /@next/swc-win32-ia32-msvc@13.2.4: + '@next/swc-win32-ia32-msvc@13.2.4': resolution: {integrity: sha512-/eZ5ncmHUYtD2fc6EUmAIZlAJnVT2YmxDsKs1Ourx0ttTtvtma/WKlMV5NoUsyOez0f9ExLyOpeCoz5aj+MPXw==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] - requiresBuild: true - dev: false - optional: true - /@next/swc-win32-x64-msvc@13.2.4: + '@next/swc-win32-x64-msvc@13.2.4': resolution: {integrity: sha512-0MffFmyv7tBLlji01qc0IaPP/LVExzvj7/R5x1Jph1bTAIj4Vu81yFQWHHQAP6r4ff9Ukj1mBK6MDNVXm7Tcvw==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - requiresBuild: true - dev: false - optional: true - /@nodelib/fs.scandir@2.1.5: + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - dev: true - /@nodelib/fs.stat@2.0.5: + '@nodelib/fs.stat@2.0.5': resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} engines: {node: '>= 8'} - dev: true - /@nodelib/fs.walk@1.2.8: + '@nodelib/fs.walk@1.2.8': resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.15.0 - dev: true - /@pkgr/utils@2.3.1: + '@pkgr/utils@2.3.1': resolution: {integrity: sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - dependencies: - cross-spawn: 7.0.3 - is-glob: 4.0.3 - open: 8.4.2 - picocolors: 1.0.0 - tiny-glob: 0.2.9 - tslib: 2.5.0 - dev: true - /@rushstack/eslint-patch@1.2.0: + '@radix-ui/primitive@1.0.1': + resolution: {integrity: sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==} + + '@radix-ui/react-collection@1.0.3': + resolution: {integrity: sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-compose-refs@1.0.1': + resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-context@1.0.1': + resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-direction@1.0.1': + resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-id@1.0.1': + resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-primitive@1.0.3': + resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-roving-focus@1.0.4': + resolution: {integrity: sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-slot@1.0.2': + resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-toggle-group@1.0.4': + resolution: {integrity: sha512-Uaj/M/cMyiyT9Bx6fOZO0SAG4Cls0GptBWiBmBxofmDbNVnYYoyRWj/2M/6VCi/7qcXFWnHhRUfdfZFvvkuu8A==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-toggle@1.0.3': + resolution: {integrity: sha512-Pkqg3+Bc98ftZGsl60CLANXQBBQ4W3mTFS9EJvNxKMZ7magklKV69/id1mlAlOFDDfHvlCms0fx8fA4CMKDJHg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-use-callback-ref@1.0.1': + resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-controllable-state@1.0.1': + resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-layout-effect@1.0.1': + resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@rushstack/eslint-patch@1.2.0': resolution: {integrity: sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==} - dev: true - /@swc/helpers@0.4.14: + '@swc/helpers@0.4.14': resolution: {integrity: sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==} - dependencies: - tslib: 2.5.0 - dev: false - /@tanstack/query-core@4.27.0: + '@tanstack/query-core@4.27.0': resolution: {integrity: sha512-sm+QncWaPmM73IPwFlmWSKPqjdTXZeFf/7aEmWh00z7yl2FjqophPt0dE1EHW9P1giMC5rMviv7OUbSDmWzXXA==} - dev: false - /@tanstack/react-query@4.28.0(react-dom@18.2.0)(react@18.2.0): + '@tanstack/react-query@4.28.0': resolution: {integrity: sha512-8cGBV5300RHlvYdS4ea+G1JcZIt5CIuprXYFnsWggkmGoC0b5JaqG0fIX3qwDL9PTNkKvG76NGThIWbpXivMrQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -341,52 +396,32 @@ packages: optional: true react-native: optional: true - dependencies: - '@tanstack/query-core': 4.27.0 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - use-sync-external-store: 1.2.0(react@18.2.0) - dev: false - /@types/json-schema@7.0.11: + '@types/json-schema@7.0.11': resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} - dev: true - /@types/json5@0.0.29: + '@types/json5@0.0.29': resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - dev: true - /@types/node@18.15.11: + '@types/node@18.15.11': resolution: {integrity: sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==} - dev: true - /@types/prop-types@15.7.5: + '@types/prop-types@15.7.5': resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} - dev: true - /@types/react-dom@18.0.11: + '@types/react-dom@18.0.11': resolution: {integrity: sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==} - dependencies: - '@types/react': 18.0.33 - dev: true - /@types/react@18.0.33: + '@types/react@18.0.33': resolution: {integrity: sha512-sHxzVxeanvQyQ1lr8NSHaj0kDzcNiGpILEVt69g9S31/7PfMvNCKLKcsHw4lYKjs3cGNJjXSP4mYzX43QlnjNA==} - dependencies: - '@types/prop-types': 15.7.5 - '@types/scheduler': 0.16.3 - csstype: 3.1.2 - dev: true - /@types/scheduler@0.16.3: + '@types/scheduler@0.16.3': resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==} - dev: true - /@types/semver@7.3.13: + '@types/semver@7.3.13': resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==} - dev: true - /@typescript-eslint/eslint-plugin@5.57.1(@typescript-eslint/parser@5.57.1)(eslint@8.37.0)(typescript@5.0.3): + '@typescript-eslint/eslint-plugin@5.57.1': resolution: {integrity: sha512-1MeobQkQ9tztuleT3v72XmY0XuKXVXusAhryoLuU5YZ+mXoYKZP9SQ7Flulh1NX4DTjpGTc2b/eMu4u7M7dhnQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -396,25 +431,8 @@ packages: peerDependenciesMeta: typescript: optional: true - dependencies: - '@eslint-community/regexpp': 4.5.0 - '@typescript-eslint/parser': 5.57.1(eslint@8.37.0)(typescript@5.0.3) - '@typescript-eslint/scope-manager': 5.57.1 - '@typescript-eslint/type-utils': 5.57.1(eslint@8.37.0)(typescript@5.0.3) - '@typescript-eslint/utils': 5.57.1(eslint@8.37.0)(typescript@5.0.3) - debug: 4.3.4 - eslint: 8.37.0 - grapheme-splitter: 1.0.4 - ignore: 5.2.4 - natural-compare-lite: 1.4.0 - semver: 7.3.8 - tsutils: 3.21.0(typescript@5.0.3) - typescript: 5.0.3 - transitivePeerDependencies: - - supports-color - dev: true - /@typescript-eslint/parser@5.57.1(eslint@8.37.0)(typescript@5.0.3): + '@typescript-eslint/parser@5.57.1': resolution: {integrity: sha512-hlA0BLeVSA/wBPKdPGxoVr9Pp6GutGoY380FEhbVi0Ph4WNe8kLvqIRx76RSQt1lynZKfrXKs0/XeEk4zZycuA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -423,26 +441,12 @@ packages: peerDependenciesMeta: typescript: optional: true - dependencies: - '@typescript-eslint/scope-manager': 5.57.1 - '@typescript-eslint/types': 5.57.1 - '@typescript-eslint/typescript-estree': 5.57.1(typescript@5.0.3) - debug: 4.3.4 - eslint: 8.37.0 - typescript: 5.0.3 - transitivePeerDependencies: - - supports-color - dev: true - /@typescript-eslint/scope-manager@5.57.1: + '@typescript-eslint/scope-manager@5.57.1': resolution: {integrity: sha512-N/RrBwEUKMIYxSKl0oDK5sFVHd6VI7p9K5MyUlVYAY6dyNb/wHUqndkTd3XhpGlXgnQsBkRZuu4f9kAHghvgPw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - '@typescript-eslint/types': 5.57.1 - '@typescript-eslint/visitor-keys': 5.57.1 - dev: true - /@typescript-eslint/type-utils@5.57.1(eslint@8.37.0)(typescript@5.0.3): + '@typescript-eslint/type-utils@5.57.1': resolution: {integrity: sha512-/RIPQyx60Pt6ga86hKXesXkJ2WOS4UemFrmmq/7eOyiYjYv/MUSHPlkhU6k9T9W1ytnTJueqASW+wOmW4KrViw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -451,23 +455,12 @@ packages: peerDependenciesMeta: typescript: optional: true - dependencies: - '@typescript-eslint/typescript-estree': 5.57.1(typescript@5.0.3) - '@typescript-eslint/utils': 5.57.1(eslint@8.37.0)(typescript@5.0.3) - debug: 4.3.4 - eslint: 8.37.0 - tsutils: 3.21.0(typescript@5.0.3) - typescript: 5.0.3 - transitivePeerDependencies: - - supports-color - dev: true - /@typescript-eslint/types@5.57.1: + '@typescript-eslint/types@5.57.1': resolution: {integrity: sha512-bSs4LOgyV3bJ08F5RDqO2KXqg3WAdwHCu06zOqcQ6vqbTJizyBhuh1o1ImC69X4bV2g1OJxbH71PJqiO7Y1RuA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - /@typescript-eslint/typescript-estree@5.57.1(typescript@5.0.3): + '@typescript-eslint/typescript-estree@5.57.1': resolution: {integrity: sha512-A2MZqD8gNT0qHKbk2wRspg7cHbCDCk2tcqt6ScCFLr5Ru8cn+TCfM786DjPhqwseiS+PrYwcXht5ztpEQ6TFTw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -475,354 +468,203 @@ packages: peerDependenciesMeta: typescript: optional: true - dependencies: - '@typescript-eslint/types': 5.57.1 - '@typescript-eslint/visitor-keys': 5.57.1 - debug: 4.3.4 - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.3.8 - tsutils: 3.21.0(typescript@5.0.3) - typescript: 5.0.3 - transitivePeerDependencies: - - supports-color - dev: true - /@typescript-eslint/utils@5.57.1(eslint@8.37.0)(typescript@5.0.3): + '@typescript-eslint/utils@5.57.1': resolution: {integrity: sha512-kN6vzzf9NkEtawECqze6v99LtmDiUJCVpvieTFA1uL7/jDghiJGubGZ5csicYHU1Xoqb3oH/R5cN5df6W41Nfg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.37.0) - '@types/json-schema': 7.0.11 - '@types/semver': 7.3.13 - '@typescript-eslint/scope-manager': 5.57.1 - '@typescript-eslint/types': 5.57.1 - '@typescript-eslint/typescript-estree': 5.57.1(typescript@5.0.3) - eslint: 8.37.0 - eslint-scope: 5.1.1 - semver: 7.3.8 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - /@typescript-eslint/visitor-keys@5.57.1: + '@typescript-eslint/visitor-keys@5.57.1': resolution: {integrity: sha512-RjQrAniDU0CEk5r7iphkm731zKlFiUjvcBS2yHAg8WWqFMCaCrD0rKEVOMUyMMcbGPZ0bPp56srkGWrgfZqLRA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - '@typescript-eslint/types': 5.57.1 - eslint-visitor-keys: 3.4.0 - dev: true - /acorn-jsx@5.3.2(acorn@8.8.2): + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - acorn: 8.8.2 - dev: true - /acorn@8.8.2: + acorn@8.8.2: resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} engines: {node: '>=0.4.0'} hasBin: true - dev: true - /ajv@6.12.6: + ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - dev: true - /ansi-regex@5.0.1: + ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - dev: true - /ansi-styles@4.3.0: + ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} - dependencies: - color-convert: 2.0.1 - dev: true - /any-promise@1.3.0: + any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - dev: true - /anymatch@3.1.3: + anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - dev: true - /arg@5.0.2: + arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - dev: true - /argparse@2.0.1: + argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - dev: true - /aria-query@5.1.3: + aria-query@5.1.3: resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==} - dependencies: - deep-equal: 2.2.0 - dev: true - /array-buffer-byte-length@1.0.0: + array-buffer-byte-length@1.0.0: resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} - dependencies: - call-bind: 1.0.2 - is-array-buffer: 3.0.2 - dev: true - /array-includes@3.1.6: + array-includes@3.1.6: resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==} engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.21.2 - get-intrinsic: 1.2.0 - is-string: 1.0.7 - dev: true - /array-union@2.1.0: + array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} - dev: true - /array.prototype.flat@1.3.1: + array.prototype.flat@1.3.1: resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==} engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.21.2 - es-shim-unscopables: 1.0.0 - dev: true - /array.prototype.flatmap@1.3.1: + array.prototype.flatmap@1.3.1: resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==} engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.21.2 - es-shim-unscopables: 1.0.0 - dev: true - /array.prototype.tosorted@1.1.1: + array.prototype.tosorted@1.1.1: resolution: {integrity: sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.21.2 - es-shim-unscopables: 1.0.0 - get-intrinsic: 1.2.0 - dev: true - /ast-types-flow@0.0.7: + ast-types-flow@0.0.7: resolution: {integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==} - dev: true - /asynckit@0.4.0: + async-mutex@0.5.0: + resolution: {integrity: sha512-1A94B18jkJ3DYq284ohPxoXbfTA5HsQ7/Mf4DEhcyLx3Bz27Rh59iScbB6EPiP+B+joue6YCxcMXSbFC1tZKwA==} + + asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - dev: false - /autoprefixer@10.4.14(postcss@8.4.21): + autoprefixer@10.4.14: resolution: {integrity: sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: postcss: ^8.1.0 - dependencies: - browserslist: 4.21.5 - caniuse-lite: 1.0.30001474 - fraction.js: 4.2.0 - normalize-range: 0.1.2 - picocolors: 1.0.0 - postcss: 8.4.21 - postcss-value-parser: 4.2.0 - dev: true - /available-typed-arrays@1.0.5: + available-typed-arrays@1.0.5: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} - dev: true - /axe-core@4.6.3: + axe-core@4.6.3: resolution: {integrity: sha512-/BQzOX780JhsxDnPpH4ZiyrJAzcd8AfzFPkv+89veFSr1rcMjuq2JDCwypKaPeB6ljHp9KjXhPpjgCvQlWYuqg==} engines: {node: '>=4'} - dev: true - /axios@1.3.4: + axios@1.3.4: resolution: {integrity: sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ==} - dependencies: - follow-redirects: 1.15.2 - form-data: 4.0.0 - proxy-from-env: 1.1.0 - transitivePeerDependencies: - - debug - dev: false - /axobject-query@3.1.1: + axobject-query@3.1.1: resolution: {integrity: sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==} - dependencies: - deep-equal: 2.2.0 - dev: true - /balanced-match@1.0.2: + balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true - /binary-extensions@2.2.0: + binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} - dev: true - /brace-expansion@1.1.11: + brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - dev: true - /braces@3.0.2: + braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} - dependencies: - fill-range: 7.0.1 - dev: true - /browserslist@4.21.5: + browserslist@4.21.5: resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true - dependencies: - caniuse-lite: 1.0.30001474 - electron-to-chromium: 1.4.350 - node-releases: 2.0.10 - update-browserslist-db: 1.0.10(browserslist@4.21.5) - dev: true - /call-bind@1.0.2: + call-bind@1.0.2: resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} - dependencies: - function-bind: 1.1.1 - get-intrinsic: 1.2.0 - dev: true - /callsites@3.1.0: + callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - dev: true - /camelcase-css@2.0.1: + camelcase-css@2.0.1: resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} engines: {node: '>= 6'} - dev: true - /caniuse-lite@1.0.30001474: + caniuse-lite@1.0.30001474: resolution: {integrity: sha512-iaIZ8gVrWfemh5DG3T9/YqarVZoYf0r188IjaGwx68j4Pf0SGY6CQkmJUIE+NZHkkecQGohzXmBGEwWDr9aM3Q==} - /chalk@4.1.2: + chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - dev: true - /chokidar@3.5.3: + chokidar@3.5.3: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} engines: {node: '>= 8.10.0'} - dependencies: - anymatch: 3.1.3 - braces: 3.0.2 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.2 - dev: true - /client-only@0.0.1: + class-variance-authority@0.7.0: + resolution: {integrity: sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==} + + client-only@0.0.1: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} - dev: false - /color-convert@2.0.1: + clsx@2.0.0: + resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==} + engines: {node: '>=6'} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} - dependencies: - color-name: 1.1.4 - dev: true - /color-name@1.1.4: + color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true - /combined-stream@1.0.8: + combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} - dependencies: - delayed-stream: 1.0.0 - dev: false - /commander@4.1.1: + commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} - dev: true - /concat-map@0.0.1: + concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: true - /cross-spawn@7.0.3: + cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - dev: true - /cssesc@3.0.0: + cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} hasBin: true - dev: true - /csstype@3.1.2: + csstype@3.1.2: resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} - dev: true - /damerau-levenshtein@1.0.8: + damerau-levenshtein@1.0.8: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} - dev: true - /debug@3.2.7: + debug@3.2.7: resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: supports-color: '*' peerDependenciesMeta: supports-color: optional: true - dependencies: - ms: 2.1.3 - dev: true - /debug@4.3.4: + debug@4.3.4: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} peerDependencies: @@ -830,188 +672,80 @@ packages: peerDependenciesMeta: supports-color: optional: true - dependencies: - ms: 2.1.2 - dev: true - /deep-equal@2.2.0: + deep-equal@2.2.0: resolution: {integrity: sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==} - dependencies: - call-bind: 1.0.2 - es-get-iterator: 1.1.3 - get-intrinsic: 1.2.0 - is-arguments: 1.1.1 - is-array-buffer: 3.0.2 - is-date-object: 1.0.5 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.2 - isarray: 2.0.5 - object-is: 1.1.5 - object-keys: 1.1.1 - object.assign: 4.1.4 - regexp.prototype.flags: 1.4.3 - side-channel: 1.0.4 - which-boxed-primitive: 1.0.2 - which-collection: 1.0.1 - which-typed-array: 1.1.9 - dev: true - /deep-is@0.1.4: + deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - dev: true - /define-lazy-prop@2.0.0: + define-lazy-prop@2.0.0: resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} engines: {node: '>=8'} - dev: true - /define-properties@1.2.0: + define-properties@1.2.0: resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} engines: {node: '>= 0.4'} - dependencies: - has-property-descriptors: 1.0.0 - object-keys: 1.1.1 - dev: true - /delayed-stream@1.0.0: + delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} - dev: false - /didyoumean@1.2.2: + didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - dev: true - /dir-glob@3.0.1: + dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} - dependencies: - path-type: 4.0.0 - dev: true - /dlv@1.1.3: + dlv@1.1.3: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - dev: true - /doctrine@2.1.0: + doctrine@2.1.0: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} - dependencies: - esutils: 2.0.3 - dev: true - /doctrine@3.0.0: + doctrine@3.0.0: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} - dependencies: - esutils: 2.0.3 - dev: true - /electron-to-chromium@1.4.350: + electron-to-chromium@1.4.350: resolution: {integrity: sha512-XnXcWpVnOfHZ4C3NPiL+SubeoGV8zc/pg8GEubRtc1dPA/9jKS2vsOPmtClJHhWxUb2RSGC1OBLCbgNUJMtZPw==} - dev: true - /emoji-regex@9.2.2: + emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - dev: true - /enhanced-resolve@5.12.0: + enhanced-resolve@5.12.0: resolution: {integrity: sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==} engines: {node: '>=10.13.0'} - dependencies: - graceful-fs: 4.2.11 - tapable: 2.2.1 - dev: true - /es-abstract@1.21.2: + es-abstract@1.21.2: resolution: {integrity: sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==} engines: {node: '>= 0.4'} - dependencies: - array-buffer-byte-length: 1.0.0 - available-typed-arrays: 1.0.5 - call-bind: 1.0.2 - es-set-tostringtag: 2.0.1 - es-to-primitive: 1.2.1 - function.prototype.name: 1.1.5 - get-intrinsic: 1.2.0 - get-symbol-description: 1.0.0 - globalthis: 1.0.3 - gopd: 1.0.1 - has: 1.0.3 - has-property-descriptors: 1.0.0 - has-proto: 1.0.1 - has-symbols: 1.0.3 - internal-slot: 1.0.5 - is-array-buffer: 3.0.2 - is-callable: 1.2.7 - is-negative-zero: 2.0.2 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.2 - is-string: 1.0.7 - is-typed-array: 1.1.10 - is-weakref: 1.0.2 - object-inspect: 1.12.3 - object-keys: 1.1.1 - object.assign: 4.1.4 - regexp.prototype.flags: 1.4.3 - safe-regex-test: 1.0.0 - string.prototype.trim: 1.2.7 - string.prototype.trimend: 1.0.6 - string.prototype.trimstart: 1.0.6 - typed-array-length: 1.0.4 - unbox-primitive: 1.0.2 - which-typed-array: 1.1.9 - dev: true - /es-get-iterator@1.1.3: + es-get-iterator@1.1.3: resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.0 - has-symbols: 1.0.3 - is-arguments: 1.1.1 - is-map: 2.0.2 - is-set: 2.0.2 - is-string: 1.0.7 - isarray: 2.0.5 - stop-iteration-iterator: 1.0.0 - dev: true - /es-set-tostringtag@2.0.1: + es-set-tostringtag@2.0.1: resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} engines: {node: '>= 0.4'} - dependencies: - get-intrinsic: 1.2.0 - has: 1.0.3 - has-tostringtag: 1.0.0 - dev: true - /es-shim-unscopables@1.0.0: + es-shim-unscopables@1.0.0: resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} - dependencies: - has: 1.0.3 - dev: true - /es-to-primitive@1.2.1: + es-to-primitive@1.2.1: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} engines: {node: '>= 0.4'} - dependencies: - is-callable: 1.2.7 - is-date-object: 1.0.5 - is-symbol: 1.0.4 - dev: true - /escalade@3.1.1: + escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} - dev: true - /escape-string-regexp@4.0.0: + escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - dev: true - /eslint-config-next@13.2.4(eslint@8.37.0)(typescript@5.0.3): + eslint-config-next@13.2.4: resolution: {integrity: sha512-lunIBhsoeqw6/Lfkd6zPt25w1bn0znLA/JCL+au1HoEpSb4/PpsOYsYtgV/q+YPsoKIOzFyU5xnb04iZnXjUvg==} peerDependencies: eslint: ^7.23.0 || ^8.0.0 @@ -1019,63 +753,24 @@ packages: peerDependenciesMeta: typescript: optional: true - dependencies: - '@next/eslint-plugin-next': 13.2.4 - '@rushstack/eslint-patch': 1.2.0 - '@typescript-eslint/parser': 5.57.1(eslint@8.37.0)(typescript@5.0.3) - eslint: 8.37.0 - eslint-import-resolver-node: 0.3.7 - eslint-import-resolver-typescript: 3.5.4(eslint-plugin-import@2.27.5)(eslint@8.37.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.57.1)(eslint-import-resolver-typescript@3.5.4)(eslint@8.37.0) - eslint-plugin-jsx-a11y: 6.7.1(eslint@8.37.0) - eslint-plugin-react: 7.32.2(eslint@8.37.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.37.0) - typescript: 5.0.3 - transitivePeerDependencies: - - eslint-import-resolver-webpack - - supports-color - dev: true - /eslint-config-prettier@8.8.0(eslint@8.37.0): + eslint-config-prettier@8.8.0: resolution: {integrity: sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==} hasBin: true peerDependencies: eslint: '>=7.0.0' - dependencies: - eslint: 8.37.0 - dev: true - /eslint-import-resolver-node@0.3.7: + eslint-import-resolver-node@0.3.7: resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==} - dependencies: - debug: 3.2.7 - is-core-module: 2.11.0 - resolve: 1.22.1 - transitivePeerDependencies: - - supports-color - dev: true - /eslint-import-resolver-typescript@3.5.4(eslint-plugin-import@2.27.5)(eslint@8.37.0): + eslint-import-resolver-typescript@3.5.4: resolution: {integrity: sha512-9xUpnedEmSfG57sN1UvWPiEhfJ8bPt0Wg2XysA7Mlc79iFGhmJtRUg9LxtkK81FhMUui0YuR2E8iUsVhePkh4A==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: eslint: '*' eslint-plugin-import: '*' - dependencies: - debug: 4.3.4 - enhanced-resolve: 5.12.0 - eslint: 8.37.0 - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.57.1)(eslint-import-resolver-typescript@3.5.4)(eslint@8.37.0) - get-tsconfig: 4.5.0 - globby: 13.1.3 - is-core-module: 2.11.0 - is-glob: 4.0.3 - synckit: 0.8.5 - transitivePeerDependencies: - - supports-color - dev: true - /eslint-module-utils@2.7.4(@typescript-eslint/parser@5.57.1)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.4)(eslint@8.37.0): + eslint-module-utils@2.7.4: resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} engines: {node: '>=4'} peerDependencies: @@ -1095,17 +790,8 @@ packages: optional: true eslint-import-resolver-webpack: optional: true - dependencies: - '@typescript-eslint/parser': 5.57.1(eslint@8.37.0)(typescript@5.0.3) - debug: 3.2.7 - eslint: 8.37.0 - eslint-import-resolver-node: 0.3.7 - eslint-import-resolver-typescript: 3.5.4(eslint-plugin-import@2.27.5)(eslint@8.37.0) - transitivePeerDependencies: - - supports-color - dev: true - /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.57.1)(eslint-import-resolver-typescript@3.5.4)(eslint@8.37.0): + eslint-plugin-import@2.27.5: resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} engines: {node: '>=4'} peerDependencies: @@ -1114,56 +800,14 @@ packages: peerDependenciesMeta: '@typescript-eslint/parser': optional: true - dependencies: - '@typescript-eslint/parser': 5.57.1(eslint@8.37.0)(typescript@5.0.3) - array-includes: 3.1.6 - array.prototype.flat: 1.3.1 - array.prototype.flatmap: 1.3.1 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 8.37.0 - eslint-import-resolver-node: 0.3.7 - eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.57.1)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.4)(eslint@8.37.0) - has: 1.0.3 - is-core-module: 2.11.0 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.values: 1.1.6 - resolve: 1.22.1 - semver: 6.3.0 - tsconfig-paths: 3.14.2 - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - dev: true - /eslint-plugin-jsx-a11y@6.7.1(eslint@8.37.0): + eslint-plugin-jsx-a11y@6.7.1: resolution: {integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==} engines: {node: '>=4.0'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - dependencies: - '@babel/runtime': 7.21.0 - aria-query: 5.1.3 - array-includes: 3.1.6 - array.prototype.flatmap: 1.3.1 - ast-types-flow: 0.0.7 - axe-core: 4.6.3 - axobject-query: 3.1.1 - damerau-levenshtein: 1.0.8 - emoji-regex: 9.2.2 - eslint: 8.37.0 - has: 1.0.3 - jsx-ast-utils: 3.3.3 - language-tags: 1.0.5 - minimatch: 3.1.2 - object.entries: 1.1.6 - object.fromentries: 2.0.6 - semver: 6.3.0 - dev: true - /eslint-plugin-prettier@4.2.1(eslint-config-prettier@8.8.0)(eslint@8.37.0)(prettier@2.8.7): + eslint-plugin-prettier@4.2.1: resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==} engines: {node: '>=12.0.0'} peerDependencies: @@ -1173,222 +817,99 @@ packages: peerDependenciesMeta: eslint-config-prettier: optional: true - dependencies: - eslint: 8.37.0 - eslint-config-prettier: 8.8.0(eslint@8.37.0) - prettier: 2.8.7 - prettier-linter-helpers: 1.0.0 - dev: true - /eslint-plugin-react-hooks@4.6.0(eslint@8.37.0): + eslint-plugin-react-hooks@4.6.0: resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} engines: {node: '>=10'} peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - dependencies: - eslint: 8.37.0 - dev: true - /eslint-plugin-react@7.32.2(eslint@8.37.0): + eslint-plugin-react@7.32.2: resolution: {integrity: sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==} engines: {node: '>=4'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - dependencies: - array-includes: 3.1.6 - array.prototype.flatmap: 1.3.1 - array.prototype.tosorted: 1.1.1 - doctrine: 2.1.0 - eslint: 8.37.0 - estraverse: 5.3.0 - jsx-ast-utils: 3.3.3 - minimatch: 3.1.2 - object.entries: 1.1.6 - object.fromentries: 2.0.6 - object.hasown: 1.1.2 - object.values: 1.1.6 - prop-types: 15.8.1 - resolve: 2.0.0-next.4 - semver: 6.3.0 - string.prototype.matchall: 4.0.8 - dev: true - /eslint-scope@5.1.1: + eslint-scope@5.1.1: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} - dependencies: - esrecurse: 4.3.0 - estraverse: 4.3.0 - dev: true - /eslint-scope@7.1.1: + eslint-scope@7.1.1: resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - dev: true - /eslint-visitor-keys@3.4.0: + eslint-visitor-keys@3.4.0: resolution: {integrity: sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - /eslint@8.37.0: + eslint@8.37.0: resolution: {integrity: sha512-NU3Ps9nI05GUoVMxcZx1J8CNR6xOvUT4jAUMH5+z8lpp3aEdPVCImKw6PWG4PY+Vfkpr+jvMpxs/qoE7wq0sPw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.37.0) - '@eslint-community/regexpp': 4.5.0 - '@eslint/eslintrc': 2.0.2 - '@eslint/js': 8.37.0 - '@humanwhocodes/config-array': 0.11.8 - '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.4 - doctrine: 3.0.0 - escape-string-regexp: 4.0.0 - eslint-scope: 7.1.1 - eslint-visitor-keys: 3.4.0 - espree: 9.5.1 - esquery: 1.5.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - find-up: 5.0.0 - glob-parent: 6.0.2 - globals: 13.20.0 - grapheme-splitter: 1.0.4 - ignore: 5.2.4 - import-fresh: 3.3.0 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-sdsl: 4.4.0 - js-yaml: 4.1.0 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.1 - strip-ansi: 6.0.1 - strip-json-comments: 3.1.1 - text-table: 0.2.0 - transitivePeerDependencies: - - supports-color - dev: true - /espree@9.5.1: + espree@9.5.1: resolution: {integrity: sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - acorn: 8.8.2 - acorn-jsx: 5.3.2(acorn@8.8.2) - eslint-visitor-keys: 3.4.0 - dev: true - /esquery@1.5.0: + esquery@1.5.0: resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} engines: {node: '>=0.10'} - dependencies: - estraverse: 5.3.0 - dev: true - /esrecurse@4.3.0: + esrecurse@4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} - dependencies: - estraverse: 5.3.0 - dev: true - /estraverse@4.3.0: + estraverse@4.3.0: resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} engines: {node: '>=4.0'} - dev: true - /estraverse@5.3.0: + estraverse@5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} - dev: true - /esutils@2.0.3: + esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} - dev: true - /fast-deep-equal@3.1.3: + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - dev: true - /fast-diff@1.2.0: + fast-diff@1.2.0: resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==} - dev: true - /fast-glob@3.2.12: + fast-glob@3.2.12: resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} engines: {node: '>=8.6.0'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.5 - dev: true - /fast-json-stable-stringify@2.1.0: + fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - dev: true - /fast-levenshtein@2.0.6: + fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - dev: true - /fastq@1.15.0: + fastq@1.15.0: resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} - dependencies: - reusify: 1.0.4 - dev: true - /file-entry-cache@6.0.1: + file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} - dependencies: - flat-cache: 3.0.4 - dev: true - /fill-range@7.0.1: + fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} - dependencies: - to-regex-range: 5.0.1 - dev: true - /find-up@5.0.0: + find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - dev: true - /flat-cache@3.0.4: + flat-cache@3.0.4: resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} engines: {node: ^10.12.0 || >=12.0.0} - dependencies: - flatted: 3.2.7 - rimraf: 3.0.2 - dev: true - /flatted@3.2.7: + flatted@3.2.7: resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} - dev: true - /follow-redirects@1.15.2: + follow-redirects@1.15.2: resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} engines: {node: '>=4.0'} peerDependencies: @@ -1396,592 +917,351 @@ packages: peerDependenciesMeta: debug: optional: true - dev: false - /for-each@0.3.3: + for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} - dependencies: - is-callable: 1.2.7 - dev: true - /form-data@4.0.0: + form-data@4.0.0: resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} engines: {node: '>= 6'} - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.35 - dev: false - /fraction.js@4.2.0: + fraction.js@4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} - dev: true - /fs.realpath@1.0.0: + fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: true - /fsevents@2.3.2: + fsevents@2.3.2: resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] - requiresBuild: true - dev: true - optional: true - /function-bind@1.1.1: + function-bind@1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - dev: true - /function.prototype.name@1.1.5: + function.prototype.name@1.1.5: resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.21.2 - functions-have-names: 1.2.3 - dev: true - /functions-have-names@1.2.3: + functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - dev: true - /get-intrinsic@1.2.0: + get-intrinsic@1.2.0: resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==} - dependencies: - function-bind: 1.1.1 - has: 1.0.3 - has-symbols: 1.0.3 - dev: true - /get-symbol-description@1.0.0: + get-symbol-description@1.0.0: resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.0 - dev: true - /get-tsconfig@4.5.0: + get-tsconfig@4.5.0: resolution: {integrity: sha512-MjhiaIWCJ1sAU4pIQ5i5OfOuHHxVo1oYeNsWTON7jxYkod8pHocXeh+SSbmu5OZZZK73B6cbJ2XADzXehLyovQ==} - dev: true - /glob-parent@5.1.2: + glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} - dependencies: - is-glob: 4.0.3 - dev: true - /glob-parent@6.0.2: + glob-parent@6.0.2: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} - dependencies: - is-glob: 4.0.3 - dev: true - /glob@7.1.6: + glob@7.1.6: resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - dev: true - /glob@7.1.7: + glob@7.1.7: resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - dev: true - /glob@7.2.3: + glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - dev: true - /globals@13.20.0: + globals@13.20.0: resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} engines: {node: '>=8'} - dependencies: - type-fest: 0.20.2 - dev: true - /globalthis@1.0.3: + globalthis@1.0.3: resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} engines: {node: '>= 0.4'} - dependencies: - define-properties: 1.2.0 - dev: true - /globalyzer@0.1.0: + globalyzer@0.1.0: resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} - dev: true - /globby@11.1.0: + globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} - dependencies: - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.2.12 - ignore: 5.2.4 - merge2: 1.4.1 - slash: 3.0.0 - dev: true - /globby@13.1.3: + globby@13.1.3: resolution: {integrity: sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - dir-glob: 3.0.1 - fast-glob: 3.2.12 - ignore: 5.2.4 - merge2: 1.4.1 - slash: 4.0.0 - dev: true - /globrex@0.1.2: + globrex@0.1.2: resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} - dev: true - /gopd@1.0.1: + gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} - dependencies: - get-intrinsic: 1.2.0 - dev: true - /graceful-fs@4.2.11: + graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - dev: true - /grapheme-splitter@1.0.4: + grapheme-splitter@1.0.4: resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} - dev: true - /has-bigints@1.0.2: + has-bigints@1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - dev: true - /has-flag@4.0.0: + has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - dev: true - /has-property-descriptors@1.0.0: + has-property-descriptors@1.0.0: resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} - dependencies: - get-intrinsic: 1.2.0 - dev: true - /has-proto@1.0.1: + has-proto@1.0.1: resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} engines: {node: '>= 0.4'} - dev: true - /has-symbols@1.0.3: + has-symbols@1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} - dev: true - /has-tostringtag@1.0.0: + has-tostringtag@1.0.0: resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} engines: {node: '>= 0.4'} - dependencies: - has-symbols: 1.0.3 - dev: true - /has@1.0.3: + has@1.0.3: resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} engines: {node: '>= 0.4.0'} - dependencies: - function-bind: 1.1.1 - dev: true - /ignore@5.2.4: + ignore@5.2.4: resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} engines: {node: '>= 4'} - dev: true - /import-fresh@3.3.0: + import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - dev: true - /imurmurhash@0.1.4: + imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} - dev: true - /inflight@1.0.6: + inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - dev: true - /inherits@2.0.4: + inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true - /internal-slot@1.0.5: + internal-slot@1.0.5: resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} engines: {node: '>= 0.4'} - dependencies: - get-intrinsic: 1.2.0 - has: 1.0.3 - side-channel: 1.0.4 - dev: true - /is-arguments@1.1.1: + is-arguments@1.1.1: resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - has-tostringtag: 1.0.0 - dev: true - /is-array-buffer@3.0.2: + is-array-buffer@3.0.2: resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.0 - is-typed-array: 1.1.10 - dev: true - /is-bigint@1.0.4: + is-bigint@1.0.4: resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} - dependencies: - has-bigints: 1.0.2 - dev: true - /is-binary-path@2.1.0: + is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} - dependencies: - binary-extensions: 2.2.0 - dev: true - /is-boolean-object@1.1.2: + is-boolean-object@1.1.2: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - has-tostringtag: 1.0.0 - dev: true - /is-callable@1.2.7: + is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} - dev: true - /is-core-module@2.11.0: + is-core-module@2.11.0: resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} - dependencies: - has: 1.0.3 - dev: true - /is-date-object@1.0.5: + is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - dev: true - /is-docker@2.2.1: + is-docker@2.2.1: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} hasBin: true - dev: true - /is-extglob@2.1.1: + is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - dev: true - /is-glob@4.0.3: + is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} - dependencies: - is-extglob: 2.1.1 - dev: true - /is-map@2.0.2: + is-map@2.0.2: resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} - dev: true - /is-negative-zero@2.0.2: + is-negative-zero@2.0.2: resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} engines: {node: '>= 0.4'} - dev: true - /is-number-object@1.0.7: + is-number-object@1.0.7: resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - dev: true - /is-number@7.0.0: + is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - dev: true - /is-path-inside@3.0.3: + is-path-inside@3.0.3: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} engines: {node: '>=8'} - dev: true - /is-regex@1.1.4: + is-regex@1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - has-tostringtag: 1.0.0 - dev: true - /is-set@2.0.2: + is-set@2.0.2: resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} - dev: true - /is-shared-array-buffer@1.0.2: + is-shared-array-buffer@1.0.2: resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} - dependencies: - call-bind: 1.0.2 - dev: true - /is-string@1.0.7: + is-string@1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - dev: true - /is-symbol@1.0.4: + is-symbol@1.0.4: resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} engines: {node: '>= 0.4'} - dependencies: - has-symbols: 1.0.3 - dev: true - /is-typed-array@1.1.10: + is-typed-array@1.1.10: resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==} engines: {node: '>= 0.4'} - dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.2 - for-each: 0.3.3 - gopd: 1.0.1 - has-tostringtag: 1.0.0 - dev: true - /is-weakmap@2.0.1: + is-weakmap@2.0.1: resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} - dev: true - /is-weakref@1.0.2: + is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} - dependencies: - call-bind: 1.0.2 - dev: true - /is-weakset@2.0.2: + is-weakset@2.0.2: resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.0 - dev: true - /is-wsl@2.2.0: + is-wsl@2.2.0: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} - dependencies: - is-docker: 2.2.1 - dev: true - /isarray@2.0.5: + isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - dev: true - /isexe@2.0.0: + isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: true - /jiti@1.18.2: + jiti@1.18.2: resolution: {integrity: sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==} hasBin: true - dev: true - /js-sdsl@4.4.0: + js-sdsl@4.4.0: resolution: {integrity: sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==} - dev: true - /js-tokens@4.0.0: + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - /js-yaml@4.1.0: + js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true - dependencies: - argparse: 2.0.1 - dev: true - /json-schema-traverse@0.4.1: + json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - dev: true - /json-stable-stringify-without-jsonify@1.0.1: + json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - dev: true - /json5@1.0.2: + json5@1.0.2: resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} hasBin: true - dependencies: - minimist: 1.2.8 - dev: true - /jsx-ast-utils@3.3.3: + jsx-ast-utils@3.3.3: resolution: {integrity: sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==} engines: {node: '>=4.0'} - dependencies: - array-includes: 3.1.6 - object.assign: 4.1.4 - dev: true - /language-subtag-registry@0.3.22: + language-subtag-registry@0.3.22: resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} - dev: true - /language-tags@1.0.5: + language-tags@1.0.5: resolution: {integrity: sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==} - dependencies: - language-subtag-registry: 0.3.22 - dev: true - /levn@0.4.1: + levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - dev: true - /lilconfig@2.1.0: + lilconfig@2.1.0: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} - dev: true - /lines-and-columns@1.2.4: + lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - dev: true - /locate-path@6.0.0: + locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} - dependencies: - p-locate: 5.0.0 - dev: true - /lodash.merge@4.6.2: + lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - dev: true - /loose-envify@1.4.0: + loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true - dependencies: - js-tokens: 4.0.0 - /lru-cache@6.0.0: + lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} - dependencies: - yallist: 4.0.0 - dev: true - /merge2@1.4.1: + lucide-react@0.377.0: + resolution: {integrity: sha512-o0weTZC4j8YiSi5VIE6RTwPt5uOA+YtuXejvkOxbLghLwIloNkI20INgWigrhBthvgdDcuULp0XRTr0wokqKMw==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 + + merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - dev: true - /micromatch@4.0.5: + micromatch@4.0.5: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} - dependencies: - braces: 3.0.2 - picomatch: 2.3.1 - dev: true - /mime-db@1.52.0: + mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} - dev: false - /mime-types@2.1.35: + mime-types@2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} - dependencies: - mime-db: 1.52.0 - dev: false - /minimatch@3.1.2: + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - dependencies: - brace-expansion: 1.1.11 - dev: true - /minimist@1.2.8: + minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - dev: true - /ms@2.1.2: + ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: true - /ms@2.1.3: + ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - dev: true - /mz@2.7.0: + mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - dependencies: - any-promise: 1.3.0 - object-assign: 4.1.1 - thenify-all: 1.6.0 - dev: true - /nanoid@3.3.6: + nanoid@3.3.6: resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - /natural-compare-lite@1.4.0: + natural-compare-lite@1.4.0: resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} - dev: true - /natural-compare@1.4.0: + natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - dev: true - /next@13.2.4(react-dom@18.2.0)(react@18.2.0): + next@13.2.4: resolution: {integrity: sha512-g1I30317cThkEpvzfXujf0O4wtaQHtDCLhlivwlTJ885Ld+eOgcz7r3TGQzeU+cSRoNHtD8tsJgzxVdYojFssw==} engines: {node: '>=14.6.0'} hasBin: true @@ -2001,231 +1281,126 @@ packages: optional: true sass: optional: true - dependencies: - '@next/env': 13.2.4 - '@swc/helpers': 0.4.14 - caniuse-lite: 1.0.30001474 - postcss: 8.4.14 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - styled-jsx: 5.1.1(react@18.2.0) - optionalDependencies: - '@next/swc-android-arm-eabi': 13.2.4 - '@next/swc-android-arm64': 13.2.4 - '@next/swc-darwin-arm64': 13.2.4 - '@next/swc-darwin-x64': 13.2.4 - '@next/swc-freebsd-x64': 13.2.4 - '@next/swc-linux-arm-gnueabihf': 13.2.4 - '@next/swc-linux-arm64-gnu': 13.2.4 - '@next/swc-linux-arm64-musl': 13.2.4 - '@next/swc-linux-x64-gnu': 13.2.4 - '@next/swc-linux-x64-musl': 13.2.4 - '@next/swc-win32-arm64-msvc': 13.2.4 - '@next/swc-win32-ia32-msvc': 13.2.4 - '@next/swc-win32-x64-msvc': 13.2.4 - transitivePeerDependencies: - - '@babel/core' - - babel-plugin-macros - dev: false - /node-releases@2.0.10: + node-releases@2.0.10: resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} - dev: true - /normalize-path@3.0.0: + normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - dev: true - /normalize-range@0.1.2: + normalize-range@0.1.2: resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} engines: {node: '>=0.10.0'} - dev: true - /object-assign@4.1.1: + object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - dev: true - /object-hash@3.0.0: + object-hash@3.0.0: resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} engines: {node: '>= 6'} - dev: true - /object-inspect@1.12.3: + object-inspect@1.12.3: resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} - dev: true - /object-is@1.1.5: + object-is@1.1.5: resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - dev: true - /object-keys@1.1.1: + object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} - dev: true - /object.assign@4.1.4: + object.assign@4.1.4: resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - has-symbols: 1.0.3 - object-keys: 1.1.1 - dev: true - /object.entries@1.1.6: + object.entries@1.1.6: resolution: {integrity: sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==} engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.21.2 - dev: true - /object.fromentries@2.0.6: + object.fromentries@2.0.6: resolution: {integrity: sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==} engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.21.2 - dev: true - /object.hasown@1.1.2: + object.hasown@1.1.2: resolution: {integrity: sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==} - dependencies: - define-properties: 1.2.0 - es-abstract: 1.21.2 - dev: true - /object.values@1.1.6: + object.values@1.1.6: resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==} engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.21.2 - dev: true - /once@1.4.0: + once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - dependencies: - wrappy: 1.0.2 - dev: true - /open@8.4.2: + open@8.4.2: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} - dependencies: - define-lazy-prop: 2.0.0 - is-docker: 2.2.1 - is-wsl: 2.2.0 - dev: true - /optionator@0.9.1: + optionator@0.9.1: resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} engines: {node: '>= 0.8.0'} - dependencies: - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - word-wrap: 1.2.3 - dev: true - /p-limit@3.1.0: + p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} - dependencies: - yocto-queue: 0.1.0 - dev: true - /p-locate@5.0.0: + p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} - dependencies: - p-limit: 3.1.0 - dev: true - /parent-module@1.0.1: + parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} - dependencies: - callsites: 3.1.0 - dev: true - /path-exists@4.0.0: + path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} - dev: true - /path-is-absolute@1.0.1: + path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} - dev: true - /path-key@3.1.1: + path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} - dev: true - /path-parse@1.0.7: + path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true - /path-type@4.0.0: + path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} - dev: true - /picocolors@1.0.0: + picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - /picomatch@2.3.1: + picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - dev: true - /pify@2.3.0: + pify@2.3.0: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} - dev: true - /pirates@4.0.5: + pirates@4.0.5: resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} engines: {node: '>= 6'} - dev: true - /postcss-import@14.1.0(postcss@8.4.21): + postcss-import@14.1.0: resolution: {integrity: sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==} engines: {node: '>=10.0.0'} peerDependencies: postcss: ^8.0.0 - dependencies: - postcss: 8.4.21 - postcss-value-parser: 4.2.0 - read-cache: 1.0.0 - resolve: 1.22.1 - dev: true - /postcss-js@4.0.1(postcss@8.4.21): + postcss-js@4.0.1: resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} engines: {node: ^12 || ^14 || >= 16} peerDependencies: postcss: ^8.4.21 - dependencies: - camelcase-css: 2.0.1 - postcss: 8.4.21 - dev: true - /postcss-load-config@3.1.4(postcss@8.4.21): + postcss-load-config@3.1.4: resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} engines: {node: '>= 10'} peerDependencies: @@ -2236,65 +1411,37 @@ packages: optional: true ts-node: optional: true - dependencies: - lilconfig: 2.1.0 - postcss: 8.4.21 - yaml: 1.10.2 - dev: true - /postcss-nested@6.0.0(postcss@8.4.21): + postcss-nested@6.0.0: resolution: {integrity: sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==} engines: {node: '>=12.0'} peerDependencies: postcss: ^8.2.14 - dependencies: - postcss: 8.4.21 - postcss-selector-parser: 6.0.11 - dev: true - /postcss-selector-parser@6.0.11: + postcss-selector-parser@6.0.11: resolution: {integrity: sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==} engines: {node: '>=4'} - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - dev: true - /postcss-value-parser@4.2.0: + postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - dev: true - /postcss@8.4.14: + postcss@8.4.14: resolution: {integrity: sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==} engines: {node: ^10 || ^12 || >=14} - dependencies: - nanoid: 3.3.6 - picocolors: 1.0.0 - source-map-js: 1.0.2 - dev: false - /postcss@8.4.21: + postcss@8.4.21: resolution: {integrity: sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==} engines: {node: ^10 || ^12 || >=14} - dependencies: - nanoid: 3.3.6 - picocolors: 1.0.0 - source-map-js: 1.0.2 - dev: true - /prelude-ls@1.2.1: + prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - dev: true - /prettier-linter-helpers@1.0.0: + prettier-linter-helpers@1.0.0: resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} engines: {node: '>=6.0.0'} - dependencies: - fast-diff: 1.2.0 - dev: true - /prettier-plugin-tailwindcss@0.2.6(prettier@2.8.7): + prettier-plugin-tailwindcss@0.2.6: resolution: {integrity: sha512-F+7XCl9RLF/LPrGdUMHWpsT6TM31JraonAUyE6eBmpqymFvDwyl0ETHsKFHP1NG+sEfv8bmKqnTxEbWQbHPlBA==} engines: {node: '>=12.17.0'} peerDependencies: @@ -2345,254 +1492,149 @@ packages: optional: true prettier-plugin-twig-melody: optional: true - dependencies: - prettier: 2.8.7 - dev: true - /prettier@2.8.7: + prettier@2.8.7: resolution: {integrity: sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==} engines: {node: '>=10.13.0'} hasBin: true - dev: true - /prop-types@15.8.1: + prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - react-is: 16.13.1 - dev: true - /proxy-from-env@1.1.0: + proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - dev: false - /punycode@2.3.0: + punycode@2.3.0: resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} engines: {node: '>=6'} - dev: true - /queue-microtask@1.2.3: + queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: true - /quick-lru@5.1.1: + quick-lru@5.1.1: resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} engines: {node: '>=10'} - dev: true - /react-dom@18.2.0(react@18.2.0): + react-dom@18.2.0: resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} peerDependencies: react: ^18.2.0 - dependencies: - loose-envify: 1.4.0 - react: 18.2.0 - scheduler: 0.23.0 - dev: false - /react-is@16.13.1: + react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - dev: true - /react@18.2.0: + react@18.2.0: resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} engines: {node: '>=0.10.0'} - dependencies: - loose-envify: 1.4.0 - dev: false - /read-cache@1.0.0: + read-cache@1.0.0: resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} - dependencies: - pify: 2.3.0 - dev: true - /readdirp@3.6.0: + readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} - dependencies: - picomatch: 2.3.1 - dev: true - /regenerator-runtime@0.13.11: + regenerator-runtime@0.13.11: resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} - dev: true - /regexp.prototype.flags@1.4.3: + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + regexp.prototype.flags@1.4.3: resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==} engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - functions-have-names: 1.2.3 - dev: true - /resolve-from@4.0.0: + resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} - dev: true - /resolve@1.22.1: + resolve@1.22.1: resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} hasBin: true - dependencies: - is-core-module: 2.11.0 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - dev: true - /resolve@2.0.0-next.4: + resolve@2.0.0-next.4: resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==} hasBin: true - dependencies: - is-core-module: 2.11.0 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - dev: true - /reusify@1.0.4: + reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - dev: true - /rimraf@3.0.2: + rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} hasBin: true - dependencies: - glob: 7.2.3 - dev: true - /run-parallel@1.2.0: + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - dependencies: - queue-microtask: 1.2.3 - dev: true - /safe-regex-test@1.0.0: + safe-regex-test@1.0.0: resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.0 - is-regex: 1.1.4 - dev: true - /scheduler@0.23.0: + scheduler@0.23.0: resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} - dependencies: - loose-envify: 1.4.0 - dev: false - /semver@6.3.0: + semver@6.3.0: resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} hasBin: true - dev: true - /semver@7.3.8: + semver@7.3.8: resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} engines: {node: '>=10'} hasBin: true - dependencies: - lru-cache: 6.0.0 - dev: true - /shebang-command@2.0.0: + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} - dependencies: - shebang-regex: 3.0.0 - dev: true - /shebang-regex@3.0.0: + shebang-regex@3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - dev: true - /side-channel@1.0.4: + side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.0 - object-inspect: 1.12.3 - dev: true - /slash@3.0.0: + slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} - dev: true - /slash@4.0.0: + slash@4.0.0: resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} engines: {node: '>=12'} - dev: true - /source-map-js@1.0.2: + source-map-js@1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} - /stop-iteration-iterator@1.0.0: + stop-iteration-iterator@1.0.0: resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} engines: {node: '>= 0.4'} - dependencies: - internal-slot: 1.0.5 - dev: true - /string.prototype.matchall@4.0.8: + string.prototype.matchall@4.0.8: resolution: {integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.21.2 - get-intrinsic: 1.2.0 - has-symbols: 1.0.3 - internal-slot: 1.0.5 - regexp.prototype.flags: 1.4.3 - side-channel: 1.0.4 - dev: true - /string.prototype.trim@1.2.7: + string.prototype.trim@1.2.7: resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==} engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.21.2 - dev: true - /string.prototype.trimend@1.0.6: + string.prototype.trimend@1.0.6: resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.21.2 - dev: true - /string.prototype.trimstart@1.0.6: + string.prototype.trimstart@1.0.6: resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.21.2 - dev: true - /strip-ansi@6.0.1: + strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} - dependencies: - ansi-regex: 5.0.1 - dev: true - /strip-bom@3.0.0: + strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} - dev: true - /strip-json-comments@3.1.1: + strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - dev: true - /styled-jsx@5.1.1(react@18.2.0): + styled-jsx@5.1.1: resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} engines: {node: '>= 12.0.0'} peerDependencies: @@ -2604,15 +1646,1776 @@ packages: optional: true babel-plugin-macros: optional: true - dependencies: - client-only: 0.0.1 - react: 18.2.0 - dev: false - /sucrase@3.31.0: + sucrase@3.31.0: resolution: {integrity: sha512-6QsHnkqyVEzYcaiHsOKkzOtOgdJcb8i54x6AV2hDwyZcY9ZyykGZVw6L/YN98xC0evwTP6utsWWrKRaa8QlfEQ==} engines: {node: '>=8'} hasBin: true + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + synckit@0.8.5: + resolution: {integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==} + engines: {node: ^14.18.0 || >=16.0.0} + + tailwind-merge@2.3.0: + resolution: {integrity: sha512-vkYrLpIP+lgR0tQCG6AP7zZXCTLc1Lnv/CCRT3BqJ9CZ3ui2++GPaGb1x/ILsINIMSYqqvrpqjUFsMNLlW99EA==} + + tailwindcss@3.3.1: + resolution: {integrity: sha512-Vkiouc41d4CEq0ujXl6oiGFQ7bA3WEhUZdTgXAhtKxSy49OmKs8rEfQmupsfF0IGW8fv2iQkp1EVUuapCFrZ9g==} + engines: {node: '>=12.13.0'} + hasBin: true + peerDependencies: + postcss: ^8.0.9 + + tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + + tiny-glob@0.2.9: + resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + + tsconfig-paths@3.14.2: + resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} + + tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + + tslib@2.5.0: + resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} + + tsutils@3.21.0: + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + typed-array-length@1.0.4: + resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + + typescript@5.0.3: + resolution: {integrity: sha512-xv8mOEDnigb/tN9PSMTwSEqAnUvkoXMQlicOb0IUVDBSQCgBSaAAROUZYy2IcUy5qU6XajK5jjjO7TMWqBTKZA==} + engines: {node: '>=12.20'} + hasBin: true + + unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + + update-browserslist-db@1.0.10: + resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + use-sync-external-store@1.2.0: + resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + + which-collection@1.0.1: + resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} + + which-typed-array@1.1.9: + resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==} + engines: {node: '>= 0.4'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + word-wrap@1.2.3: + resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} + engines: {node: '>=0.10.0'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + zod@3.21.4: + resolution: {integrity: sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==} + +snapshots: + + '@babel/runtime@7.21.0': + dependencies: + regenerator-runtime: 0.13.11 + + '@babel/runtime@7.24.5': + dependencies: + regenerator-runtime: 0.14.1 + + '@eslint-community/eslint-utils@4.4.0(eslint@8.37.0)': + dependencies: + eslint: 8.37.0 + eslint-visitor-keys: 3.4.0 + + '@eslint-community/regexpp@4.5.0': {} + + '@eslint/eslintrc@2.0.2': + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.5.1 + globals: 13.20.0 + ignore: 5.2.4 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@8.37.0': {} + + '@humanwhocodes/config-array@0.11.8': + dependencies: + '@humanwhocodes/object-schema': 1.2.1 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/object-schema@1.2.1': {} + + '@it-incubator/eslint-config@0.1.0(prettier@2.8.7)(typescript@5.0.3)': + dependencies: + '@typescript-eslint/eslint-plugin': 5.57.1(@typescript-eslint/parser@5.57.1(eslint@8.37.0)(typescript@5.0.3))(eslint@8.37.0)(typescript@5.0.3) + '@typescript-eslint/parser': 5.57.1(eslint@8.37.0)(typescript@5.0.3) + eslint: 8.37.0 + eslint-config-prettier: 8.8.0(eslint@8.37.0) + eslint-import-resolver-node: 0.3.7 + eslint-import-resolver-typescript: 3.5.4(eslint-plugin-import@2.27.5)(eslint@8.37.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.57.1(eslint@8.37.0)(typescript@5.0.3))(eslint-import-resolver-typescript@3.5.4)(eslint@8.37.0) + eslint-plugin-prettier: 4.2.1(eslint-config-prettier@8.8.0(eslint@8.37.0))(eslint@8.37.0)(prettier@2.8.7) + eslint-plugin-react: 7.32.2(eslint@8.37.0) + transitivePeerDependencies: + - eslint-import-resolver-webpack + - prettier + - supports-color + - typescript + + '@it-incubator/prettier-config@0.1.0': {} + + '@next/env@13.2.4': {} + + '@next/eslint-plugin-next@13.2.4': + dependencies: + glob: 7.1.7 + + '@next/swc-android-arm-eabi@13.2.4': + optional: true + + '@next/swc-android-arm64@13.2.4': + optional: true + + '@next/swc-darwin-arm64@13.2.4': + optional: true + + '@next/swc-darwin-x64@13.2.4': + optional: true + + '@next/swc-freebsd-x64@13.2.4': + optional: true + + '@next/swc-linux-arm-gnueabihf@13.2.4': + optional: true + + '@next/swc-linux-arm64-gnu@13.2.4': + optional: true + + '@next/swc-linux-arm64-musl@13.2.4': + optional: true + + '@next/swc-linux-x64-gnu@13.2.4': + optional: true + + '@next/swc-linux-x64-musl@13.2.4': + optional: true + + '@next/swc-win32-arm64-msvc@13.2.4': + optional: true + + '@next/swc-win32-ia32-msvc@13.2.4': + optional: true + + '@next/swc-win32-x64-msvc@13.2.4': + optional: true + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.15.0 + + '@pkgr/utils@2.3.1': + dependencies: + cross-spawn: 7.0.3 + is-glob: 4.0.3 + open: 8.4.2 + picocolors: 1.0.0 + tiny-glob: 0.2.9 + tslib: 2.5.0 + + '@radix-ui/primitive@1.0.1': + dependencies: + '@babel/runtime': 7.24.5 + + '@radix-ui/react-collection@1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.33)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.24.5 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.33)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.0.33)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.33)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.0.33)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.0.33 + '@types/react-dom': 18.0.11 + + '@radix-ui/react-compose-refs@1.0.1(@types/react@18.0.33)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.24.5 + react: 18.2.0 + optionalDependencies: + '@types/react': 18.0.33 + + '@radix-ui/react-context@1.0.1(@types/react@18.0.33)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.24.5 + react: 18.2.0 + optionalDependencies: + '@types/react': 18.0.33 + + '@radix-ui/react-direction@1.0.1(@types/react@18.0.33)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.24.5 + react: 18.2.0 + optionalDependencies: + '@types/react': 18.0.33 + + '@radix-ui/react-id@1.0.1(@types/react@18.0.33)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.24.5 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.33)(react@18.2.0) + react: 18.2.0 + optionalDependencies: + '@types/react': 18.0.33 + + '@radix-ui/react-primitive@1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.33)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.24.5 + '@radix-ui/react-slot': 1.0.2(@types/react@18.0.33)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.0.33 + '@types/react-dom': 18.0.11 + + '@radix-ui/react-roving-focus@1.0.4(@types/react-dom@18.0.11)(@types/react@18.0.33)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.24.5 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.33)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.33)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.0.33)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.0.33)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.0.33)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.33)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.33)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.0.33)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.0.33 + '@types/react-dom': 18.0.11 + + '@radix-ui/react-slot@1.0.2(@types/react@18.0.33)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.24.5 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.33)(react@18.2.0) + react: 18.2.0 + optionalDependencies: + '@types/react': 18.0.33 + + '@radix-ui/react-toggle-group@1.0.4(@types/react-dom@18.0.11)(@types/react@18.0.33)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.24.5 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-context': 1.0.1(@types/react@18.0.33)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.0.33)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.33)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.0.11)(@types/react@18.0.33)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-toggle': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.33)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.0.33)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.0.33 + '@types/react-dom': 18.0.11 + + '@radix-ui/react-toggle@1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.33)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.24.5 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.33)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.0.33)(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.0.33 + '@types/react-dom': 18.0.11 + + '@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.0.33)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.24.5 + react: 18.2.0 + optionalDependencies: + '@types/react': 18.0.33 + + '@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.0.33)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.24.5 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.33)(react@18.2.0) + react: 18.2.0 + optionalDependencies: + '@types/react': 18.0.33 + + '@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.0.33)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.24.5 + react: 18.2.0 + optionalDependencies: + '@types/react': 18.0.33 + + '@rushstack/eslint-patch@1.2.0': {} + + '@swc/helpers@0.4.14': + dependencies: + tslib: 2.5.0 + + '@tanstack/query-core@4.27.0': {} + + '@tanstack/react-query@4.28.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@tanstack/query-core': 4.27.0 + react: 18.2.0 + use-sync-external-store: 1.2.0(react@18.2.0) + optionalDependencies: + react-dom: 18.2.0(react@18.2.0) + + '@types/json-schema@7.0.11': {} + + '@types/json5@0.0.29': {} + + '@types/node@18.15.11': {} + + '@types/prop-types@15.7.5': {} + + '@types/react-dom@18.0.11': + dependencies: + '@types/react': 18.0.33 + + '@types/react@18.0.33': + dependencies: + '@types/prop-types': 15.7.5 + '@types/scheduler': 0.16.3 + csstype: 3.1.2 + + '@types/scheduler@0.16.3': {} + + '@types/semver@7.3.13': {} + + '@typescript-eslint/eslint-plugin@5.57.1(@typescript-eslint/parser@5.57.1(eslint@8.37.0)(typescript@5.0.3))(eslint@8.37.0)(typescript@5.0.3)': + dependencies: + '@eslint-community/regexpp': 4.5.0 + '@typescript-eslint/parser': 5.57.1(eslint@8.37.0)(typescript@5.0.3) + '@typescript-eslint/scope-manager': 5.57.1 + '@typescript-eslint/type-utils': 5.57.1(eslint@8.37.0)(typescript@5.0.3) + '@typescript-eslint/utils': 5.57.1(eslint@8.37.0)(typescript@5.0.3) + debug: 4.3.4 + eslint: 8.37.0 + grapheme-splitter: 1.0.4 + ignore: 5.2.4 + natural-compare-lite: 1.4.0 + semver: 7.3.8 + tsutils: 3.21.0(typescript@5.0.3) + optionalDependencies: + typescript: 5.0.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@5.57.1(eslint@8.37.0)(typescript@5.0.3)': + dependencies: + '@typescript-eslint/scope-manager': 5.57.1 + '@typescript-eslint/types': 5.57.1 + '@typescript-eslint/typescript-estree': 5.57.1(typescript@5.0.3) + debug: 4.3.4 + eslint: 8.37.0 + optionalDependencies: + typescript: 5.0.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@5.57.1': + dependencies: + '@typescript-eslint/types': 5.57.1 + '@typescript-eslint/visitor-keys': 5.57.1 + + '@typescript-eslint/type-utils@5.57.1(eslint@8.37.0)(typescript@5.0.3)': + dependencies: + '@typescript-eslint/typescript-estree': 5.57.1(typescript@5.0.3) + '@typescript-eslint/utils': 5.57.1(eslint@8.37.0)(typescript@5.0.3) + debug: 4.3.4 + eslint: 8.37.0 + tsutils: 3.21.0(typescript@5.0.3) + optionalDependencies: + typescript: 5.0.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@5.57.1': {} + + '@typescript-eslint/typescript-estree@5.57.1(typescript@5.0.3)': + dependencies: + '@typescript-eslint/types': 5.57.1 + '@typescript-eslint/visitor-keys': 5.57.1 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.3.8 + tsutils: 3.21.0(typescript@5.0.3) + optionalDependencies: + typescript: 5.0.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@5.57.1(eslint@8.37.0)(typescript@5.0.3)': + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.37.0) + '@types/json-schema': 7.0.11 + '@types/semver': 7.3.13 + '@typescript-eslint/scope-manager': 5.57.1 + '@typescript-eslint/types': 5.57.1 + '@typescript-eslint/typescript-estree': 5.57.1(typescript@5.0.3) + eslint: 8.37.0 + eslint-scope: 5.1.1 + semver: 7.3.8 + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/visitor-keys@5.57.1': + dependencies: + '@typescript-eslint/types': 5.57.1 + eslint-visitor-keys: 3.4.0 + + acorn-jsx@5.3.2(acorn@8.8.2): + dependencies: + acorn: 8.8.2 + + acorn@8.8.2: {} + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ansi-regex@5.0.1: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + any-promise@1.3.0: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + arg@5.0.2: {} + + argparse@2.0.1: {} + + aria-query@5.1.3: + dependencies: + deep-equal: 2.2.0 + + array-buffer-byte-length@1.0.0: + dependencies: + call-bind: 1.0.2 + is-array-buffer: 3.0.2 + + array-includes@3.1.6: + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.2 + get-intrinsic: 1.2.0 + is-string: 1.0.7 + + array-union@2.1.0: {} + + array.prototype.flat@1.3.1: + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.2 + es-shim-unscopables: 1.0.0 + + array.prototype.flatmap@1.3.1: + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.2 + es-shim-unscopables: 1.0.0 + + array.prototype.tosorted@1.1.1: + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.2 + es-shim-unscopables: 1.0.0 + get-intrinsic: 1.2.0 + + ast-types-flow@0.0.7: {} + + async-mutex@0.5.0: + dependencies: + tslib: 2.5.0 + + asynckit@0.4.0: {} + + autoprefixer@10.4.14(postcss@8.4.21): + dependencies: + browserslist: 4.21.5 + caniuse-lite: 1.0.30001474 + fraction.js: 4.2.0 + normalize-range: 0.1.2 + picocolors: 1.0.0 + postcss: 8.4.21 + postcss-value-parser: 4.2.0 + + available-typed-arrays@1.0.5: {} + + axe-core@4.6.3: {} + + axios@1.3.4: + dependencies: + follow-redirects: 1.15.2 + form-data: 4.0.0 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + axobject-query@3.1.1: + dependencies: + deep-equal: 2.2.0 + + balanced-match@1.0.2: {} + + binary-extensions@2.2.0: {} + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + braces@3.0.2: + dependencies: + fill-range: 7.0.1 + + browserslist@4.21.5: + dependencies: + caniuse-lite: 1.0.30001474 + electron-to-chromium: 1.4.350 + node-releases: 2.0.10 + update-browserslist-db: 1.0.10(browserslist@4.21.5) + + call-bind@1.0.2: + dependencies: + function-bind: 1.1.1 + get-intrinsic: 1.2.0 + + callsites@3.1.0: {} + + camelcase-css@2.0.1: {} + + caniuse-lite@1.0.30001474: {} + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chokidar@3.5.3: + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.2 + + class-variance-authority@0.7.0: + dependencies: + clsx: 2.0.0 + + client-only@0.0.1: {} + + clsx@2.0.0: {} + + clsx@2.1.1: {} + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + commander@4.1.1: {} + + concat-map@0.0.1: {} + + cross-spawn@7.0.3: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + cssesc@3.0.0: {} + + csstype@3.1.2: {} + + damerau-levenshtein@1.0.8: {} + + debug@3.2.7: + dependencies: + ms: 2.1.3 + + debug@4.3.4: + dependencies: + ms: 2.1.2 + + deep-equal@2.2.0: + dependencies: + call-bind: 1.0.2 + es-get-iterator: 1.1.3 + get-intrinsic: 1.2.0 + is-arguments: 1.1.1 + is-array-buffer: 3.0.2 + is-date-object: 1.0.5 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.2 + isarray: 2.0.5 + object-is: 1.1.5 + object-keys: 1.1.1 + object.assign: 4.1.4 + regexp.prototype.flags: 1.4.3 + side-channel: 1.0.4 + which-boxed-primitive: 1.0.2 + which-collection: 1.0.1 + which-typed-array: 1.1.9 + + deep-is@0.1.4: {} + + define-lazy-prop@2.0.0: {} + + define-properties@1.2.0: + dependencies: + has-property-descriptors: 1.0.0 + object-keys: 1.1.1 + + delayed-stream@1.0.0: {} + + didyoumean@1.2.2: {} + + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 + + dlv@1.1.3: {} + + doctrine@2.1.0: + dependencies: + esutils: 2.0.3 + + doctrine@3.0.0: + dependencies: + esutils: 2.0.3 + + electron-to-chromium@1.4.350: {} + + emoji-regex@9.2.2: {} + + enhanced-resolve@5.12.0: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + + es-abstract@1.21.2: + dependencies: + array-buffer-byte-length: 1.0.0 + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + es-set-tostringtag: 2.0.1 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.5 + get-intrinsic: 1.2.0 + get-symbol-description: 1.0.0 + globalthis: 1.0.3 + gopd: 1.0.1 + has: 1.0.3 + has-property-descriptors: 1.0.0 + has-proto: 1.0.1 + has-symbols: 1.0.3 + internal-slot: 1.0.5 + is-array-buffer: 3.0.2 + is-callable: 1.2.7 + is-negative-zero: 2.0.2 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.2 + is-string: 1.0.7 + is-typed-array: 1.1.10 + is-weakref: 1.0.2 + object-inspect: 1.12.3 + object-keys: 1.1.1 + object.assign: 4.1.4 + regexp.prototype.flags: 1.4.3 + safe-regex-test: 1.0.0 + string.prototype.trim: 1.2.7 + string.prototype.trimend: 1.0.6 + string.prototype.trimstart: 1.0.6 + typed-array-length: 1.0.4 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.9 + + es-get-iterator@1.1.3: + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.0 + has-symbols: 1.0.3 + is-arguments: 1.1.1 + is-map: 2.0.2 + is-set: 2.0.2 + is-string: 1.0.7 + isarray: 2.0.5 + stop-iteration-iterator: 1.0.0 + + es-set-tostringtag@2.0.1: + dependencies: + get-intrinsic: 1.2.0 + has: 1.0.3 + has-tostringtag: 1.0.0 + + es-shim-unscopables@1.0.0: + dependencies: + has: 1.0.3 + + es-to-primitive@1.2.1: + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + + escalade@3.1.1: {} + + escape-string-regexp@4.0.0: {} + + eslint-config-next@13.2.4(eslint@8.37.0)(typescript@5.0.3): + dependencies: + '@next/eslint-plugin-next': 13.2.4 + '@rushstack/eslint-patch': 1.2.0 + '@typescript-eslint/parser': 5.57.1(eslint@8.37.0)(typescript@5.0.3) + eslint: 8.37.0 + eslint-import-resolver-node: 0.3.7 + eslint-import-resolver-typescript: 3.5.4(eslint-plugin-import@2.27.5)(eslint@8.37.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.57.1(eslint@8.37.0)(typescript@5.0.3))(eslint-import-resolver-typescript@3.5.4)(eslint@8.37.0) + eslint-plugin-jsx-a11y: 6.7.1(eslint@8.37.0) + eslint-plugin-react: 7.32.2(eslint@8.37.0) + eslint-plugin-react-hooks: 4.6.0(eslint@8.37.0) + optionalDependencies: + typescript: 5.0.3 + transitivePeerDependencies: + - eslint-import-resolver-webpack + - supports-color + + eslint-config-prettier@8.8.0(eslint@8.37.0): + dependencies: + eslint: 8.37.0 + + eslint-import-resolver-node@0.3.7: + dependencies: + debug: 3.2.7 + is-core-module: 2.11.0 + resolve: 1.22.1 + transitivePeerDependencies: + - supports-color + + eslint-import-resolver-typescript@3.5.4(eslint-plugin-import@2.27.5)(eslint@8.37.0): + dependencies: + debug: 4.3.4 + enhanced-resolve: 5.12.0 + eslint: 8.37.0 + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.57.1(eslint@8.37.0)(typescript@5.0.3))(eslint-import-resolver-typescript@3.5.4)(eslint@8.37.0) + get-tsconfig: 4.5.0 + globby: 13.1.3 + is-core-module: 2.11.0 + is-glob: 4.0.3 + synckit: 0.8.5 + transitivePeerDependencies: + - supports-color + + eslint-module-utils@2.7.4(@typescript-eslint/parser@5.57.1(eslint@8.37.0)(typescript@5.0.3))(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.4(eslint-plugin-import@2.27.5)(eslint@8.37.0))(eslint@8.37.0): + dependencies: + debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 5.57.1(eslint@8.37.0)(typescript@5.0.3) + eslint: 8.37.0 + eslint-import-resolver-node: 0.3.7 + eslint-import-resolver-typescript: 3.5.4(eslint-plugin-import@2.27.5)(eslint@8.37.0) + transitivePeerDependencies: + - supports-color + + eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.57.1(eslint@8.37.0)(typescript@5.0.3))(eslint-import-resolver-typescript@3.5.4)(eslint@8.37.0): + dependencies: + array-includes: 3.1.6 + array.prototype.flat: 1.3.1 + array.prototype.flatmap: 1.3.1 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.37.0 + eslint-import-resolver-node: 0.3.7 + eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.57.1(eslint@8.37.0)(typescript@5.0.3))(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.4(eslint-plugin-import@2.27.5)(eslint@8.37.0))(eslint@8.37.0) + has: 1.0.3 + is-core-module: 2.11.0 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.values: 1.1.6 + resolve: 1.22.1 + semver: 6.3.0 + tsconfig-paths: 3.14.2 + optionalDependencies: + '@typescript-eslint/parser': 5.57.1(eslint@8.37.0)(typescript@5.0.3) + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + + eslint-plugin-jsx-a11y@6.7.1(eslint@8.37.0): + dependencies: + '@babel/runtime': 7.21.0 + aria-query: 5.1.3 + array-includes: 3.1.6 + array.prototype.flatmap: 1.3.1 + ast-types-flow: 0.0.7 + axe-core: 4.6.3 + axobject-query: 3.1.1 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + eslint: 8.37.0 + has: 1.0.3 + jsx-ast-utils: 3.3.3 + language-tags: 1.0.5 + minimatch: 3.1.2 + object.entries: 1.1.6 + object.fromentries: 2.0.6 + semver: 6.3.0 + + eslint-plugin-prettier@4.2.1(eslint-config-prettier@8.8.0(eslint@8.37.0))(eslint@8.37.0)(prettier@2.8.7): + dependencies: + eslint: 8.37.0 + prettier: 2.8.7 + prettier-linter-helpers: 1.0.0 + optionalDependencies: + eslint-config-prettier: 8.8.0(eslint@8.37.0) + + eslint-plugin-react-hooks@4.6.0(eslint@8.37.0): + dependencies: + eslint: 8.37.0 + + eslint-plugin-react@7.32.2(eslint@8.37.0): + dependencies: + array-includes: 3.1.6 + array.prototype.flatmap: 1.3.1 + array.prototype.tosorted: 1.1.1 + doctrine: 2.1.0 + eslint: 8.37.0 + estraverse: 5.3.0 + jsx-ast-utils: 3.3.3 + minimatch: 3.1.2 + object.entries: 1.1.6 + object.fromentries: 2.0.6 + object.hasown: 1.1.2 + object.values: 1.1.6 + prop-types: 15.8.1 + resolve: 2.0.0-next.4 + semver: 6.3.0 + string.prototype.matchall: 4.0.8 + + eslint-scope@5.1.1: + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + + eslint-scope@7.1.1: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.0: {} + + eslint@8.37.0: + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.37.0) + '@eslint-community/regexpp': 4.5.0 + '@eslint/eslintrc': 2.0.2 + '@eslint/js': 8.37.0 + '@humanwhocodes/config-array': 0.11.8 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.1.1 + eslint-visitor-keys: 3.4.0 + espree: 9.5.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.20.0 + grapheme-splitter: 1.0.4 + ignore: 5.2.4 + import-fresh: 3.3.0 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-sdsl: 4.4.0 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.1 + strip-ansi: 6.0.1 + strip-json-comments: 3.1.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + + espree@9.5.1: + dependencies: + acorn: 8.8.2 + acorn-jsx: 5.3.2(acorn@8.8.2) + eslint-visitor-keys: 3.4.0 + + esquery@1.5.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@4.3.0: {} + + estraverse@5.3.0: {} + + esutils@2.0.3: {} + + fast-deep-equal@3.1.3: {} + + fast-diff@1.2.0: {} + + fast-glob@3.2.12: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fastq@1.15.0: + dependencies: + reusify: 1.0.4 + + file-entry-cache@6.0.1: + dependencies: + flat-cache: 3.0.4 + + fill-range@7.0.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@3.0.4: + dependencies: + flatted: 3.2.7 + rimraf: 3.0.2 + + flatted@3.2.7: {} + + follow-redirects@1.15.2: {} + + for-each@0.3.3: + dependencies: + is-callable: 1.2.7 + + form-data@4.0.0: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + + fraction.js@4.2.0: {} + + fs.realpath@1.0.0: {} + + fsevents@2.3.2: + optional: true + + function-bind@1.1.1: {} + + function.prototype.name@1.1.5: + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.2 + functions-have-names: 1.2.3 + + functions-have-names@1.2.3: {} + + get-intrinsic@1.2.0: + dependencies: + function-bind: 1.1.1 + has: 1.0.3 + has-symbols: 1.0.3 + + get-symbol-description@1.0.0: + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.0 + + get-tsconfig@4.5.0: {} + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob@7.1.6: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + glob@7.1.7: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + globals@13.20.0: + dependencies: + type-fest: 0.20.2 + + globalthis@1.0.3: + dependencies: + define-properties: 1.2.0 + + globalyzer@0.1.0: {} + + globby@11.1.0: + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.2.12 + ignore: 5.2.4 + merge2: 1.4.1 + slash: 3.0.0 + + globby@13.1.3: + dependencies: + dir-glob: 3.0.1 + fast-glob: 3.2.12 + ignore: 5.2.4 + merge2: 1.4.1 + slash: 4.0.0 + + globrex@0.1.2: {} + + gopd@1.0.1: + dependencies: + get-intrinsic: 1.2.0 + + graceful-fs@4.2.11: {} + + grapheme-splitter@1.0.4: {} + + has-bigints@1.0.2: {} + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.0: + dependencies: + get-intrinsic: 1.2.0 + + has-proto@1.0.1: {} + + has-symbols@1.0.3: {} + + has-tostringtag@1.0.0: + dependencies: + has-symbols: 1.0.3 + + has@1.0.3: + dependencies: + function-bind: 1.1.1 + + ignore@5.2.4: {} + + import-fresh@3.3.0: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + imurmurhash@0.1.4: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + internal-slot@1.0.5: + dependencies: + get-intrinsic: 1.2.0 + has: 1.0.3 + side-channel: 1.0.4 + + is-arguments@1.1.1: + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 + + is-array-buffer@3.0.2: + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.0 + is-typed-array: 1.1.10 + + is-bigint@1.0.4: + dependencies: + has-bigints: 1.0.2 + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.2.0 + + is-boolean-object@1.1.2: + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 + + is-callable@1.2.7: {} + + is-core-module@2.11.0: + dependencies: + has: 1.0.3 + + is-date-object@1.0.5: + dependencies: + has-tostringtag: 1.0.0 + + is-docker@2.2.1: {} + + is-extglob@2.1.1: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-map@2.0.2: {} + + is-negative-zero@2.0.2: {} + + is-number-object@1.0.7: + dependencies: + has-tostringtag: 1.0.0 + + is-number@7.0.0: {} + + is-path-inside@3.0.3: {} + + is-regex@1.1.4: + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 + + is-set@2.0.2: {} + + is-shared-array-buffer@1.0.2: + dependencies: + call-bind: 1.0.2 + + is-string@1.0.7: + dependencies: + has-tostringtag: 1.0.0 + + is-symbol@1.0.4: + dependencies: + has-symbols: 1.0.3 + + is-typed-array@1.1.10: + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.0 + + is-weakmap@2.0.1: {} + + is-weakref@1.0.2: + dependencies: + call-bind: 1.0.2 + + is-weakset@2.0.2: + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.0 + + is-wsl@2.2.0: + dependencies: + is-docker: 2.2.1 + + isarray@2.0.5: {} + + isexe@2.0.0: {} + + jiti@1.18.2: {} + + js-sdsl@4.4.0: {} + + js-tokens@4.0.0: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + json-schema-traverse@0.4.1: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json5@1.0.2: + dependencies: + minimist: 1.2.8 + + jsx-ast-utils@3.3.3: + dependencies: + array-includes: 3.1.6 + object.assign: 4.1.4 + + language-subtag-registry@0.3.22: {} + + language-tags@1.0.5: + dependencies: + language-subtag-registry: 0.3.22 + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lilconfig@2.1.0: {} + + lines-and-columns@1.2.4: {} + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.merge@4.6.2: {} + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + + lru-cache@6.0.0: + dependencies: + yallist: 4.0.0 + + lucide-react@0.377.0(react@18.2.0): + dependencies: + react: 18.2.0 + + merge2@1.4.1: {} + + micromatch@4.0.5: + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimist@1.2.8: {} + + ms@2.1.2: {} + + ms@2.1.3: {} + + mz@2.7.0: + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + + nanoid@3.3.6: {} + + natural-compare-lite@1.4.0: {} + + natural-compare@1.4.0: {} + + next@13.2.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0): + dependencies: + '@next/env': 13.2.4 + '@swc/helpers': 0.4.14 + caniuse-lite: 1.0.30001474 + postcss: 8.4.14 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + styled-jsx: 5.1.1(react@18.2.0) + optionalDependencies: + '@next/swc-android-arm-eabi': 13.2.4 + '@next/swc-android-arm64': 13.2.4 + '@next/swc-darwin-arm64': 13.2.4 + '@next/swc-darwin-x64': 13.2.4 + '@next/swc-freebsd-x64': 13.2.4 + '@next/swc-linux-arm-gnueabihf': 13.2.4 + '@next/swc-linux-arm64-gnu': 13.2.4 + '@next/swc-linux-arm64-musl': 13.2.4 + '@next/swc-linux-x64-gnu': 13.2.4 + '@next/swc-linux-x64-musl': 13.2.4 + '@next/swc-win32-arm64-msvc': 13.2.4 + '@next/swc-win32-ia32-msvc': 13.2.4 + '@next/swc-win32-x64-msvc': 13.2.4 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + + node-releases@2.0.10: {} + + normalize-path@3.0.0: {} + + normalize-range@0.1.2: {} + + object-assign@4.1.1: {} + + object-hash@3.0.0: {} + + object-inspect@1.12.3: {} + + object-is@1.1.5: + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + + object-keys@1.1.1: {} + + object.assign@4.1.4: + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + has-symbols: 1.0.3 + object-keys: 1.1.1 + + object.entries@1.1.6: + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.2 + + object.fromentries@2.0.6: + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.2 + + object.hasown@1.1.2: + dependencies: + define-properties: 1.2.0 + es-abstract: 1.21.2 + + object.values@1.1.6: + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.2 + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + open@8.4.2: + dependencies: + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 + + optionator@0.9.1: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.3 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + path-key@3.1.1: {} + + path-parse@1.0.7: {} + + path-type@4.0.0: {} + + picocolors@1.0.0: {} + + picomatch@2.3.1: {} + + pify@2.3.0: {} + + pirates@4.0.5: {} + + postcss-import@14.1.0(postcss@8.4.21): + dependencies: + postcss: 8.4.21 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.1 + + postcss-js@4.0.1(postcss@8.4.21): + dependencies: + camelcase-css: 2.0.1 + postcss: 8.4.21 + + postcss-load-config@3.1.4(postcss@8.4.21): + dependencies: + lilconfig: 2.1.0 + yaml: 1.10.2 + optionalDependencies: + postcss: 8.4.21 + + postcss-nested@6.0.0(postcss@8.4.21): + dependencies: + postcss: 8.4.21 + postcss-selector-parser: 6.0.11 + + postcss-selector-parser@6.0.11: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-value-parser@4.2.0: {} + + postcss@8.4.14: + dependencies: + nanoid: 3.3.6 + picocolors: 1.0.0 + source-map-js: 1.0.2 + + postcss@8.4.21: + dependencies: + nanoid: 3.3.6 + picocolors: 1.0.0 + source-map-js: 1.0.2 + + prelude-ls@1.2.1: {} + + prettier-linter-helpers@1.0.0: + dependencies: + fast-diff: 1.2.0 + + prettier-plugin-tailwindcss@0.2.6(prettier@2.8.7): + dependencies: + prettier: 2.8.7 + + prettier@2.8.7: {} + + prop-types@15.8.1: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + + proxy-from-env@1.1.0: {} + + punycode@2.3.0: {} + + queue-microtask@1.2.3: {} + + quick-lru@5.1.1: {} + + react-dom@18.2.0(react@18.2.0): + dependencies: + loose-envify: 1.4.0 + react: 18.2.0 + scheduler: 0.23.0 + + react-is@16.13.1: {} + + react@18.2.0: + dependencies: + loose-envify: 1.4.0 + + read-cache@1.0.0: + dependencies: + pify: 2.3.0 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + regenerator-runtime@0.13.11: {} + + regenerator-runtime@0.14.1: {} + + regexp.prototype.flags@1.4.3: + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + functions-have-names: 1.2.3 + + resolve-from@4.0.0: {} + + resolve@1.22.1: + dependencies: + is-core-module: 2.11.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + resolve@2.0.0-next.4: + dependencies: + is-core-module: 2.11.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + reusify@1.0.4: {} + + rimraf@3.0.2: + dependencies: + glob: 7.2.3 + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + safe-regex-test@1.0.0: + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.0 + is-regex: 1.1.4 + + scheduler@0.23.0: + dependencies: + loose-envify: 1.4.0 + + semver@6.3.0: {} + + semver@7.3.8: + dependencies: + lru-cache: 6.0.0 + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + side-channel@1.0.4: + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.0 + object-inspect: 1.12.3 + + slash@3.0.0: {} + + slash@4.0.0: {} + + source-map-js@1.0.2: {} + + stop-iteration-iterator@1.0.0: + dependencies: + internal-slot: 1.0.5 + + string.prototype.matchall@4.0.8: + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.2 + get-intrinsic: 1.2.0 + has-symbols: 1.0.3 + internal-slot: 1.0.5 + regexp.prototype.flags: 1.4.3 + side-channel: 1.0.4 + + string.prototype.trim@1.2.7: + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.2 + + string.prototype.trimend@1.0.6: + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.2 + + string.prototype.trimstart@1.0.6: + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.2 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-bom@3.0.0: {} + + strip-json-comments@3.1.1: {} + + styled-jsx@5.1.1(react@18.2.0): + dependencies: + client-only: 0.0.1 + react: 18.2.0 + + sucrase@3.31.0: dependencies: commander: 4.1.1 glob: 7.1.6 @@ -2620,34 +3423,23 @@ packages: mz: 2.7.0 pirates: 4.0.5 ts-interface-checker: 0.1.13 - dev: true - /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} + supports-color@7.2.0: dependencies: has-flag: 4.0.0 - dev: true - /supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - dev: true + supports-preserve-symlinks-flag@1.0.0: {} - /synckit@0.8.5: - resolution: {integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==} - engines: {node: ^14.18.0 || >=16.0.0} + synckit@0.8.5: dependencies: '@pkgr/utils': 2.3.1 tslib: 2.5.0 - dev: true - /tailwindcss@3.3.1(postcss@8.4.21): - resolution: {integrity: sha512-Vkiouc41d4CEq0ujXl6oiGFQ7bA3WEhUZdTgXAhtKxSy49OmKs8rEfQmupsfF0IGW8fv2iQkp1EVUuapCFrZ9g==} - engines: {node: '>=12.13.0'} - hasBin: true - peerDependencies: - postcss: ^8.0.9 + tailwind-merge@2.3.0: + dependencies: + '@babel/runtime': 7.24.5 + + tailwindcss@3.3.1(postcss@8.4.21): dependencies: arg: 5.0.2 chokidar: 3.5.3 @@ -2675,160 +3467,99 @@ packages: sucrase: 3.31.0 transitivePeerDependencies: - ts-node - dev: true - /tapable@2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} - engines: {node: '>=6'} - dev: true + tapable@2.2.1: {} - /text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - dev: true + text-table@0.2.0: {} - /thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} + thenify-all@1.6.0: dependencies: thenify: 3.3.1 - dev: true - /thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + thenify@3.3.1: dependencies: any-promise: 1.3.0 - dev: true - /tiny-glob@0.2.9: - resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} + tiny-glob@0.2.9: dependencies: globalyzer: 0.1.0 globrex: 0.1.2 - dev: true - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - dev: true - /ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - dev: true + ts-interface-checker@0.1.13: {} - /tsconfig-paths@3.14.2: - resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} + tsconfig-paths@3.14.2: dependencies: '@types/json5': 0.0.29 json5: 1.0.2 minimist: 1.2.8 strip-bom: 3.0.0 - dev: true - /tslib@1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - dev: true + tslib@1.14.1: {} - /tslib@2.5.0: - resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} + tslib@2.5.0: {} - /tsutils@3.21.0(typescript@5.0.3): - resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} - engines: {node: '>= 6'} - peerDependencies: - typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + tsutils@3.21.0(typescript@5.0.3): dependencies: tslib: 1.14.1 typescript: 5.0.3 - dev: true - /type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 - dev: true - /type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - dev: true + type-fest@0.20.2: {} - /typed-array-length@1.0.4: - resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + typed-array-length@1.0.4: dependencies: call-bind: 1.0.2 for-each: 0.3.3 is-typed-array: 1.1.10 - dev: true - /typescript@5.0.3: - resolution: {integrity: sha512-xv8mOEDnigb/tN9PSMTwSEqAnUvkoXMQlicOb0IUVDBSQCgBSaAAROUZYy2IcUy5qU6XajK5jjjO7TMWqBTKZA==} - engines: {node: '>=12.20'} - hasBin: true - dev: true + typescript@5.0.3: {} - /unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + unbox-primitive@1.0.2: dependencies: call-bind: 1.0.2 has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 - dev: true - /update-browserslist-db@1.0.10(browserslist@4.21.5): - resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' + update-browserslist-db@1.0.10(browserslist@4.21.5): dependencies: browserslist: 4.21.5 escalade: 3.1.1 picocolors: 1.0.0 - dev: true - /uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + uri-js@4.4.1: dependencies: punycode: 2.3.0 - dev: true - /use-sync-external-store@1.2.0(react@18.2.0): - resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + use-sync-external-store@1.2.0(react@18.2.0): dependencies: react: 18.2.0 - dev: false - /util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - dev: true + util-deprecate@1.0.2: {} - /which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + which-boxed-primitive@1.0.2: dependencies: is-bigint: 1.0.4 is-boolean-object: 1.1.2 is-number-object: 1.0.7 is-string: 1.0.7 is-symbol: 1.0.4 - dev: true - /which-collection@1.0.1: - resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} + which-collection@1.0.1: dependencies: is-map: 2.0.2 is-set: 2.0.2 is-weakmap: 2.0.1 is-weakset: 2.0.2 - dev: true - /which-typed-array@1.1.9: - resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==} - engines: {node: '>= 0.4'} + which-typed-array@1.1.9: dependencies: available-typed-arrays: 1.0.5 call-bind: 1.0.2 @@ -2836,39 +3567,19 @@ packages: gopd: 1.0.1 has-tostringtag: 1.0.0 is-typed-array: 1.1.10 - dev: true - /which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true + which@2.0.2: dependencies: isexe: 2.0.0 - dev: true - /word-wrap@1.2.3: - resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} - engines: {node: '>=0.10.0'} - dev: true + word-wrap@1.2.3: {} - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: true + wrappy@1.0.2: {} - /yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: true + yallist@4.0.0: {} - /yaml@1.10.2: - resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} - engines: {node: '>= 6'} - dev: true + yaml@1.10.2: {} - /yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - dev: true + yocto-queue@0.1.0: {} - /zod@3.21.4: - resolution: {integrity: sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==} - dev: false + zod@3.21.4: {} diff --git a/prettier.config.cjs b/prettier.config.cjs index accc933..ee0dede 100644 --- a/prettier.config.cjs +++ b/prettier.config.cjs @@ -1,4 +1,7 @@ /** @type {import("prettier").Config} */ module.exports = { - plugins: [require.resolve("prettier-plugin-tailwindcss"), require.resolve("@it-incubator/prettier-config")], + plugins: [ + require.resolve("prettier-plugin-tailwindcss"), + require.resolve("@it-incubator/prettier-config"), + ], }; diff --git a/src/components/button/index.tsx b/src/components/button/index.tsx index f67bf8f..2f48aeb 100644 --- a/src/components/button/index.tsx +++ b/src/components/button/index.tsx @@ -1,17 +1,26 @@ -import type { ButtonHTMLAttributes, DetailedHTMLProps, FC } from "react"; +import type { ComponentPropsWithoutRef, FC } from "react"; -type Props = DetailedHTMLProps< - ButtonHTMLAttributes, - HTMLButtonElement ->; +import { cn } from "@/helpers"; -export const Button: FC = ({ className, ...rest }) => { +type Props = ComponentPropsWithoutRef<"button"> & { + variant?: "primary" | "outlined" | "icon"; +}; + +export const Button: FC = ({ + className, + variant = "primary", + ...rest +}) => { return ( -
-
+ + -
+
- -
- {filteredTasks?.map((task) => ( -
- handleChangeStatus(todolist.id, task)} - type={"checkbox"} - checked={[0, 1, 3].includes(task.status)} - /> -
{task.title}
- -
- ))} + + + {filteredTasks?.map((task) => { + return ( +
+ + +
+ ); + })}
- - - + + + All + + + Active + + + Completed + +
); diff --git a/src/components/toggle-group/toggle-group.tsx b/src/components/toggle-group/toggle-group.tsx new file mode 100644 index 0000000..21339d1 --- /dev/null +++ b/src/components/toggle-group/toggle-group.tsx @@ -0,0 +1,83 @@ +"use client"; + +import * as React from "react"; + +import * as ToggleGroupPrimitive from "@radix-ui/react-toggle-group"; +import type { VariantProps } from "class-variance-authority"; +import { cva } from "class-variance-authority"; + +import { cn } from "@/helpers"; + +const toggleVariants = cva( + "inline-flex border border-sky-700 items-center justify-center rounded-md text-sm font-medium transition-colors hover:bg-muted hover:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-sky-700 data-[state=on]:text-white", + { + variants: { + variant: { + default: "bg-transparent", + outline: + "border border-input bg-transparent shadow-sm hover:bg-accent hover:text-accent-foreground", + }, + size: { + default: "h-9 px-3", + sm: "h-8 px-2", + lg: "h-10 px-3", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, + } +); +const ToggleGroupContext = React.createContext< + VariantProps +>({ + size: "default", + variant: "default", +}); + +const ToggleGroup = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & + VariantProps +>(({ className, variant, size, children, ...props }, ref) => ( + + + {children} + + +)); + +ToggleGroup.displayName = ToggleGroupPrimitive.Root.displayName; + +const ToggleGroupItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & + VariantProps +>(({ className, children, variant, size, ...props }, ref) => { + const context = React.useContext(ToggleGroupContext); + + return ( + + {children} + + ); +}); + +ToggleGroupItem.displayName = ToggleGroupPrimitive.Item.displayName; + +export { ToggleGroup, ToggleGroupItem }; diff --git a/src/env/client.mjs b/src/env/client.mjs index 30958cb..107c6d3 100644 --- a/src/env/client.mjs +++ b/src/env/client.mjs @@ -5,7 +5,7 @@ const _clientEnv = clientSchema.safeParse(clientEnv); export const formatErrors = ( /** @type {import('zod').ZodFormattedError,string>} */ - errors, + errors ) => Object.entries(errors) .map(([name, value]) => { @@ -17,7 +17,7 @@ export const formatErrors = ( if (!_clientEnv.success) { console.error( "❌ Invalid environment variables:\n", - ...formatErrors(_clientEnv.error.format()), + ...formatErrors(_clientEnv.error.format()) ); throw new Error("Invalid environment variables"); } @@ -25,7 +25,7 @@ if (!_clientEnv.success) { for (let key of Object.keys(_clientEnv.data)) { if (!key.startsWith("NEXT_PUBLIC_")) { console.warn( - `❌ Invalid public environment variable name: ${key}. It must begin with 'NEXT_PUBLIC_'`, + `❌ Invalid public environment variable name: ${key}. It must begin with 'NEXT_PUBLIC_'` ); throw new Error("Invalid public environment variable name"); diff --git a/src/env/server.mjs b/src/env/server.mjs index 736e3a6..4937bb5 100644 --- a/src/env/server.mjs +++ b/src/env/server.mjs @@ -11,7 +11,7 @@ const _serverEnv = serverSchema.safeParse(process.env); if (!_serverEnv.success) { console.error( "❌ Invalid environment variables:\n", - ...formatErrors(_serverEnv.error.format()), + ...formatErrors(_serverEnv.error.format()) ); throw new Error("Invalid environment variables"); } diff --git a/src/helpers/classnames/classnames.ts b/src/helpers/classnames/classnames.ts new file mode 100644 index 0000000..a5ef193 --- /dev/null +++ b/src/helpers/classnames/classnames.ts @@ -0,0 +1,6 @@ +import { clsx, type ClassValue } from "clsx"; +import { twMerge } from "tailwind-merge"; + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)); +} diff --git a/src/helpers/classnames/index.ts b/src/helpers/classnames/index.ts new file mode 100644 index 0000000..15c0006 --- /dev/null +++ b/src/helpers/classnames/index.ts @@ -0,0 +1 @@ +export * from "./classnames"; diff --git a/src/helpers/handle-error/index.ts b/src/helpers/handle-error/index.ts index 27796d9..2dea81f 100644 --- a/src/helpers/handle-error/index.ts +++ b/src/helpers/handle-error/index.ts @@ -1,11 +1,11 @@ import type { ApiResponse } from "@/helpers"; export const handleError = (data: ApiResponse): ApiResponse => { - if (data.resultCode !== 0) { - const error = data?.messages?.[0] || "An error has occurred"; - - throw new Error(error); - } + // if (data.resultCode !== 0) { + // const error = data?.messages?.[0] || "An error has occurred"; + // + // throw new Error(error); + // } return data; }; diff --git a/src/helpers/index.ts b/src/helpers/index.ts index 2c8ccc8..daeb2d4 100644 --- a/src/helpers/index.ts +++ b/src/helpers/index.ts @@ -1,3 +1,4 @@ export * from "./handle-error"; export * from "./no-refetch"; export * from "./api-response"; +export * from "./classnames"; diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 45764f3..0fb3b31 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,4 +1,4 @@ -import type { ChangeEvent } from "react"; +import type { ChangeEvent, FormEvent } from "react"; import { useState } from "react"; import { type NextPage } from "next"; @@ -23,7 +23,8 @@ const Home: NextPage = () => { const { mutate: createTodolist } = useCreateTodolistMutation(); - const handleAddTodolist = () => { + const handleAddTodolist = (e: FormEvent) => { + e.preventDefault(); createTodolist({ title: newTodolistTitle }); setNewTodolistTitle(""); }; @@ -46,7 +47,7 @@ const Home: NextPage = () => {
-
+
- -
+ +
{todolists?.map((todolist) => { return ; diff --git a/src/services/auth/auth.api.ts b/src/services/auth/auth.api.ts deleted file mode 100644 index a0df1fb..0000000 --- a/src/services/auth/auth.api.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { handleError } from "@/helpers"; -import { authInstance } from "@/services/auth/auth.instance"; -import type { - LoginResponse, - LogoutResponse, - MeResponse, - PostLoginArgs, -} from "@/services/todolists"; - -export const AuthApi = { - async login(args: PostLoginArgs) { - const res = await authInstance.post("/login", args); - - return handleError(res.data); - }, - - async logout() { - const res = await authInstance.delete("/login"); - - return handleError(res.data); - }, - - async me() { - const res = await authInstance.get("/me"); - - return handleError(res.data); - }, -}; diff --git a/src/services/auth/auth.instance.ts b/src/services/auth/auth.instance.ts deleted file mode 100644 index d9a7fea..0000000 --- a/src/services/auth/auth.instance.ts +++ /dev/null @@ -1,6 +0,0 @@ -import axios from "axios"; - -export const authInstance = axios.create({ - baseURL: "https://social-network.samuraijs.com/api/1.1/auth/", - withCredentials: true, -}); diff --git a/src/services/index.ts b/src/services/index.ts index fd43fc7..8847ade 100644 --- a/src/services/index.ts +++ b/src/services/index.ts @@ -1,2 +1,2 @@ -export * from "./auth"; -export * from "./todolists"; +export * from "./todolist-api/auth"; +export * from "./todolist-api/todolists"; diff --git a/src/services/todolist-api/auth/auth.api.ts b/src/services/todolist-api/auth/auth.api.ts new file mode 100644 index 0000000..1ed665f --- /dev/null +++ b/src/services/todolist-api/auth/auth.api.ts @@ -0,0 +1,35 @@ +import type { + LoginResponse, + LogoutResponse, + MeResponse, + PostLoginArgs, +} from "../todolists"; + +import { handleError } from "@/helpers"; +import { todolistApiInstance } from "@/services/todolist-api/todolist-api.instance"; + +export const AuthApi = { + async login(args: PostLoginArgs) { + const res = await todolistApiInstance.post( + "/auth/login", + args + ); + + localStorage.setItem("accessToken", res.data.accessToken); + localStorage.setItem("refreshToken", res.data.refreshToken); + + return res.data; + }, + + async logout() { + const res = await todolistApiInstance.delete("/auth/login"); + + return handleError(res.data); + }, + + async me() { + const res = await todolistApiInstance.get("/auth/me"); + + return handleError(res.data); + }, +}; diff --git a/src/services/auth/auth.hooks.ts b/src/services/todolist-api/auth/auth.hooks.ts similarity index 93% rename from src/services/auth/auth.hooks.ts rename to src/services/todolist-api/auth/auth.hooks.ts index 2934d70..e2d8b95 100644 --- a/src/services/auth/auth.hooks.ts +++ b/src/services/todolist-api/auth/auth.hooks.ts @@ -3,7 +3,7 @@ import { useRouter } from "next/router"; import { QUERY_KEYS, ROUTES } from "@/constants"; import { noRefetch } from "@/helpers"; -import { AuthApi } from "@/services/auth/auth.api"; +import { AuthApi } from "@/services/todolist-api/auth/auth.api"; export const useMeQuery = () => { return useQuery({ diff --git a/src/services/auth/index.ts b/src/services/todolist-api/auth/index.ts similarity index 100% rename from src/services/auth/index.ts rename to src/services/todolist-api/auth/index.ts diff --git a/src/services/todolist-api/todolist-api.instance.ts b/src/services/todolist-api/todolist-api.instance.ts new file mode 100644 index 0000000..4f83d04 --- /dev/null +++ b/src/services/todolist-api/todolist-api.instance.ts @@ -0,0 +1,90 @@ +import { Mutex } from "async-mutex"; +import axios from "axios"; +const mutex = new Mutex(); + +let refreshedAt: number | null = null; + +export const todolistApiInstance = axios.create({ + baseURL: "http://localhost:3000", +}); + +async function refreshAccessToken(): Promise { + const res = await todolistApiInstance.post<{ + refreshToken: string; + accessToken: string; + }>( + "/auth/refresh-token", + {}, + { + headers: { + Authorization: `Bearer ${localStorage.getItem("refreshToken")}`, + }, + } + ); + + localStorage.setItem("accessToken", res.data.accessToken); + localStorage.setItem("refreshToken", res.data.refreshToken); + + return res.data.accessToken; +} + +todolistApiInstance.interceptors.request.use( + async (config) => { + if (!config?.url?.includes("refresh-token")) { + await mutex.waitForUnlock(); + } + + config.headers.Authorization = + config.headers.Authorization ?? + `Bearer ${localStorage.getItem("accessToken")}`; + + return config; + }, + (error) => Promise.reject(error) +); + +todolistApiInstance.interceptors.response.use( + (response) => response, + async (error) => { + await mutex.waitForUnlock(); + const originalRequest = error.config; + + // Check for a 401 response and if this request hasn't been retried yet + if (error.response?.status === 401 && !originalRequest._retry) { + if (!mutex.isLocked()) { + originalRequest._retry = true; + // Use a mutex to ensure that token refresh logic is not run multiple times in parallel + const release = await mutex.acquire(); + + if (refreshedAt && refreshedAt + 60000 > new Date().getTime()) { + // If the token has been refreshed within the last minute, use the refreshed token + originalRequest.headers[ + "Authorization" + ] = `Bearer ${localStorage.getItem("accessToken")}`; + release(); + + return todolistApiInstance(originalRequest); + } + refreshedAt = new Date().getTime(); + try { + const newAccessToken = await refreshAccessToken(); + + originalRequest.headers["Authorization"] = `Bearer ${newAccessToken}`; + + return todolistApiInstance(originalRequest); // Retry the original request with the new token + } finally { + release(); + } + } else { + await mutex.waitForUnlock(); + const newAccessToken = localStorage.getItem("accessToken"); + + originalRequest.headers["Authorization"] = `Bearer ${newAccessToken}`; + + return todolistApiInstance(originalRequest); // Retry the original request with the new token + } + } + + return Promise.reject(error); + } +); diff --git a/src/services/todolists/index.ts b/src/services/todolist-api/todolists/index.ts similarity index 100% rename from src/services/todolists/index.ts rename to src/services/todolist-api/todolists/index.ts diff --git a/src/services/todolists/todolists.api.ts b/src/services/todolist-api/todolists/todolists.api.ts similarity index 55% rename from src/services/todolists/todolists.api.ts rename to src/services/todolist-api/todolists/todolists.api.ts index 0681567..70e630a 100644 --- a/src/services/todolists/todolists.api.ts +++ b/src/services/todolist-api/todolists/todolists.api.ts @@ -1,5 +1,3 @@ -import { todolistsInstance } from "./todolists.instance"; - import { handleError } from "@/helpers"; import type { CreateTaskResponse, @@ -11,33 +9,37 @@ import type { Todolist, UpdateTaskResponse, } from "@/services"; +import { todolistApiInstance } from "@/services/todolist-api/todolist-api.instance"; export const TodolistAPI = { async getTodolists() { - const res = await todolistsInstance.get("/"); + const res = await todolistApiInstance.get("/todolists"); return res.data; }, async createTodolist({ title }: { title: string }) { - const res = await todolistsInstance.post("/", { - title, - }); + const res = await todolistApiInstance.post( + "/todolists", + { + title, + } + ); return handleError(res.data); }, async deleteTodolist({ todolistId }: { todolistId: string }) { - const res = await todolistsInstance.delete( - `/${todolistId}` + const res = await todolistApiInstance.delete( + `/todolists/${todolistId}` ); return res.data; }, async getTodolistTasks({ todolistId }: { todolistId: string }) { - const res = await todolistsInstance.get( - `/${todolistId}/tasks` + const res = await todolistApiInstance.get( + `/todolists/${todolistId}/tasks` ); return res.data; @@ -50,18 +52,18 @@ export const TodolistAPI = { todolistId: string; title: string; }) { - const res = await todolistsInstance.post( - `/${todolistId}/tasks`, + const res = await todolistApiInstance.post( + `/todolists/${todolistId}/tasks`, { title } ); - return handleError(res.data); + return res.data; }, async updateTask({ todolistId, task }: { todolistId: string; task: Task }) { const { id, ...rest } = task; - const res = await todolistsInstance.put( - `/${todolistId}/tasks/${id}`, + const res = await todolistApiInstance.patch( + `/todolists/${todolistId}/tasks/${id}`, rest ); @@ -75,8 +77,8 @@ export const TodolistAPI = { todolistId: string; taskId: string; }) { - const res = await todolistsInstance.delete( - `/${todolistId}/tasks/${taskId}` + const res = await todolistApiInstance.delete( + `/todolists/${todolistId}/tasks/${taskId}` ); return res.data; diff --git a/src/services/todolists/todolists.hooks.ts b/src/services/todolist-api/todolists/todolists.hooks.ts similarity index 93% rename from src/services/todolists/todolists.hooks.ts rename to src/services/todolist-api/todolists/todolists.hooks.ts index 298ee20..ef77559 100644 --- a/src/services/todolists/todolists.hooks.ts +++ b/src/services/todolist-api/todolists/todolists.hooks.ts @@ -48,7 +48,7 @@ export const useCreateTaskMutation = () => { return useMutation({ mutationFn: TodolistAPI.createTask, onSuccess: (res) => { - const todolistId = res.data.item.todoListId; + const todolistId = res.todoListId; queryClient.invalidateQueries([QUERY_KEYS.TASKS, todolistId]); }, @@ -60,9 +60,7 @@ export const useUpdateTaskMutation = () => { return useMutation({ mutationFn: TodolistAPI.updateTask, - onSuccess: async (res) => { - const todolistId = res.data.item.todoListId; - + onSuccess: async (_, { todolistId }) => { await queryClient.invalidateQueries([QUERY_KEYS.TASKS, todolistId]); }, }); diff --git a/src/services/todolists/todolists.types.ts b/src/services/todolist-api/todolists/todolists.types.ts similarity index 55% rename from src/services/todolists/todolists.types.ts rename to src/services/todolist-api/todolists/todolists.types.ts index 5492719..82112bd 100644 --- a/src/services/todolists/todolists.types.ts +++ b/src/services/todolist-api/todolists/todolists.types.ts @@ -1,26 +1,19 @@ import type { ApiResponse } from "@/helpers"; -export type UpdateTaskResponseData = { - item: Task; -}; - -export type TasksResponse = { - items: Task[]; - totalCount: number; - error?: string; -}; +export type TasksResponse = Task[]; export type Task = { - id: string; + order: string; title: string; - description?: string; + description?: string | null; + deadline?: string | null; + status: TaskStatus; + priority: TaskPriority; + ownerId: string; todoListId: string; - order: number; - status: number; - priority: number; - startDate?: Date; - deadline?: Date; - addedDate: Date; + id: string; + createdAt: string; + updatedAt: string; }; export type Todolist = { @@ -37,7 +30,8 @@ export type PostLoginArgs = { }; export type LoginResponseData = { - userId: number; + accessToken: string; + refreshToken: string; }; export type MeResponseData = { @@ -46,7 +40,7 @@ export type MeResponseData = { email: string; }; -export type LoginResponse = ApiResponse; +export type LoginResponse = LoginResponseData; export type LogoutResponse = ApiResponse; export type MeResponse = ApiResponse; @@ -56,6 +50,18 @@ export type CreateTodolistResponseData = { item: Todolist; }; -export type CreateTaskResponse = ApiResponse<{ item: Task }>; -export type DeleteTaskResponse = ApiResponse; -export type UpdateTaskResponse = ApiResponse; +export type CreateTaskResponse = Task; +export type DeleteTaskResponse = void; +export type UpdateTaskResponse = void; + +export enum TaskStatus { + OPEN = "OPEN", + IN_PROGRESS = "IN_PROGRESS", + DONE = "DONE", +} + +export enum TaskPriority { + LOW = "LOW", + MEDIUM = "MEDIUM", + HIGH = "HIGH", +} diff --git a/src/services/todolists/todolists.instance.ts b/src/services/todolists/todolists.instance.ts deleted file mode 100644 index 8aef384..0000000 --- a/src/services/todolists/todolists.instance.ts +++ /dev/null @@ -1,6 +0,0 @@ -import axios from "axios"; - -export const todolistsInstance = axios.create({ - baseURL: "https://social-network.samuraijs.com/api/1.1/todo-lists", - withCredentials: true, -}); diff --git a/src/styles/globals.css b/src/styles/globals.css index 75c6d65..831c996 100644 --- a/src/styles/globals.css +++ b/src/styles/globals.css @@ -2,47 +2,47 @@ @tailwind components; @tailwind utilities; .loader { - width: 48px; - height: 48px; - border: 3px dotted #000; - border-style: solid solid dotted dotted; - border-radius: 50%; - display: inline-block; - position: relative; - box-sizing: border-box; - animation: rotation 2s linear infinite; + width: 48px; + height: 48px; + border: 3px dotted #000; + border-style: solid solid dotted dotted; + border-radius: 50%; + display: inline-block; + position: relative; + box-sizing: border-box; + animation: rotation 2s linear infinite; } .loader::after { - content: ''; - box-sizing: border-box; - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - margin: auto; - border: 3px dotted #FF3D00; - border-style: solid solid dotted; - width: 24px; - height: 24px; - border-radius: 50%; - animation: rotationBack 1s linear infinite; - transform-origin: center center; + content: ""; + box-sizing: border-box; + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + margin: auto; + border: 3px dotted #ff3d00; + border-style: solid solid dotted; + width: 24px; + height: 24px; + border-radius: 50%; + animation: rotationBack 1s linear infinite; + transform-origin: center center; } @keyframes rotation { - 0% { - transform: rotate(0deg); - } - 100% { - transform: rotate(360deg); - } + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } } @keyframes rotationBack { - 0% { - transform: rotate(0deg); - } - 100% { - transform: rotate(-360deg); - } -} \ No newline at end of file + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(-360deg); + } +} diff --git a/tsconfig.json b/tsconfig.json index 0541f38..633f468 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -18,7 +18,6 @@ "paths": { "@/*": ["./src/*"] } - }, "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "**/*.cjs", "**/*.mjs"], "exclude": ["node_modules"] From 750578b787cf6e5b593ed82374a6b5994ac77f43 Mon Sep 17 00:00:00 2001 From: Andres Date: Fri, 9 Aug 2024 16:15:50 +0200 Subject: [PATCH 02/14] switch to bun + biomejs fix infinite load on failed token refresh --- .eslintrc.json | 15 - .idea/biome.xml | 8 + biome.json | 13 + bun.lockb | Bin 0 -> 181474 bytes package.json | 1 + pnpm-lock.yaml | 3585 ----------------- prettier.config.cjs | 7 - src/components/auth-redirect/index.tsx | 4 +- .../todolist-api/todolist-api.instance.ts | 15 +- 9 files changed, 34 insertions(+), 3614 deletions(-) delete mode 100644 .eslintrc.json create mode 100644 .idea/biome.xml create mode 100644 biome.json create mode 100755 bun.lockb delete mode 100644 pnpm-lock.yaml delete mode 100644 prettier.config.cjs diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index 434de89..0000000 --- a/.eslintrc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json" - }, - "plugins": ["@typescript-eslint"], - "extends": [ - "next/core-web-vitals", - "plugin:@typescript-eslint/recommended", - "@it-incubator/eslint-config" - ], - "rules": { - "@typescript-eslint/consistent-type-imports": "warn" - } -} diff --git a/.idea/biome.xml b/.idea/biome.xml new file mode 100644 index 0000000..cb2a0dc --- /dev/null +++ b/.idea/biome.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/biome.json b/biome.json new file mode 100644 index 0000000..827672f --- /dev/null +++ b/biome.json @@ -0,0 +1,13 @@ +{ + "$schema": "https://biomejs.dev/schemas/1.8.3/schema.json", + "organizeImports": { + "enabled": true + }, + "linter": { + "enabled": true, + "rules": { + "recommended": true + } + }, + "formatter": { "indentStyle": "space", "indentWidth": 2 } +} diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..774c8de5b43bc03c430b1a68a9cd9d231ecc4f86 GIT binary patch literal 181474 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

fvoVr)E9O-V>s3 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

    DQn|-?%rOE!8KtP9mgX}&)Aw}R&bPlq(SdwB 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.9.0'} - - '@babel/runtime@7.24.5': - resolution: {integrity: sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==} - engines: {node: '>=6.9.0'} - - '@eslint-community/eslint-utils@4.4.0': - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - - '@eslint-community/regexpp@4.5.0': - resolution: {integrity: sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - - '@eslint/eslintrc@2.0.2': - resolution: {integrity: sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - '@eslint/js@8.37.0': - resolution: {integrity: sha512-x5vzdtOOGgFVDCUs81QRB2+liax8rFg3+7hqM+QhBG0/G3F1ZsoYl97UrqgHgQ9KKT7G6c4V+aTUCgu/n22v1A==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - '@humanwhocodes/config-array@0.11.8': - resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==} - engines: {node: '>=10.10.0'} - - '@humanwhocodes/module-importer@1.0.1': - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - - '@humanwhocodes/object-schema@1.2.1': - resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} - - '@it-incubator/eslint-config@0.1.0': - resolution: {integrity: sha512-bQ0T6gwY992+lSk1sQX7aQt0++ILCkp0p6jb6GwL4GCBaHkjPmbnEbaNyqVS+Q5tT5TR48AMnU0Sg9vl5nLNUg==} - - '@it-incubator/prettier-config@0.1.0': - resolution: {integrity: sha512-z6MUhhOpVWsJYxBlLUQr3ocoKlZeTR1sJNAqwf2eM+1iOtUQzq864Q9UOUhQRpkVHlFiWRzEQCRzbI/rPWWQDw==} - - '@next/env@13.2.4': - resolution: {integrity: sha512-+Mq3TtpkeeKFZanPturjcXt+KHfKYnLlX6jMLyCrmpq6OOs4i1GqBOAauSkii9QeKCMTYzGppar21JU57b/GEA==} - - '@next/eslint-plugin-next@13.2.4': - resolution: {integrity: sha512-ck1lI+7r1mMJpqLNa3LJ5pxCfOB1lfJncKmRJeJxcJqcngaFwylreLP7da6Rrjr6u2gVRTfmnkSkjc80IiQCwQ==} - - '@next/swc-android-arm-eabi@13.2.4': - resolution: {integrity: sha512-DWlalTSkLjDU11MY11jg17O1gGQzpRccM9Oes2yTqj2DpHndajrXHGxj9HGtJ+idq2k7ImUdJVWS2h2l/EDJOw==} - engines: {node: '>= 10'} - cpu: [arm] - os: [android] - - '@next/swc-android-arm64@13.2.4': - resolution: {integrity: sha512-sRavmUImUCf332Gy+PjIfLkMhiRX1Ez4SI+3vFDRs1N5eXp+uNzjFUK/oLMMOzk6KFSkbiK/3Wt8+dHQR/flNg==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [android] - - '@next/swc-darwin-arm64@13.2.4': - resolution: {integrity: sha512-S6vBl+OrInP47TM3LlYx65betocKUUlTZDDKzTiRDbsRESeyIkBtZ6Qi5uT2zQs4imqllJznVjFd1bXLx3Aa6A==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - - '@next/swc-darwin-x64@13.2.4': - resolution: {integrity: sha512-a6LBuoYGcFOPGd4o8TPo7wmv5FnMr+Prz+vYHopEDuhDoMSHOnC+v+Ab4D7F0NMZkvQjEJQdJS3rqgFhlZmKlw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - - '@next/swc-freebsd-x64@13.2.4': - resolution: {integrity: sha512-kkbzKVZGPaXRBPisoAQkh3xh22r+TD+5HwoC5bOkALraJ0dsOQgSMAvzMXKsN3tMzJUPS0tjtRf1cTzrQ0I5vQ==} - engines: {node: '>= 10'} - cpu: [x64] - os: [freebsd] - - '@next/swc-linux-arm-gnueabihf@13.2.4': - resolution: {integrity: sha512-7qA1++UY0fjprqtjBZaOA6cas/7GekpjVsZn/0uHvquuITFCdKGFCsKNBx3S0Rpxmx6WYo0GcmhNRM9ru08BGg==} - engines: {node: '>= 10'} - cpu: [arm] - os: [linux] - - '@next/swc-linux-arm64-gnu@13.2.4': - resolution: {integrity: sha512-xzYZdAeq883MwXgcwc72hqo/F/dwUxCukpDOkx/j1HTq/J0wJthMGjinN9wH5bPR98Mfeh1MZJ91WWPnZOedOg==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - - '@next/swc-linux-arm64-musl@13.2.4': - resolution: {integrity: sha512-8rXr3WfmqSiYkb71qzuDP6I6R2T2tpkmf83elDN8z783N9nvTJf2E7eLx86wu2OJCi4T05nuxCsh4IOU3LQ5xw==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - - '@next/swc-linux-x64-gnu@13.2.4': - resolution: {integrity: sha512-Ngxh51zGSlYJ4EfpKG4LI6WfquulNdtmHg1yuOYlaAr33KyPJp4HeN/tivBnAHcZkoNy0hh/SbwDyCnz5PFJQQ==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - - '@next/swc-linux-x64-musl@13.2.4': - resolution: {integrity: sha512-gOvwIYoSxd+j14LOcvJr+ekd9fwYT1RyMAHOp7znA10+l40wkFiMONPLWiZuHxfRk+Dy7YdNdDh3ImumvL6VwA==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - - '@next/swc-win32-arm64-msvc@13.2.4': - resolution: {integrity: sha512-q3NJzcfClgBm4HvdcnoEncmztxrA5GXqKeiZ/hADvC56pwNALt3ngDC6t6qr1YW9V/EPDxCYeaX4zYxHciW4Dw==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] - - '@next/swc-win32-ia32-msvc@13.2.4': - resolution: {integrity: sha512-/eZ5ncmHUYtD2fc6EUmAIZlAJnVT2YmxDsKs1Ourx0ttTtvtma/WKlMV5NoUsyOez0f9ExLyOpeCoz5aj+MPXw==} - engines: {node: '>= 10'} - cpu: [ia32] - os: [win32] - - '@next/swc-win32-x64-msvc@13.2.4': - resolution: {integrity: sha512-0MffFmyv7tBLlji01qc0IaPP/LVExzvj7/R5x1Jph1bTAIj4Vu81yFQWHHQAP6r4ff9Ukj1mBK6MDNVXm7Tcvw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - - '@pkgr/utils@2.3.1': - resolution: {integrity: sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - - '@radix-ui/primitive@1.0.1': - resolution: {integrity: sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==} - - '@radix-ui/react-collection@1.0.3': - resolution: {integrity: sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-compose-refs@1.0.1': - resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-context@1.0.1': - resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-direction@1.0.1': - resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-id@1.0.1': - resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-primitive@1.0.3': - resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-roving-focus@1.0.4': - resolution: {integrity: sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-slot@1.0.2': - resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-toggle-group@1.0.4': - resolution: {integrity: sha512-Uaj/M/cMyiyT9Bx6fOZO0SAG4Cls0GptBWiBmBxofmDbNVnYYoyRWj/2M/6VCi/7qcXFWnHhRUfdfZFvvkuu8A==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-toggle@1.0.3': - resolution: {integrity: sha512-Pkqg3+Bc98ftZGsl60CLANXQBBQ4W3mTFS9EJvNxKMZ7magklKV69/id1mlAlOFDDfHvlCms0fx8fA4CMKDJHg==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true - - '@radix-ui/react-use-callback-ref@1.0.1': - resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-use-controllable-state@1.0.1': - resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - - '@radix-ui/react-use-layout-effect@1.0.1': - resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 - peerDependenciesMeta: - '@types/react': - optional: true - - '@rushstack/eslint-patch@1.2.0': - resolution: {integrity: sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==} - - '@swc/helpers@0.4.14': - resolution: {integrity: sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==} - - '@tanstack/query-core@4.27.0': - resolution: {integrity: sha512-sm+QncWaPmM73IPwFlmWSKPqjdTXZeFf/7aEmWh00z7yl2FjqophPt0dE1EHW9P1giMC5rMviv7OUbSDmWzXXA==} - - '@tanstack/react-query@4.28.0': - resolution: {integrity: sha512-8cGBV5300RHlvYdS4ea+G1JcZIt5CIuprXYFnsWggkmGoC0b5JaqG0fIX3qwDL9PTNkKvG76NGThIWbpXivMrQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-native: '*' - peerDependenciesMeta: - react-dom: - optional: true - react-native: - optional: true - - '@types/json-schema@7.0.11': - resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} - - '@types/json5@0.0.29': - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - - '@types/node@18.15.11': - resolution: {integrity: sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==} - - '@types/prop-types@15.7.5': - resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} - - '@types/react-dom@18.0.11': - resolution: {integrity: sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==} - - '@types/react@18.0.33': - resolution: {integrity: sha512-sHxzVxeanvQyQ1lr8NSHaj0kDzcNiGpILEVt69g9S31/7PfMvNCKLKcsHw4lYKjs3cGNJjXSP4mYzX43QlnjNA==} - - '@types/scheduler@0.16.3': - resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==} - - '@types/semver@7.3.13': - resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==} - - '@typescript-eslint/eslint-plugin@5.57.1': - resolution: {integrity: sha512-1MeobQkQ9tztuleT3v72XmY0XuKXVXusAhryoLuU5YZ+mXoYKZP9SQ7Flulh1NX4DTjpGTc2b/eMu4u7M7dhnQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - '@typescript-eslint/parser': ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/parser@5.57.1': - resolution: {integrity: sha512-hlA0BLeVSA/wBPKdPGxoVr9Pp6GutGoY380FEhbVi0Ph4WNe8kLvqIRx76RSQt1lynZKfrXKs0/XeEk4zZycuA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/scope-manager@5.57.1': - resolution: {integrity: sha512-N/RrBwEUKMIYxSKl0oDK5sFVHd6VI7p9K5MyUlVYAY6dyNb/wHUqndkTd3XhpGlXgnQsBkRZuu4f9kAHghvgPw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - '@typescript-eslint/type-utils@5.57.1': - resolution: {integrity: sha512-/RIPQyx60Pt6ga86hKXesXkJ2WOS4UemFrmmq/7eOyiYjYv/MUSHPlkhU6k9T9W1ytnTJueqASW+wOmW4KrViw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: '*' - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/types@5.57.1': - resolution: {integrity: sha512-bSs4LOgyV3bJ08F5RDqO2KXqg3WAdwHCu06zOqcQ6vqbTJizyBhuh1o1ImC69X4bV2g1OJxbH71PJqiO7Y1RuA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - '@typescript-eslint/typescript-estree@5.57.1': - resolution: {integrity: sha512-A2MZqD8gNT0qHKbk2wRspg7cHbCDCk2tcqt6ScCFLr5Ru8cn+TCfM786DjPhqwseiS+PrYwcXht5ztpEQ6TFTw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/utils@5.57.1': - resolution: {integrity: sha512-kN6vzzf9NkEtawECqze6v99LtmDiUJCVpvieTFA1uL7/jDghiJGubGZ5csicYHU1Xoqb3oH/R5cN5df6W41Nfg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - - '@typescript-eslint/visitor-keys@5.57.1': - resolution: {integrity: sha512-RjQrAniDU0CEk5r7iphkm731zKlFiUjvcBS2yHAg8WWqFMCaCrD0rKEVOMUyMMcbGPZ0bPp56srkGWrgfZqLRA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - - acorn@8.8.2: - resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} - engines: {node: '>=0.4.0'} - hasBin: true - - ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - - any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - - anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - - arg@5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - - argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - - aria-query@5.1.3: - resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==} - - array-buffer-byte-length@1.0.0: - resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} - - array-includes@3.1.6: - resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==} - engines: {node: '>= 0.4'} - - array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - - array.prototype.flat@1.3.1: - resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==} - engines: {node: '>= 0.4'} - - array.prototype.flatmap@1.3.1: - resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==} - engines: {node: '>= 0.4'} - - array.prototype.tosorted@1.1.1: - resolution: {integrity: sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==} - - ast-types-flow@0.0.7: - resolution: {integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==} - - async-mutex@0.5.0: - resolution: {integrity: sha512-1A94B18jkJ3DYq284ohPxoXbfTA5HsQ7/Mf4DEhcyLx3Bz27Rh59iScbB6EPiP+B+joue6YCxcMXSbFC1tZKwA==} - - asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - - autoprefixer@10.4.14: - resolution: {integrity: sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==} - engines: {node: ^10 || ^12 || >=14} - hasBin: true - peerDependencies: - postcss: ^8.1.0 - - available-typed-arrays@1.0.5: - resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} - engines: {node: '>= 0.4'} - - axe-core@4.6.3: - resolution: {integrity: sha512-/BQzOX780JhsxDnPpH4ZiyrJAzcd8AfzFPkv+89veFSr1rcMjuq2JDCwypKaPeB6ljHp9KjXhPpjgCvQlWYuqg==} - engines: {node: '>=4'} - - axios@1.3.4: - resolution: {integrity: sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ==} - - axobject-query@3.1.1: - resolution: {integrity: sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==} - - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} - engines: {node: '>=8'} - - brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - - braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} - - browserslist@4.21.5: - resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - - call-bind@1.0.2: - resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} - - callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - - camelcase-css@2.0.1: - resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} - engines: {node: '>= 6'} - - caniuse-lite@1.0.30001474: - resolution: {integrity: sha512-iaIZ8gVrWfemh5DG3T9/YqarVZoYf0r188IjaGwx68j4Pf0SGY6CQkmJUIE+NZHkkecQGohzXmBGEwWDr9aM3Q==} - - chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - - chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} - - class-variance-authority@0.7.0: - resolution: {integrity: sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==} - - client-only@0.0.1: - resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} - - clsx@2.0.0: - resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==} - engines: {node: '>=6'} - - clsx@2.1.1: - resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} - engines: {node: '>=6'} - - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} - - commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} - - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - - cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} - - cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true - - csstype@3.1.2: - resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} - - damerau-levenshtein@1.0.8: - resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} - - debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - deep-equal@2.2.0: - resolution: {integrity: sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==} - - deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - - define-lazy-prop@2.0.0: - resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} - engines: {node: '>=8'} - - define-properties@1.2.0: - resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} - engines: {node: '>= 0.4'} - - delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - - didyoumean@1.2.2: - resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - - dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} - - dlv@1.1.3: - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - - doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} - - doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - - electron-to-chromium@1.4.350: - resolution: {integrity: sha512-XnXcWpVnOfHZ4C3NPiL+SubeoGV8zc/pg8GEubRtc1dPA/9jKS2vsOPmtClJHhWxUb2RSGC1OBLCbgNUJMtZPw==} - - emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - - enhanced-resolve@5.12.0: - resolution: {integrity: sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==} - engines: {node: '>=10.13.0'} - - es-abstract@1.21.2: - resolution: {integrity: sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==} - engines: {node: '>= 0.4'} - - es-get-iterator@1.1.3: - resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} - - es-set-tostringtag@2.0.1: - resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} - engines: {node: '>= 0.4'} - - es-shim-unscopables@1.0.0: - resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} - - es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} - - escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} - - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - - eslint-config-next@13.2.4: - resolution: {integrity: sha512-lunIBhsoeqw6/Lfkd6zPt25w1bn0znLA/JCL+au1HoEpSb4/PpsOYsYtgV/q+YPsoKIOzFyU5xnb04iZnXjUvg==} - peerDependencies: - eslint: ^7.23.0 || ^8.0.0 - typescript: '>=3.3.1' - peerDependenciesMeta: - typescript: - optional: true - - eslint-config-prettier@8.8.0: - resolution: {integrity: sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' - - eslint-import-resolver-node@0.3.7: - resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==} - - eslint-import-resolver-typescript@3.5.4: - resolution: {integrity: sha512-9xUpnedEmSfG57sN1UvWPiEhfJ8bPt0Wg2XysA7Mlc79iFGhmJtRUg9LxtkK81FhMUui0YuR2E8iUsVhePkh4A==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - eslint: '*' - eslint-plugin-import: '*' - - eslint-module-utils@2.7.4: - resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - - eslint-plugin-import@2.27.5: - resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - - eslint-plugin-jsx-a11y@6.7.1: - resolution: {integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==} - engines: {node: '>=4.0'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - - eslint-plugin-prettier@4.2.1: - resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==} - engines: {node: '>=12.0.0'} - peerDependencies: - eslint: '>=7.28.0' - eslint-config-prettier: '*' - prettier: '>=2.0.0' - peerDependenciesMeta: - eslint-config-prettier: - optional: true - - eslint-plugin-react-hooks@4.6.0: - resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} - engines: {node: '>=10'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - - eslint-plugin-react@7.32.2: - resolution: {integrity: sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - - eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} - - eslint-scope@7.1.1: - resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint-visitor-keys@3.4.0: - resolution: {integrity: sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint@8.37.0: - resolution: {integrity: sha512-NU3Ps9nI05GUoVMxcZx1J8CNR6xOvUT4jAUMH5+z8lpp3aEdPVCImKw6PWG4PY+Vfkpr+jvMpxs/qoE7wq0sPw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true - - espree@9.5.1: - resolution: {integrity: sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} - engines: {node: '>=0.10'} - - esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} - - estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - - estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - - esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - - fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - - fast-diff@1.2.0: - resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==} - - fast-glob@3.2.12: - resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} - engines: {node: '>=8.6.0'} - - fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - - fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - - fastq@1.15.0: - resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} - - file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} - - fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} - - find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - - flat-cache@3.0.4: - resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} - engines: {node: ^10.12.0 || >=12.0.0} - - flatted@3.2.7: - resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} - - follow-redirects@1.15.2: - resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - - for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} - - form-data@4.0.0: - resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} - engines: {node: '>= 6'} - - fraction.js@4.2.0: - resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} - - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - - fsevents@2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - - function-bind@1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - - function.prototype.name@1.1.5: - resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} - engines: {node: '>= 0.4'} - - functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - - get-intrinsic@1.2.0: - resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==} - - get-symbol-description@1.0.0: - resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} - engines: {node: '>= 0.4'} - - get-tsconfig@4.5.0: - resolution: {integrity: sha512-MjhiaIWCJ1sAU4pIQ5i5OfOuHHxVo1oYeNsWTON7jxYkod8pHocXeh+SSbmu5OZZZK73B6cbJ2XADzXehLyovQ==} - - glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - - glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - - glob@7.1.6: - resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} - - glob@7.1.7: - resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} - - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - - globals@13.20.0: - resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} - engines: {node: '>=8'} - - globalthis@1.0.3: - resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} - engines: {node: '>= 0.4'} - - globalyzer@0.1.0: - resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} - - globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} - - globby@13.1.3: - resolution: {integrity: sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - globrex@0.1.2: - resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} - - gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} - - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - - grapheme-splitter@1.0.4: - resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} - - has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - - has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - - has-property-descriptors@1.0.0: - resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} - - has-proto@1.0.1: - resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} - engines: {node: '>= 0.4'} - - has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - - has-tostringtag@1.0.0: - resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} - engines: {node: '>= 0.4'} - - has@1.0.3: - resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} - engines: {node: '>= 0.4.0'} - - ignore@5.2.4: - resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} - engines: {node: '>= 4'} - - import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} - - imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - - inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - internal-slot@1.0.5: - resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} - engines: {node: '>= 0.4'} - - is-arguments@1.1.1: - resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} - engines: {node: '>= 0.4'} - - is-array-buffer@3.0.2: - resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} - - is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} - - is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - - is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} - - is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - - is-core-module@2.11.0: - resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} - - is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} - - is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true - - is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - - is-map@2.0.2: - resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} - - is-negative-zero@2.0.2: - resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} - engines: {node: '>= 0.4'} - - is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} - engines: {node: '>= 0.4'} - - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - - is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} - - is-set@2.0.2: - resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} - - is-shared-array-buffer@1.0.2: - resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} - - is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} - - is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} - - is-typed-array@1.1.10: - resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==} - engines: {node: '>= 0.4'} - - is-weakmap@2.0.1: - resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} - - is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} - - is-weakset@2.0.2: - resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} - - is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} - - isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - jiti@1.18.2: - resolution: {integrity: sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==} - hasBin: true - - js-sdsl@4.4.0: - resolution: {integrity: sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==} - - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - - js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true - - json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - - json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - - json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true - - jsx-ast-utils@3.3.3: - resolution: {integrity: sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==} - engines: {node: '>=4.0'} - - language-subtag-registry@0.3.22: - resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} - - language-tags@1.0.5: - resolution: {integrity: sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==} - - levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} - - lilconfig@2.1.0: - resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} - engines: {node: '>=10'} - - lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - - locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - - lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - - loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true - - lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - - lucide-react@0.377.0: - resolution: {integrity: sha512-o0weTZC4j8YiSi5VIE6RTwPt5uOA+YtuXejvkOxbLghLwIloNkI20INgWigrhBthvgdDcuULp0XRTr0wokqKMw==} - peerDependencies: - react: ^16.5.1 || ^17.0.0 || ^18.0.0 - - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - - micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} - - mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - - mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} - - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - - minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - - ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - - ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - - mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - - nanoid@3.3.6: - resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - - natural-compare-lite@1.4.0: - resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} - - natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - - next@13.2.4: - resolution: {integrity: sha512-g1I30317cThkEpvzfXujf0O4wtaQHtDCLhlivwlTJ885Ld+eOgcz7r3TGQzeU+cSRoNHtD8tsJgzxVdYojFssw==} - engines: {node: '>=14.6.0'} - hasBin: true - peerDependencies: - '@opentelemetry/api': ^1.4.0 - fibers: '>= 3.1.0' - node-sass: ^6.0.0 || ^7.0.0 - react: ^18.2.0 - react-dom: ^18.2.0 - sass: ^1.3.0 - peerDependenciesMeta: - '@opentelemetry/api': - optional: true - fibers: - optional: true - node-sass: - optional: true - sass: - optional: true - - node-releases@2.0.10: - resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} - - normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - - normalize-range@0.1.2: - resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} - engines: {node: '>=0.10.0'} - - object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - - object-hash@3.0.0: - resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} - engines: {node: '>= 6'} - - object-inspect@1.12.3: - resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} - - object-is@1.1.5: - resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} - engines: {node: '>= 0.4'} - - object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - - object.assign@4.1.4: - resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} - engines: {node: '>= 0.4'} - - object.entries@1.1.6: - resolution: {integrity: sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==} - engines: {node: '>= 0.4'} - - object.fromentries@2.0.6: - resolution: {integrity: sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==} - engines: {node: '>= 0.4'} - - object.hasown@1.1.2: - resolution: {integrity: sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==} - - object.values@1.1.6: - resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==} - engines: {node: '>= 0.4'} - - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - - open@8.4.2: - resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} - engines: {node: '>=12'} - - optionator@0.9.1: - resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} - engines: {node: '>= 0.8.0'} - - p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - - p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - - parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - - path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - - path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - - path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - - picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - - pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} - - pirates@4.0.5: - resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} - engines: {node: '>= 6'} - - postcss-import@14.1.0: - resolution: {integrity: sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==} - engines: {node: '>=10.0.0'} - peerDependencies: - postcss: ^8.0.0 - - postcss-js@4.0.1: - resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} - engines: {node: ^12 || ^14 || >= 16} - peerDependencies: - postcss: ^8.4.21 - - postcss-load-config@3.1.4: - resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} - engines: {node: '>= 10'} - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true - - postcss-nested@6.0.0: - resolution: {integrity: sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.2.14 - - postcss-selector-parser@6.0.11: - resolution: {integrity: sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==} - engines: {node: '>=4'} - - postcss-value-parser@4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - - postcss@8.4.14: - resolution: {integrity: sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==} - engines: {node: ^10 || ^12 || >=14} - - postcss@8.4.21: - resolution: {integrity: sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==} - engines: {node: ^10 || ^12 || >=14} - - prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - - prettier-linter-helpers@1.0.0: - resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} - engines: {node: '>=6.0.0'} - - prettier-plugin-tailwindcss@0.2.6: - resolution: {integrity: sha512-F+7XCl9RLF/LPrGdUMHWpsT6TM31JraonAUyE6eBmpqymFvDwyl0ETHsKFHP1NG+sEfv8bmKqnTxEbWQbHPlBA==} - engines: {node: '>=12.17.0'} - peerDependencies: - '@ianvs/prettier-plugin-sort-imports': '*' - '@prettier/plugin-php': '*' - '@prettier/plugin-pug': '*' - '@shopify/prettier-plugin-liquid': '*' - '@shufo/prettier-plugin-blade': '*' - '@trivago/prettier-plugin-sort-imports': '*' - prettier: '>=2.2.0' - prettier-plugin-astro: '*' - prettier-plugin-css-order: '*' - prettier-plugin-import-sort: '*' - prettier-plugin-jsdoc: '*' - prettier-plugin-organize-attributes: '*' - prettier-plugin-organize-imports: '*' - prettier-plugin-style-order: '*' - prettier-plugin-svelte: '*' - prettier-plugin-twig-melody: '*' - peerDependenciesMeta: - '@ianvs/prettier-plugin-sort-imports': - optional: true - '@prettier/plugin-php': - optional: true - '@prettier/plugin-pug': - optional: true - '@shopify/prettier-plugin-liquid': - optional: true - '@shufo/prettier-plugin-blade': - optional: true - '@trivago/prettier-plugin-sort-imports': - optional: true - prettier-plugin-astro: - optional: true - prettier-plugin-css-order: - optional: true - prettier-plugin-import-sort: - optional: true - prettier-plugin-jsdoc: - optional: true - prettier-plugin-organize-attributes: - optional: true - prettier-plugin-organize-imports: - optional: true - prettier-plugin-style-order: - optional: true - prettier-plugin-svelte: - optional: true - prettier-plugin-twig-melody: - optional: true - - prettier@2.8.7: - resolution: {integrity: sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==} - engines: {node: '>=10.13.0'} - hasBin: true - - prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - - proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - - punycode@2.3.0: - resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} - engines: {node: '>=6'} - - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - - quick-lru@5.1.1: - resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} - engines: {node: '>=10'} - - react-dom@18.2.0: - resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} - peerDependencies: - react: ^18.2.0 - - react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - - react@18.2.0: - resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} - engines: {node: '>=0.10.0'} - - read-cache@1.0.0: - resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} - - readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - - regenerator-runtime@0.13.11: - resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} - - regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - - regexp.prototype.flags@1.4.3: - resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==} - engines: {node: '>= 0.4'} - - resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - - resolve@1.22.1: - resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} - hasBin: true - - resolve@2.0.0-next.4: - resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==} - hasBin: true - - reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - - rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - hasBin: true - - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - - safe-regex-test@1.0.0: - resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} - - scheduler@0.23.0: - resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} - - semver@6.3.0: - resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} - hasBin: true - - semver@7.3.8: - resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} - engines: {node: '>=10'} - hasBin: true - - shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - - shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - - side-channel@1.0.4: - resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} - - slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - - slash@4.0.0: - resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} - engines: {node: '>=12'} - - source-map-js@1.0.2: - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} - engines: {node: '>=0.10.0'} - - stop-iteration-iterator@1.0.0: - resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} - engines: {node: '>= 0.4'} - - string.prototype.matchall@4.0.8: - resolution: {integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==} - - string.prototype.trim@1.2.7: - resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==} - engines: {node: '>= 0.4'} - - string.prototype.trimend@1.0.6: - resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} - - string.prototype.trimstart@1.0.6: - resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} - - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - - strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - - strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - - styled-jsx@5.1.1: - resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} - engines: {node: '>= 12.0.0'} - peerDependencies: - '@babel/core': '*' - babel-plugin-macros: '*' - react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' - peerDependenciesMeta: - '@babel/core': - optional: true - babel-plugin-macros: - optional: true - - sucrase@3.31.0: - resolution: {integrity: sha512-6QsHnkqyVEzYcaiHsOKkzOtOgdJcb8i54x6AV2hDwyZcY9ZyykGZVw6L/YN98xC0evwTP6utsWWrKRaa8QlfEQ==} - engines: {node: '>=8'} - hasBin: true - - supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - - synckit@0.8.5: - resolution: {integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==} - engines: {node: ^14.18.0 || >=16.0.0} - - tailwind-merge@2.3.0: - resolution: {integrity: sha512-vkYrLpIP+lgR0tQCG6AP7zZXCTLc1Lnv/CCRT3BqJ9CZ3ui2++GPaGb1x/ILsINIMSYqqvrpqjUFsMNLlW99EA==} - - tailwindcss@3.3.1: - resolution: {integrity: sha512-Vkiouc41d4CEq0ujXl6oiGFQ7bA3WEhUZdTgXAhtKxSy49OmKs8rEfQmupsfF0IGW8fv2iQkp1EVUuapCFrZ9g==} - engines: {node: '>=12.13.0'} - hasBin: true - peerDependencies: - postcss: ^8.0.9 - - tapable@2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} - engines: {node: '>=6'} - - text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - - thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} - - thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - - tiny-glob@0.2.9: - resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} - - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - - ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - - tsconfig-paths@3.14.2: - resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} - - tslib@1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - - tslib@2.5.0: - resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} - - tsutils@3.21.0: - resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} - engines: {node: '>= 6'} - peerDependencies: - typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' - - type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} - - type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - - typed-array-length@1.0.4: - resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} - - typescript@5.0.3: - resolution: {integrity: sha512-xv8mOEDnigb/tN9PSMTwSEqAnUvkoXMQlicOb0IUVDBSQCgBSaAAROUZYy2IcUy5qU6XajK5jjjO7TMWqBTKZA==} - engines: {node: '>=12.20'} - hasBin: true - - unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} - - update-browserslist-db@1.0.10: - resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - - use-sync-external-store@1.2.0: - resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - - which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} - - which-collection@1.0.1: - resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} - - which-typed-array@1.1.9: - resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==} - engines: {node: '>= 0.4'} - - which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - - word-wrap@1.2.3: - resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} - engines: {node: '>=0.10.0'} - - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - - yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - - yaml@1.10.2: - resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} - engines: {node: '>= 6'} - - yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - - zod@3.21.4: - resolution: {integrity: sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==} - -snapshots: - - '@babel/runtime@7.21.0': - dependencies: - regenerator-runtime: 0.13.11 - - '@babel/runtime@7.24.5': - dependencies: - regenerator-runtime: 0.14.1 - - '@eslint-community/eslint-utils@4.4.0(eslint@8.37.0)': - dependencies: - eslint: 8.37.0 - eslint-visitor-keys: 3.4.0 - - '@eslint-community/regexpp@4.5.0': {} - - '@eslint/eslintrc@2.0.2': - dependencies: - ajv: 6.12.6 - debug: 4.3.4 - espree: 9.5.1 - globals: 13.20.0 - ignore: 5.2.4 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - - '@eslint/js@8.37.0': {} - - '@humanwhocodes/config-array@0.11.8': - dependencies: - '@humanwhocodes/object-schema': 1.2.1 - debug: 4.3.4 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - - '@humanwhocodes/module-importer@1.0.1': {} - - '@humanwhocodes/object-schema@1.2.1': {} - - '@it-incubator/eslint-config@0.1.0(prettier@2.8.7)(typescript@5.0.3)': - dependencies: - '@typescript-eslint/eslint-plugin': 5.57.1(@typescript-eslint/parser@5.57.1(eslint@8.37.0)(typescript@5.0.3))(eslint@8.37.0)(typescript@5.0.3) - '@typescript-eslint/parser': 5.57.1(eslint@8.37.0)(typescript@5.0.3) - eslint: 8.37.0 - eslint-config-prettier: 8.8.0(eslint@8.37.0) - eslint-import-resolver-node: 0.3.7 - eslint-import-resolver-typescript: 3.5.4(eslint-plugin-import@2.27.5)(eslint@8.37.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.57.1(eslint@8.37.0)(typescript@5.0.3))(eslint-import-resolver-typescript@3.5.4)(eslint@8.37.0) - eslint-plugin-prettier: 4.2.1(eslint-config-prettier@8.8.0(eslint@8.37.0))(eslint@8.37.0)(prettier@2.8.7) - eslint-plugin-react: 7.32.2(eslint@8.37.0) - transitivePeerDependencies: - - eslint-import-resolver-webpack - - prettier - - supports-color - - typescript - - '@it-incubator/prettier-config@0.1.0': {} - - '@next/env@13.2.4': {} - - '@next/eslint-plugin-next@13.2.4': - dependencies: - glob: 7.1.7 - - '@next/swc-android-arm-eabi@13.2.4': - optional: true - - '@next/swc-android-arm64@13.2.4': - optional: true - - '@next/swc-darwin-arm64@13.2.4': - optional: true - - '@next/swc-darwin-x64@13.2.4': - optional: true - - '@next/swc-freebsd-x64@13.2.4': - optional: true - - '@next/swc-linux-arm-gnueabihf@13.2.4': - optional: true - - '@next/swc-linux-arm64-gnu@13.2.4': - optional: true - - '@next/swc-linux-arm64-musl@13.2.4': - optional: true - - '@next/swc-linux-x64-gnu@13.2.4': - optional: true - - '@next/swc-linux-x64-musl@13.2.4': - optional: true - - '@next/swc-win32-arm64-msvc@13.2.4': - optional: true - - '@next/swc-win32-ia32-msvc@13.2.4': - optional: true - - '@next/swc-win32-x64-msvc@13.2.4': - optional: true - - '@nodelib/fs.scandir@2.1.5': - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - - '@nodelib/fs.stat@2.0.5': {} - - '@nodelib/fs.walk@1.2.8': - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.15.0 - - '@pkgr/utils@2.3.1': - dependencies: - cross-spawn: 7.0.3 - is-glob: 4.0.3 - open: 8.4.2 - picocolors: 1.0.0 - tiny-glob: 0.2.9 - tslib: 2.5.0 - - '@radix-ui/primitive@1.0.1': - dependencies: - '@babel/runtime': 7.24.5 - - '@radix-ui/react-collection@1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.33)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@babel/runtime': 7.24.5 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.33)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.0.33)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.33)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-slot': 1.0.2(@types/react@18.0.33)(react@18.2.0) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - optionalDependencies: - '@types/react': 18.0.33 - '@types/react-dom': 18.0.11 - - '@radix-ui/react-compose-refs@1.0.1(@types/react@18.0.33)(react@18.2.0)': - dependencies: - '@babel/runtime': 7.24.5 - react: 18.2.0 - optionalDependencies: - '@types/react': 18.0.33 - - '@radix-ui/react-context@1.0.1(@types/react@18.0.33)(react@18.2.0)': - dependencies: - '@babel/runtime': 7.24.5 - react: 18.2.0 - optionalDependencies: - '@types/react': 18.0.33 - - '@radix-ui/react-direction@1.0.1(@types/react@18.0.33)(react@18.2.0)': - dependencies: - '@babel/runtime': 7.24.5 - react: 18.2.0 - optionalDependencies: - '@types/react': 18.0.33 - - '@radix-ui/react-id@1.0.1(@types/react@18.0.33)(react@18.2.0)': - dependencies: - '@babel/runtime': 7.24.5 - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.33)(react@18.2.0) - react: 18.2.0 - optionalDependencies: - '@types/react': 18.0.33 - - '@radix-ui/react-primitive@1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.33)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@babel/runtime': 7.24.5 - '@radix-ui/react-slot': 1.0.2(@types/react@18.0.33)(react@18.2.0) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - optionalDependencies: - '@types/react': 18.0.33 - '@types/react-dom': 18.0.11 - - '@radix-ui/react-roving-focus@1.0.4(@types/react-dom@18.0.11)(@types/react@18.0.33)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@babel/runtime': 7.24.5 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.33)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.33)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.0.33)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.0.33)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.0.33)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.33)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.33)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.0.33)(react@18.2.0) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - optionalDependencies: - '@types/react': 18.0.33 - '@types/react-dom': 18.0.11 - - '@radix-ui/react-slot@1.0.2(@types/react@18.0.33)(react@18.2.0)': - dependencies: - '@babel/runtime': 7.24.5 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.33)(react@18.2.0) - react: 18.2.0 - optionalDependencies: - '@types/react': 18.0.33 - - '@radix-ui/react-toggle-group@1.0.4(@types/react-dom@18.0.11)(@types/react@18.0.33)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@babel/runtime': 7.24.5 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-context': 1.0.1(@types/react@18.0.33)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.0.33)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.33)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.0.11)(@types/react@18.0.33)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-toggle': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.33)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.0.33)(react@18.2.0) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - optionalDependencies: - '@types/react': 18.0.33 - '@types/react-dom': 18.0.11 - - '@radix-ui/react-toggle@1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.33)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@babel/runtime': 7.24.5 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.0.11)(@types/react@18.0.33)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.0.33)(react@18.2.0) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - optionalDependencies: - '@types/react': 18.0.33 - '@types/react-dom': 18.0.11 - - '@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.0.33)(react@18.2.0)': - dependencies: - '@babel/runtime': 7.24.5 - react: 18.2.0 - optionalDependencies: - '@types/react': 18.0.33 - - '@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.0.33)(react@18.2.0)': - dependencies: - '@babel/runtime': 7.24.5 - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.33)(react@18.2.0) - react: 18.2.0 - optionalDependencies: - '@types/react': 18.0.33 - - '@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.0.33)(react@18.2.0)': - dependencies: - '@babel/runtime': 7.24.5 - react: 18.2.0 - optionalDependencies: - '@types/react': 18.0.33 - - '@rushstack/eslint-patch@1.2.0': {} - - '@swc/helpers@0.4.14': - dependencies: - tslib: 2.5.0 - - '@tanstack/query-core@4.27.0': {} - - '@tanstack/react-query@4.28.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': - dependencies: - '@tanstack/query-core': 4.27.0 - react: 18.2.0 - use-sync-external-store: 1.2.0(react@18.2.0) - optionalDependencies: - react-dom: 18.2.0(react@18.2.0) - - '@types/json-schema@7.0.11': {} - - '@types/json5@0.0.29': {} - - '@types/node@18.15.11': {} - - '@types/prop-types@15.7.5': {} - - '@types/react-dom@18.0.11': - dependencies: - '@types/react': 18.0.33 - - '@types/react@18.0.33': - dependencies: - '@types/prop-types': 15.7.5 - '@types/scheduler': 0.16.3 - csstype: 3.1.2 - - '@types/scheduler@0.16.3': {} - - '@types/semver@7.3.13': {} - - '@typescript-eslint/eslint-plugin@5.57.1(@typescript-eslint/parser@5.57.1(eslint@8.37.0)(typescript@5.0.3))(eslint@8.37.0)(typescript@5.0.3)': - dependencies: - '@eslint-community/regexpp': 4.5.0 - '@typescript-eslint/parser': 5.57.1(eslint@8.37.0)(typescript@5.0.3) - '@typescript-eslint/scope-manager': 5.57.1 - '@typescript-eslint/type-utils': 5.57.1(eslint@8.37.0)(typescript@5.0.3) - '@typescript-eslint/utils': 5.57.1(eslint@8.37.0)(typescript@5.0.3) - debug: 4.3.4 - eslint: 8.37.0 - grapheme-splitter: 1.0.4 - ignore: 5.2.4 - natural-compare-lite: 1.4.0 - semver: 7.3.8 - tsutils: 3.21.0(typescript@5.0.3) - optionalDependencies: - typescript: 5.0.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@5.57.1(eslint@8.37.0)(typescript@5.0.3)': - dependencies: - '@typescript-eslint/scope-manager': 5.57.1 - '@typescript-eslint/types': 5.57.1 - '@typescript-eslint/typescript-estree': 5.57.1(typescript@5.0.3) - debug: 4.3.4 - eslint: 8.37.0 - optionalDependencies: - typescript: 5.0.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/scope-manager@5.57.1': - dependencies: - '@typescript-eslint/types': 5.57.1 - '@typescript-eslint/visitor-keys': 5.57.1 - - '@typescript-eslint/type-utils@5.57.1(eslint@8.37.0)(typescript@5.0.3)': - dependencies: - '@typescript-eslint/typescript-estree': 5.57.1(typescript@5.0.3) - '@typescript-eslint/utils': 5.57.1(eslint@8.37.0)(typescript@5.0.3) - debug: 4.3.4 - eslint: 8.37.0 - tsutils: 3.21.0(typescript@5.0.3) - optionalDependencies: - typescript: 5.0.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/types@5.57.1': {} - - '@typescript-eslint/typescript-estree@5.57.1(typescript@5.0.3)': - dependencies: - '@typescript-eslint/types': 5.57.1 - '@typescript-eslint/visitor-keys': 5.57.1 - debug: 4.3.4 - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.3.8 - tsutils: 3.21.0(typescript@5.0.3) - optionalDependencies: - typescript: 5.0.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@5.57.1(eslint@8.37.0)(typescript@5.0.3)': - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.37.0) - '@types/json-schema': 7.0.11 - '@types/semver': 7.3.13 - '@typescript-eslint/scope-manager': 5.57.1 - '@typescript-eslint/types': 5.57.1 - '@typescript-eslint/typescript-estree': 5.57.1(typescript@5.0.3) - eslint: 8.37.0 - eslint-scope: 5.1.1 - semver: 7.3.8 - transitivePeerDependencies: - - supports-color - - typescript - - '@typescript-eslint/visitor-keys@5.57.1': - dependencies: - '@typescript-eslint/types': 5.57.1 - eslint-visitor-keys: 3.4.0 - - acorn-jsx@5.3.2(acorn@8.8.2): - dependencies: - acorn: 8.8.2 - - acorn@8.8.2: {} - - ajv@6.12.6: - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - - ansi-regex@5.0.1: {} - - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 - - any-promise@1.3.0: {} - - anymatch@3.1.3: - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - - arg@5.0.2: {} - - argparse@2.0.1: {} - - aria-query@5.1.3: - dependencies: - deep-equal: 2.2.0 - - array-buffer-byte-length@1.0.0: - dependencies: - call-bind: 1.0.2 - is-array-buffer: 3.0.2 - - array-includes@3.1.6: - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.21.2 - get-intrinsic: 1.2.0 - is-string: 1.0.7 - - array-union@2.1.0: {} - - array.prototype.flat@1.3.1: - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.21.2 - es-shim-unscopables: 1.0.0 - - array.prototype.flatmap@1.3.1: - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.21.2 - es-shim-unscopables: 1.0.0 - - array.prototype.tosorted@1.1.1: - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.21.2 - es-shim-unscopables: 1.0.0 - get-intrinsic: 1.2.0 - - ast-types-flow@0.0.7: {} - - async-mutex@0.5.0: - dependencies: - tslib: 2.5.0 - - asynckit@0.4.0: {} - - autoprefixer@10.4.14(postcss@8.4.21): - dependencies: - browserslist: 4.21.5 - caniuse-lite: 1.0.30001474 - fraction.js: 4.2.0 - normalize-range: 0.1.2 - picocolors: 1.0.0 - postcss: 8.4.21 - postcss-value-parser: 4.2.0 - - available-typed-arrays@1.0.5: {} - - axe-core@4.6.3: {} - - axios@1.3.4: - dependencies: - follow-redirects: 1.15.2 - form-data: 4.0.0 - proxy-from-env: 1.1.0 - transitivePeerDependencies: - - debug - - axobject-query@3.1.1: - dependencies: - deep-equal: 2.2.0 - - balanced-match@1.0.2: {} - - binary-extensions@2.2.0: {} - - brace-expansion@1.1.11: - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - - braces@3.0.2: - dependencies: - fill-range: 7.0.1 - - browserslist@4.21.5: - dependencies: - caniuse-lite: 1.0.30001474 - electron-to-chromium: 1.4.350 - node-releases: 2.0.10 - update-browserslist-db: 1.0.10(browserslist@4.21.5) - - call-bind@1.0.2: - dependencies: - function-bind: 1.1.1 - get-intrinsic: 1.2.0 - - callsites@3.1.0: {} - - camelcase-css@2.0.1: {} - - caniuse-lite@1.0.30001474: {} - - chalk@4.1.2: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - - chokidar@3.5.3: - dependencies: - anymatch: 3.1.3 - braces: 3.0.2 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.2 - - class-variance-authority@0.7.0: - dependencies: - clsx: 2.0.0 - - client-only@0.0.1: {} - - clsx@2.0.0: {} - - clsx@2.1.1: {} - - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-name@1.1.4: {} - - combined-stream@1.0.8: - dependencies: - delayed-stream: 1.0.0 - - commander@4.1.1: {} - - concat-map@0.0.1: {} - - cross-spawn@7.0.3: - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - - cssesc@3.0.0: {} - - csstype@3.1.2: {} - - damerau-levenshtein@1.0.8: {} - - debug@3.2.7: - dependencies: - ms: 2.1.3 - - debug@4.3.4: - dependencies: - ms: 2.1.2 - - deep-equal@2.2.0: - dependencies: - call-bind: 1.0.2 - es-get-iterator: 1.1.3 - get-intrinsic: 1.2.0 - is-arguments: 1.1.1 - is-array-buffer: 3.0.2 - is-date-object: 1.0.5 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.2 - isarray: 2.0.5 - object-is: 1.1.5 - object-keys: 1.1.1 - object.assign: 4.1.4 - regexp.prototype.flags: 1.4.3 - side-channel: 1.0.4 - which-boxed-primitive: 1.0.2 - which-collection: 1.0.1 - which-typed-array: 1.1.9 - - deep-is@0.1.4: {} - - define-lazy-prop@2.0.0: {} - - define-properties@1.2.0: - dependencies: - has-property-descriptors: 1.0.0 - object-keys: 1.1.1 - - delayed-stream@1.0.0: {} - - didyoumean@1.2.2: {} - - dir-glob@3.0.1: - dependencies: - path-type: 4.0.0 - - dlv@1.1.3: {} - - doctrine@2.1.0: - dependencies: - esutils: 2.0.3 - - doctrine@3.0.0: - dependencies: - esutils: 2.0.3 - - electron-to-chromium@1.4.350: {} - - emoji-regex@9.2.2: {} - - enhanced-resolve@5.12.0: - dependencies: - graceful-fs: 4.2.11 - tapable: 2.2.1 - - es-abstract@1.21.2: - dependencies: - array-buffer-byte-length: 1.0.0 - available-typed-arrays: 1.0.5 - call-bind: 1.0.2 - es-set-tostringtag: 2.0.1 - es-to-primitive: 1.2.1 - function.prototype.name: 1.1.5 - get-intrinsic: 1.2.0 - get-symbol-description: 1.0.0 - globalthis: 1.0.3 - gopd: 1.0.1 - has: 1.0.3 - has-property-descriptors: 1.0.0 - has-proto: 1.0.1 - has-symbols: 1.0.3 - internal-slot: 1.0.5 - is-array-buffer: 3.0.2 - is-callable: 1.2.7 - is-negative-zero: 2.0.2 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.2 - is-string: 1.0.7 - is-typed-array: 1.1.10 - is-weakref: 1.0.2 - object-inspect: 1.12.3 - object-keys: 1.1.1 - object.assign: 4.1.4 - regexp.prototype.flags: 1.4.3 - safe-regex-test: 1.0.0 - string.prototype.trim: 1.2.7 - string.prototype.trimend: 1.0.6 - string.prototype.trimstart: 1.0.6 - typed-array-length: 1.0.4 - unbox-primitive: 1.0.2 - which-typed-array: 1.1.9 - - es-get-iterator@1.1.3: - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.0 - has-symbols: 1.0.3 - is-arguments: 1.1.1 - is-map: 2.0.2 - is-set: 2.0.2 - is-string: 1.0.7 - isarray: 2.0.5 - stop-iteration-iterator: 1.0.0 - - es-set-tostringtag@2.0.1: - dependencies: - get-intrinsic: 1.2.0 - has: 1.0.3 - has-tostringtag: 1.0.0 - - es-shim-unscopables@1.0.0: - dependencies: - has: 1.0.3 - - es-to-primitive@1.2.1: - dependencies: - is-callable: 1.2.7 - is-date-object: 1.0.5 - is-symbol: 1.0.4 - - escalade@3.1.1: {} - - escape-string-regexp@4.0.0: {} - - eslint-config-next@13.2.4(eslint@8.37.0)(typescript@5.0.3): - dependencies: - '@next/eslint-plugin-next': 13.2.4 - '@rushstack/eslint-patch': 1.2.0 - '@typescript-eslint/parser': 5.57.1(eslint@8.37.0)(typescript@5.0.3) - eslint: 8.37.0 - eslint-import-resolver-node: 0.3.7 - eslint-import-resolver-typescript: 3.5.4(eslint-plugin-import@2.27.5)(eslint@8.37.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.57.1(eslint@8.37.0)(typescript@5.0.3))(eslint-import-resolver-typescript@3.5.4)(eslint@8.37.0) - eslint-plugin-jsx-a11y: 6.7.1(eslint@8.37.0) - eslint-plugin-react: 7.32.2(eslint@8.37.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.37.0) - optionalDependencies: - typescript: 5.0.3 - transitivePeerDependencies: - - eslint-import-resolver-webpack - - supports-color - - eslint-config-prettier@8.8.0(eslint@8.37.0): - dependencies: - eslint: 8.37.0 - - eslint-import-resolver-node@0.3.7: - dependencies: - debug: 3.2.7 - is-core-module: 2.11.0 - resolve: 1.22.1 - transitivePeerDependencies: - - supports-color - - eslint-import-resolver-typescript@3.5.4(eslint-plugin-import@2.27.5)(eslint@8.37.0): - dependencies: - debug: 4.3.4 - enhanced-resolve: 5.12.0 - eslint: 8.37.0 - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.57.1(eslint@8.37.0)(typescript@5.0.3))(eslint-import-resolver-typescript@3.5.4)(eslint@8.37.0) - get-tsconfig: 4.5.0 - globby: 13.1.3 - is-core-module: 2.11.0 - is-glob: 4.0.3 - synckit: 0.8.5 - transitivePeerDependencies: - - supports-color - - eslint-module-utils@2.7.4(@typescript-eslint/parser@5.57.1(eslint@8.37.0)(typescript@5.0.3))(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.4(eslint-plugin-import@2.27.5)(eslint@8.37.0))(eslint@8.37.0): - dependencies: - debug: 3.2.7 - optionalDependencies: - '@typescript-eslint/parser': 5.57.1(eslint@8.37.0)(typescript@5.0.3) - eslint: 8.37.0 - eslint-import-resolver-node: 0.3.7 - eslint-import-resolver-typescript: 3.5.4(eslint-plugin-import@2.27.5)(eslint@8.37.0) - transitivePeerDependencies: - - supports-color - - eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.57.1(eslint@8.37.0)(typescript@5.0.3))(eslint-import-resolver-typescript@3.5.4)(eslint@8.37.0): - dependencies: - array-includes: 3.1.6 - array.prototype.flat: 1.3.1 - array.prototype.flatmap: 1.3.1 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 8.37.0 - eslint-import-resolver-node: 0.3.7 - eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.57.1(eslint@8.37.0)(typescript@5.0.3))(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.4(eslint-plugin-import@2.27.5)(eslint@8.37.0))(eslint@8.37.0) - has: 1.0.3 - is-core-module: 2.11.0 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.values: 1.1.6 - resolve: 1.22.1 - semver: 6.3.0 - tsconfig-paths: 3.14.2 - optionalDependencies: - '@typescript-eslint/parser': 5.57.1(eslint@8.37.0)(typescript@5.0.3) - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - - eslint-plugin-jsx-a11y@6.7.1(eslint@8.37.0): - dependencies: - '@babel/runtime': 7.21.0 - aria-query: 5.1.3 - array-includes: 3.1.6 - array.prototype.flatmap: 1.3.1 - ast-types-flow: 0.0.7 - axe-core: 4.6.3 - axobject-query: 3.1.1 - damerau-levenshtein: 1.0.8 - emoji-regex: 9.2.2 - eslint: 8.37.0 - has: 1.0.3 - jsx-ast-utils: 3.3.3 - language-tags: 1.0.5 - minimatch: 3.1.2 - object.entries: 1.1.6 - object.fromentries: 2.0.6 - semver: 6.3.0 - - eslint-plugin-prettier@4.2.1(eslint-config-prettier@8.8.0(eslint@8.37.0))(eslint@8.37.0)(prettier@2.8.7): - dependencies: - eslint: 8.37.0 - prettier: 2.8.7 - prettier-linter-helpers: 1.0.0 - optionalDependencies: - eslint-config-prettier: 8.8.0(eslint@8.37.0) - - eslint-plugin-react-hooks@4.6.0(eslint@8.37.0): - dependencies: - eslint: 8.37.0 - - eslint-plugin-react@7.32.2(eslint@8.37.0): - dependencies: - array-includes: 3.1.6 - array.prototype.flatmap: 1.3.1 - array.prototype.tosorted: 1.1.1 - doctrine: 2.1.0 - eslint: 8.37.0 - estraverse: 5.3.0 - jsx-ast-utils: 3.3.3 - minimatch: 3.1.2 - object.entries: 1.1.6 - object.fromentries: 2.0.6 - object.hasown: 1.1.2 - object.values: 1.1.6 - prop-types: 15.8.1 - resolve: 2.0.0-next.4 - semver: 6.3.0 - string.prototype.matchall: 4.0.8 - - eslint-scope@5.1.1: - dependencies: - esrecurse: 4.3.0 - estraverse: 4.3.0 - - eslint-scope@7.1.1: - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - - eslint-visitor-keys@3.4.0: {} - - eslint@8.37.0: - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.37.0) - '@eslint-community/regexpp': 4.5.0 - '@eslint/eslintrc': 2.0.2 - '@eslint/js': 8.37.0 - '@humanwhocodes/config-array': 0.11.8 - '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.4 - doctrine: 3.0.0 - escape-string-regexp: 4.0.0 - eslint-scope: 7.1.1 - eslint-visitor-keys: 3.4.0 - espree: 9.5.1 - esquery: 1.5.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - find-up: 5.0.0 - glob-parent: 6.0.2 - globals: 13.20.0 - grapheme-splitter: 1.0.4 - ignore: 5.2.4 - import-fresh: 3.3.0 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-sdsl: 4.4.0 - js-yaml: 4.1.0 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.1 - strip-ansi: 6.0.1 - strip-json-comments: 3.1.1 - text-table: 0.2.0 - transitivePeerDependencies: - - supports-color - - espree@9.5.1: - dependencies: - acorn: 8.8.2 - acorn-jsx: 5.3.2(acorn@8.8.2) - eslint-visitor-keys: 3.4.0 - - esquery@1.5.0: - dependencies: - estraverse: 5.3.0 - - esrecurse@4.3.0: - dependencies: - estraverse: 5.3.0 - - estraverse@4.3.0: {} - - estraverse@5.3.0: {} - - esutils@2.0.3: {} - - fast-deep-equal@3.1.3: {} - - fast-diff@1.2.0: {} - - fast-glob@3.2.12: - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.5 - - fast-json-stable-stringify@2.1.0: {} - - fast-levenshtein@2.0.6: {} - - fastq@1.15.0: - dependencies: - reusify: 1.0.4 - - file-entry-cache@6.0.1: - dependencies: - flat-cache: 3.0.4 - - fill-range@7.0.1: - dependencies: - to-regex-range: 5.0.1 - - find-up@5.0.0: - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - - flat-cache@3.0.4: - dependencies: - flatted: 3.2.7 - rimraf: 3.0.2 - - flatted@3.2.7: {} - - follow-redirects@1.15.2: {} - - for-each@0.3.3: - dependencies: - is-callable: 1.2.7 - - form-data@4.0.0: - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.35 - - fraction.js@4.2.0: {} - - fs.realpath@1.0.0: {} - - fsevents@2.3.2: - optional: true - - function-bind@1.1.1: {} - - function.prototype.name@1.1.5: - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.21.2 - functions-have-names: 1.2.3 - - functions-have-names@1.2.3: {} - - get-intrinsic@1.2.0: - dependencies: - function-bind: 1.1.1 - has: 1.0.3 - has-symbols: 1.0.3 - - get-symbol-description@1.0.0: - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.0 - - get-tsconfig@4.5.0: {} - - glob-parent@5.1.2: - dependencies: - is-glob: 4.0.3 - - glob-parent@6.0.2: - dependencies: - is-glob: 4.0.3 - - glob@7.1.6: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - - glob@7.1.7: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - - glob@7.2.3: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - - globals@13.20.0: - dependencies: - type-fest: 0.20.2 - - globalthis@1.0.3: - dependencies: - define-properties: 1.2.0 - - globalyzer@0.1.0: {} - - globby@11.1.0: - dependencies: - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.2.12 - ignore: 5.2.4 - merge2: 1.4.1 - slash: 3.0.0 - - globby@13.1.3: - dependencies: - dir-glob: 3.0.1 - fast-glob: 3.2.12 - ignore: 5.2.4 - merge2: 1.4.1 - slash: 4.0.0 - - globrex@0.1.2: {} - - gopd@1.0.1: - dependencies: - get-intrinsic: 1.2.0 - - graceful-fs@4.2.11: {} - - grapheme-splitter@1.0.4: {} - - has-bigints@1.0.2: {} - - has-flag@4.0.0: {} - - has-property-descriptors@1.0.0: - dependencies: - get-intrinsic: 1.2.0 - - has-proto@1.0.1: {} - - has-symbols@1.0.3: {} - - has-tostringtag@1.0.0: - dependencies: - has-symbols: 1.0.3 - - has@1.0.3: - dependencies: - function-bind: 1.1.1 - - ignore@5.2.4: {} - - import-fresh@3.3.0: - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - - imurmurhash@0.1.4: {} - - inflight@1.0.6: - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - - inherits@2.0.4: {} - - internal-slot@1.0.5: - dependencies: - get-intrinsic: 1.2.0 - has: 1.0.3 - side-channel: 1.0.4 - - is-arguments@1.1.1: - dependencies: - call-bind: 1.0.2 - has-tostringtag: 1.0.0 - - is-array-buffer@3.0.2: - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.0 - is-typed-array: 1.1.10 - - is-bigint@1.0.4: - dependencies: - has-bigints: 1.0.2 - - is-binary-path@2.1.0: - dependencies: - binary-extensions: 2.2.0 - - is-boolean-object@1.1.2: - dependencies: - call-bind: 1.0.2 - has-tostringtag: 1.0.0 - - is-callable@1.2.7: {} - - is-core-module@2.11.0: - dependencies: - has: 1.0.3 - - is-date-object@1.0.5: - dependencies: - has-tostringtag: 1.0.0 - - is-docker@2.2.1: {} - - is-extglob@2.1.1: {} - - is-glob@4.0.3: - dependencies: - is-extglob: 2.1.1 - - is-map@2.0.2: {} - - is-negative-zero@2.0.2: {} - - is-number-object@1.0.7: - dependencies: - has-tostringtag: 1.0.0 - - is-number@7.0.0: {} - - is-path-inside@3.0.3: {} - - is-regex@1.1.4: - dependencies: - call-bind: 1.0.2 - has-tostringtag: 1.0.0 - - is-set@2.0.2: {} - - is-shared-array-buffer@1.0.2: - dependencies: - call-bind: 1.0.2 - - is-string@1.0.7: - dependencies: - has-tostringtag: 1.0.0 - - is-symbol@1.0.4: - dependencies: - has-symbols: 1.0.3 - - is-typed-array@1.1.10: - dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.2 - for-each: 0.3.3 - gopd: 1.0.1 - has-tostringtag: 1.0.0 - - is-weakmap@2.0.1: {} - - is-weakref@1.0.2: - dependencies: - call-bind: 1.0.2 - - is-weakset@2.0.2: - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.0 - - is-wsl@2.2.0: - dependencies: - is-docker: 2.2.1 - - isarray@2.0.5: {} - - isexe@2.0.0: {} - - jiti@1.18.2: {} - - js-sdsl@4.4.0: {} - - js-tokens@4.0.0: {} - - js-yaml@4.1.0: - dependencies: - argparse: 2.0.1 - - json-schema-traverse@0.4.1: {} - - json-stable-stringify-without-jsonify@1.0.1: {} - - json5@1.0.2: - dependencies: - minimist: 1.2.8 - - jsx-ast-utils@3.3.3: - dependencies: - array-includes: 3.1.6 - object.assign: 4.1.4 - - language-subtag-registry@0.3.22: {} - - language-tags@1.0.5: - dependencies: - language-subtag-registry: 0.3.22 - - levn@0.4.1: - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - - lilconfig@2.1.0: {} - - lines-and-columns@1.2.4: {} - - locate-path@6.0.0: - dependencies: - p-locate: 5.0.0 - - lodash.merge@4.6.2: {} - - loose-envify@1.4.0: - dependencies: - js-tokens: 4.0.0 - - lru-cache@6.0.0: - dependencies: - yallist: 4.0.0 - - lucide-react@0.377.0(react@18.2.0): - dependencies: - react: 18.2.0 - - merge2@1.4.1: {} - - micromatch@4.0.5: - dependencies: - braces: 3.0.2 - picomatch: 2.3.1 - - mime-db@1.52.0: {} - - mime-types@2.1.35: - dependencies: - mime-db: 1.52.0 - - minimatch@3.1.2: - dependencies: - brace-expansion: 1.1.11 - - minimist@1.2.8: {} - - ms@2.1.2: {} - - ms@2.1.3: {} - - mz@2.7.0: - dependencies: - any-promise: 1.3.0 - object-assign: 4.1.1 - thenify-all: 1.6.0 - - nanoid@3.3.6: {} - - natural-compare-lite@1.4.0: {} - - natural-compare@1.4.0: {} - - next@13.2.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0): - dependencies: - '@next/env': 13.2.4 - '@swc/helpers': 0.4.14 - caniuse-lite: 1.0.30001474 - postcss: 8.4.14 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - styled-jsx: 5.1.1(react@18.2.0) - optionalDependencies: - '@next/swc-android-arm-eabi': 13.2.4 - '@next/swc-android-arm64': 13.2.4 - '@next/swc-darwin-arm64': 13.2.4 - '@next/swc-darwin-x64': 13.2.4 - '@next/swc-freebsd-x64': 13.2.4 - '@next/swc-linux-arm-gnueabihf': 13.2.4 - '@next/swc-linux-arm64-gnu': 13.2.4 - '@next/swc-linux-arm64-musl': 13.2.4 - '@next/swc-linux-x64-gnu': 13.2.4 - '@next/swc-linux-x64-musl': 13.2.4 - '@next/swc-win32-arm64-msvc': 13.2.4 - '@next/swc-win32-ia32-msvc': 13.2.4 - '@next/swc-win32-x64-msvc': 13.2.4 - transitivePeerDependencies: - - '@babel/core' - - babel-plugin-macros - - node-releases@2.0.10: {} - - normalize-path@3.0.0: {} - - normalize-range@0.1.2: {} - - object-assign@4.1.1: {} - - object-hash@3.0.0: {} - - object-inspect@1.12.3: {} - - object-is@1.1.5: - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - - object-keys@1.1.1: {} - - object.assign@4.1.4: - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - has-symbols: 1.0.3 - object-keys: 1.1.1 - - object.entries@1.1.6: - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.21.2 - - object.fromentries@2.0.6: - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.21.2 - - object.hasown@1.1.2: - dependencies: - define-properties: 1.2.0 - es-abstract: 1.21.2 - - object.values@1.1.6: - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.21.2 - - once@1.4.0: - dependencies: - wrappy: 1.0.2 - - open@8.4.2: - dependencies: - define-lazy-prop: 2.0.0 - is-docker: 2.2.1 - is-wsl: 2.2.0 - - optionator@0.9.1: - dependencies: - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - word-wrap: 1.2.3 - - p-limit@3.1.0: - dependencies: - yocto-queue: 0.1.0 - - p-locate@5.0.0: - dependencies: - p-limit: 3.1.0 - - parent-module@1.0.1: - dependencies: - callsites: 3.1.0 - - path-exists@4.0.0: {} - - path-is-absolute@1.0.1: {} - - path-key@3.1.1: {} - - path-parse@1.0.7: {} - - path-type@4.0.0: {} - - picocolors@1.0.0: {} - - picomatch@2.3.1: {} - - pify@2.3.0: {} - - pirates@4.0.5: {} - - postcss-import@14.1.0(postcss@8.4.21): - dependencies: - postcss: 8.4.21 - postcss-value-parser: 4.2.0 - read-cache: 1.0.0 - resolve: 1.22.1 - - postcss-js@4.0.1(postcss@8.4.21): - dependencies: - camelcase-css: 2.0.1 - postcss: 8.4.21 - - postcss-load-config@3.1.4(postcss@8.4.21): - dependencies: - lilconfig: 2.1.0 - yaml: 1.10.2 - optionalDependencies: - postcss: 8.4.21 - - postcss-nested@6.0.0(postcss@8.4.21): - dependencies: - postcss: 8.4.21 - postcss-selector-parser: 6.0.11 - - postcss-selector-parser@6.0.11: - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - - postcss-value-parser@4.2.0: {} - - postcss@8.4.14: - dependencies: - nanoid: 3.3.6 - picocolors: 1.0.0 - source-map-js: 1.0.2 - - postcss@8.4.21: - dependencies: - nanoid: 3.3.6 - picocolors: 1.0.0 - source-map-js: 1.0.2 - - prelude-ls@1.2.1: {} - - prettier-linter-helpers@1.0.0: - dependencies: - fast-diff: 1.2.0 - - prettier-plugin-tailwindcss@0.2.6(prettier@2.8.7): - dependencies: - prettier: 2.8.7 - - prettier@2.8.7: {} - - prop-types@15.8.1: - dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - react-is: 16.13.1 - - proxy-from-env@1.1.0: {} - - punycode@2.3.0: {} - - queue-microtask@1.2.3: {} - - quick-lru@5.1.1: {} - - react-dom@18.2.0(react@18.2.0): - dependencies: - loose-envify: 1.4.0 - react: 18.2.0 - scheduler: 0.23.0 - - react-is@16.13.1: {} - - react@18.2.0: - dependencies: - loose-envify: 1.4.0 - - read-cache@1.0.0: - dependencies: - pify: 2.3.0 - - readdirp@3.6.0: - dependencies: - picomatch: 2.3.1 - - regenerator-runtime@0.13.11: {} - - regenerator-runtime@0.14.1: {} - - regexp.prototype.flags@1.4.3: - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - functions-have-names: 1.2.3 - - resolve-from@4.0.0: {} - - resolve@1.22.1: - dependencies: - is-core-module: 2.11.0 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - resolve@2.0.0-next.4: - dependencies: - is-core-module: 2.11.0 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - reusify@1.0.4: {} - - rimraf@3.0.2: - dependencies: - glob: 7.2.3 - - run-parallel@1.2.0: - dependencies: - queue-microtask: 1.2.3 - - safe-regex-test@1.0.0: - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.0 - is-regex: 1.1.4 - - scheduler@0.23.0: - dependencies: - loose-envify: 1.4.0 - - semver@6.3.0: {} - - semver@7.3.8: - dependencies: - lru-cache: 6.0.0 - - shebang-command@2.0.0: - dependencies: - shebang-regex: 3.0.0 - - shebang-regex@3.0.0: {} - - side-channel@1.0.4: - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.0 - object-inspect: 1.12.3 - - slash@3.0.0: {} - - slash@4.0.0: {} - - source-map-js@1.0.2: {} - - stop-iteration-iterator@1.0.0: - dependencies: - internal-slot: 1.0.5 - - string.prototype.matchall@4.0.8: - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.21.2 - get-intrinsic: 1.2.0 - has-symbols: 1.0.3 - internal-slot: 1.0.5 - regexp.prototype.flags: 1.4.3 - side-channel: 1.0.4 - - string.prototype.trim@1.2.7: - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.21.2 - - string.prototype.trimend@1.0.6: - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.21.2 - - string.prototype.trimstart@1.0.6: - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.21.2 - - strip-ansi@6.0.1: - dependencies: - ansi-regex: 5.0.1 - - strip-bom@3.0.0: {} - - strip-json-comments@3.1.1: {} - - styled-jsx@5.1.1(react@18.2.0): - dependencies: - client-only: 0.0.1 - react: 18.2.0 - - sucrase@3.31.0: - dependencies: - commander: 4.1.1 - glob: 7.1.6 - lines-and-columns: 1.2.4 - mz: 2.7.0 - pirates: 4.0.5 - ts-interface-checker: 0.1.13 - - supports-color@7.2.0: - dependencies: - has-flag: 4.0.0 - - supports-preserve-symlinks-flag@1.0.0: {} - - synckit@0.8.5: - dependencies: - '@pkgr/utils': 2.3.1 - tslib: 2.5.0 - - tailwind-merge@2.3.0: - dependencies: - '@babel/runtime': 7.24.5 - - tailwindcss@3.3.1(postcss@8.4.21): - dependencies: - arg: 5.0.2 - chokidar: 3.5.3 - color-name: 1.1.4 - didyoumean: 1.2.2 - dlv: 1.1.3 - fast-glob: 3.2.12 - glob-parent: 6.0.2 - is-glob: 4.0.3 - jiti: 1.18.2 - lilconfig: 2.1.0 - micromatch: 4.0.5 - normalize-path: 3.0.0 - object-hash: 3.0.0 - picocolors: 1.0.0 - postcss: 8.4.21 - postcss-import: 14.1.0(postcss@8.4.21) - postcss-js: 4.0.1(postcss@8.4.21) - postcss-load-config: 3.1.4(postcss@8.4.21) - postcss-nested: 6.0.0(postcss@8.4.21) - postcss-selector-parser: 6.0.11 - postcss-value-parser: 4.2.0 - quick-lru: 5.1.1 - resolve: 1.22.1 - sucrase: 3.31.0 - transitivePeerDependencies: - - ts-node - - tapable@2.2.1: {} - - text-table@0.2.0: {} - - thenify-all@1.6.0: - dependencies: - thenify: 3.3.1 - - thenify@3.3.1: - dependencies: - any-promise: 1.3.0 - - tiny-glob@0.2.9: - dependencies: - globalyzer: 0.1.0 - globrex: 0.1.2 - - to-regex-range@5.0.1: - dependencies: - is-number: 7.0.0 - - ts-interface-checker@0.1.13: {} - - tsconfig-paths@3.14.2: - dependencies: - '@types/json5': 0.0.29 - json5: 1.0.2 - minimist: 1.2.8 - strip-bom: 3.0.0 - - tslib@1.14.1: {} - - tslib@2.5.0: {} - - tsutils@3.21.0(typescript@5.0.3): - dependencies: - tslib: 1.14.1 - typescript: 5.0.3 - - type-check@0.4.0: - dependencies: - prelude-ls: 1.2.1 - - type-fest@0.20.2: {} - - typed-array-length@1.0.4: - dependencies: - call-bind: 1.0.2 - for-each: 0.3.3 - is-typed-array: 1.1.10 - - typescript@5.0.3: {} - - unbox-primitive@1.0.2: - dependencies: - call-bind: 1.0.2 - has-bigints: 1.0.2 - has-symbols: 1.0.3 - which-boxed-primitive: 1.0.2 - - update-browserslist-db@1.0.10(browserslist@4.21.5): - dependencies: - browserslist: 4.21.5 - escalade: 3.1.1 - picocolors: 1.0.0 - - uri-js@4.4.1: - dependencies: - punycode: 2.3.0 - - use-sync-external-store@1.2.0(react@18.2.0): - dependencies: - react: 18.2.0 - - util-deprecate@1.0.2: {} - - which-boxed-primitive@1.0.2: - dependencies: - is-bigint: 1.0.4 - is-boolean-object: 1.1.2 - is-number-object: 1.0.7 - is-string: 1.0.7 - is-symbol: 1.0.4 - - which-collection@1.0.1: - dependencies: - is-map: 2.0.2 - is-set: 2.0.2 - is-weakmap: 2.0.1 - is-weakset: 2.0.2 - - which-typed-array@1.1.9: - dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.2 - for-each: 0.3.3 - gopd: 1.0.1 - has-tostringtag: 1.0.0 - is-typed-array: 1.1.10 - - which@2.0.2: - dependencies: - isexe: 2.0.0 - - word-wrap@1.2.3: {} - - wrappy@1.0.2: {} - - yallist@4.0.0: {} - - yaml@1.10.2: {} - - yocto-queue@0.1.0: {} - - zod@3.21.4: {} diff --git a/prettier.config.cjs b/prettier.config.cjs deleted file mode 100644 index ee0dede..0000000 --- a/prettier.config.cjs +++ /dev/null @@ -1,7 +0,0 @@ -/** @type {import("prettier").Config} */ -module.exports = { - plugins: [ - require.resolve("prettier-plugin-tailwindcss"), - require.resolve("@it-incubator/prettier-config"), - ], -}; diff --git a/src/components/auth-redirect/index.tsx b/src/components/auth-redirect/index.tsx index 1ac843d..0602a73 100644 --- a/src/components/auth-redirect/index.tsx +++ b/src/components/auth-redirect/index.tsx @@ -9,14 +9,14 @@ import { useMeQuery } from "@/services"; export const AuthRedirect: FC<{ children: ReactNode }> = ({ children }) => { const router = useRouter(); - const { data: user, isLoading, isError } = useMeQuery(); + const { data: user, isLoading } = useMeQuery(); const isAuthPage = router.pathname === "/login"; useEffect(() => { if (!isLoading && !user && !isAuthPage) { router.push("/login"); } - }, [user, isError, isLoading, isAuthPage, router]); + }, [user, isLoading, isAuthPage, router]); if (isLoading || (!user && !isAuthPage)) { return ( diff --git a/src/services/todolist-api/todolist-api.instance.ts b/src/services/todolist-api/todolist-api.instance.ts index 4f83d04..4732ab1 100644 --- a/src/services/todolist-api/todolist-api.instance.ts +++ b/src/services/todolist-api/todolist-api.instance.ts @@ -1,11 +1,13 @@ import { Mutex } from "async-mutex"; import axios from "axios"; +import router from "next/router"; + const mutex = new Mutex(); let refreshedAt: number | null = null; export const todolistApiInstance = axios.create({ - baseURL: "http://localhost:3000", + baseURL: "http://localhost:3000" }); async function refreshAccessToken(): Promise { @@ -17,8 +19,8 @@ async function refreshAccessToken(): Promise { {}, { headers: { - Authorization: `Bearer ${localStorage.getItem("refreshToken")}`, - }, + Authorization: `Bearer ${localStorage.getItem("refreshToken")}` + } } ); @@ -46,9 +48,10 @@ todolistApiInstance.interceptors.request.use( todolistApiInstance.interceptors.response.use( (response) => response, async (error) => { + if(error?.response?.request?.responseURL?.includes("refresh-token")){ + return } await mutex.waitForUnlock(); const originalRequest = error.config; - // Check for a 401 response and if this request hasn't been retried yet if (error.response?.status === 401 && !originalRequest._retry) { if (!mutex.isLocked()) { @@ -60,7 +63,7 @@ todolistApiInstance.interceptors.response.use( // If the token has been refreshed within the last minute, use the refreshed token originalRequest.headers[ "Authorization" - ] = `Bearer ${localStorage.getItem("accessToken")}`; + ] = `Bearer ${localStorage.getItem("accessToken")}`; release(); return todolistApiInstance(originalRequest); @@ -72,6 +75,8 @@ todolistApiInstance.interceptors.response.use( originalRequest.headers["Authorization"] = `Bearer ${newAccessToken}`; return todolistApiInstance(originalRequest); // Retry the original request with the new token + } catch (error) { + router.push("/login"); } finally { release(); } From da0cccfb0e3e1b46f762e088ce642520f3bd621c Mon Sep 17 00:00:00 2001 From: Andres Date: Fri, 9 Aug 2024 16:53:37 +0200 Subject: [PATCH 03/14] add sign-up page --- src/components/auth-redirect/index.tsx | 3 +- src/pages/sign-up.tsx | 49 +++++++++++++++++++ src/services/todolist-api/auth/auth.api.ts | 7 ++- src/services/todolist-api/auth/auth.hooks.ts | 6 +++ .../todolist-api/todolist-api.instance.ts | 30 ++++++------ .../todolist-api/todolists/todolists.types.ts | 10 +++- 6 files changed, 87 insertions(+), 18 deletions(-) create mode 100644 src/pages/sign-up.tsx diff --git a/src/components/auth-redirect/index.tsx b/src/components/auth-redirect/index.tsx index 0602a73..8b03e6c 100644 --- a/src/components/auth-redirect/index.tsx +++ b/src/components/auth-redirect/index.tsx @@ -10,7 +10,8 @@ import { useMeQuery } from "@/services"; export const AuthRedirect: FC<{ children: ReactNode }> = ({ children }) => { const router = useRouter(); const { data: user, isLoading } = useMeQuery(); - const isAuthPage = router.pathname === "/login"; + const isAuthPage = + router.pathname === "/login" || router.pathname === "/sign-up"; useEffect(() => { if (!isLoading && !user && !isAuthPage) { diff --git a/src/pages/sign-up.tsx b/src/pages/sign-up.tsx new file mode 100644 index 0000000..85fb9aa --- /dev/null +++ b/src/pages/sign-up.tsx @@ -0,0 +1,49 @@ +import type { FormEvent } from "react"; +import React from "react"; + +import type { NextPage } from "next"; + +import { Button, Input } from "@/components"; +import { useSignUpMutation } from "@/services"; + +const Login: NextPage = () => { + const { mutate: signUp } = useSignUpMutation(); + + const handleSubmit = (e: FormEvent) => { + e.preventDefault(); + const formData = new FormData(e.currentTarget); + + const values = Object.fromEntries(formData) as any; + signUp(values); + }; + + return ( +
    +
    +

    Sign up

    + + + + + + +
    +
    + ); +}; + +export default Login; diff --git a/src/services/todolist-api/auth/auth.api.ts b/src/services/todolist-api/auth/auth.api.ts index 1ed665f..7c707f3 100644 --- a/src/services/todolist-api/auth/auth.api.ts +++ b/src/services/todolist-api/auth/auth.api.ts @@ -3,6 +3,7 @@ import type { LogoutResponse, MeResponse, PostLoginArgs, + PostSignUpArgs, } from "../todolists"; import { handleError } from "@/helpers"; @@ -12,7 +13,7 @@ export const AuthApi = { async login(args: PostLoginArgs) { const res = await todolistApiInstance.post( "/auth/login", - args + args, ); localStorage.setItem("accessToken", res.data.accessToken); @@ -20,7 +21,11 @@ export const AuthApi = { return res.data; }, + async signUp(args: PostSignUpArgs) { + const res = await todolistApiInstance.post("/auth/sign-up", args); + return res.data; + }, async logout() { const res = await todolistApiInstance.delete("/auth/login"); diff --git a/src/services/todolist-api/auth/auth.hooks.ts b/src/services/todolist-api/auth/auth.hooks.ts index e2d8b95..cab23ad 100644 --- a/src/services/todolist-api/auth/auth.hooks.ts +++ b/src/services/todolist-api/auth/auth.hooks.ts @@ -38,3 +38,9 @@ export const useLogoutMutation = () => { }, }); }; + +export const useSignUpMutation = () => { + return useMutation({ + mutationFn: AuthApi.signUp, + }); +}; diff --git a/src/services/todolist-api/todolist-api.instance.ts b/src/services/todolist-api/todolist-api.instance.ts index 4732ab1..2d701ff 100644 --- a/src/services/todolist-api/todolist-api.instance.ts +++ b/src/services/todolist-api/todolist-api.instance.ts @@ -7,7 +7,7 @@ const mutex = new Mutex(); let refreshedAt: number | null = null; export const todolistApiInstance = axios.create({ - baseURL: "http://localhost:3000" + baseURL: "http://localhost:3000", }); async function refreshAccessToken(): Promise { @@ -19,9 +19,9 @@ async function refreshAccessToken(): Promise { {}, { headers: { - Authorization: `Bearer ${localStorage.getItem("refreshToken")}` - } - } + Authorization: `Bearer ${localStorage.getItem("refreshToken")}`, + }, + }, ); localStorage.setItem("accessToken", res.data.accessToken); @@ -42,14 +42,15 @@ todolistApiInstance.interceptors.request.use( return config; }, - (error) => Promise.reject(error) + (error) => Promise.reject(error), ); todolistApiInstance.interceptors.response.use( (response) => response, async (error) => { - if(error?.response?.request?.responseURL?.includes("refresh-token")){ - return } + if (error?.response?.request?.responseURL?.includes("refresh-token")) { + return; + } await mutex.waitForUnlock(); const originalRequest = error.config; // Check for a 401 response and if this request hasn't been retried yet @@ -61,9 +62,7 @@ todolistApiInstance.interceptors.response.use( if (refreshedAt && refreshedAt + 60000 > new Date().getTime()) { // If the token has been refreshed within the last minute, use the refreshed token - originalRequest.headers[ - "Authorization" - ] = `Bearer ${localStorage.getItem("accessToken")}`; + originalRequest.headers.Authorization = `Bearer ${localStorage.getItem("accessToken")}`; release(); return todolistApiInstance(originalRequest); @@ -72,11 +71,14 @@ todolistApiInstance.interceptors.response.use( try { const newAccessToken = await refreshAccessToken(); - originalRequest.headers["Authorization"] = `Bearer ${newAccessToken}`; + originalRequest.headers.Authorization = `Bearer ${newAccessToken}`; return todolistApiInstance(originalRequest); // Retry the original request with the new token } catch (error) { - router.push("/login"); + console.log(window.location.pathname); + if (!["/login", "/sign-up"].includes(window.location.pathname)) { + router.push("/login"); + } } finally { release(); } @@ -84,12 +86,12 @@ todolistApiInstance.interceptors.response.use( await mutex.waitForUnlock(); const newAccessToken = localStorage.getItem("accessToken"); - originalRequest.headers["Authorization"] = `Bearer ${newAccessToken}`; + originalRequest.headers.Authorization = `Bearer ${newAccessToken}`; return todolistApiInstance(originalRequest); // Retry the original request with the new token } } return Promise.reject(error); - } + }, ); diff --git a/src/services/todolist-api/todolists/todolists.types.ts b/src/services/todolist-api/todolists/todolists.types.ts index 82112bd..521d264 100644 --- a/src/services/todolist-api/todolists/todolists.types.ts +++ b/src/services/todolist-api/todolists/todolists.types.ts @@ -29,6 +29,12 @@ export type PostLoginArgs = { rememberMe: boolean; }; +export type PostSignUpArgs = { + email: string; + password: string; + username?: string; +}; + export type LoginResponseData = { accessToken: string; refreshToken: string; @@ -51,8 +57,8 @@ export type CreateTodolistResponseData = { }; export type CreateTaskResponse = Task; -export type DeleteTaskResponse = void; -export type UpdateTaskResponse = void; +export type DeleteTaskResponse = undefined; +export type UpdateTaskResponse = undefined; export enum TaskStatus { OPEN = "OPEN", From 57c5998435a734e1d38d4b4fcbccbbc0ec963211 Mon Sep 17 00:00:00 2001 From: andres Date: Sun, 11 Aug 2024 15:28:53 +0200 Subject: [PATCH 04/14] lint and format --- .idea/jsLibraryMappings.xml | 6 ++ biome.json | 5 + bun.lockb | Bin 181474 -> 181474 bytes src/components/auth-redirect/index.tsx | 26 +++--- src/components/button/index.tsx | 14 +-- src/components/fullscreen-loader/index.tsx | 6 +- src/components/index.ts | 12 +-- src/components/input/index.tsx | 8 +- src/components/loader/index.tsx | 4 +- src/components/todolist/index.tsx | 82 ++++++++-------- src/components/toggle-group/toggle-group.tsx | 34 +++---- src/constants/index.ts | 6 +- src/constants/query-keys/index.ts | 2 +- src/constants/routes/index.ts | 2 +- src/env/client.mjs | 26 +++--- src/env/schema.mjs | 8 +- src/env/server.mjs | 20 ++-- src/helpers/api-response/index.ts | 24 ++--- src/helpers/classnames/classnames.ts | 6 +- src/helpers/classnames/index.ts | 2 +- src/helpers/handle-error/index.ts | 6 +- src/helpers/index.ts | 8 +- src/helpers/no-refetch/index.ts | 2 +- src/pages/_app.tsx | 16 ++-- src/pages/index.tsx | 47 +++++----- src/pages/login.tsx | 40 ++++---- src/pages/sign-up.tsx | 28 +++--- src/services/index.ts | 4 +- src/services/todolist-api/auth/auth.api.ts | 28 +++--- src/services/todolist-api/auth/auth.hooks.ts | 42 ++++----- src/services/todolist-api/auth/index.ts | 4 +- .../todolist-api/todolist-api.instance.ts | 74 +++++++-------- src/services/todolist-api/todolists/index.ts | 6 +- .../todolist-api/todolists/todolists.api.ts | 58 ++++++------ .../todolist-api/todolists/todolists.hooks.ts | 60 ++++++------ .../todolist-api/todolists/todolists.types.ts | 88 +++++++++--------- 36 files changed, 407 insertions(+), 397 deletions(-) create mode 100644 .idea/jsLibraryMappings.xml diff --git a/.idea/jsLibraryMappings.xml b/.idea/jsLibraryMappings.xml new file mode 100644 index 0000000..d23208f --- /dev/null +++ b/.idea/jsLibraryMappings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/biome.json b/biome.json index 827672f..3b5fafa 100644 --- a/biome.json +++ b/biome.json @@ -9,5 +9,10 @@ "recommended": true } }, + "javascript": { + "formatter": { + "semicolons": "asNeeded" + } + }, "formatter": { "indentStyle": "space", "indentWidth": 2 } } diff --git a/bun.lockb b/bun.lockb index 774c8de5b43bc03c430b1a68a9cd9d231ecc4f86..4e90f882492175dc4aae4bc4f9fae33b32e29232 100755 GIT binary patch delta 24 gcmaFV$^EF4yI~9C#&c|phI$ry#@n}_W7Pfz0D!Rx{r~^~ delta 24 dcmaFV$^EF4yI~9C#&c{;3?Q(5`#DDKZvc1+2?qcG diff --git a/src/components/auth-redirect/index.tsx b/src/components/auth-redirect/index.tsx index 8b03e6c..dd5f54a 100644 --- a/src/components/auth-redirect/index.tsx +++ b/src/components/auth-redirect/index.tsx @@ -1,31 +1,31 @@ -import type { FC, ReactNode } from "react"; -import { useEffect } from "react"; +import type { FC, ReactNode } from "react" +import { useEffect } from "react" -import { useRouter } from "next/router"; +import { useRouter } from "next/router" -import { Loader } from "../loader"; +import { Loader } from "../loader" -import { useMeQuery } from "@/services"; +import { useMeQuery } from "@/services" export const AuthRedirect: FC<{ children: ReactNode }> = ({ children }) => { - const router = useRouter(); - const { data: user, isLoading } = useMeQuery(); + const router = useRouter() + const { data: user, isLoading } = useMeQuery() const isAuthPage = - router.pathname === "/login" || router.pathname === "/sign-up"; + router.pathname === "/login" || router.pathname === "/sign-up" useEffect(() => { if (!isLoading && !user && !isAuthPage) { - router.push("/login"); + router.push("/login") } - }, [user, isLoading, isAuthPage, router]); + }, [user, isLoading, isAuthPage, router]) if (isLoading || (!user && !isAuthPage)) { return (
    - ); + ) } - return <>{children}; -}; + return <>{children} +} diff --git a/src/components/button/index.tsx b/src/components/button/index.tsx index 2f48aeb..6088487 100644 --- a/src/components/button/index.tsx +++ b/src/components/button/index.tsx @@ -1,10 +1,10 @@ -import type { ComponentPropsWithoutRef, FC } from "react"; +import type { ComponentPropsWithoutRef, FC } from "react" -import { cn } from "@/helpers"; +import { cn } from "@/helpers" type Props = ComponentPropsWithoutRef<"button"> & { - variant?: "primary" | "outlined" | "icon"; -}; + variant?: "primary" | "outlined" | "icon" +} export const Button: FC = ({ className, @@ -18,9 +18,9 @@ export const Button: FC = ({ variant === "outlined" && "border-sky-700 bg-inherit text-sky-700", variant === "icon" && "h-6 w-6 shrink-0 border-none bg-inherit p-0 text-sky-700 hover:bg-slate-100 hover:text-sky-800", - className + className, )} {...rest} /> - ); -}; + ) +} diff --git a/src/components/fullscreen-loader/index.tsx b/src/components/fullscreen-loader/index.tsx index c6a6a64..0f7911a 100644 --- a/src/components/fullscreen-loader/index.tsx +++ b/src/components/fullscreen-loader/index.tsx @@ -1,9 +1,9 @@ -import { Loader } from "../loader"; +import { Loader } from "../loader" export const FullscreenLoader = () => { return (
    - ); -}; + ) +} diff --git a/src/components/index.ts b/src/components/index.ts index bb544b5..7775d5a 100644 --- a/src/components/index.ts +++ b/src/components/index.ts @@ -1,6 +1,6 @@ -export * from "./todolist"; -export * from "./auth-redirect"; -export * from "./button"; -export * from "./input"; -export * from "./loader"; -export * from "./fullscreen-loader"; +export * from "./todolist" +export * from "./auth-redirect" +export * from "./button" +export * from "./input" +export * from "./loader" +export * from "./fullscreen-loader" diff --git a/src/components/input/index.tsx b/src/components/input/index.tsx index 4d55992..4a123cc 100644 --- a/src/components/input/index.tsx +++ b/src/components/input/index.tsx @@ -1,9 +1,9 @@ -import type { DetailedHTMLProps, FC, InputHTMLAttributes } from "react"; +import type { DetailedHTMLProps, FC, InputHTMLAttributes } from "react" type Props = DetailedHTMLProps< InputHTMLAttributes, HTMLInputElement ->; +> export const Input: FC = ({ className, ...rest }) => { return ( @@ -11,5 +11,5 @@ export const Input: FC = ({ className, ...rest }) => { className={`w-full rounded-md border border-gray-300 px-4 py-2 focus:border-transparent focus:outline-none focus:ring-2 focus:ring-blue-600 ${className}`} {...rest} /> - ); -}; + ) +} diff --git a/src/components/loader/index.tsx b/src/components/loader/index.tsx index 0e6b3e1..b2e8265 100644 --- a/src/components/loader/index.tsx +++ b/src/components/loader/index.tsx @@ -3,5 +3,5 @@ export const Loader = () => {
    - ); -}; + ) +} diff --git a/src/components/todolist/index.tsx b/src/components/todolist/index.tsx index 4953708..5bf07bd 100644 --- a/src/components/todolist/index.tsx +++ b/src/components/todolist/index.tsx @@ -1,19 +1,19 @@ -import type { ChangeEvent, FC, FormEvent, MouseEventHandler } from "react"; -import { memo, useState } from "react"; +import type { ChangeEvent, FC, FormEvent } from "react" +import { memo, useState } from "react" -import { Trash, Plus } from "lucide-react"; +import { Plus, Trash } from "lucide-react" import type { Task, Todolist as TodolistType, -} from "../../services/todolist-api/todolists"; -import { Button } from "../button"; -import { Input } from "../input"; +} from "../../services/todolist-api/todolists" +import { Button } from "../button" +import { Input } from "../input" import { ToggleGroup, ToggleGroupItem, -} from "@/components/toggle-group/toggle-group"; +} from "@/components/toggle-group/toggle-group" import { TaskStatus, useCreateTaskMutation, @@ -21,62 +21,62 @@ import { useDeleteTodolistMutation, useGetTasksQuery, useUpdateTaskMutation, -} from "@/services"; +} from "@/services" type Props = { - todolist: TodolistType; -}; + todolist: TodolistType +} -type Filter = "all" | "active" | "completed"; +type Filter = "all" | "active" | "completed" export const Todolist: FC = memo(({ todolist }) => { - const { data: tasks, isLoading } = useGetTasksQuery(todolist.id); - const { mutate: putTask } = useUpdateTaskMutation(); - const { mutate: deleteTask } = useDeleteTaskMutation(); - const { mutate: deleteTodolist } = useDeleteTodolistMutation(); - const { mutate: createTask } = useCreateTaskMutation(); - const [newTaskTitle, setNewTaskTitle] = useState(""); - const [filter, setFilter] = useState("all"); + const { data: tasks, isLoading } = useGetTasksQuery(todolist.id) + const { mutate: putTask } = useUpdateTaskMutation() + const { mutate: deleteTask } = useDeleteTaskMutation() + const { mutate: deleteTodolist } = useDeleteTodolistMutation() + const { mutate: createTask } = useCreateTaskMutation() + const [newTaskTitle, setNewTaskTitle] = useState("") + const [filter, setFilter] = useState("all") const handleChangeStatus = (todolistId: string, task: Task) => { const newTask: Task = { ...task, status: task.status === TaskStatus.DONE ? TaskStatus.OPEN : TaskStatus.DONE, - }; + } - putTask({ todolistId, task: newTask }); - }; + putTask({ todolistId, task: newTask }) + } const handleDeleteTask = (todolistId: string, taskId: string) => { - deleteTask({ todolistId, taskId }); - }; + deleteTask({ todolistId, taskId }) + } const handleDeleteTodolist = (todolistId: string) => { - deleteTodolist({ todolistId }); - }; + deleteTodolist({ todolistId }) + } const handleAddTask = (e: FormEvent) => { - e.preventDefault(); - createTask({ todolistId: todolist.id, title: newTaskTitle }); - setNewTaskTitle(""); - }; + e.preventDefault() + createTask({ todolistId: todolist.id, title: newTaskTitle }) + setNewTaskTitle("") + } const handleNewTaskTitleChange = (e: ChangeEvent) => { - setNewTaskTitle(e.target.value); - }; + setNewTaskTitle(e.target.value) + } const handleFilterChange = (value: string) => { - setFilter(value as Filter); - }; + setFilter(value as Filter) + } - if (isLoading) return
    loading...
    ; + if (isLoading) return
    loading...
    const filteredTasks = tasks?.filter((task) => { switch (filter) { case "active": - return task.status === TaskStatus.OPEN; + return task.status === TaskStatus.OPEN case "completed": - return task.status === TaskStatus.DONE; + return task.status === TaskStatus.DONE default: - return true; + return true } - }); + }) return (
    = memo(({ todolist }) => {
    - ); + ) })}
    = memo(({ todolist }) => {
- ); -}); + ) +}) diff --git a/src/components/toggle-group/toggle-group.tsx b/src/components/toggle-group/toggle-group.tsx index 21339d1..2d1acc9 100644 --- a/src/components/toggle-group/toggle-group.tsx +++ b/src/components/toggle-group/toggle-group.tsx @@ -1,12 +1,12 @@ -"use client"; +"use client" -import * as React from "react"; +import * as React from "react" -import * as ToggleGroupPrimitive from "@radix-ui/react-toggle-group"; -import type { VariantProps } from "class-variance-authority"; -import { cva } from "class-variance-authority"; +import * as ToggleGroupPrimitive from "@radix-ui/react-toggle-group" +import type { VariantProps } from "class-variance-authority" +import { cva } from "class-variance-authority" -import { cn } from "@/helpers"; +import { cn } from "@/helpers" const toggleVariants = cva( "inline-flex border border-sky-700 items-center justify-center rounded-md text-sm font-medium transition-colors hover:bg-muted hover:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-sky-700 data-[state=on]:text-white", @@ -27,14 +27,14 @@ const toggleVariants = cva( variant: "default", size: "default", }, - } -); + }, +) const ToggleGroupContext = React.createContext< VariantProps >({ size: "default", variant: "default", -}); +}) const ToggleGroup = React.forwardRef< React.ElementRef, @@ -50,16 +50,16 @@ const ToggleGroup = React.forwardRef< {children} -)); +)) -ToggleGroup.displayName = ToggleGroupPrimitive.Root.displayName; +ToggleGroup.displayName = ToggleGroupPrimitive.Root.displayName const ToggleGroupItem = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef & VariantProps >(({ className, children, variant, size, ...props }, ref) => { - const context = React.useContext(ToggleGroupContext); + const context = React.useContext(ToggleGroupContext) return ( {children} - ); -}); + ) +}) -ToggleGroupItem.displayName = ToggleGroupPrimitive.Item.displayName; +ToggleGroupItem.displayName = ToggleGroupPrimitive.Item.displayName -export { ToggleGroup, ToggleGroupItem }; +export { ToggleGroup, ToggleGroupItem } diff --git a/src/constants/index.ts b/src/constants/index.ts index bbe7f52..7b27518 100644 --- a/src/constants/index.ts +++ b/src/constants/index.ts @@ -1,3 +1,3 @@ -export * from "./routes"; -export * from "./query-keys"; -export * from "./result-code"; +export * from "./routes" +export * from "./query-keys" +export * from "./result-code" diff --git a/src/constants/query-keys/index.ts b/src/constants/query-keys/index.ts index 417b25b..6e9343c 100644 --- a/src/constants/query-keys/index.ts +++ b/src/constants/query-keys/index.ts @@ -2,4 +2,4 @@ export const QUERY_KEYS = { TODOLISTS: "todolists", TASKS: "tasks", ME: "me", -} as const; +} as const diff --git a/src/constants/routes/index.ts b/src/constants/routes/index.ts index 956fa1a..9f5ae9c 100644 --- a/src/constants/routes/index.ts +++ b/src/constants/routes/index.ts @@ -1,4 +1,4 @@ export const ROUTES = { HOME: "/", LOGIN: "/login", -} as const; +} as const diff --git a/src/env/client.mjs b/src/env/client.mjs index 107c6d3..5d17abd 100644 --- a/src/env/client.mjs +++ b/src/env/client.mjs @@ -1,35 +1,35 @@ // @ts-check -import { clientEnv, clientSchema } from "./schema.mjs"; +import { clientEnv, clientSchema } from "./schema.mjs" -const _clientEnv = clientSchema.safeParse(clientEnv); +const _clientEnv = clientSchema.safeParse(clientEnv) export const formatErrors = ( /** @type {import('zod').ZodFormattedError,string>} */ - errors + errors, ) => Object.entries(errors) .map(([name, value]) => { if (value && "_errors" in value) - return `${name}: ${value._errors.join(", ")}\n`; + return `${name}: ${value._errors.join(", ")}\n` }) - .filter(Boolean); + .filter(Boolean) if (!_clientEnv.success) { console.error( "❌ Invalid environment variables:\n", - ...formatErrors(_clientEnv.error.format()) - ); - throw new Error("Invalid environment variables"); + ...formatErrors(_clientEnv.error.format()), + ) + throw new Error("Invalid environment variables") } -for (let key of Object.keys(_clientEnv.data)) { +for (const key of Object.keys(_clientEnv.data)) { if (!key.startsWith("NEXT_PUBLIC_")) { console.warn( - `❌ Invalid public environment variable name: ${key}. It must begin with 'NEXT_PUBLIC_'` - ); + `❌ Invalid public environment variable name: ${key}. It must begin with 'NEXT_PUBLIC_'`, + ) - throw new Error("Invalid public environment variable name"); + throw new Error("Invalid public environment variable name") } } -export const env = _clientEnv.data; +export const env = _clientEnv.data diff --git a/src/env/schema.mjs b/src/env/schema.mjs index c621d13..6d4eef8 100644 --- a/src/env/schema.mjs +++ b/src/env/schema.mjs @@ -1,5 +1,5 @@ // @ts-check -import { z } from "zod"; +import { z } from "zod" /** * Specify your server-side environment variables schema here. @@ -7,7 +7,7 @@ import { z } from "zod"; */ export const serverSchema = z.object({ NODE_ENV: z.enum(["development", "test", "production"]), -}); +}) /** * Specify your client-side environment variables schema here. @@ -16,7 +16,7 @@ export const serverSchema = z.object({ */ export const clientSchema = z.object({ // NEXT_PUBLIC_CLIENTVAR: z.string(), -}); +}) /** * You can't destruct `process.env` as a regular object, so you have to do @@ -26,4 +26,4 @@ export const clientSchema = z.object({ */ export const clientEnv = { // NEXT_PUBLIC_CLIENTVAR: process.env.NEXT_PUBLIC_CLIENTVAR, -}; +} diff --git a/src/env/server.mjs b/src/env/server.mjs index 4937bb5..03b6fe0 100644 --- a/src/env/server.mjs +++ b/src/env/server.mjs @@ -3,25 +3,25 @@ * This file is included in `/next.config.mjs` which ensures the app isn't built with invalid env vars. * It has to be a `.mjs`-file to be imported there. */ -import { serverSchema } from "./schema.mjs"; -import { env as clientEnv, formatErrors } from "./client.mjs"; +import { serverSchema } from "./schema.mjs" +import { env as clientEnv, formatErrors } from "./client.mjs" -const _serverEnv = serverSchema.safeParse(process.env); +const _serverEnv = serverSchema.safeParse(process.env) if (!_serverEnv.success) { console.error( "❌ Invalid environment variables:\n", - ...formatErrors(_serverEnv.error.format()) - ); - throw new Error("Invalid environment variables"); + ...formatErrors(_serverEnv.error.format()), + ) + throw new Error("Invalid environment variables") } -for (let key of Object.keys(_serverEnv.data)) { +for (const key of Object.keys(_serverEnv.data)) { if (key.startsWith("NEXT_PUBLIC_")) { - console.warn("❌ You are exposing a server-side env-variable:", key); + console.warn("❌ You are exposing a server-side env-variable:", key) - throw new Error("You are exposing a server-side env-variable"); + throw new Error("You are exposing a server-side env-variable") } } -export const env = { ..._serverEnv.data, ...clientEnv }; +export const env = { ..._serverEnv.data, ...clientEnv } diff --git a/src/helpers/api-response/index.ts b/src/helpers/api-response/index.ts index c30b670..bff2302 100644 --- a/src/helpers/api-response/index.ts +++ b/src/helpers/api-response/index.ts @@ -1,17 +1,17 @@ -import type { ResultCode } from "@/constants"; +import type { ResultCode } from "@/constants" type ApiResponseSuccess = { - data: T; - messages?: never; - fieldsErrors?: never; - resultCode: ResultCode.Success; -}; + data: T + messages?: never + fieldsErrors?: never + resultCode: ResultCode.Success +} type ApiResponseError = { - data: T; - messages: string[]; - fieldsErrors?: string[]; - resultCode: ResultCode.InvalidRequest | ResultCode.InvalidRequestWithCaptcha; -}; + data: T + messages: string[] + fieldsErrors?: string[] + resultCode: ResultCode.InvalidRequest | ResultCode.InvalidRequestWithCaptcha +} -export type ApiResponse = ApiResponseSuccess | ApiResponseError; +export type ApiResponse = ApiResponseSuccess | ApiResponseError diff --git a/src/helpers/classnames/classnames.ts b/src/helpers/classnames/classnames.ts index a5ef193..bd0c391 100644 --- a/src/helpers/classnames/classnames.ts +++ b/src/helpers/classnames/classnames.ts @@ -1,6 +1,6 @@ -import { clsx, type ClassValue } from "clsx"; -import { twMerge } from "tailwind-merge"; +import { clsx, type ClassValue } from "clsx" +import { twMerge } from "tailwind-merge" export function cn(...inputs: ClassValue[]) { - return twMerge(clsx(inputs)); + return twMerge(clsx(inputs)) } diff --git a/src/helpers/classnames/index.ts b/src/helpers/classnames/index.ts index 15c0006..8cd8f33 100644 --- a/src/helpers/classnames/index.ts +++ b/src/helpers/classnames/index.ts @@ -1 +1 @@ -export * from "./classnames"; +export * from "./classnames" diff --git a/src/helpers/handle-error/index.ts b/src/helpers/handle-error/index.ts index 2dea81f..7e0e43b 100644 --- a/src/helpers/handle-error/index.ts +++ b/src/helpers/handle-error/index.ts @@ -1,4 +1,4 @@ -import type { ApiResponse } from "@/helpers"; +import type { ApiResponse } from "@/helpers" export const handleError = (data: ApiResponse): ApiResponse => { // if (data.resultCode !== 0) { @@ -7,5 +7,5 @@ export const handleError = (data: ApiResponse): ApiResponse => { // throw new Error(error); // } - return data; -}; + return data +} diff --git a/src/helpers/index.ts b/src/helpers/index.ts index daeb2d4..b7ea556 100644 --- a/src/helpers/index.ts +++ b/src/helpers/index.ts @@ -1,4 +1,4 @@ -export * from "./handle-error"; -export * from "./no-refetch"; -export * from "./api-response"; -export * from "./classnames"; +export * from "./handle-error" +export * from "./no-refetch" +export * from "./api-response" +export * from "./classnames" diff --git a/src/helpers/no-refetch/index.ts b/src/helpers/no-refetch/index.ts index 904079a..9f267c9 100644 --- a/src/helpers/no-refetch/index.ts +++ b/src/helpers/no-refetch/index.ts @@ -5,4 +5,4 @@ export const noRefetch = { refetchOnMount: false, refetchIntervalInBackground: false, retry: false, -} as const; +} as const diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index d14b253..20aa50d 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -1,11 +1,11 @@ -import "../styles/globals.css"; +import "../styles/globals.css" -import { QueryClientProvider, QueryClient } from "@tanstack/react-query"; -import { type AppType } from "next/dist/shared/lib/utils"; +import { QueryClientProvider, QueryClient } from "@tanstack/react-query" +import type { AppType } from "next/dist/shared/lib/utils" -import { AuthRedirect } from "@/components"; +import { AuthRedirect } from "@/components" -const queryClient = new QueryClient(); +const queryClient = new QueryClient() const MyApp: AppType = ({ Component, pageProps }) => { return ( @@ -14,7 +14,7 @@ const MyApp: AppType = ({ Component, pageProps }) => { - ); -}; + ) +} -export default MyApp; +export default MyApp diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 0fb3b31..d1a5542 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,39 +1,38 @@ -import type { ChangeEvent, FormEvent } from "react"; -import { useState } from "react"; +import type { ChangeEvent, FormEvent } from "react" +import { useState } from "react" -import { type NextPage } from "next"; -import Head from "next/head"; +import type { NextPage } from "next" +import Head from "next/head" -import { Todolist, Button, FullscreenLoader, Input } from "@/components"; +import { Todolist, Button, FullscreenLoader, Input } from "@/components" import { useCreateTodolistMutation, useLogoutMutation, useTodolistsQuery, -} from "@/services"; +} from "@/services" const Home: NextPage = () => { - const [newTodolistTitle, setNewTodolistTitle] = useState(""); - const { mutate: logout } = useLogoutMutation(); - const { data: todolists, isLoading: isTodolistsLoading } = - useTodolistsQuery(); + const [newTodolistTitle, setNewTodolistTitle] = useState("") + const { mutate: logout } = useLogoutMutation() + const { data: todolists, isLoading: isTodolistsLoading } = useTodolistsQuery() const handleLogout = () => { - logout(); - }; + logout() + } - const { mutate: createTodolist } = useCreateTodolistMutation(); + const { mutate: createTodolist } = useCreateTodolistMutation() const handleAddTodolist = (e: FormEvent) => { - e.preventDefault(); - createTodolist({ title: newTodolistTitle }); - setNewTodolistTitle(""); - }; + e.preventDefault() + createTodolist({ title: newTodolistTitle }) + setNewTodolistTitle("") + } const handleNewTodolistTitleChange = (e: ChangeEvent) => { - setNewTodolistTitle(e.target.value); - }; + setNewTodolistTitle(e.target.value) + } - if (isTodolistsLoading) return ; + if (isTodolistsLoading) return return ( <> @@ -59,12 +58,12 @@ const Home: NextPage = () => {
{todolists?.map((todolist) => { - return ; + return })}
- ); -}; + ) +} -export default Home; +export default Home diff --git a/src/pages/login.tsx b/src/pages/login.tsx index 629bdac..5f8c330 100644 --- a/src/pages/login.tsx +++ b/src/pages/login.tsx @@ -1,37 +1,37 @@ -import type { ChangeEvent } from "react"; -import React, { useState } from "react"; +import type { ChangeEvent } from "react" +import React, { useState } from "react" -import type { NextPage } from "next"; +import type { NextPage } from "next" -import { Button, Input } from "@/components"; -import { useLoginMutation } from "@/services"; +import { Button, Input } from "@/components" +import { useLoginMutation } from "@/services" const Login: NextPage = () => { - const { mutate: login } = useLoginMutation(); + const { mutate: login } = useLoginMutation() - const [email, setEmail] = useState(""); - const [password, setPassword] = useState(""); - const [remember, setRemember] = useState(true); + const [email, setEmail] = useState("") + const [password, setPassword] = useState("") + const [remember, setRemember] = useState(true) const handlePasswordChange = (e: ChangeEvent) => { - setPassword(e.target.value); - }; + setPassword(e.target.value) + } const handleEmailChange = (e: ChangeEvent) => { - setEmail(e.target.value); - }; + setEmail(e.target.value) + } const handleRememberChange = (e: ChangeEvent) => { - setRemember(e.target.checked); - }; + setRemember(e.target.checked) + } const handleSubmit = () => { login({ email, password, rememberMe: remember, - }); - }; + }) + } return (
@@ -63,7 +63,7 @@ const Login: NextPage = () => {
- ); -}; + ) +} -export default Login; +export default Login diff --git a/src/pages/sign-up.tsx b/src/pages/sign-up.tsx index 85fb9aa..6cfee57 100644 --- a/src/pages/sign-up.tsx +++ b/src/pages/sign-up.tsx @@ -1,21 +1,21 @@ -import type { FormEvent } from "react"; -import React from "react"; +import type { FormEvent } from "react" +import React from "react" -import type { NextPage } from "next"; +import type { NextPage } from "next" -import { Button, Input } from "@/components"; -import { useSignUpMutation } from "@/services"; +import { Button, Input } from "@/components" +import { useSignUpMutation } from "@/services" const Login: NextPage = () => { - const { mutate: signUp } = useSignUpMutation(); + const { mutate: signUp } = useSignUpMutation() const handleSubmit = (e: FormEvent) => { - e.preventDefault(); - const formData = new FormData(e.currentTarget); + e.preventDefault() + const formData = new FormData(e.currentTarget) - const values = Object.fromEntries(formData) as any; - signUp(values); - }; + const values = Object.fromEntries(formData) as any + signUp(values) + } return (
@@ -43,7 +43,7 @@ const Login: NextPage = () => {
- ); -}; + ) +} -export default Login; +export default Login diff --git a/src/services/index.ts b/src/services/index.ts index 8847ade..55f5072 100644 --- a/src/services/index.ts +++ b/src/services/index.ts @@ -1,2 +1,2 @@ -export * from "./todolist-api/auth"; -export * from "./todolist-api/todolists"; +export * from "./todolist-api/auth" +export * from "./todolist-api/todolists" diff --git a/src/services/todolist-api/auth/auth.api.ts b/src/services/todolist-api/auth/auth.api.ts index 7c707f3..b87c4f6 100644 --- a/src/services/todolist-api/auth/auth.api.ts +++ b/src/services/todolist-api/auth/auth.api.ts @@ -4,37 +4,37 @@ import type { MeResponse, PostLoginArgs, PostSignUpArgs, -} from "../todolists"; +} from "../todolists" -import { handleError } from "@/helpers"; -import { todolistApiInstance } from "@/services/todolist-api/todolist-api.instance"; +import { handleError } from "@/helpers" +import { todolistApiInstance } from "@/services/todolist-api/todolist-api.instance" export const AuthApi = { async login(args: PostLoginArgs) { const res = await todolistApiInstance.post( "/auth/login", args, - ); + ) - localStorage.setItem("accessToken", res.data.accessToken); - localStorage.setItem("refreshToken", res.data.refreshToken); + localStorage.setItem("accessToken", res.data.accessToken) + localStorage.setItem("refreshToken", res.data.refreshToken) - return res.data; + return res.data }, async signUp(args: PostSignUpArgs) { - const res = await todolistApiInstance.post("/auth/sign-up", args); + const res = await todolistApiInstance.post("/auth/sign-up", args) - return res.data; + return res.data }, async logout() { - const res = await todolistApiInstance.delete("/auth/login"); + const res = await todolistApiInstance.delete("/auth/login") - return handleError(res.data); + return handleError(res.data) }, async me() { - const res = await todolistApiInstance.get("/auth/me"); + const res = await todolistApiInstance.get("/auth/me") - return handleError(res.data); + return handleError(res.data) }, -}; +} diff --git a/src/services/todolist-api/auth/auth.hooks.ts b/src/services/todolist-api/auth/auth.hooks.ts index cab23ad..96abb81 100644 --- a/src/services/todolist-api/auth/auth.hooks.ts +++ b/src/services/todolist-api/auth/auth.hooks.ts @@ -1,46 +1,46 @@ -import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; -import { useRouter } from "next/router"; +import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query" +import { useRouter } from "next/router" -import { QUERY_KEYS, ROUTES } from "@/constants"; -import { noRefetch } from "@/helpers"; -import { AuthApi } from "@/services/todolist-api/auth/auth.api"; +import { QUERY_KEYS, ROUTES } from "@/constants" +import { noRefetch } from "@/helpers" +import { AuthApi } from "@/services/todolist-api/auth/auth.api" export const useMeQuery = () => { return useQuery({ queryFn: AuthApi.me, queryKey: [QUERY_KEYS.ME], ...noRefetch, - }); -}; + }) +} export const useLoginMutation = () => { - const router = useRouter(); - const queryClient = useQueryClient(); + const router = useRouter() + const queryClient = useQueryClient() return useMutation({ mutationFn: AuthApi.login, onSuccess: async () => { - await queryClient.invalidateQueries([QUERY_KEYS.ME]); - await router.push(ROUTES.HOME); + await queryClient.invalidateQueries([QUERY_KEYS.ME]) + await router.push(ROUTES.HOME) }, - }); -}; + }) +} export const useLogoutMutation = () => { - const queryClient = useQueryClient(); - const router = useRouter(); + const queryClient = useQueryClient() + const router = useRouter() return useMutation({ mutationFn: AuthApi.logout, onSuccess: async () => { - await queryClient.invalidateQueries([QUERY_KEYS.ME]); - await router.push(ROUTES.LOGIN); + await queryClient.invalidateQueries([QUERY_KEYS.ME]) + await router.push(ROUTES.LOGIN) }, - }); -}; + }) +} export const useSignUpMutation = () => { return useMutation({ mutationFn: AuthApi.signUp, - }); -}; + }) +} diff --git a/src/services/todolist-api/auth/index.ts b/src/services/todolist-api/auth/index.ts index f13aaf0..f8be71d 100644 --- a/src/services/todolist-api/auth/index.ts +++ b/src/services/todolist-api/auth/index.ts @@ -1,2 +1,2 @@ -export * from "./auth.api"; -export * from "./auth.hooks"; +export * from "./auth.api" +export * from "./auth.hooks" diff --git a/src/services/todolist-api/todolist-api.instance.ts b/src/services/todolist-api/todolist-api.instance.ts index 2d701ff..bfa4615 100644 --- a/src/services/todolist-api/todolist-api.instance.ts +++ b/src/services/todolist-api/todolist-api.instance.ts @@ -1,19 +1,19 @@ -import { Mutex } from "async-mutex"; -import axios from "axios"; -import router from "next/router"; +import { Mutex } from "async-mutex" +import axios from "axios" +import router from "next/router" -const mutex = new Mutex(); +const mutex = new Mutex() -let refreshedAt: number | null = null; +let refreshedAt: number | null = null export const todolistApiInstance = axios.create({ baseURL: "http://localhost:3000", -}); +}) async function refreshAccessToken(): Promise { const res = await todolistApiInstance.post<{ - refreshToken: string; - accessToken: string; + refreshToken: string + accessToken: string }>( "/auth/refresh-token", {}, @@ -22,76 +22,76 @@ async function refreshAccessToken(): Promise { Authorization: `Bearer ${localStorage.getItem("refreshToken")}`, }, }, - ); + ) - localStorage.setItem("accessToken", res.data.accessToken); - localStorage.setItem("refreshToken", res.data.refreshToken); + localStorage.setItem("accessToken", res.data.accessToken) + localStorage.setItem("refreshToken", res.data.refreshToken) - return res.data.accessToken; + return res.data.accessToken } todolistApiInstance.interceptors.request.use( async (config) => { if (!config?.url?.includes("refresh-token")) { - await mutex.waitForUnlock(); + await mutex.waitForUnlock() } config.headers.Authorization = config.headers.Authorization ?? - `Bearer ${localStorage.getItem("accessToken")}`; + `Bearer ${localStorage.getItem("accessToken")}` - return config; + return config }, (error) => Promise.reject(error), -); +) todolistApiInstance.interceptors.response.use( (response) => response, async (error) => { if (error?.response?.request?.responseURL?.includes("refresh-token")) { - return; + return } - await mutex.waitForUnlock(); - const originalRequest = error.config; + await mutex.waitForUnlock() + const originalRequest = error.config // Check for a 401 response and if this request hasn't been retried yet if (error.response?.status === 401 && !originalRequest._retry) { if (!mutex.isLocked()) { - originalRequest._retry = true; + originalRequest._retry = true // Use a mutex to ensure that token refresh logic is not run multiple times in parallel - const release = await mutex.acquire(); + const release = await mutex.acquire() if (refreshedAt && refreshedAt + 60000 > new Date().getTime()) { // If the token has been refreshed within the last minute, use the refreshed token - originalRequest.headers.Authorization = `Bearer ${localStorage.getItem("accessToken")}`; - release(); + originalRequest.headers.Authorization = `Bearer ${localStorage.getItem("accessToken")}` + release() - return todolistApiInstance(originalRequest); + return todolistApiInstance(originalRequest) } - refreshedAt = new Date().getTime(); + refreshedAt = new Date().getTime() try { - const newAccessToken = await refreshAccessToken(); + const newAccessToken = await refreshAccessToken() - originalRequest.headers.Authorization = `Bearer ${newAccessToken}`; + originalRequest.headers.Authorization = `Bearer ${newAccessToken}` - return todolistApiInstance(originalRequest); // Retry the original request with the new token + return todolistApiInstance(originalRequest) // Retry the original request with the new token } catch (error) { - console.log(window.location.pathname); + console.log(window.location.pathname) if (!["/login", "/sign-up"].includes(window.location.pathname)) { - router.push("/login"); + router.push("/login") } } finally { - release(); + release() } } else { - await mutex.waitForUnlock(); - const newAccessToken = localStorage.getItem("accessToken"); + await mutex.waitForUnlock() + const newAccessToken = localStorage.getItem("accessToken") - originalRequest.headers.Authorization = `Bearer ${newAccessToken}`; + originalRequest.headers.Authorization = `Bearer ${newAccessToken}` - return todolistApiInstance(originalRequest); // Retry the original request with the new token + return todolistApiInstance(originalRequest) // Retry the original request with the new token } } - return Promise.reject(error); + return Promise.reject(error) }, -); +) diff --git a/src/services/todolist-api/todolists/index.ts b/src/services/todolist-api/todolists/index.ts index 4ee7e85..982e747 100644 --- a/src/services/todolist-api/todolists/index.ts +++ b/src/services/todolist-api/todolists/index.ts @@ -1,3 +1,3 @@ -export * from "./todolists.hooks"; -export * from "./todolists.api"; -export * from "./todolists.types"; +export * from "./todolists.hooks" +export * from "./todolists.api" +export * from "./todolists.types" diff --git a/src/services/todolist-api/todolists/todolists.api.ts b/src/services/todolist-api/todolists/todolists.api.ts index 70e630a..2010988 100644 --- a/src/services/todolist-api/todolists/todolists.api.ts +++ b/src/services/todolist-api/todolists/todolists.api.ts @@ -1,4 +1,4 @@ -import { handleError } from "@/helpers"; +import { handleError } from "@/helpers" import type { CreateTaskResponse, CreateTodolistResponse, @@ -8,14 +8,14 @@ import type { TasksResponse, Todolist, UpdateTaskResponse, -} from "@/services"; -import { todolistApiInstance } from "@/services/todolist-api/todolist-api.instance"; +} from "@/services" +import { todolistApiInstance } from "@/services/todolist-api/todolist-api.instance" export const TodolistAPI = { async getTodolists() { - const res = await todolistApiInstance.get("/todolists"); + const res = await todolistApiInstance.get("/todolists") - return res.data; + return res.data }, async createTodolist({ title }: { title: string }) { @@ -23,64 +23,64 @@ export const TodolistAPI = { "/todolists", { title, - } - ); + }, + ) - return handleError(res.data); + return handleError(res.data) }, async deleteTodolist({ todolistId }: { todolistId: string }) { const res = await todolistApiInstance.delete( - `/todolists/${todolistId}` - ); + `/todolists/${todolistId}`, + ) - return res.data; + return res.data }, async getTodolistTasks({ todolistId }: { todolistId: string }) { const res = await todolistApiInstance.get( - `/todolists/${todolistId}/tasks` - ); + `/todolists/${todolistId}/tasks`, + ) - return res.data; + return res.data }, async createTask({ todolistId, title, }: { - todolistId: string; - title: string; + todolistId: string + title: string }) { const res = await todolistApiInstance.post( `/todolists/${todolistId}/tasks`, - { title } - ); + { title }, + ) - return res.data; + return res.data }, async updateTask({ todolistId, task }: { todolistId: string; task: Task }) { - const { id, ...rest } = task; + const { id, ...rest } = task const res = await todolistApiInstance.patch( `/todolists/${todolistId}/tasks/${id}`, - rest - ); + rest, + ) - return res.data; + return res.data }, async deleteTask({ todolistId, taskId, }: { - todolistId: string; - taskId: string; + todolistId: string + taskId: string }) { const res = await todolistApiInstance.delete( - `/todolists/${todolistId}/tasks/${taskId}` - ); + `/todolists/${todolistId}/tasks/${taskId}`, + ) - return res.data; + return res.data }, -}; +} diff --git a/src/services/todolist-api/todolists/todolists.hooks.ts b/src/services/todolist-api/todolists/todolists.hooks.ts index ef77559..91637cc 100644 --- a/src/services/todolist-api/todolists/todolists.hooks.ts +++ b/src/services/todolist-api/todolists/todolists.hooks.ts @@ -1,80 +1,80 @@ -import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; +import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query" -import { QUERY_KEYS } from "@/constants"; -import { noRefetch } from "@/helpers"; -import { TodolistAPI } from "@/services"; +import { QUERY_KEYS } from "@/constants" +import { noRefetch } from "@/helpers" +import { TodolistAPI } from "@/services" export const useTodolistsQuery = () => { return useQuery({ queryFn: TodolistAPI.getTodolists, queryKey: [QUERY_KEYS.TODOLISTS], ...noRefetch, - }); -}; + }) +} export const useCreateTodolistMutation = () => { - const queryClient = useQueryClient(); + const queryClient = useQueryClient() return useMutation({ mutationFn: TodolistAPI.createTodolist, //todo: add onMutate onSuccess: async () => { - await queryClient.invalidateQueries([QUERY_KEYS.TODOLISTS]); + await queryClient.invalidateQueries([QUERY_KEYS.TODOLISTS]) }, - }); -}; + }) +} export const useDeleteTodolistMutation = () => { - const queryClient = useQueryClient(); + const queryClient = useQueryClient() return useMutation({ mutationFn: TodolistAPI.deleteTodolist, onSuccess: () => { - queryClient.invalidateQueries([QUERY_KEYS.TODOLISTS]); + queryClient.invalidateQueries([QUERY_KEYS.TODOLISTS]) }, - }); -}; + }) +} export const useGetTasksQuery = (todolistId: string) => { return useQuery({ queryKey: [QUERY_KEYS.TASKS, todolistId], queryFn: () => TodolistAPI.getTodolistTasks({ todolistId }), - }); -}; + }) +} export const useCreateTaskMutation = () => { - const queryClient = useQueryClient(); + const queryClient = useQueryClient() return useMutation({ mutationFn: TodolistAPI.createTask, onSuccess: (res) => { - const todolistId = res.todoListId; + const todolistId = res.todoListId - queryClient.invalidateQueries([QUERY_KEYS.TASKS, todolistId]); + queryClient.invalidateQueries([QUERY_KEYS.TASKS, todolistId]) }, - }); -}; + }) +} export const useUpdateTaskMutation = () => { - const queryClient = useQueryClient(); + const queryClient = useQueryClient() return useMutation({ mutationFn: TodolistAPI.updateTask, onSuccess: async (_, { todolistId }) => { - await queryClient.invalidateQueries([QUERY_KEYS.TASKS, todolistId]); + await queryClient.invalidateQueries([QUERY_KEYS.TASKS, todolistId]) }, - }); -}; + }) +} export const useDeleteTaskMutation = () => { - const queryClient = useQueryClient(); + const queryClient = useQueryClient() return useMutation({ mutationFn: TodolistAPI.deleteTask, onSuccess: (_, variables) => { - const todolistId = variables.todolistId; + const todolistId = variables.todolistId - queryClient.invalidateQueries([QUERY_KEYS.TASKS, todolistId]); + queryClient.invalidateQueries([QUERY_KEYS.TASKS, todolistId]) }, - }); -}; + }) +} diff --git a/src/services/todolist-api/todolists/todolists.types.ts b/src/services/todolist-api/todolists/todolists.types.ts index 521d264..d7f3162 100644 --- a/src/services/todolist-api/todolists/todolists.types.ts +++ b/src/services/todolist-api/todolists/todolists.types.ts @@ -1,64 +1,64 @@ -import type { ApiResponse } from "@/helpers"; +import type { ApiResponse } from "@/helpers" -export type TasksResponse = Task[]; +export type TasksResponse = Task[] export type Task = { - order: string; - title: string; - description?: string | null; - deadline?: string | null; - status: TaskStatus; - priority: TaskPriority; - ownerId: string; - todoListId: string; - id: string; - createdAt: string; - updatedAt: string; -}; + order: string + title: string + description?: string | null + deadline?: string | null + status: TaskStatus + priority: TaskPriority + ownerId: string + todoListId: string + id: string + createdAt: string + updatedAt: string +} export type Todolist = { - id: string; - title: string; - addedDate: Date; - order: number; -}; + id: string + title: string + addedDate: Date + order: number +} export type PostLoginArgs = { - email: string; - password: string; - rememberMe: boolean; -}; + email: string + password: string + rememberMe: boolean +} export type PostSignUpArgs = { - email: string; - password: string; - username?: string; -}; + email: string + password: string + username?: string +} export type LoginResponseData = { - accessToken: string; - refreshToken: string; -}; + accessToken: string + refreshToken: string +} export type MeResponseData = { - id: number; - login: string; - email: string; -}; + id: number + login: string + email: string +} -export type LoginResponse = LoginResponseData; -export type LogoutResponse = ApiResponse; -export type MeResponse = ApiResponse; +export type LoginResponse = LoginResponseData +export type LogoutResponse = ApiResponse +export type MeResponse = ApiResponse -export type DeleteTodolistResponse = ApiResponse; -export type CreateTodolistResponse = ApiResponse; +export type DeleteTodolistResponse = ApiResponse +export type CreateTodolistResponse = ApiResponse export type CreateTodolistResponseData = { - item: Todolist; -}; + item: Todolist +} -export type CreateTaskResponse = Task; -export type DeleteTaskResponse = undefined; -export type UpdateTaskResponse = undefined; +export type CreateTaskResponse = Task +export type DeleteTaskResponse = undefined +export type UpdateTaskResponse = undefined export enum TaskStatus { OPEN = "OPEN", From 0ebef3657f86d19f1b43c7181be9d4ab4251f5ef Mon Sep 17 00:00:00 2001 From: andres Date: Thu, 15 Aug 2024 14:05:51 +0200 Subject: [PATCH 05/14] refactor ui --- .idea/git_toolbox_blame.xml | 6 + bun.lockb | Bin 181474 -> 195232 bytes components.json | 17 ++ package.json | 8 +- src/components/auth-redirect/index.tsx | 2 +- src/components/button/index.tsx | 26 --- src/components/fullscreen-loader/index.tsx | 2 +- src/components/index.ts | 6 +- src/components/input/index.tsx | 15 -- src/components/mode-toggle.tsx | 40 ++++ src/components/theme-provider.tsx | 9 + src/components/todolist/index.tsx | 166 ++++++++------- src/components/ui/button.tsx | 56 +++++ src/components/ui/card.tsx | 79 +++++++ src/components/ui/checkbox.tsx | 28 +++ src/components/ui/dropdown-menu.tsx | 198 ++++++++++++++++++ src/components/ui/input/index.tsx | 35 ++++ src/components/ui/label.tsx | 24 +++ src/components/{ => ui}/loader/index.tsx | 0 src/components/ui/skeleton.tsx | 15 ++ .../{toggle-group => ui}/toggle-group.tsx | 30 +-- src/components/ui/toggle.tsx | 43 ++++ src/lib/utils.ts | 6 + src/pages/_app.tsx | 35 +++- src/pages/_document.tsx | 13 ++ src/pages/index.tsx | 49 ++--- src/pages/login.tsx | 31 +-- .../todolist-api/todolists/todolists.api.ts | 9 +- .../todolist-api/todolists/todolists.hooks.ts | 5 +- src/styles/globals.css | 106 ++++++---- tailwind.config.cjs | 8 - tailwind.config.ts | 80 +++++++ 32 files changed, 899 insertions(+), 248 deletions(-) create mode 100644 .idea/git_toolbox_blame.xml create mode 100644 components.json delete mode 100644 src/components/button/index.tsx delete mode 100644 src/components/input/index.tsx create mode 100644 src/components/mode-toggle.tsx create mode 100644 src/components/theme-provider.tsx create mode 100644 src/components/ui/button.tsx create mode 100644 src/components/ui/card.tsx create mode 100644 src/components/ui/checkbox.tsx create mode 100644 src/components/ui/dropdown-menu.tsx create mode 100644 src/components/ui/input/index.tsx create mode 100644 src/components/ui/label.tsx rename src/components/{ => ui}/loader/index.tsx (100%) create mode 100644 src/components/ui/skeleton.tsx rename src/components/{toggle-group => ui}/toggle-group.tsx (66%) create mode 100644 src/components/ui/toggle.tsx create mode 100644 src/lib/utils.ts create mode 100644 src/pages/_document.tsx delete mode 100644 tailwind.config.cjs create mode 100644 tailwind.config.ts diff --git a/.idea/git_toolbox_blame.xml b/.idea/git_toolbox_blame.xml new file mode 100644 index 0000000..7dc1249 --- /dev/null +++ b/.idea/git_toolbox_blame.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/bun.lockb b/bun.lockb index 4e90f882492175dc4aae4bc4f9fae33b32e29232..c506578370d241e0769eee9a13ce6042f0504ce2 100755 GIT binary patch delta 44477 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 Ddb6v- delta 36797 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 bRh?aWl`W;F=o|f2_h)s#Eh($?R!RQ{QjGd! diff --git a/components.json b/components.json new file mode 100644 index 0000000..af7b002 --- /dev/null +++ b/components.json @@ -0,0 +1,17 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "default", + "rsc": false, + "tsx": true, + "tailwind": { + "config": "tailwind.config.ts", + "css": "src/styles/globals.css", + "baseColor": "zinc", + "cssVariables": true, + "prefix": "" + }, + "aliases": { + "components": "@/components", + "utils": "@/lib/utils" + } +} \ No newline at end of file diff --git a/package.json b/package.json index 82ecf05..a22da4e 100644 --- a/package.json +++ b/package.json @@ -10,17 +10,21 @@ "format": "prettier --write ." }, "dependencies": { + "@radix-ui/react-dropdown-menu": "^2.1.1", + "@radix-ui/react-slot": "^1.1.0", "@radix-ui/react-toggle-group": "^1.0.4", "@tanstack/react-query": "^4.28.0", "async-mutex": "^0.5.0", "axios": "^1.3.4", "class-variance-authority": "^0.7.0", "clsx": "^2.1.1", - "lucide-react": "^0.377.0", + "lucide-react": "^0.427.0", "next": "13.2.4", + "next-themes": "^0.3.0", "react": "18.2.0", "react-dom": "18.2.0", - "tailwind-merge": "^2.3.0", + "tailwind-merge": "^2.5.0", + "tailwindcss-animate": "^1.0.7", "zod": "^3.21.4" }, "devDependencies": { diff --git a/src/components/auth-redirect/index.tsx b/src/components/auth-redirect/index.tsx index dd5f54a..280cb02 100644 --- a/src/components/auth-redirect/index.tsx +++ b/src/components/auth-redirect/index.tsx @@ -3,7 +3,7 @@ import { useEffect } from "react" import { useRouter } from "next/router" -import { Loader } from "../loader" +import { Loader } from "../ui/loader" import { useMeQuery } from "@/services" diff --git a/src/components/button/index.tsx b/src/components/button/index.tsx deleted file mode 100644 index 6088487..0000000 --- a/src/components/button/index.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import type { ComponentPropsWithoutRef, FC } from "react" - -import { cn } from "@/helpers" - -type Props = ComponentPropsWithoutRef<"button"> & { - variant?: "primary" | "outlined" | "icon" -} - -export const Button: FC = ({ - className, - variant = "primary", - ...rest -}) => { - return ( - + + + setTheme("light")}> + Light + + setTheme("dark")}> + Dark + + setTheme("system")}> + System + + + + ) +} diff --git a/src/components/theme-provider.tsx b/src/components/theme-provider.tsx new file mode 100644 index 0000000..30d1451 --- /dev/null +++ b/src/components/theme-provider.tsx @@ -0,0 +1,9 @@ +"use client" + +import { ThemeProvider as NextThemesProvider } from "next-themes" +import type { ThemeProviderProps } from "next-themes/dist/types" +import * as React from "react" + +export function ThemeProvider({ children, ...props }: ThemeProviderProps) { + return {children} +} diff --git a/src/components/todolist/index.tsx b/src/components/todolist/index.tsx index 5bf07bd..b90d1cf 100644 --- a/src/components/todolist/index.tsx +++ b/src/components/todolist/index.tsx @@ -1,19 +1,31 @@ -import type { ChangeEvent, FC, FormEvent } from "react" +import { + type ChangeEvent, + type FC, + type FormEvent, + useCallback, + useMemo, +} from "react" import { memo, useState } from "react" +import { + Card, + CardContent, + CardDescription, + CardFooter, + CardHeader, + CardTitle, +} from "@/components/ui/card" import { Plus, Trash } from "lucide-react" - import type { Task, Todolist as TodolistType, } from "../../services/todolist-api/todolists" -import { Button } from "../button" -import { Input } from "../input" +import { Button } from "../ui/button" +import { Input } from "../ui/input" -import { - ToggleGroup, - ToggleGroupItem, -} from "@/components/toggle-group/toggle-group" +import { Checkbox } from "@/components/ui/checkbox" +import { Skeleton } from "@/components/ui/skeleton" +import { ToggleGroup, ToggleGroupItem } from "@/components/ui/toggle-group" import { TaskStatus, useCreateTaskMutation, @@ -31,33 +43,42 @@ type Filter = "all" | "active" | "completed" export const Todolist: FC = memo(({ todolist }) => { const { data: tasks, isLoading } = useGetTasksQuery(todolist.id) - const { mutate: putTask } = useUpdateTaskMutation() + const { mutate: updateTask } = useUpdateTaskMutation() const { mutate: deleteTask } = useDeleteTaskMutation() const { mutate: deleteTodolist } = useDeleteTodolistMutation() const { mutate: createTask } = useCreateTaskMutation() const [newTaskTitle, setNewTaskTitle] = useState("") const [filter, setFilter] = useState("all") - const handleChangeStatus = (todolistId: string, task: Task) => { - const newTask: Task = { - ...task, - status: - task.status === TaskStatus.DONE ? TaskStatus.OPEN : TaskStatus.DONE, - } + const handleChangeStatus = useCallback( + (todolistId: string, task: Task) => { + updateTask({ + todolistId, + id: task.id, + status: + task.status === TaskStatus.DONE ? TaskStatus.OPEN : TaskStatus.DONE, + }) + }, + [updateTask], + ) + + const handleDeleteTask = useCallback( + (todolistId: string, taskId: string) => { + deleteTask({ todolistId, taskId }) + }, + [deleteTask], + ) - putTask({ todolistId, task: newTask }) - } - const handleDeleteTask = (todolistId: string, taskId: string) => { - deleteTask({ todolistId, taskId }) - } const handleDeleteTodolist = (todolistId: string) => { deleteTodolist({ todolistId }) } + const handleAddTask = (e: FormEvent) => { e.preventDefault() createTask({ todolistId: todolist.id, title: newTaskTitle }) setNewTaskTitle("") } + const handleNewTaskTitleChange = (e: ChangeEvent) => { setNewTaskTitle(e.target.value) } @@ -66,7 +87,6 @@ export const Todolist: FC = memo(({ todolist }) => { setFilter(value as Filter) } - if (isLoading) return
loading...
const filteredTasks = tasks?.filter((task) => { switch (filter) { case "active": @@ -78,53 +98,57 @@ export const Todolist: FC = memo(({ todolist }) => { } }) + const renderTasks = useMemo(() => { + return filteredTasks?.map((task) => { + return ( +
  • + + +
  • + ) + }) + }, [filteredTasks, todolist.id, handleChangeStatus, handleDeleteTask]) + return ( -
    -
    -

    {todolist.title}

    - -
    -
    - - -
    - {filteredTasks?.map((task) => { - return ( -
    - - + + +
    + + -
    - ) - })} -
    + +
      {isLoading ? null : renderTasks}
    + +
    + = memo(({ todolist }) => { className={"w-full"} > - All + ALL - Active + TODO - Completed + DONE -
    - + + ) }) diff --git a/src/components/ui/button.tsx b/src/components/ui/button.tsx new file mode 100644 index 0000000..1620e13 --- /dev/null +++ b/src/components/ui/button.tsx @@ -0,0 +1,56 @@ +import { Slot } from "@radix-ui/react-slot" +import { type VariantProps, cva } from "class-variance-authority" +import * as React from "react" + +import { cn } from "@/lib/utils" + +const buttonVariants = cva( + "inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50", + { + variants: { + variant: { + default: "bg-primary text-primary-foreground hover:bg-primary/90", + destructive: + "bg-destructive text-destructive-foreground hover:bg-destructive/90", + outline: + "border border-input bg-background hover:bg-accent hover:text-accent-foreground", + secondary: + "bg-secondary text-secondary-foreground hover:bg-secondary/80", + ghost: "hover:bg-accent hover:text-accent-foreground", + link: "text-primary underline-offset-4 hover:underline", + }, + size: { + default: "h-10 px-4 py-2", + sm: "h-9 rounded-md px-3", + lg: "h-11 rounded-md px-8", + icon: "h-10 w-10 shrink-0", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, + }, +) + +export interface ButtonProps + extends React.ButtonHTMLAttributes, + VariantProps { + asChild?: boolean +} + +const Button = React.forwardRef( + ({ className, variant, size, asChild = false, ...props }, ref) => { + const Comp = asChild ? Slot : "button" + return ( + + ) + }, +) +Button.displayName = "Button" + +export { Button, buttonVariants } diff --git a/src/components/ui/card.tsx b/src/components/ui/card.tsx new file mode 100644 index 0000000..afa13ec --- /dev/null +++ b/src/components/ui/card.tsx @@ -0,0 +1,79 @@ +import * as React from "react" + +import { cn } from "@/lib/utils" + +const Card = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
    +)) +Card.displayName = "Card" + +const CardHeader = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
    +)) +CardHeader.displayName = "CardHeader" + +const CardTitle = React.forwardRef< + HTMLParagraphElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

    +)) +CardTitle.displayName = "CardTitle" + +const CardDescription = React.forwardRef< + HTMLParagraphElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

    +)) +CardDescription.displayName = "CardDescription" + +const CardContent = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

    +)) +CardContent.displayName = "CardContent" + +const CardFooter = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
    +)) +CardFooter.displayName = "CardFooter" + +export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent } diff --git a/src/components/ui/checkbox.tsx b/src/components/ui/checkbox.tsx new file mode 100644 index 0000000..ddbdd01 --- /dev/null +++ b/src/components/ui/checkbox.tsx @@ -0,0 +1,28 @@ +import * as React from "react" +import * as CheckboxPrimitive from "@radix-ui/react-checkbox" +import { Check } from "lucide-react" + +import { cn } from "@/lib/utils" + +const Checkbox = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + + + + + +)) +Checkbox.displayName = CheckboxPrimitive.Root.displayName + +export { Checkbox } diff --git a/src/components/ui/dropdown-menu.tsx b/src/components/ui/dropdown-menu.tsx new file mode 100644 index 0000000..769ff7a --- /dev/null +++ b/src/components/ui/dropdown-menu.tsx @@ -0,0 +1,198 @@ +import * as React from "react" +import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu" +import { Check, ChevronRight, Circle } from "lucide-react" + +import { cn } from "@/lib/utils" + +const DropdownMenu = DropdownMenuPrimitive.Root + +const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger + +const DropdownMenuGroup = DropdownMenuPrimitive.Group + +const DropdownMenuPortal = DropdownMenuPrimitive.Portal + +const DropdownMenuSub = DropdownMenuPrimitive.Sub + +const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup + +const DropdownMenuSubTrigger = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + inset?: boolean + } +>(({ className, inset, children, ...props }, ref) => ( + + {children} + + +)) +DropdownMenuSubTrigger.displayName = + DropdownMenuPrimitive.SubTrigger.displayName + +const DropdownMenuSubContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +DropdownMenuSubContent.displayName = + DropdownMenuPrimitive.SubContent.displayName + +const DropdownMenuContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, sideOffset = 4, ...props }, ref) => ( + + + +)) +DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName + +const DropdownMenuItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + inset?: boolean + } +>(({ className, inset, ...props }, ref) => ( + +)) +DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName + +const DropdownMenuCheckboxItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, checked, ...props }, ref) => ( + + + + + + + {children} + +)) +DropdownMenuCheckboxItem.displayName = + DropdownMenuPrimitive.CheckboxItem.displayName + +const DropdownMenuRadioItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + + + + + + {children} + +)) +DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName + +const DropdownMenuLabel = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + inset?: boolean + } +>(({ className, inset, ...props }, ref) => ( + +)) +DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName + +const DropdownMenuSeparator = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName + +const DropdownMenuShortcut = ({ + className, + ...props +}: React.HTMLAttributes) => { + return ( + + ) +} +DropdownMenuShortcut.displayName = "DropdownMenuShortcut" + +export { + DropdownMenu, + DropdownMenuTrigger, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuCheckboxItem, + DropdownMenuRadioItem, + DropdownMenuLabel, + DropdownMenuSeparator, + DropdownMenuShortcut, + DropdownMenuGroup, + DropdownMenuPortal, + DropdownMenuSub, + DropdownMenuSubContent, + DropdownMenuSubTrigger, + DropdownMenuRadioGroup, +} diff --git a/src/components/ui/input/index.tsx b/src/components/ui/input/index.tsx new file mode 100644 index 0000000..96600ef --- /dev/null +++ b/src/components/ui/input/index.tsx @@ -0,0 +1,35 @@ +import { Label } from "@/components/ui/label" +import { cn } from "@/helpers" +import * as React from "react" +import { useId } from "react" + +export interface InputProps + extends React.InputHTMLAttributes { + label?: string +} + +const Input = React.forwardRef( + ({ className, type, label, id, ...props }, ref) => { + const generatedId = useId() + const idToUse = id || generatedId + + return ( +
    + {label && } + +
    + ) + }, +) +Input.displayName = "Input" + +export { Input } diff --git a/src/components/ui/label.tsx b/src/components/ui/label.tsx new file mode 100644 index 0000000..683faa7 --- /dev/null +++ b/src/components/ui/label.tsx @@ -0,0 +1,24 @@ +import * as React from "react" +import * as LabelPrimitive from "@radix-ui/react-label" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +const labelVariants = cva( + "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70" +) + +const Label = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & + VariantProps +>(({ className, ...props }, ref) => ( + +)) +Label.displayName = LabelPrimitive.Root.displayName + +export { Label } diff --git a/src/components/loader/index.tsx b/src/components/ui/loader/index.tsx similarity index 100% rename from src/components/loader/index.tsx rename to src/components/ui/loader/index.tsx diff --git a/src/components/ui/skeleton.tsx b/src/components/ui/skeleton.tsx new file mode 100644 index 0000000..01b8b6d --- /dev/null +++ b/src/components/ui/skeleton.tsx @@ -0,0 +1,15 @@ +import { cn } from "@/lib/utils" + +function Skeleton({ + className, + ...props +}: React.HTMLAttributes) { + return ( +
    + ) +} + +export { Skeleton } diff --git a/src/components/toggle-group/toggle-group.tsx b/src/components/ui/toggle-group.tsx similarity index 66% rename from src/components/toggle-group/toggle-group.tsx rename to src/components/ui/toggle-group.tsx index 2d1acc9..8bfe044 100644 --- a/src/components/toggle-group/toggle-group.tsx +++ b/src/components/ui/toggle-group.tsx @@ -1,34 +1,10 @@ -"use client" - -import * as React from "react" - import * as ToggleGroupPrimitive from "@radix-ui/react-toggle-group" import type { VariantProps } from "class-variance-authority" -import { cva } from "class-variance-authority" +import * as React from "react" -import { cn } from "@/helpers" +import { toggleVariants } from "@/components/ui/toggle" +import { cn } from "@/lib/utils" -const toggleVariants = cva( - "inline-flex border border-sky-700 items-center justify-center rounded-md text-sm font-medium transition-colors hover:bg-muted hover:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-sky-700 data-[state=on]:text-white", - { - variants: { - variant: { - default: "bg-transparent", - outline: - "border border-input bg-transparent shadow-sm hover:bg-accent hover:text-accent-foreground", - }, - size: { - default: "h-9 px-3", - sm: "h-8 px-2", - lg: "h-10 px-3", - }, - }, - defaultVariants: { - variant: "default", - size: "default", - }, - }, -) const ToggleGroupContext = React.createContext< VariantProps >({ diff --git a/src/components/ui/toggle.tsx b/src/components/ui/toggle.tsx new file mode 100644 index 0000000..9ecac28 --- /dev/null +++ b/src/components/ui/toggle.tsx @@ -0,0 +1,43 @@ +import * as React from "react" +import * as TogglePrimitive from "@radix-ui/react-toggle" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +const toggleVariants = cva( + "inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors hover:bg-muted hover:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground", + { + variants: { + variant: { + default: "bg-transparent", + outline: + "border border-input bg-transparent hover:bg-accent hover:text-accent-foreground", + }, + size: { + default: "h-10 px-3", + sm: "h-9 px-2.5", + lg: "h-11 px-5", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, + } +) + +const Toggle = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & + VariantProps +>(({ className, variant, size, ...props }, ref) => ( + +)) + +Toggle.displayName = TogglePrimitive.Root.displayName + +export { Toggle, toggleVariants } diff --git a/src/lib/utils.ts b/src/lib/utils.ts new file mode 100644 index 0000000..d084cca --- /dev/null +++ b/src/lib/utils.ts @@ -0,0 +1,6 @@ +import { type ClassValue, clsx } from "clsx" +import { twMerge } from "tailwind-merge" + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)) +} diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index 20aa50d..d1dd042 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -1,9 +1,12 @@ import "../styles/globals.css" -import { QueryClientProvider, QueryClient } from "@tanstack/react-query" +import { QueryClient, QueryClientProvider } from "@tanstack/react-query" import type { AppType } from "next/dist/shared/lib/utils" -import { AuthRedirect } from "@/components" +import { AuthRedirect, Button } from "@/components" +import { ModeToggle } from "@/components/mode-toggle" +import { ThemeProvider } from "@/components/theme-provider" +import { useLogoutMutation } from "@/services" const queryClient = new QueryClient() @@ -11,10 +14,36 @@ const MyApp: AppType = ({ Component, pageProps }) => { return ( - + +
    + + ) } +function Header() { + const { mutate: logout } = useLogoutMutation() + const handleLogout = () => { + logout() + } + return ( +
    +

    Tasks

    +
    + + +
    +
    + ) +} + export default MyApp diff --git a/src/pages/_document.tsx b/src/pages/_document.tsx new file mode 100644 index 0000000..ddb4eb0 --- /dev/null +++ b/src/pages/_document.tsx @@ -0,0 +1,13 @@ +import { Head, Html, Main, NextScript } from "next/document" + +export default function Document() { + return ( + + + +
    + + + + ) +} diff --git a/src/pages/index.tsx b/src/pages/index.tsx index d1a5542..59ae411 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,25 +1,17 @@ -import type { ChangeEvent, FormEvent } from "react" +import { type ChangeEvent, type FormEvent, useMemo } from "react" import { useState } from "react" import type { NextPage } from "next" import Head from "next/head" -import { Todolist, Button, FullscreenLoader, Input } from "@/components" -import { - useCreateTodolistMutation, - useLogoutMutation, - useTodolistsQuery, -} from "@/services" +import { Button, FullscreenLoader, Input, Todolist } from "@/components" +import { useCreateTodolistMutation, useTodolistsQuery } from "@/services" +import { Plus } from "lucide-react" const Home: NextPage = () => { const [newTodolistTitle, setNewTodolistTitle] = useState("") - const { mutate: logout } = useLogoutMutation() const { data: todolists, isLoading: isTodolistsLoading } = useTodolistsQuery() - const handleLogout = () => { - logout() - } - const { mutate: createTodolist } = useCreateTodolistMutation() const handleAddTodolist = (e: FormEvent) => { @@ -32,6 +24,12 @@ const Home: NextPage = () => { setNewTodolistTitle(e.target.value) } + const renderTodolists = useMemo(() => { + return todolists?.map((todolist) => { + return + }) + }, [todolists]) + if (isTodolistsLoading) return return ( @@ -41,26 +39,19 @@ const Home: NextPage = () => { -
    -

    Todolist

    - -
    - - + +
    -
    - {todolists?.map((todolist) => { - return - })} -
    +
    {renderTodolists}
    ) diff --git a/src/pages/login.tsx b/src/pages/login.tsx index 5f8c330..d95c73d 100644 --- a/src/pages/login.tsx +++ b/src/pages/login.tsx @@ -4,6 +4,7 @@ import React, { useState } from "react" import type { NextPage } from "next" import { Button, Input } from "@/components" +import { Label } from "@/components/ui/label" import { useLoginMutation } from "@/services" const Login: NextPage = () => { @@ -34,30 +35,30 @@ const Login: NextPage = () => { } return ( -
    +
    - + - + - diff --git a/src/services/todolist-api/todolists/todolists.api.ts b/src/services/todolist-api/todolists/todolists.api.ts index 2010988..613603e 100644 --- a/src/services/todolist-api/todolists/todolists.api.ts +++ b/src/services/todolist-api/todolists/todolists.api.ts @@ -26,7 +26,7 @@ export const TodolistAPI = { }, ) - return handleError(res.data) + return res.data }, async deleteTodolist({ todolistId }: { todolistId: string }) { @@ -60,8 +60,11 @@ export const TodolistAPI = { return res.data }, - async updateTask({ todolistId, task }: { todolistId: string; task: Task }) { - const { id, ...rest } = task + async updateTask({ + id, + todolistId, + ...rest + }: Partial & Required> & { todolistId: string }) { const res = await todolistApiInstance.patch( `/todolists/${todolistId}/tasks/${id}`, rest, diff --git a/src/services/todolist-api/todolists/todolists.hooks.ts b/src/services/todolist-api/todolists/todolists.hooks.ts index 91637cc..7f70fef 100644 --- a/src/services/todolist-api/todolists/todolists.hooks.ts +++ b/src/services/todolist-api/todolists/todolists.hooks.ts @@ -17,9 +17,8 @@ export const useCreateTodolistMutation = () => { return useMutation({ mutationFn: TodolistAPI.createTodolist, - //todo: add onMutate - onSuccess: async () => { - await queryClient.invalidateQueries([QUERY_KEYS.TODOLISTS]) + onSuccess: () => { + queryClient.invalidateQueries([QUERY_KEYS.TODOLISTS]) }, }) } diff --git a/src/styles/globals.css b/src/styles/globals.css index 831c996..e8e4f13 100644 --- a/src/styles/globals.css +++ b/src/styles/globals.css @@ -1,48 +1,72 @@ @tailwind base; @tailwind components; @tailwind utilities; -.loader { - width: 48px; - height: 48px; - border: 3px dotted #000; - border-style: solid solid dotted dotted; - border-radius: 50%; - display: inline-block; - position: relative; - box-sizing: border-box; - animation: rotation 2s linear infinite; -} -.loader::after { - content: ""; - box-sizing: border-box; - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - margin: auto; - border: 3px dotted #ff3d00; - border-style: solid solid dotted; - width: 24px; - height: 24px; - border-radius: 50%; - animation: rotationBack 1s linear infinite; - transform-origin: center center; + +@layer base { + #__next{ + height: 100%; + } + :root { + --background: 0 0% 100%; + --foreground: 240 10% 3.9%; + --card: 0 0% 100%; + --card-foreground: 240 10% 3.9%; + --popover: 0 0% 100%; + --popover-foreground: 240 10% 3.9%; + --primary: 240 5.9% 10%; + --primary-foreground: 0 0% 98%; + --secondary: 240 4.8% 95.9%; + --secondary-foreground: 240 5.9% 10%; + --muted: 240 4.8% 95.9%; + --muted-foreground: 240 3.8% 46.1%; + --accent: 240 4.8% 95.9%; + --accent-foreground: 240 5.9% 10%; + --destructive: 0 84.2% 60.2%; + --destructive-foreground: 0 0% 98%; + --border: 240 5.9% 90%; + --input: 240 5.9% 90%; + --ring: 240 10% 3.9%; + --radius: 0.5rem; + --chart-1: 12 76% 61%; + --chart-2: 173 58% 39%; + --chart-3: 197 37% 24%; + --chart-4: 43 74% 66%; + --chart-5: 27 87% 67%; + } + + .dark { + --background: 240 10% 3.9%; + --foreground: 0 0% 98%; + --card: 240 10% 3.9%; + --card-foreground: 0 0% 98%; + --popover: 240 10% 3.9%; + --popover-foreground: 0 0% 98%; + --primary: 0 0% 98%; + --primary-foreground: 240 5.9% 10%; + --secondary: 240 3.7% 15.9%; + --secondary-foreground: 0 0% 98%; + --muted: 240 3.7% 15.9%; + --muted-foreground: 240 5% 64.9%; + --accent: 240 3.7% 15.9%; + --accent-foreground: 0 0% 98%; + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 0 0% 98%; + --border: 240 3.7% 15.9%; + --input: 240 3.7% 15.9%; + --ring: 240 4.9% 83.9%; + --chart-1: 220 70% 50%; + --chart-2: 160 60% 45%; + --chart-3: 30 80% 55%; + --chart-4: 280 65% 60%; + --chart-5: 340 75% 55%; + } } -@keyframes rotation { - 0% { - transform: rotate(0deg); +@layer base { + * { + @apply border-border; } - 100% { - transform: rotate(360deg); + body { + @apply bg-background text-foreground; } -} -@keyframes rotationBack { - 0% { - transform: rotate(0deg); - } - 100% { - transform: rotate(-360deg); - } -} +} \ No newline at end of file diff --git a/tailwind.config.cjs b/tailwind.config.cjs deleted file mode 100644 index 54331dc..0000000 --- a/tailwind.config.cjs +++ /dev/null @@ -1,8 +0,0 @@ -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: ["./src/**/*.{js,ts,jsx,tsx}"], - theme: { - extend: {}, - }, - plugins: [], -}; diff --git a/tailwind.config.ts b/tailwind.config.ts new file mode 100644 index 0000000..84287e8 --- /dev/null +++ b/tailwind.config.ts @@ -0,0 +1,80 @@ +import type { Config } from "tailwindcss" + +const config = { + darkMode: ["class"], + content: [ + './pages/**/*.{ts,tsx}', + './components/**/*.{ts,tsx}', + './app/**/*.{ts,tsx}', + './src/**/*.{ts,tsx}', + ], + prefix: "", + theme: { + container: { + center: true, + padding: "2rem", + screens: { + "2xl": "1400px", + }, + }, + extend: { + colors: { + border: "hsl(var(--border))", + input: "hsl(var(--input))", + ring: "hsl(var(--ring))", + background: "hsl(var(--background))", + foreground: "hsl(var(--foreground))", + primary: { + DEFAULT: "hsl(var(--primary))", + foreground: "hsl(var(--primary-foreground))", + }, + secondary: { + DEFAULT: "hsl(var(--secondary))", + foreground: "hsl(var(--secondary-foreground))", + }, + destructive: { + DEFAULT: "hsl(var(--destructive))", + foreground: "hsl(var(--destructive-foreground))", + }, + muted: { + DEFAULT: "hsl(var(--muted))", + foreground: "hsl(var(--muted-foreground))", + }, + accent: { + DEFAULT: "hsl(var(--accent))", + foreground: "hsl(var(--accent-foreground))", + }, + popover: { + DEFAULT: "hsl(var(--popover))", + foreground: "hsl(var(--popover-foreground))", + }, + card: { + DEFAULT: "hsl(var(--card))", + foreground: "hsl(var(--card-foreground))", + }, + }, + borderRadius: { + lg: "var(--radius)", + md: "calc(var(--radius) - 2px)", + sm: "calc(var(--radius) - 4px)", + }, + keyframes: { + "accordion-down": { + from: { height: "0" }, + to: { height: "var(--radix-accordion-content-height)" }, + }, + "accordion-up": { + from: { height: "var(--radix-accordion-content-height)" }, + to: { height: "0" }, + }, + }, + animation: { + "accordion-down": "accordion-down 0.2s ease-out", + "accordion-up": "accordion-up 0.2s ease-out", + }, + }, + }, + plugins: [require("tailwindcss-animate")], +} satisfies Config + +export default config \ No newline at end of file From 8b1a09d960db36011051a668013eb5c03978ad07 Mon Sep 17 00:00:00 2001 From: andres Date: Thu, 15 Aug 2024 14:17:56 +0200 Subject: [PATCH 06/14] sort tw classes --- biome.json | 5 ++++- bun.lockb | Bin 195232 -> 89075 bytes package.json | 9 +-------- src/components/mode-toggle.tsx | 2 +- src/components/todolist/index.tsx | 7 +++---- src/components/ui/card.tsx | 4 ++-- src/components/ui/dropdown-menu.tsx | 10 +++++----- src/components/ui/input/index.tsx | 2 +- src/pages/_app.tsx | 2 +- src/pages/_document.tsx | 4 ++-- src/pages/sign-up.tsx | 3 ++- src/services/todolist-api/auth/auth.api.ts | 2 +- 12 files changed, 23 insertions(+), 27 deletions(-) diff --git a/biome.json b/biome.json index 3b5fafa..3876841 100644 --- a/biome.json +++ b/biome.json @@ -6,7 +6,10 @@ "linter": { "enabled": true, "rules": { - "recommended": true + "recommended": true, + "nursery": { + "useSortedClasses": "warn" + } } }, "javascript": { diff --git a/bun.lockb b/bun.lockb index c506578370d241e0769eee9a13ce6042f0504ce2..6ac8e3e306c3f2bf3915f16047038694f346268a 100755 GIT binary patch delta 14247 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 L)c*MrZ|nGfmczqu literal 195232 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 diff --git a/package.json b/package.json index a22da4e..05c61e7 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "scripts": { "build": "next build", "dev": "next dev", - "lint": "next lint", + "lint": "biome lint --write --unsafe ./src", "start": "next start", "format": "prettier --write ." }, @@ -29,19 +29,12 @@ }, "devDependencies": { "@biomejs/biome": "1.8.3", - "@it-incubator/eslint-config": "^0.1.0", "@it-incubator/prettier-config": "^0.1.0", "@types/node": "^18.15.11", "@types/react": "^18.0.33", "@types/react-dom": "^18.0.11", - "@typescript-eslint/eslint-plugin": "^5.57.1", - "@typescript-eslint/parser": "^5.57.1", "autoprefixer": "^10.4.14", - "eslint": "^8.37.0", - "eslint-config-next": "13.2.4", "postcss": "^8.4.21", - "prettier": "^2.8.7", - "prettier-plugin-tailwindcss": "^0.2.6", "tailwindcss": "^3.3.1", "typescript": "^5.0.3" }, diff --git a/src/components/mode-toggle.tsx b/src/components/mode-toggle.tsx index 198ccb9..7e613c4 100644 --- a/src/components/mode-toggle.tsx +++ b/src/components/mode-toggle.tsx @@ -19,7 +19,7 @@ export function ModeToggle() { diff --git a/src/components/todolist/index.tsx b/src/components/todolist/index.tsx index b90d1cf..ec4d0fd 100644 --- a/src/components/todolist/index.tsx +++ b/src/components/todolist/index.tsx @@ -2,15 +2,15 @@ import { type ChangeEvent, type FC, type FormEvent, + memo, useCallback, useMemo, + useState, } from "react" -import { memo, useState } from "react" import { Card, CardContent, - CardDescription, CardFooter, CardHeader, CardTitle, @@ -24,7 +24,6 @@ import { Button } from "../ui/button" import { Input } from "../ui/input" import { Checkbox } from "@/components/ui/checkbox" -import { Skeleton } from "@/components/ui/skeleton" import { ToggleGroup, ToggleGroupItem } from "@/components/ui/toggle-group" import { TaskStatus, @@ -123,7 +122,7 @@ export const Todolist: FC = memo(({ todolist }) => { }, [filteredTasks, todolist.id, handleChangeStatus, handleDeleteTask]) return ( - +
    {todolist.title} diff --git a/src/components/ui/card.tsx b/src/components/ui/card.tsx index afa13ec..0a9e625 100644 --- a/src/components/ui/card.tsx +++ b/src/components/ui/card.tsx @@ -36,7 +36,7 @@ const CardTitle = React.forwardRef<

    (({ className, ...props }, ref) => (

    )) diff --git a/src/components/ui/dropdown-menu.tsx b/src/components/ui/dropdown-menu.tsx index 769ff7a..5ac50f0 100644 --- a/src/components/ui/dropdown-menu.tsx +++ b/src/components/ui/dropdown-menu.tsx @@ -45,7 +45,7 @@ const DropdownMenuSubContent = React.forwardRef< ( id={idToUse} type={type} className={cn( - "flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50", + "flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:font-medium file:text-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50", className, )} ref={ref} diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index d1dd042..33a2aee 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -34,7 +34,7 @@ function Header() { logout() } return ( -

    +

    Tasks

    diff --git a/src/pages/_document.tsx b/src/pages/_document.tsx index ddb4eb0..985d849 100644 --- a/src/pages/_document.tsx +++ b/src/pages/_document.tsx @@ -2,9 +2,9 @@ import { Head, Html, Main, NextScript } from "next/document" export default function Document() { return ( - + - +
    diff --git a/src/pages/sign-up.tsx b/src/pages/sign-up.tsx index 6cfee57..5cb1071 100644 --- a/src/pages/sign-up.tsx +++ b/src/pages/sign-up.tsx @@ -13,6 +13,7 @@ const Login: NextPage = () => { e.preventDefault() const formData = new FormData(e.currentTarget) + // biome-ignore lint/suspicious/noExplicitAny: const values = Object.fromEntries(formData) as any signUp(values) } @@ -23,7 +24,7 @@ const Login: NextPage = () => { className={"flex w-96 flex-col gap-3 rounded-md border p-6"} onSubmit={handleSubmit} > -

    Sign up

    +

    Sign up