From 7333f8987c770e8097d796f2391b89009de79d88 Mon Sep 17 00:00:00 2001 From: Anton <14254374+0xmad@users.noreply.github.com> Date: Fri, 21 Jun 2024 21:17:28 -0500 Subject: [PATCH] chore: add dev checks - [x] Add linter - [x] Add type check - [x] Fix linter and type errors - [x] Add main ci checks --- .editorconfig | 17 + .env.example | 16 +- .eslintignore | 11 + .eslintrc.cjs | 183 ++- .github/CODEOWNERS | 16 + .github/workflows/checks.yml | 49 + .github/workflows/codeql.yml | 46 + .github/workflows/commitlint.yml | 32 + .github/workflows/config/typos.toml | 9 + .github/workflows/typos.yml | 21 + .husky/commit-msg | 1 + .husky/pre-commit | 1 + .lintstagedrc.json | 4 + .prettierignore | 10 + .prettierrc | 12 + bun.lockb | Bin 585543 -> 0 bytes commitlint.config.cjs | 4 + docs/01_setup.md | 2 +- package.json | 35 +- pnpm-lock.yaml | 1428 +++++++++++++++-- prettier.config.js | 6 - public/mockServiceWorker.js | 8 +- src/components/ConnectButton.tsx | 215 ++- src/components/ENS.tsx | 15 +- src/components/EligibilityDialog.tsx | 23 +- src/components/EmptyState.tsx | 23 +- src/components/Footer.tsx | 51 +- src/components/Header.tsx | 91 +- src/components/ImageUpload.tsx | 118 +- src/components/InfiniteLoading.tsx | 98 +- src/components/SortByDropdown.tsx | 86 +- src/components/SortFilter.tsx | 25 +- src/components/Toaster.tsx | 9 +- src/components/ui/Alert.tsx | 36 +- src/components/ui/Avatar.tsx | 4 +- src/components/ui/BackgroundImage.tsx | 25 +- src/components/ui/Badge.tsx | 1 + src/components/ui/Banner.tsx | 2 + src/components/ui/Button.tsx | 41 +- src/components/ui/Card.tsx | 1 + src/components/ui/Chip.tsx | 1 + src/components/ui/Dialog.tsx | 76 +- src/components/ui/Divider.tsx | 34 - src/components/ui/Form.tsx | 170 +- src/components/ui/Heading.tsx | 1 + src/components/ui/Link.tsx | 18 +- src/components/ui/Markdown.tsx | 26 +- src/components/ui/Progress.tsx | 8 +- src/components/ui/Skeleton.tsx | 10 +- src/components/ui/Spinner.tsx | 6 +- src/components/ui/Table.tsx | 1 + src/components/ui/Tag.tsx | 1 + src/components/ui/index.tsx | 35 +- src/config.ts | 15 +- src/contexts/Ballot.tsx | 136 +- src/contexts/Maci.tsx | 156 +- src/contexts/types.ts | 7 +- src/env.js | 67 +- .../admin/components/InvalidAdmin.tsx | 19 +- .../components/ApplicationForm.tsx | 358 ++--- .../components/ApplicationsToApprove.tsx | 208 +-- .../applications/components/ApproveButton.tsx | 26 +- .../applications/hooks/useApplications.ts | 5 +- .../hooks/useApproveApplication.ts | 26 +- .../hooks/useApprovedApplications.ts | 5 +- .../hooks/useCreateApplication.ts | 54 +- src/features/applications/types/index.ts | 23 +- .../ballot/components/AllocationInput.tsx | 41 +- .../ballot/components/AllocationList.tsx | 208 +-- .../ballot/components/BallotConfirmation.tsx | 141 +- .../ballot/components/BallotOverview.tsx | 334 ++-- .../ballot/components/VotingEndsIn.tsx | 31 +- src/features/filter/hooks/useFilter.ts | 28 +- src/features/filter/types/index.ts | 5 +- .../projects/components/AddToBallot.tsx | 236 ++- .../projects/components/ImpactCategories.tsx | 10 +- src/features/projects/components/LinkBox.tsx | 46 +- .../projects/components/ProjectAvatar.tsx | 14 +- .../projects/components/ProjectAwarded.tsx | 21 +- .../projects/components/ProjectBanner.tsx | 14 +- .../components/ProjectContributions.tsx | 92 +- .../projects/components/ProjectDetails.tsx | 76 +- .../projects/components/ProjectImpact.tsx | 71 +- .../projects/components/ProjectItem.tsx | 64 +- .../components/ProjectSelectButton.tsx | 18 +- src/features/projects/components/Projects.tsx | 107 +- .../projects/components/ProjectsResults.tsx | 38 +- src/features/projects/hooks/useProjects.ts | 34 +- .../projects/hooks/useSelectProjects.ts | 35 +- src/features/results/components/Chart.tsx | 105 +- .../voters/components/ApproveVoters.tsx | 114 +- src/features/voters/components/VotersList.tsx | 17 +- src/features/voters/hooks/useApproveVoters.ts | 23 +- src/features/voters/hooks/useApprovedVoter.ts | 3 +- src/features/voters/types.tsx | 3 +- src/hooks/useEAS.ts | 30 +- src/hooks/useEthersSigner.ts | 25 +- src/hooks/useIsAdmin.ts | 4 +- src/hooks/useIsCorrectNetwork.ts | 8 +- src/hooks/useMetadata.ts | 31 +- src/hooks/useProfile.ts | 15 +- src/hooks/useResults.ts | 32 +- src/layouts/AdminLayout.tsx | 9 +- src/layouts/BaseLayout.tsx | 127 +- src/layouts/DefaultLayout.tsx | 23 +- src/lib/eas/__test__/eas.test.ts | 27 +- src/lib/eas/createAttestation.ts | 29 +- src/lib/eas/createEAS.ts | 3 +- src/lib/eas/registerSchemas.ts | 41 +- src/pages/_app.tsx | 33 +- src/pages/api/blob.ts | 8 +- src/pages/api/ipfs.ts | 51 - src/pages/api/og.tsx | 8 +- src/pages/api/trpc/[trpc].ts | 5 +- src/pages/applications/[projectId]/index.tsx | 26 +- src/pages/applications/index.tsx | 14 +- src/pages/applications/new.tsx | 37 +- src/pages/ballot/confirmation.tsx | 14 +- src/pages/ballot/index.tsx | 180 +-- src/pages/index.tsx | 21 +- src/pages/info/index.tsx | 41 +- src/pages/projects/[projectId]/Project.tsx | 35 +- src/pages/projects/index.tsx | 16 +- src/pages/projects/results.tsx | 16 +- src/pages/stats/index.tsx | 93 +- src/pages/voters/index.tsx | 40 +- src/pages/voters/status.tsx | 21 +- src/providers/index.tsx | 21 +- src/server/api/root.ts | 6 +- src/server/api/routers/applications.ts | 36 +- src/server/api/routers/maci.ts | 4 +- src/server/api/routers/metadata.ts | 1 + src/server/api/routers/profile.ts | 28 +- src/server/api/routers/projects.ts | 121 +- src/server/api/routers/results.ts | 74 +- src/server/api/routers/voters.ts | 19 +- src/server/api/trpc.ts | 16 +- src/test-msw.ts | 12 +- src/test-setup.ts | 16 +- src/test-utils.tsx | 23 +- src/utils/api.ts | 11 +- src/utils/calculateResults.test.ts | 3 +- src/utils/calculateResults.ts | 35 +- src/utils/classNames.ts | 2 +- src/utils/csv.ts | 4 +- src/utils/fetch.ts | 21 +- src/utils/fetchAttestations.ts | 89 +- src/utils/fetchMetadata.ts | 11 +- src/utils/fetchUser.ts | 11 +- src/utils/formatCurrency.ts | 2 +- src/utils/formatNumber.ts | 17 +- src/utils/reverseKeys.ts | 2 +- src/utils/state.ts | 20 +- src/utils/suffixNumber.ts | 8 +- src/utils/time.ts | 7 +- src/utils/truncate.ts | 6 +- src/utils/url.ts | 2 +- tsconfig.json | 8 +- 158 files changed, 4614 insertions(+), 3281 deletions(-) create mode 100644 .editorconfig create mode 100644 .eslintignore create mode 100644 .github/CODEOWNERS create mode 100644 .github/workflows/checks.yml create mode 100644 .github/workflows/codeql.yml create mode 100644 .github/workflows/commitlint.yml create mode 100644 .github/workflows/config/typos.toml create mode 100644 .github/workflows/typos.yml create mode 100755 .husky/commit-msg create mode 100755 .husky/pre-commit create mode 100644 .lintstagedrc.json create mode 100644 .prettierignore create mode 100644 .prettierrc delete mode 100755 bun.lockb create mode 100644 commitlint.config.cjs delete mode 100644 prettier.config.js delete mode 100644 src/components/ui/Divider.tsx delete mode 100644 src/pages/api/ipfs.ts diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..09fb8561 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,17 @@ +root = true + +[*] +end_of_line = lf +insert_final_newline = true + +[*.{ts,js,tsx,jsx}] +indent_style = space +indent_size = 2 +charset = utf-8 +trim_trailing_whitespace = true + +[*.{yaml,yml}] +indent_style = space +indent_size = 2 +charset = utf-8 +trim_trailing_whitespace = true diff --git a/.env.example b/.env.example index ce660f9b..df9acd29 100644 --- a/.env.example +++ b/.env.example @@ -1,16 +1,6 @@ -# ------------------ -# AUTH CONFIGURATION -# ------------------ - -# You can generate a new secret on the command line with: `openssl rand -base64 32` -# https://next-auth.js.org/configuration/options#secret -NEXTAUTH_SECRET="secret" - -# Domain where your app will be hosted (set to http://localhost:3000 for running locally) -# (if this is not configured correctly, signing the wallet message to sign in will not work) -NEXTAUTH_URL="https://.vercel.app" -# NEXTAUTH_URL="http://localhost:3000" - +# Storage for metadata +# Create a Blob database and get token here: https://vercel.com/dashboard/stores?type=blob +BLOB_READ_WRITE_TOKEN= # --------------------- # NETWORK CONFIGURATION diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 00000000..3be82f2d --- /dev/null +++ b/.eslintignore @@ -0,0 +1,11 @@ +node_modules +dist +.next +coverage +build +typechain-types +.eslintrc.js +commitlint.config.js +subgraph/generated +public/mockServiceWorker.js + diff --git a/.eslintrc.cjs b/.eslintrc.cjs index d4b2cb8a..1616f1ab 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -1,37 +1,176 @@ -/** @type {import("eslint").Linter.Config} */ -const config = { - parser: "@typescript-eslint/parser", - parserOptions: { - project: true, - }, - plugins: ["@typescript-eslint"], +const fs = require("fs"); +const path = require("path"); + +const prettierConfig = fs.readFileSync(path.resolve(__dirname, "./.prettierrc"), "utf8"); +const prettierOptions = JSON.parse(prettierConfig); +const isProduction = process.env.NODE_ENV === "production"; + +module.exports = { + root: true, extends: [ - "plugin:@next/next/recommended", + "airbnb", + "prettier", + "next/core-web-vitals", + "plugin:import/recommended", + "plugin:@typescript-eslint/eslint-recommended", + "plugin:@typescript-eslint/recommended", "plugin:@typescript-eslint/recommended-type-checked", + "plugin:@typescript-eslint/strict", + "plugin:@typescript-eslint/strict-type-checked", + "plugin:@typescript-eslint/stylistic", "plugin:@typescript-eslint/stylistic-type-checked", + "plugin:import/typescript", + "plugin:react/recommended", ], + plugins: ["json", "prettier", "unused-imports", "import", "@typescript-eslint", "react-hooks"], + parser: "@typescript-eslint/parser", + env: { + browser: true, + node: true, + jest: true, + es2022: true, + }, + settings: { + react: { + version: "18", + }, + "import/resolver": { + typescript: {}, + node: { + extensions: [".ts", ".js", ".tsx", ".jsx"], + moduleDirectory: ["node_modules", "src"], + }, + }, + }, + parserOptions: { + project: path.resolve(__dirname, "./tsconfig.json"), + sourceType: "module", + typescript: true, + ecmaVersion: 2022, + experimentalDecorators: true, + requireConfigFile: false, + ecmaFeatures: { + classes: true, + impliedStrict: true, + }, + warnOnUnsupportedTypeScriptVersion: true, + }, + reportUnusedDisableDirectives: isProduction, rules: { - // These opinionated rules are enabled in stylistic-type-checked above. - // Feel free to reconfigure them to your own preference. - "@typescript-eslint/array-type": "off", - "@typescript-eslint/consistent-type-definitions": "off", + "import/no-cycle": ["error"], + "unused-imports/no-unused-imports": "error", + "import/no-extraneous-dependencies": [ + "error", + { + devDependencies: ["**/*.test.ts", "./src/test-msw.ts", "./src/test-setup.ts", "./src/lib/eas/*.ts"], + }, + ], + "no-debugger": isProduction ? "error" : "off", + "no-console": "error", + "no-underscore-dangle": "error", + "no-redeclare": ["error", { builtinGlobals: true }], + "import/order": [ + "error", + { + groups: ["external", "builtin", "internal", "type", "parent", "sibling", "index", "object"], + alphabetize: { + order: "asc", + caseInsensitive: true, + }, + warnOnUnassignedImports: true, + "newlines-between": "always", + }, + ], + "prettier/prettier": ["error", prettierOptions], + "import/prefer-default-export": "off", + "import/extensions": ["error", { json: "always" }], + "class-methods-use-this": "off", + "prefer-promise-reject-errors": "off", + "max-classes-per-file": "off", + "no-use-before-define": ["off"], + "no-shadow": "off", + curly: ["error", "all"], - "@typescript-eslint/consistent-type-imports": [ - "warn", + "@typescript-eslint/explicit-member-accessibility": ["error", { accessibility: "no-public" }], + "@typescript-eslint/no-non-null-assertion": "off", + "@typescript-eslint/prefer-nullish-coalescing": "off", + "@typescript-eslint/no-floating-promises": "off", + "@typescript-eslint/use-unknown-in-catch-callback-variable": "off", + "@typescript-eslint/no-explicit-any": "error", + "@typescript-eslint/explicit-module-boundary-types": "error", + "@typescript-eslint/no-use-before-define": ["error", { functions: false, classes: false }], + "@typescript-eslint/no-misused-promises": ["error", { checksVoidReturn: false }], + "@typescript-eslint/no-shadow": [ + "error", { - prefer: "type-imports", - fixStyle: "inline-type-imports", + builtinGlobals: true, + allow: [ + "alert", + "location", + "event", + "history", + "name", + "status", + "Option", + "Image", + "Lock", + "test", + "expect", + "describe", + "beforeAll", + "afterAll", + ], }, ], - "@typescript-eslint/no-unused-vars": ["warn", { argsIgnorePattern: "^_" }], - "@typescript-eslint/require-await": "off", - "@typescript-eslint/no-misused-promises": [ + "@typescript-eslint/restrict-template-expressions": ["error", { allowNumber: true }], + + "react/jsx-filename-extension": [ "error", { - checksVoidReturn: { attributes: false }, + extensions: [".tsx", ".jsx", ".js"], }, ], + "react/no-unknown-property": ["error", { ignore: ["tw", "global", "jsx"] }], + "react/jsx-sort-props": [ + "error", + { + callbacksLast: true, + shorthandFirst: true, + ignoreCase: true, + reservedFirst: true, + }, + ], + "react/sort-prop-types": [ + "error", + { + callbacksLast: true, + }, + ], + "react/react-in-jsx-scope": "off", + "react/jsx-boolean-value": "error", + "react/jsx-handler-names": "error", + "react/prop-types": "error", + "react/jsx-no-bind": "error", + "react-hooks/rules-of-hooks": "error", + "react/no-array-index-key": "warn", + "jsx-a11y/no-static-element-interactions": "warn", + "jsx-a11y/click-events-have-key-events": "warn", + "jsx-a11y/anchor-is-valid": "warn", + "react/jsx-props-no-spreading": "off", + "react/forbid-prop-types": "off", + "react/state-in-constructor": "off", + "react/jsx-fragments": "off", + "react/static-property-placement": ["off"], + "react/jsx-newline": ["error", { prevent: false }], + "jsx-a11y/label-has-associated-control": "off", + "jsx-a11y/label-has-for": "off", + "react/require-default-props": [ + "error", + { + functions: "defaultArguments", + }, + ], + "react/no-unused-prop-types": "error", + "react/function-component-definition": ["error", { namedComponents: ["arrow-function"] }], }, }; - -module.exports = config; diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 00000000..a9d558df --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1,16 @@ +# Lines starting with '#' are comments. +# Each line is a file pattern followed by one or more owners. + +# More details are here: https://help.github.com/articles/about-codeowners/ + +# The '*' pattern is global owners. + +# Order is important. The last matching pattern has the most precedence. +# The folders are ordered as follows: + +# In each subsection folders are ordered first by depth, then alphabetically. +# This should make it easy to add new rules without breaking existing ones. + +# Global: + +* @ctrlc03 @kittybest @0xmad @crisgarner diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml new file mode 100644 index 00000000..8e3634bf --- /dev/null +++ b/.github/workflows/checks.yml @@ -0,0 +1,49 @@ +name: Checks + +on: + push: + branches: [main] + pull_request: + +env: + NEXT_PUBLIC_CHAIN_NAME: ${{ vars.NEXT_PUBLIC_CHAIN_NAME }} + NEXT_PUBLIC_ADMIN_ADDRESS: ${{ vars.NEXT_PUBLIC_ADMIN_ADDRESS }} + NEXT_PUBLIC_APPROVAL_SCHEMA: ${{ vars.NEXT_PUBLIC_APPROVAL_SCHEMA }} + NEXT_PUBLIC_METADATA_SCHEMA: ${{ vars.NEXT_PUBLIC_METADATA_SCHEMA }} + NEXT_PUBLIC_ROUND_ID: ${{ vars.NEXT_PUBLIC_ROUND_ID }} + NEXT_PUBLIC_SKIP_APPROVED_VOTER_CHECK: false + NEXT_PUBLIC_MACI_ADDRESS: ${{ vars.NEXT_PUBLIC_MACI_ADDRESS }} + NEXT_PUBLIC_TALLY_URL: ${{ vars.NEXT_PUBLIC_TALLY_URL }} + NEXT_PUBLIC_WALLETCONNECT_ID: ${{ secrets.NEXT_PUBLIC_WALLETCONNECT_ID }} + +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +jobs: + check: + strategy: + fail-fast: false + matrix: + command: ["prettier", "types", "lint", "test"] + + runs-on: ubuntu-22.04 + + steps: + - uses: actions/checkout@v4 + - uses: pnpm/action-setup@v4 + with: + version: 8 + + - name: Use Node.js 20 + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: "pnpm" + + - name: Install + run: | + pnpm install + + - name: ${{ matrix.command }} + run: pnpm run ${{ matrix.command }} diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml new file mode 100644 index 00000000..8743f4f9 --- /dev/null +++ b/.github/workflows/codeql.yml @@ -0,0 +1,46 @@ +name: "CodeQL" + +on: + push: + branches: [main] + pull_request: + branches: [main] + schedule: + - cron: "0 0 * * *" + +jobs: + analyze: + name: analyze + runs-on: ubuntu-22.04 + permissions: + actions: read + contents: read + security-events: write + + strategy: + fail-fast: false + matrix: + language: ["javascript-typescript"] + # Learn more about CodeQL language support at https://git.io/codeql-language-support + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v3 + with: + languages: ${{ matrix.language }} + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. + # queries: ./path/to/local/query, your-org/your-repo/queries@main + + # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). + # If this step fails, then you should remove it and run the build manually (see below) + - name: Autobuild + uses: github/codeql-action/autobuild@v3 + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v3 diff --git a/.github/workflows/commitlint.yml b/.github/workflows/commitlint.yml new file mode 100644 index 00000000..fe2541d3 --- /dev/null +++ b/.github/workflows/commitlint.yml @@ -0,0 +1,32 @@ +name: Commitlint + +on: + pull_request: + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + commitlint: + runs-on: ubuntu-22.04 + + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - uses: pnpm/action-setup@v4 + with: + version: 8 + + - name: Use Node.js 20 + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: "pnpm" + + - name: Install + run: | + pnpm install --frozen-lockfile --prefer-offline + + - run: pnpm exec commitlint --from ${{ github.event.pull_request.base.sha }} --to ${{ github.event.pull_request.head.sha }} --verbose diff --git a/.github/workflows/config/typos.toml b/.github/workflows/config/typos.toml new file mode 100644 index 00000000..844da57b --- /dev/null +++ b/.github/workflows/config/typos.toml @@ -0,0 +1,9 @@ +[default.extend-words] +ba = "ba" +serie = "serie" +groth = "groth" +Allo = "Allo" +Buidl = "Buidl" + +[files] +extend-exclude = ["/**/CHANGELOG.md", "/**/*.svg", "/**/*.excalidraw"] diff --git a/.github/workflows/typos.yml b/.github/workflows/typos.yml new file mode 100644 index 00000000..70963f83 --- /dev/null +++ b/.github/workflows/typos.yml @@ -0,0 +1,21 @@ +name: Typo Check + +on: + push: + branches: [dev] + pull_request: + +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +jobs: + typos: + name: Spell Check with Typos + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v4 + - name: Use typos with config file + uses: crate-ci/typos@v1.22.7 + with: + config: .github/workflows/config/typos.toml diff --git a/.husky/commit-msg b/.husky/commit-msg new file mode 100755 index 00000000..6a2e4c84 --- /dev/null +++ b/.husky/commit-msg @@ -0,0 +1 @@ +pnpm exec commitlint --edit $1 diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100755 index 00000000..035932cf --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1 @@ +pnpm exec lint-staged && pnpm run types diff --git a/.lintstagedrc.json b/.lintstagedrc.json new file mode 100644 index 00000000..334ad492 --- /dev/null +++ b/.lintstagedrc.json @@ -0,0 +1,4 @@ +{ + "**/*.{ts,js,tsx,jsx}": ["prettier --ignore-unknown --write", "eslint --fix"], + "*": ["prettier --ignore-unknown --write"] +} diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 00000000..286356fc --- /dev/null +++ b/.prettierignore @@ -0,0 +1,10 @@ +build/ +dist/ +.next/ +node_modules/ +coverage/ +pnpm-lock.yaml +CHANGELOG.md +CODEOWNERS +.eslintignore + diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 00000000..c7d002c5 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,12 @@ +{ + "plugins": ["prettier-plugin-tailwindcss"], + "arrowParens": "always", + "bracketSpacing": true, + "endOfLine": "lf", + "printWidth": 120, + "singleQuote": false, + "semi": true, + "tabWidth": 2, + "useTabs": false, + "trailingComma": "all" +} diff --git a/bun.lockb b/bun.lockb deleted file mode 100755 index 10fef2c7067a19d259b5bb2f593a154e1ebaaa29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 585543 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%0Da=MS1d)SA6c{H+&Q^iRD{kF15Jo>&M93Lf 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 diff --git a/commitlint.config.cjs b/commitlint.config.cjs new file mode 100644 index 00000000..e6ec2f43 --- /dev/null +++ b/commitlint.config.cjs @@ -0,0 +1,4 @@ +module.exports = { + extends: ["@commitlint/config-conventional"], + ignores: [(message) => /Signed-off-by: dependabot\[bot]/m.test(message)], +}; diff --git a/docs/01_setup.md b/docs/01_setup.md index d1f0bcca..048eb5d0 100644 --- a/docs/01_setup.md +++ b/docs/01_setup.md @@ -172,7 +172,7 @@ pnpm run prove:[network] --poll [poll-id] \ > [!IMPORTANT] > We suggest including the --start-block flag, proving requires fetching all events from the smart contracts and by default starts from block zero, this would take a lot of time and is error-prone due to RPC provider limitations. -Once you have the tally.json file you can rename it (tally-{pollId}.json), upload it and add it as an enviroment variable `NEXT_PUBLIC_TALLY_URL` to show the results. +Once you have the tally.json file you can rename it (tally-{pollId}.json), upload it and add it as an environment variable `NEXT_PUBLIC_TALLY_URL` to show the results. ## Additional configuration diff --git a/package.json b/package.json index 63c7b4e3..aa5fd868 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "easy-retro-pgf", + "name": "maci-rpgf", "version": "0.1.0", "private": true, "type": "module", @@ -7,9 +7,14 @@ "build": "next build", "dev": "next dev", "lint": "next lint", + "lint:fix": "next lint --fix", "start": "next start", - "test": "vitest", - "eas:registerSchemas": "npx tsx src/lib/eas/registerSchemas" + "test": "vitest run", + "prettier": "prettier -c .", + "prettier:fix": "prettier -w .", + "types": "tsc -p tsconfig.json --noEmit", + "eas:registerSchemas": "npx tsx src/lib/eas/registerSchemas", + "prepare": "is-ci || husky" }, "dependencies": { "@ethereum-attestation-service/eas-sdk": "^1.5.0", @@ -65,9 +70,11 @@ "zod": "3.22.4" }, "devDependencies": { - "@next/eslint-plugin-next": "^14.1.0", + "@commitlint/cli": "^19.3.0", + "@commitlint/config-conventional": "^19.2.2", + "@next/eslint-plugin-next": "^14.2.3", "@tailwindcss/typography": "^0.5.10", - "@testing-library/jest-dom": "^6.3.0", + "@testing-library/jest-dom": "^6.4.5", "@types/eslint": "^8.56.2", "@types/formidable": "^3.4.5", "@types/lowdb": "^1.0.15", @@ -81,17 +88,31 @@ "@vitejs/plugin-react": "^4.2.1", "autoprefixer": "^10.4.17", "dotenv": "^16.4.1", - "eslint": "^8.56.0", + "eslint": "^8.57.0", + "eslint-config-airbnb": "^19.0.4", + "eslint-config-next": "14.2.4", + "eslint-config-prettier": "^9.1.0", + "eslint-import-resolver-typescript": "^3.6.1", + "eslint-plugin-import": "^2.29.1", + "eslint-plugin-json": "^4.0.0", + "eslint-plugin-jsx-a11y": "^6.8.0", + "eslint-plugin-prettier": "^5.1.3", + "eslint-plugin-react": "^7.34.3", + "eslint-plugin-react-hooks": "^4.6.2", + "eslint-plugin-unused-imports": "^4.0.0", "happy-dom": "^13.3.2", "hardhat": "^2.22.3", + "husky": "^9.0.11", + "is-ci": "^3.0.1", "jsdom": "^24.0.0", "ky": "^1.2.0", + "lint-staged": "^15.2.7", "msw": "^2.1.5", "msw-trpc": "2.0.0-beta.0", "mws": "^2.0.11", "next-router-mock": "^0.9.11", "postcss": "^8.4.33", - "prettier": "^3.2.4", + "prettier": "^3.3.2", "prettier-plugin-tailwindcss": "^0.5.11", "tailwindcss": "^3.4.1", "typescript": "^5.3.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c0258b1f..bdd4cd8e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -160,14 +160,20 @@ dependencies: version: 3.22.4 devDependencies: + '@commitlint/cli': + specifier: ^19.3.0 + version: 19.3.0(@types/node@20.12.11)(typescript@5.4.5) + '@commitlint/config-conventional': + specifier: ^19.2.2 + version: 19.2.2 '@next/eslint-plugin-next': - specifier: ^14.1.0 + specifier: ^14.2.3 version: 14.2.3 '@tailwindcss/typography': specifier: ^0.5.10 version: 0.5.13(tailwindcss@3.4.3) '@testing-library/jest-dom': - specifier: ^6.3.0 + specifier: ^6.4.5 version: 6.4.5(vitest@1.6.0) '@types/eslint': specifier: ^8.56.2 @@ -209,20 +215,62 @@ devDependencies: specifier: ^16.4.1 version: 16.4.5 eslint: - specifier: ^8.56.0 + specifier: ^8.57.0 version: 8.57.0 + eslint-config-airbnb: + specifier: ^19.0.4 + version: 19.0.4(eslint-plugin-import@2.29.1)(eslint-plugin-jsx-a11y@6.8.0)(eslint-plugin-react-hooks@4.6.2)(eslint-plugin-react@7.34.3)(eslint@8.57.0) + eslint-config-next: + specifier: 14.2.4 + version: 14.2.4(eslint@8.57.0)(typescript@5.4.5) + eslint-config-prettier: + specifier: ^9.1.0 + version: 9.1.0(eslint@8.57.0) + eslint-import-resolver-typescript: + specifier: ^3.6.1 + version: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0) + eslint-plugin-import: + specifier: ^2.29.1 + version: 2.29.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-plugin-json: + specifier: ^4.0.0 + version: 4.0.0 + eslint-plugin-jsx-a11y: + specifier: ^6.8.0 + version: 6.8.0(eslint@8.57.0) + eslint-plugin-prettier: + specifier: ^5.1.3 + version: 5.1.3(@types/eslint@8.56.10)(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.3.2) + eslint-plugin-react: + specifier: ^7.34.3 + version: 7.34.3(eslint@8.57.0) + eslint-plugin-react-hooks: + specifier: ^4.6.2 + version: 4.6.2(eslint@8.57.0) + eslint-plugin-unused-imports: + specifier: ^4.0.0 + version: 4.0.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0) happy-dom: specifier: ^13.3.2 version: 13.10.1 hardhat: specifier: ^2.22.3 version: 2.22.3(ts-node@10.9.2)(typescript@5.4.5) + husky: + specifier: ^9.0.11 + version: 9.0.11 + is-ci: + specifier: ^3.0.1 + version: 3.0.1 jsdom: specifier: ^24.0.0 version: 24.0.0 ky: specifier: ^1.2.0 version: 1.2.4 + lint-staged: + specifier: ^15.2.7 + version: 15.2.7 msw: specifier: ^2.1.5 version: 2.3.0(typescript@5.4.5) @@ -239,11 +287,11 @@ devDependencies: specifier: ^8.4.33 version: 8.4.38 prettier: - specifier: ^3.2.4 - version: 3.2.5 + specifier: ^3.3.2 + version: 3.3.2 prettier-plugin-tailwindcss: specifier: ^0.5.11 - version: 0.5.14(prettier@3.2.5) + version: 0.5.14(prettier@3.3.2) tailwindcss: specifier: ^3.4.1 version: 3.4.3(ts-node@10.9.2) @@ -301,7 +349,6 @@ packages: dependencies: '@babel/highlight': 7.24.6 picocolors: 1.0.0 - dev: false /@babel/compat-data@7.24.4: resolution: {integrity: sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==} @@ -596,7 +643,6 @@ packages: /@babel/helper-validator-identifier@7.24.6: resolution: {integrity: sha512-4yA7s865JHaqUdRbnaxarZREuPTHrjpDT+pXoAZ1yhyo6uFnIEpS8VMu16siFOHDpZNKYv5BObhsB//ycbICyw==} engines: {node: '>=6.9.0'} - dev: false /@babel/helper-validator-option@7.23.5: resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} @@ -643,7 +689,6 @@ packages: chalk: 2.4.2 js-tokens: 4.0.0 picocolors: 1.0.0 - dev: false /@babel/parser@7.24.5: resolution: {integrity: sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==} @@ -1905,6 +1950,169 @@ packages: commander: 12.0.0 dev: false + /@commitlint/cli@19.3.0(@types/node@20.12.11)(typescript@5.4.5): + resolution: {integrity: sha512-LgYWOwuDR7BSTQ9OLZ12m7F/qhNY+NpAyPBgo4YNMkACE7lGuUnuQq1yi9hz1KA4+3VqpOYl8H1rY/LYK43v7g==} + engines: {node: '>=v18'} + hasBin: true + dependencies: + '@commitlint/format': 19.3.0 + '@commitlint/lint': 19.2.2 + '@commitlint/load': 19.2.0(@types/node@20.12.11)(typescript@5.4.5) + '@commitlint/read': 19.2.1 + '@commitlint/types': 19.0.3 + execa: 8.0.1 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - typescript + dev: true + + /@commitlint/config-conventional@19.2.2: + resolution: {integrity: sha512-mLXjsxUVLYEGgzbxbxicGPggDuyWNkf25Ht23owXIH+zV2pv1eJuzLK3t1gDY5Gp6pxdE60jZnWUY5cvgL3ufw==} + engines: {node: '>=v18'} + dependencies: + '@commitlint/types': 19.0.3 + conventional-changelog-conventionalcommits: 7.0.2 + dev: true + + /@commitlint/config-validator@19.0.3: + resolution: {integrity: sha512-2D3r4PKjoo59zBc2auodrSCaUnCSALCx54yveOFwwP/i2kfEAQrygwOleFWswLqK0UL/F9r07MFi5ev2ohyM4Q==} + engines: {node: '>=v18'} + dependencies: + '@commitlint/types': 19.0.3 + ajv: 8.13.0 + dev: true + + /@commitlint/ensure@19.0.3: + resolution: {integrity: sha512-SZEpa/VvBLoT+EFZVb91YWbmaZ/9rPH3ESrINOl0HD2kMYsjvl0tF7nMHh0EpTcv4+gTtZBAe1y/SS6/OhfZzQ==} + engines: {node: '>=v18'} + dependencies: + '@commitlint/types': 19.0.3 + lodash.camelcase: 4.3.0 + lodash.kebabcase: 4.1.1 + lodash.snakecase: 4.1.1 + lodash.startcase: 4.4.0 + lodash.upperfirst: 4.3.1 + dev: true + + /@commitlint/execute-rule@19.0.0: + resolution: {integrity: sha512-mtsdpY1qyWgAO/iOK0L6gSGeR7GFcdW7tIjcNFxcWkfLDF5qVbPHKuGATFqRMsxcO8OUKNj0+3WOHB7EHm4Jdw==} + engines: {node: '>=v18'} + dev: true + + /@commitlint/format@19.3.0: + resolution: {integrity: sha512-luguk5/aF68HiF4H23ACAfk8qS8AHxl4LLN5oxPc24H+2+JRPsNr1OS3Gaea0CrH7PKhArBMKBz5RX9sA5NtTg==} + engines: {node: '>=v18'} + dependencies: + '@commitlint/types': 19.0.3 + chalk: 5.3.0 + dev: true + + /@commitlint/is-ignored@19.2.2: + resolution: {integrity: sha512-eNX54oXMVxncORywF4ZPFtJoBm3Tvp111tg1xf4zWXGfhBPKpfKG6R+G3G4v5CPlRROXpAOpQ3HMhA9n1Tck1g==} + engines: {node: '>=v18'} + dependencies: + '@commitlint/types': 19.0.3 + semver: 7.6.2 + dev: true + + /@commitlint/lint@19.2.2: + resolution: {integrity: sha512-xrzMmz4JqwGyKQKTpFzlN0dx0TAiT7Ran1fqEBgEmEj+PU98crOFtysJgY+QdeSagx6EDRigQIXJVnfrI0ratA==} + engines: {node: '>=v18'} + dependencies: + '@commitlint/is-ignored': 19.2.2 + '@commitlint/parse': 19.0.3 + '@commitlint/rules': 19.0.3 + '@commitlint/types': 19.0.3 + dev: true + + /@commitlint/load@19.2.0(@types/node@20.12.11)(typescript@5.4.5): + resolution: {integrity: sha512-XvxxLJTKqZojCxaBQ7u92qQLFMMZc4+p9qrIq/9kJDy8DOrEa7P1yx7Tjdc2u2JxIalqT4KOGraVgCE7eCYJyQ==} + engines: {node: '>=v18'} + dependencies: + '@commitlint/config-validator': 19.0.3 + '@commitlint/execute-rule': 19.0.0 + '@commitlint/resolve-extends': 19.1.0 + '@commitlint/types': 19.0.3 + chalk: 5.3.0 + cosmiconfig: 9.0.0(typescript@5.4.5) + cosmiconfig-typescript-loader: 5.0.0(@types/node@20.12.11)(cosmiconfig@9.0.0)(typescript@5.4.5) + lodash.isplainobject: 4.0.6 + lodash.merge: 4.6.2 + lodash.uniq: 4.5.0 + transitivePeerDependencies: + - '@types/node' + - typescript + dev: true + + /@commitlint/message@19.0.0: + resolution: {integrity: sha512-c9czf6lU+9oF9gVVa2lmKaOARJvt4soRsVmbR7Njwp9FpbBgste5i7l/2l5o8MmbwGh4yE1snfnsy2qyA2r/Fw==} + engines: {node: '>=v18'} + dev: true + + /@commitlint/parse@19.0.3: + resolution: {integrity: sha512-Il+tNyOb8VDxN3P6XoBBwWJtKKGzHlitEuXA5BP6ir/3loWlsSqDr5aecl6hZcC/spjq4pHqNh0qPlfeWu38QA==} + engines: {node: '>=v18'} + dependencies: + '@commitlint/types': 19.0.3 + conventional-changelog-angular: 7.0.0 + conventional-commits-parser: 5.0.0 + dev: true + + /@commitlint/read@19.2.1: + resolution: {integrity: sha512-qETc4+PL0EUv7Q36lJbPG+NJiBOGg7SSC7B5BsPWOmei+Dyif80ErfWQ0qXoW9oCh7GTpTNRoaVhiI8RbhuaNw==} + engines: {node: '>=v18'} + dependencies: + '@commitlint/top-level': 19.0.0 + '@commitlint/types': 19.0.3 + execa: 8.0.1 + git-raw-commits: 4.0.0 + minimist: 1.2.8 + dev: true + + /@commitlint/resolve-extends@19.1.0: + resolution: {integrity: sha512-z2riI+8G3CET5CPgXJPlzftH+RiWYLMYv4C9tSLdLXdr6pBNimSKukYP9MS27ejmscqCTVA4almdLh0ODD2KYg==} + engines: {node: '>=v18'} + dependencies: + '@commitlint/config-validator': 19.0.3 + '@commitlint/types': 19.0.3 + global-directory: 4.0.1 + import-meta-resolve: 4.1.0 + lodash.mergewith: 4.6.2 + resolve-from: 5.0.0 + dev: true + + /@commitlint/rules@19.0.3: + resolution: {integrity: sha512-TspKb9VB6svklxNCKKwxhELn7qhtY1rFF8ls58DcFd0F97XoG07xugPjjbVnLqmMkRjZDbDIwBKt9bddOfLaPw==} + engines: {node: '>=v18'} + dependencies: + '@commitlint/ensure': 19.0.3 + '@commitlint/message': 19.0.0 + '@commitlint/to-lines': 19.0.0 + '@commitlint/types': 19.0.3 + execa: 8.0.1 + dev: true + + /@commitlint/to-lines@19.0.0: + resolution: {integrity: sha512-vkxWo+VQU5wFhiP9Ub9Sre0FYe019JxFikrALVoD5UGa8/t3yOJEpEhxC5xKiENKKhUkTpEItMTRAjHw2SCpZw==} + engines: {node: '>=v18'} + dev: true + + /@commitlint/top-level@19.0.0: + resolution: {integrity: sha512-KKjShd6u1aMGNkCkaX4aG1jOGdn7f8ZI8TR1VEuNqUOjWTOdcDSsmglinglJ18JTjuBX5I1PtjrhQCRcixRVFQ==} + engines: {node: '>=v18'} + dependencies: + find-up: 7.0.0 + dev: true + + /@commitlint/types@19.0.3: + resolution: {integrity: sha512-tpyc+7i6bPG9mvaBbtKUeghfyZSDgWquIDfMgqYtTbmZ9Y9VzEm2je9EYcQ0aoz5o7NvGS+rcDec93yO08MHYA==} + engines: {node: '>=v18'} + dependencies: + '@types/conventional-commits-parser': 5.0.0 + chalk: 5.3.0 + dev: true + /@cspotcode/source-map-support@0.8.1: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} @@ -2591,6 +2799,7 @@ packages: /@humanwhocodes/config-array@0.11.14: resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead dependencies: '@humanwhocodes/object-schema': 2.0.3 debug: 4.3.4(supports-color@8.1.1) @@ -2606,6 +2815,7 @@ packages: /@humanwhocodes/object-schema@2.0.3: resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + deprecated: Use @eslint/object-schema instead dev: true /@iden3/bigarray@0.0.2: @@ -3096,6 +3306,12 @@ packages: glob: 10.3.10 dev: true + /@next/eslint-plugin-next@14.2.4: + resolution: {integrity: sha512-svSFxW9f3xDaZA3idQmlFw7SusOuWTpDTAeBlO3AEPDltrraV+lqs7mAc6A27YdnpQVVIA3sODqUAAHdWhVWsA==} + dependencies: + glob: 10.3.10 + dev: true + /@next/swc-darwin-arm64@14.2.3: resolution: {integrity: sha512-3pEYo/RaGqPP0YzwnlmPN2puaF2WMLM3apt5jLW2fFdXD9+pqcoTzRk+iZsf8ta7+quAe4Q6Ms0nR0SFGFdS1A==} engines: {node: '>= 10'} @@ -3959,6 +4175,11 @@ packages: requiresBuild: true optional: true + /@pkgr/core@0.1.1: + resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + dev: true + /@radix-ui/primitive@1.0.0: resolution: {integrity: sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA==} dependencies: @@ -5294,6 +5515,10 @@ packages: dev: true optional: true + /@rushstack/eslint-patch@1.10.3: + resolution: {integrity: sha512-qC/xYId4NMebE6w/V33Fh9gWxLgURiNYgVNObbJl2LZv0GUUItCcCqC5axQSwRaAgaxl2mELq1rMzlswaQ0Zxg==} + dev: true + /@safe-global/safe-apps-provider@0.18.1(typescript@5.4.5)(zod@3.22.4): resolution: {integrity: sha512-V4a05A3EgJcriqtDoJklDz1BOinWhC6P0hjUSxshA4KOZM7rGPCTto/usXs09zr1vvL28evl/NldSTv97j2bmg==} dependencies: @@ -5888,6 +6113,12 @@ packages: '@types/node': 20.12.11 dev: false + /@types/conventional-commits-parser@5.0.0: + resolution: {integrity: sha512-loB369iXNmAZglwWATL+WRe+CRMmmBPtpolYzIebFaX4YA3x+BEfLqhUAV9WanycKI3TG1IMr5bMJDajDKLlUQ==} + dependencies: + '@types/node': 20.12.11 + dev: true + /@types/cookie@0.6.0: resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} dev: true @@ -6019,6 +6250,10 @@ packages: resolution: {integrity: sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==} dev: true + /@types/json5@0.0.29: + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + dev: true + /@types/lodash@4.17.1: resolution: {integrity: sha512-X+2qazGS3jxLAIz5JDXDzglAF3KpijdhFxlf/V1+hEsOUc+HnWi81L/uv/EvGuV90WY+7mPGFCUDGfQC3Gj95Q==} dev: true @@ -6912,6 +7147,14 @@ packages: buffer: 6.0.3 dev: false + /JSONStream@1.3.5: + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} + hasBin: true + dependencies: + jsonparse: 1.3.1 + through: 2.3.8 + dev: true + /abbrev@1.0.9: resolution: {integrity: sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==} dev: false @@ -6961,12 +7204,12 @@ packages: negotiator: 0.6.3 dev: false - /acorn-jsx@5.3.2(acorn@8.11.3): + /acorn-jsx@5.3.2(acorn@8.12.0): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.11.3 + acorn: 8.12.0 dev: true /acorn-walk@8.3.2: @@ -6978,6 +7221,11 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + /acorn@8.12.0: + resolution: {integrity: sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==} + engines: {node: '>=0.4.0'} + hasBin: true + /adm-zip@0.4.16: resolution: {integrity: sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==} engines: {node: '>=0.3.0'} @@ -7030,7 +7278,6 @@ packages: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 uri-js: 4.4.1 - dev: false /amdefine@1.0.1: resolution: {integrity: sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==} @@ -7062,6 +7309,11 @@ packages: dependencies: type-fest: 0.21.3 + /ansi-escapes@6.2.1: + resolution: {integrity: sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==} + engines: {node: '>=14.16'} + dev: true + /ansi-fragments@0.2.1: resolution: {integrity: sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w==} dependencies: @@ -7180,7 +7432,22 @@ packages: dependencies: call-bind: 1.0.7 is-array-buffer: 3.0.4 - dev: false + + /array-ify@1.0.0: + resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} + dev: true + + /array-includes@3.1.8: + resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + get-intrinsic: 1.2.4 + is-string: 1.0.7 + dev: true /array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} @@ -7201,7 +7468,58 @@ packages: es-errors: 1.3.0 es-object-atoms: 1.0.0 es-shim-unscopables: 1.0.2 - dev: false + + /array.prototype.findlastindex@1.2.5: + resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-shim-unscopables: 1.0.2 + dev: true + + /array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-shim-unscopables: 1.0.2 + dev: true + + /array.prototype.flatmap@1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-shim-unscopables: 1.0.2 + dev: true + + /array.prototype.toreversed@1.1.2: + resolution: {integrity: sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-shim-unscopables: 1.0.2 + dev: true + + /array.prototype.tosorted@1.1.4: + resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-shim-unscopables: 1.0.2 + dev: true /arraybuffer.prototype.slice@1.0.3: resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} @@ -7215,7 +7533,6 @@ packages: get-intrinsic: 1.2.4 is-array-buffer: 3.0.4 is-shared-array-buffer: 1.0.3 - dev: false /asap@2.0.6: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} @@ -7224,6 +7541,10 @@ packages: /assertion-error@1.1.0: resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + /ast-types-flow@0.0.8: + resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} + dev: true + /ast-types@0.15.2: resolution: {integrity: sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==} engines: {node: '>=4'} @@ -7309,7 +7630,11 @@ packages: engines: {node: '>= 0.4'} dependencies: possible-typed-array-names: 1.0.0 - dev: false + + /axe-core@4.7.0: + resolution: {integrity: sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==} + engines: {node: '>=4'} + dev: true /axios@0.21.4: resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} @@ -7338,6 +7663,12 @@ packages: - debug dev: false + /axobject-query@3.2.1: + resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} + dependencies: + dequal: 2.0.3 + dev: true + /b4a@1.6.6: resolution: {integrity: sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==} dev: false @@ -7512,6 +7843,12 @@ packages: dependencies: fill-range: 7.0.1 + /braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.1.1 + /brorand@1.1.0: resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} @@ -7631,7 +7968,6 @@ packages: function-bind: 1.1.2 get-intrinsic: 1.2.4 set-function-length: 1.2.2 - dev: false /caller-callsite@2.0.0: resolution: {integrity: sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==} @@ -7739,6 +8075,11 @@ packages: ansi-styles: 4.3.0 supports-color: 7.2.0 + /chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + dev: true + /character-entities-html4@2.1.0: resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} dev: false @@ -7824,7 +8165,6 @@ packages: /ci-info@3.9.0: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} - dev: false /cids@0.7.5: resolution: {integrity: sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==} @@ -7935,6 +8275,13 @@ packages: restore-cursor: 3.1.0 dev: false + /cli-cursor@4.0.0: + resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + restore-cursor: 4.0.0 + dev: true + /cli-spinners@2.9.2: resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} engines: {node: '>=6'} @@ -7949,6 +8296,14 @@ packages: colors: 1.4.0 dev: false + /cli-truncate@4.0.0: + resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} + engines: {node: '>=18'} + dependencies: + slice-ansi: 5.0.0 + string-width: 7.1.0 + dev: true + /cli-width@4.1.0: resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} engines: {node: '>= 12'} @@ -8052,6 +8407,10 @@ packages: resolution: {integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==} dev: false + /colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + dev: true + /colors@1.0.3: resolution: {integrity: sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==} engines: {node: '>=0.1.90'} @@ -8100,6 +8459,11 @@ packages: engines: {node: '>=18'} dev: false + /commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + dev: true + /commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} dev: false @@ -8120,6 +8484,13 @@ packages: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} dev: false + /compare-func@2.0.0: + resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} + dependencies: + array-ify: 1.0.0 + dot-prop: 5.3.0 + dev: true + /compressible@2.0.18: resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} engines: {node: '>= 0.6'} @@ -8158,6 +8529,10 @@ packages: /confbox@0.1.7: resolution: {integrity: sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==} + /confusing-browser-globals@1.0.11: + resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==} + dev: true + /connect@3.7.0: resolution: {integrity: sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==} engines: {node: '>= 0.10.0'} @@ -8175,6 +8550,31 @@ packages: engines: {node: ^14.18.0 || >=16.10.0} dev: false + /conventional-changelog-angular@7.0.0: + resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==} + engines: {node: '>=16'} + dependencies: + compare-func: 2.0.0 + dev: true + + /conventional-changelog-conventionalcommits@7.0.2: + resolution: {integrity: sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==} + engines: {node: '>=16'} + dependencies: + compare-func: 2.0.0 + dev: true + + /conventional-commits-parser@5.0.0: + resolution: {integrity: sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==} + engines: {node: '>=16'} + hasBin: true + dependencies: + JSONStream: 1.3.5 + is-text-path: 2.0.0 + meow: 12.1.1 + split2: 4.2.0 + dev: true + /convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} @@ -8213,6 +8613,20 @@ packages: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} dev: false + /cosmiconfig-typescript-loader@5.0.0(@types/node@20.12.11)(cosmiconfig@9.0.0)(typescript@5.4.5): + resolution: {integrity: sha512-+8cK7jRAReYkMwMiG+bxhcNKiHJDM6bR9FD/nGBXOWdMLuYawjF5cGrtLilJ+LGd3ZjCXnJjR5DkfWPoIVlqJA==} + engines: {node: '>=v16'} + peerDependencies: + '@types/node': '*' + cosmiconfig: '>=8.2' + typescript: '>=4' + dependencies: + '@types/node': 20.12.11 + cosmiconfig: 9.0.0(typescript@5.4.5) + jiti: 1.21.0 + typescript: 5.4.5 + dev: true + /cosmiconfig@5.2.1: resolution: {integrity: sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==} engines: {node: '>=4'} @@ -8223,6 +8637,22 @@ packages: parse-json: 4.0.0 dev: false + /cosmiconfig@9.0.0(typescript@5.4.5): + resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + env-paths: 2.2.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + parse-json: 5.2.0 + typescript: 5.4.5 + dev: true + /crc-32@1.2.2: resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} engines: {node: '>=0.8'} @@ -8424,6 +8854,15 @@ packages: d3-array: 2.12.1 dev: false + /damerau-levenshtein@1.0.8: + resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + dev: true + + /dargs@8.1.0: + resolution: {integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==} + engines: {node: '>=12'} + dev: true + /data-urls@5.0.0: resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} engines: {node: '>=18'} @@ -8439,7 +8878,6 @@ packages: call-bind: 1.0.7 es-errors: 1.3.0 is-data-view: 1.0.1 - dev: false /data-view-byte-length@1.0.1: resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} @@ -8448,7 +8886,6 @@ packages: call-bind: 1.0.7 es-errors: 1.3.0 is-data-view: 1.0.1 - dev: false /data-view-byte-offset@1.0.0: resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} @@ -8457,7 +8894,6 @@ packages: call-bind: 1.0.7 es-errors: 1.3.0 is-data-view: 1.0.1 - dev: false /date-fns@2.30.0: resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} @@ -8489,6 +8925,17 @@ packages: ms: 2.0.0 dev: false + /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(supports-color@8.1.1): resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} @@ -8585,7 +9032,6 @@ packages: es-define-property: 1.0.0 es-errors: 1.3.0 gopd: 1.0.1 - dev: false /define-lazy-prop@2.0.0: resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} @@ -8599,7 +9045,6 @@ packages: define-data-property: 1.1.4 has-property-descriptors: 1.0.2 object-keys: 1.1.1 - dev: false /defu@6.1.4: resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} @@ -8696,6 +9141,13 @@ packages: /dlv@1.1.3: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + /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: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} @@ -8711,6 +9163,13 @@ packages: resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} dev: true + /dot-prop@5.3.0: + resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} + engines: {node: '>=8'} + dependencies: + is-obj: 2.0.0 + dev: true + /dotenv@16.4.5: resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} engines: {node: '>=12'} @@ -8772,6 +9231,10 @@ packages: minimalistic-assert: 1.0.1 minimalistic-crypto-utils: 1.0.1 + /emoji-regex@10.3.0: + resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} + dev: true + /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -8812,6 +9275,14 @@ packages: engines: {node: '>=10.0.0'} dev: false + /enhanced-resolve@5.17.0: + resolution: {integrity: sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==} + engines: {node: '>=10.13.0'} + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + dev: true + /enquirer@2.4.1: resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} engines: {node: '>=8.6'} @@ -8838,7 +9309,6 @@ packages: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: is-arrayish: 0.2.1 - dev: false /error-stack-parser@2.1.4: resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} @@ -8904,19 +9374,16 @@ packages: typed-array-length: 1.0.6 unbox-primitive: 1.0.2 which-typed-array: 1.1.15 - dev: false /es-define-property@1.0.0: resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} engines: {node: '>= 0.4'} dependencies: get-intrinsic: 1.2.4 - dev: false /es-errors@1.3.0: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - dev: false /es-get-iterator@1.1.3: resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} @@ -8932,12 +9399,31 @@ packages: stop-iteration-iterator: 1.0.0 dev: false + /es-iterator-helpers@1.0.19: + resolution: {integrity: sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-set-tostringtag: 2.0.3 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + globalthis: 1.0.4 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + internal-slot: 1.0.7 + iterator.prototype: 1.1.2 + safe-array-concat: 1.1.2 + dev: true + /es-object-atoms@1.0.0: resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} engines: {node: '>= 0.4'} dependencies: es-errors: 1.3.0 - dev: false /es-set-tostringtag@2.0.3: resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} @@ -8946,13 +9432,11 @@ packages: get-intrinsic: 1.2.4 has-tostringtag: 1.0.2 hasown: 2.0.2 - dev: false /es-shim-unscopables@1.0.2: resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} dependencies: hasown: 2.0.2 - dev: false /es-to-primitive@1.2.1: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} @@ -8961,7 +9445,6 @@ packages: is-callable: 1.2.7 is-date-object: 1.0.5 is-symbol: 1.0.4 - dev: false /esbuild@0.20.2: resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} @@ -9041,6 +9524,284 @@ packages: source-map: 0.2.0 dev: false + /eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.29.1)(eslint@8.57.0): + resolution: {integrity: sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==} + engines: {node: ^10.12.0 || >=12.0.0} + peerDependencies: + eslint: ^7.32.0 || ^8.2.0 + eslint-plugin-import: ^2.25.2 + dependencies: + confusing-browser-globals: 1.0.11 + eslint: 8.57.0 + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + object.assign: 4.1.5 + object.entries: 1.1.8 + semver: 6.3.1 + dev: true + + /eslint-config-airbnb@19.0.4(eslint-plugin-import@2.29.1)(eslint-plugin-jsx-a11y@6.8.0)(eslint-plugin-react-hooks@4.6.2)(eslint-plugin-react@7.34.3)(eslint@8.57.0): + resolution: {integrity: sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==} + engines: {node: ^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^7.32.0 || ^8.2.0 + eslint-plugin-import: ^2.25.3 + eslint-plugin-jsx-a11y: ^6.5.1 + eslint-plugin-react: ^7.28.0 + eslint-plugin-react-hooks: ^4.3.0 + dependencies: + eslint: 8.57.0 + eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.29.1)(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) + eslint-plugin-react: 7.34.3(eslint@8.57.0) + eslint-plugin-react-hooks: 4.6.2(eslint@8.57.0) + object.assign: 4.1.5 + object.entries: 1.1.8 + dev: true + + /eslint-config-next@14.2.4(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-Qr0wMgG9m6m4uYy2jrYJmyuNlYZzPRQq5Kvb9IDlYwn+7yq6W6sfMNFgb+9guM1KYwuIo6TIaiFhZJ6SnQ/Efw==} + peerDependencies: + eslint: ^7.23.0 || ^8.0.0 + typescript: '>=3.3.1' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@next/eslint-plugin-next': 14.2.4 + '@rushstack/eslint-patch': 1.10.3 + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + eslint: 8.57.0 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) + eslint-plugin-react: 7.34.3(eslint@8.57.0) + eslint-plugin-react-hooks: 4.6.2(eslint@8.57.0) + typescript: 5.4.5 + transitivePeerDependencies: + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-config-prettier@9.1.0(eslint@8.57.0): + resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + dependencies: + eslint: 8.57.0 + dev: true + + /eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + dependencies: + debug: 3.2.7 + is-core-module: 2.13.1 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0): + resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' + dependencies: + debug: 4.3.4(supports-color@8.1.1) + enhanced-resolve: 5.17.0 + eslint: 8.57.0 + eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + fast-glob: 3.3.2 + get-tsconfig: 4.7.5 + is-core-module: 2.13.1 + is-glob: 4.0.3 + transitivePeerDependencies: + - '@typescript-eslint/parser' + - eslint-import-resolver-node + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-module-utils@2.8.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): + resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} + 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 + dependencies: + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + debug: 3.2.7 + eslint: 8.57.0 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0) + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): + resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + array-includes: 3.1.8 + array.prototype.findlastindex: 1.2.5 + array.prototype.flat: 1.3.2 + array.prototype.flatmap: 1.3.2 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.57.0 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + hasown: 2.0.2 + is-core-module: 2.13.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.0 + semver: 6.3.1 + tsconfig-paths: 3.15.0 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-plugin-json@4.0.0: + resolution: {integrity: sha512-l/P3WTzl2HI8PbwsbDIrZ+6jvwQI4TGuz20ReJkG3Y+gZS5ZurTgx+gBmuLpOgiqMyDJWyJ7+GCjevWtNYQcUg==} + engines: {node: '>=18.0'} + dependencies: + lodash: 4.17.21 + vscode-json-languageservice: 4.2.1 + dev: true + + /eslint-plugin-jsx-a11y@6.8.0(eslint@8.57.0): + resolution: {integrity: sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==} + engines: {node: '>=4.0'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + '@babel/runtime': 7.24.5 + aria-query: 5.3.0 + array-includes: 3.1.8 + array.prototype.flatmap: 1.3.2 + ast-types-flow: 0.0.8 + axe-core: 4.7.0 + axobject-query: 3.2.1 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + es-iterator-helpers: 1.0.19 + eslint: 8.57.0 + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + language-tags: 1.0.9 + minimatch: 3.1.2 + object.entries: 1.1.8 + object.fromentries: 2.0.8 + dev: true + + /eslint-plugin-prettier@5.1.3(@types/eslint@8.56.10)(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.3.2): + resolution: {integrity: sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + '@types/eslint': '>=8.0.0' + eslint: '>=8.0.0' + eslint-config-prettier: '*' + prettier: '>=3.0.0' + peerDependenciesMeta: + '@types/eslint': + optional: true + eslint-config-prettier: + optional: true + dependencies: + '@types/eslint': 8.56.10 + eslint: 8.57.0 + eslint-config-prettier: 9.1.0(eslint@8.57.0) + prettier: 3.3.2 + prettier-linter-helpers: 1.0.0 + synckit: 0.8.8 + dev: true + + /eslint-plugin-react-hooks@4.6.2(eslint@8.57.0): + resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==} + 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.57.0 + dev: true + + /eslint-plugin-react@7.34.3(eslint@8.57.0): + resolution: {integrity: sha512-aoW4MV891jkUulwDApQbPYTVZmeuSyFrudpbTAQuj5Fv8VL+o6df2xIGpw8B0hPjAaih1/Fb0om9grCdyFYemA==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + array-includes: 3.1.8 + array.prototype.findlast: 1.2.5 + array.prototype.flatmap: 1.3.2 + array.prototype.toreversed: 1.1.2 + array.prototype.tosorted: 1.1.4 + doctrine: 2.1.0 + es-iterator-helpers: 1.0.19 + eslint: 8.57.0 + estraverse: 5.3.0 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.2 + object.entries: 1.1.8 + object.fromentries: 2.0.8 + object.hasown: 1.1.4 + object.values: 1.2.0 + prop-types: 15.8.1 + resolve: 2.0.0-next.5 + semver: 6.3.1 + string.prototype.matchall: 4.0.11 + dev: true + + /eslint-plugin-unused-imports@4.0.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0): + resolution: {integrity: sha512-mzM+y2B7XYpQryVa1usT+Y/BdNAtAZiXzwpSyDCboFoJN/LZRN67TNvQxKtuTK/Aplya3sLNQforiubzPPaIcQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/eslint-plugin': '8' + eslint: '9' + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + dependencies: + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.4.5) + eslint: 8.57.0 + eslint-rule-composer: 0.3.0 + dev: true + + /eslint-rule-composer@0.3.0: + resolution: {integrity: sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==} + engines: {node: '>=4.0.0'} + dev: true + /eslint-scope@7.2.2: resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -9105,8 +9866,8 @@ packages: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.11.3 - acorn-jsx: 5.3.2(acorn@8.11.3) + acorn: 8.12.0 + acorn-jsx: 5.3.2(acorn@8.12.0) eslint-visitor-keys: 3.4.3 dev: true @@ -9378,7 +10139,6 @@ packages: dependencies: is-hex-prefixed: 1.0.0 strip-hex-prefix: 1.0.0 - bundledDependencies: false /event-target-shim@5.0.1: resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} @@ -9391,7 +10151,6 @@ packages: /eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} - dev: false /events@3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} @@ -9453,6 +10212,10 @@ packages: /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + /fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + dev: true + /fast-glob@3.3.2: resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} engines: {node: '>=8.6.0'} @@ -9563,6 +10326,12 @@ packages: dependencies: to-regex-range: 5.0.1 + /fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + /filter-obj@1.1.0: resolution: {integrity: sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==} engines: {node: '>=0.10.0'} @@ -9627,6 +10396,15 @@ packages: locate-path: 6.0.0 path-exists: 4.0.0 + /find-up@7.0.0: + resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==} + engines: {node: '>=18'} + dependencies: + locate-path: 7.2.0 + path-exists: 5.0.0 + unicorn-magic: 0.1.0 + dev: true + /flat-cache@3.2.0: resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} engines: {node: ^10.12.0 || >=12.0.0} @@ -9672,7 +10450,6 @@ packages: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: is-callable: 1.2.7 - dev: false /foreground-child@3.1.1: resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} @@ -9802,11 +10579,9 @@ packages: define-properties: 1.2.1 es-abstract: 1.23.3 functions-have-names: 1.2.3 - dev: false /functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - dev: false /futoin-hkdf@1.5.3: resolution: {integrity: sha512-SewY5KdMpaoCeh7jachEWFsh1nNlaDjNHZXWqL5IGwtpEYHTgkr2+AMCgNwKWkcc0wpSYrZfR7he4WdmHFtDxQ==} @@ -9821,6 +10596,11 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} + /get-east-asian-width@1.2.0: + resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} + engines: {node: '>=18'} + dev: true + /get-func-name@2.0.2: resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} @@ -9833,7 +10613,6 @@ packages: has-proto: 1.0.3 has-symbols: 1.0.3 hasown: 2.0.2 - dev: false /get-nonce@1.0.1: resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} @@ -9865,7 +10644,12 @@ packages: call-bind: 1.0.7 es-errors: 1.3.0 get-intrinsic: 1.2.4 - dev: false + + /get-tsconfig@4.7.5: + resolution: {integrity: sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==} + dependencies: + resolve-pkg-maps: 1.0.0 + dev: true /ghost-testrpc@0.0.2: resolution: {integrity: sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ==} @@ -9875,6 +10659,16 @@ packages: node-emoji: 1.11.0 dev: false + /git-raw-commits@4.0.0: + resolution: {integrity: sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==} + engines: {node: '>=16'} + hasBin: true + dependencies: + dargs: 8.1.0 + meow: 12.1.1 + split2: 4.2.0 + dev: true + /glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -9945,6 +10739,7 @@ packages: /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -9963,6 +10758,13 @@ packages: minimatch: 5.0.1 once: 1.4.0 + /global-directory@4.0.1: + resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} + engines: {node: '>=18'} + dependencies: + ini: 4.1.1 + dev: true + /global-modules@2.0.0: resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} engines: {node: '>=6'} @@ -9996,7 +10798,6 @@ packages: dependencies: define-properties: 1.2.1 gopd: 1.0.1 - dev: false /globby@10.0.2: resolution: {integrity: sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==} @@ -10032,7 +10833,6 @@ packages: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: get-intrinsic: 1.2.4 - dev: false /graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -10241,7 +11041,6 @@ packages: /has-bigints@1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - dev: false /has-flag@1.0.0: resolution: {integrity: sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==} @@ -10260,24 +11059,20 @@ packages: resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} dependencies: es-define-property: 1.0.0 - dev: false /has-proto@1.0.3: resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} engines: {node: '>= 0.4'} - dev: false /has-symbols@1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} - dev: false /has-tostringtag@1.0.2: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 - dev: false /hash-base@3.1.0: resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} @@ -10477,6 +11272,12 @@ packages: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} + /husky@9.0.11: + resolution: {integrity: sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==} + engines: {node: '>=18'} + hasBin: true + dev: true + /hyphenate-style-name@1.0.4: resolution: {integrity: sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==} dev: false @@ -10549,6 +11350,10 @@ packages: resolve-from: 4.0.0 dev: true + /import-meta-resolve@4.1.0: + resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} + dev: true + /imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} @@ -10574,6 +11379,11 @@ packages: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} dev: false + /ini@4.1.1: + resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dev: true + /inline-style-parser@0.2.3: resolution: {integrity: sha512-qlD8YNDqyTKTyuITrDOffsl6Tdhv+UC4hcdAVuQsK4IMQ99nSgd1MIA/Q+jQYoh9r3hVUXhYh7urSRmXPkW04g==} dev: false @@ -10592,7 +11402,6 @@ packages: es-errors: 1.3.0 hasown: 2.0.2 side-channel: 1.0.6 - dev: false /internmap@1.0.1: resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==} @@ -10648,17 +11457,21 @@ packages: dependencies: call-bind: 1.0.7 get-intrinsic: 1.2.4 - dev: false /is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - dev: false + + /is-async-function@2.0.0: + resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.2 + dev: true /is-bigint@1.0.4: resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} dependencies: has-bigints: 1.0.2 - dev: false /is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} @@ -10672,12 +11485,17 @@ packages: dependencies: call-bind: 1.0.7 has-tostringtag: 1.0.2 - dev: false /is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} - dev: false + + /is-ci@3.0.1: + resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} + hasBin: true + dependencies: + ci-info: 3.9.0 + dev: true /is-core-module@2.13.1: resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} @@ -10689,14 +11507,12 @@ packages: engines: {node: '>= 0.4'} dependencies: is-typed-array: 1.1.13 - dev: false /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.2 - dev: false /is-decimal@2.0.1: resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} @@ -10723,6 +11539,12 @@ packages: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} + /is-finalizationregistry@1.0.2: + resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} + dependencies: + call-bind: 1.0.7 + dev: true + /is-fullwidth-code-point@2.0.0: resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} engines: {node: '>=4'} @@ -10732,12 +11554,23 @@ packages: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} + /is-fullwidth-code-point@4.0.0: + resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} + engines: {node: '>=12'} + dev: true + + /is-fullwidth-code-point@5.0.0: + resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} + engines: {node: '>=18'} + dependencies: + get-east-asian-width: 1.2.0 + dev: true + /is-generator-function@1.0.10: resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.2 - dev: false /is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} @@ -10787,12 +11620,10 @@ packages: /is-map@2.0.3: resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} engines: {node: '>= 0.4'} - dev: false /is-negative-zero@2.0.3: resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} engines: {node: '>= 0.4'} - dev: false /is-node-process@1.2.0: resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==} @@ -10803,12 +11634,16 @@ packages: engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.2 - dev: false /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} + /is-obj@2.0.0: + resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} + engines: {node: '>=8'} + dev: true + /is-path-inside@3.0.3: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} engines: {node: '>=8'} @@ -10844,19 +11679,16 @@ packages: dependencies: call-bind: 1.0.7 has-tostringtag: 1.0.2 - dev: false /is-set@2.0.3: resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} engines: {node: '>= 0.4'} - dev: false /is-shared-array-buffer@1.0.3: resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 - dev: false /is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} @@ -10872,21 +11704,25 @@ packages: engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.2 - dev: false /is-symbol@1.0.4: resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 - dev: false + + /is-text-path@2.0.0: + resolution: {integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==} + engines: {node: '>=8'} + dependencies: + text-extensions: 2.4.0 + dev: true /is-typed-array@1.1.13: resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} engines: {node: '>= 0.4'} dependencies: which-typed-array: 1.1.15 - dev: false /is-unicode-supported@0.1.0: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} @@ -10895,13 +11731,11 @@ packages: /is-weakmap@2.0.2: resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} engines: {node: '>= 0.4'} - dev: false /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: call-bind: 1.0.7 - dev: false /is-weakset@2.0.3: resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} @@ -10909,7 +11743,6 @@ packages: dependencies: call-bind: 1.0.7 get-intrinsic: 1.2.4 - dev: false /is-what@4.1.16: resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} @@ -10948,7 +11781,6 @@ packages: /isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - dev: false /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -10979,6 +11811,16 @@ packages: resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} dev: false + /iterator.prototype@1.1.2: + resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} + dependencies: + define-properties: 1.2.1 + get-intrinsic: 1.2.4 + has-symbols: 1.0.3 + reflect.getprototypeof: 1.0.6 + set-function-name: 2.0.2 + dev: true + /jackspeak@2.3.6: resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} engines: {node: '>=14'} @@ -11024,7 +11866,7 @@ packages: '@types/stack-utils': 2.0.3 chalk: 4.1.2 graceful-fs: 4.2.11 - micromatch: 4.0.5 + micromatch: 4.0.7 pretty-format: 29.7.0 slash: 3.0.0 stack-utils: 2.0.6 @@ -11151,7 +11993,7 @@ packages: chalk: 4.1.2 flow-parser: 0.237.1 graceful-fs: 4.2.11 - micromatch: 4.0.5 + micromatch: 4.0.7 neo-async: 2.6.2 node-dir: 0.1.17 recast: 0.21.5 @@ -11215,6 +12057,10 @@ packages: resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} dev: false + /json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + dev: true + /json-rpc-engine@6.1.0: resolution: {integrity: sha512-NEdLrtrq1jUZyfjkr9OCz9EzCNhnRyWtt1PAnvnhwy6e8XETS0Dtc+ZNCO2gvuAoKsIn2+vCSowXTYE4CkgnAQ==} engines: {node: '>=10.0.0'} @@ -11233,7 +12079,6 @@ packages: /json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - dev: false /json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} @@ -11243,11 +12088,22 @@ packages: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} dev: false + /json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + dependencies: + minimist: 1.2.8 + dev: true + /json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} hasBin: true + /jsonc-parser@3.2.1: + resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==} + dev: true + /jsonfile@2.4.0: resolution: {integrity: sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==} optionalDependencies: @@ -11266,6 +12122,11 @@ packages: graceful-fs: 4.2.11 dev: false + /jsonparse@1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + dev: true + /jsonpath@1.1.1: resolution: {integrity: sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w==} dependencies: @@ -11278,6 +12139,16 @@ packages: resolution: {integrity: sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==} dev: false + /jsx-ast-utils@3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} + dependencies: + array-includes: 3.1.8 + array.prototype.flat: 1.3.2 + object.assign: 4.1.5 + object.values: 1.2.0 + dev: true + /keccak@3.0.4: resolution: {integrity: sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==} engines: {node: '>=10.0.0'} @@ -11317,6 +12188,17 @@ packages: engines: {node: '>=18'} dev: true + /language-subtag-registry@0.3.23: + resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} + dev: true + + /language-tags@1.0.9: + resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} + engines: {node: '>=0.10'} + dependencies: + language-subtag-registry: 0.3.23 + dev: true + /leven@3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} @@ -11358,6 +12240,25 @@ packages: /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + /lint-staged@15.2.7: + resolution: {integrity: sha512-+FdVbbCZ+yoh7E/RosSdqKJyUM2OEjTciH0TFNkawKgvFp1zbGlEC39RADg+xKBG1R4mhoH2j85myBQZ5wR+lw==} + engines: {node: '>=18.12.0'} + hasBin: true + dependencies: + chalk: 5.3.0 + commander: 12.1.0 + debug: 4.3.4(supports-color@8.1.1) + execa: 8.0.1 + lilconfig: 3.1.1 + listr2: 8.2.1 + micromatch: 4.0.7 + pidtree: 0.6.0 + string-argv: 0.3.2 + yaml: 2.4.2 + transitivePeerDependencies: + - supports-color + dev: true + /listhen@1.7.2: resolution: {integrity: sha512-7/HamOm5YD9Wb7CFgAZkKgVPA96WwhcTQoqtm2VTZGVbVVn3IWKRBTgrU7cchA3Q8k9iCsG8Osoi9GX4JsGM9g==} hasBin: true @@ -11384,6 +12285,18 @@ packages: - uWebSockets.js dev: false + /listr2@8.2.1: + resolution: {integrity: sha512-irTfvpib/rNiD637xeevjO2l3Z5loZmuaRi0L0YE5LfijwVY96oyVn0DFD3o/teAok7nfobMG1THvvcHh/BP6g==} + engines: {node: '>=18.0.0'} + dependencies: + cli-truncate: 4.0.0 + colorette: 2.0.20 + eventemitter3: 5.0.1 + log-update: 6.0.0 + rfdc: 1.4.1 + wrap-ansi: 9.0.0 + dev: true + /lit-element@3.3.3: resolution: {integrity: sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==} dependencies: @@ -11442,13 +12355,19 @@ packages: dependencies: p-locate: 5.0.0 + /locate-path@7.2.0: + resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + p-locate: 6.0.0 + dev: true + /locko@1.1.0: resolution: {integrity: sha512-pYB2dzRY93fJkg2RIl41AMNgTQftEjyTK9vlPrGOJvuGQsOjb267VJBw15BjiN3RBd1oBoKkOu9E2dRdFKIfAA==} dev: false /lodash.camelcase@4.3.0: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} - dev: false /lodash.castarray@4.4.0: resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==} @@ -11470,10 +12389,26 @@ packages: resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} dev: true + /lodash.kebabcase@4.1.1: + resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} + dev: true + /lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: true + /lodash.mergewith@4.6.2: + resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} + dev: true + + /lodash.snakecase@4.1.1: + resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} + dev: true + + /lodash.startcase@4.4.0: + resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + dev: true + /lodash.throttle@4.1.1: resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==} dev: false @@ -11482,6 +12417,14 @@ packages: resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} dev: false + /lodash.uniq@4.5.0: + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + dev: true + + /lodash.upperfirst@4.3.1: + resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} + dev: true + /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} @@ -11492,6 +12435,17 @@ packages: chalk: 4.1.2 is-unicode-supported: 0.1.0 + /log-update@6.0.0: + resolution: {integrity: sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==} + engines: {node: '>=18'} + dependencies: + ansi-escapes: 6.2.1 + cli-cursor: 4.0.0 + slice-ansi: 7.1.0 + strip-ansi: 7.1.0 + wrap-ansi: 9.0.0 + dev: true + /logkitty@0.7.1: resolution: {integrity: sha512-/3ER20CTTbahrCrpYfPn7Xavv9diBROZpoXGVZDWMw4b/X4uuUwAC0ki85tgsdMRONURyIJbcOvS94QsUBYPbQ==} hasBin: true @@ -11859,6 +12813,11 @@ packages: resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} engines: {node: '>= 0.10.0'} + /meow@12.1.1: + resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} + engines: {node: '>=16.10'} + dev: true + /merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -11926,7 +12885,7 @@ packages: graceful-fs: 4.2.11 invariant: 2.2.4 jest-worker: 29.7.0 - micromatch: 4.0.5 + micromatch: 4.0.7 node-abort-controller: 3.1.1 nullthrows: 1.1.1 walker: 1.0.8 @@ -12263,6 +13222,13 @@ packages: braces: 3.0.2 picomatch: 2.3.1 + /micromatch@4.0.7: + resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + /mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} @@ -12294,7 +13260,6 @@ packages: /mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} - dev: false /mimic-fn@4.0.0: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} @@ -12349,7 +13314,6 @@ packages: /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - dev: false /minipass-collect@2.0.1: resolution: {integrity: sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==} @@ -12953,7 +13917,6 @@ packages: /object-inspect@1.13.1: resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} - dev: false /object-is@1.1.6: resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} @@ -12966,7 +13929,6 @@ packages: /object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} - dev: false /object.assign@4.1.5: resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} @@ -12976,7 +13938,52 @@ packages: define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 - dev: false + + /object.entries@1.1.8: + resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + dev: true + + /object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + dev: true + + /object.groupby@1.0.3: + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + dev: true + + /object.hasown@1.1.4: + resolution: {integrity: sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==} + engines: {node: '>= 0.4'} + dependencies: + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + dev: true + + /object.values@1.2.0: + resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + dev: true /obliterator@2.0.4: resolution: {integrity: sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==} @@ -13031,7 +14038,6 @@ packages: engines: {node: '>=6'} dependencies: mimic-fn: 2.1.0 - dev: false /onetime@6.0.0: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} @@ -13146,6 +14152,13 @@ packages: dependencies: yocto-queue: 0.1.0 + /p-limit@4.0.0: + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + yocto-queue: 1.0.0 + dev: true + /p-limit@5.0.0: resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} engines: {node: '>=18'} @@ -13178,6 +14191,13 @@ packages: dependencies: p-limit: 3.1.0 + /p-locate@6.0.0: + resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + p-limit: 4.0.0 + dev: true + /p-map@4.0.0: resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} engines: {node: '>=10'} @@ -13233,6 +14253,16 @@ packages: json-parse-better-errors: 1.0.2 dev: false + /parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + dependencies: + '@babel/code-frame': 7.24.6 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + dev: true + /parse5@7.1.2: resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} dependencies: @@ -13252,6 +14282,11 @@ packages: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} + /path-exists@5.0.0: + resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + /path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} @@ -13312,6 +14347,12 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} + /pidtree@0.6.0: + resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} + engines: {node: '>=0.10'} + hasBin: true + dev: true + /pify@2.3.0: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} @@ -13390,7 +14431,6 @@ packages: /possible-typed-array-names@1.0.0: resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} engines: {node: '>= 0.4'} - dev: false /postcss-import@15.1.0(postcss@8.4.38): resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} @@ -13495,7 +14535,14 @@ packages: engines: {node: '>= 0.8.0'} dev: true - /prettier-plugin-tailwindcss@0.5.14(prettier@3.2.5): + /prettier-linter-helpers@1.0.0: + resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + engines: {node: '>=6.0.0'} + dependencies: + fast-diff: 1.3.0 + dev: true + + /prettier-plugin-tailwindcss@0.5.14(prettier@3.3.2): resolution: {integrity: sha512-Puaz+wPUAhFp8Lo9HuciYKM2Y2XExESjeT+9NQoVFXZsPPnc9VYss2SpxdQ6vbatmt8/4+SN0oe0I1cPDABg9Q==} engines: {node: '>=14.21.3'} peerDependencies: @@ -13547,7 +14594,7 @@ packages: prettier-plugin-svelte: optional: true dependencies: - prettier: 3.2.5 + prettier: 3.3.2 dev: true /prettier@2.8.8: @@ -13556,8 +14603,8 @@ packages: hasBin: true dev: false - /prettier@3.2.5: - resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} + /prettier@3.3.2: + resolution: {integrity: sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==} engines: {node: '>=14'} hasBin: true dev: true @@ -13637,7 +14684,6 @@ packages: loose-envify: 1.4.0 object-assign: 4.1.1 react-is: 16.13.1 - dev: false /property-information@6.5.0: resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} @@ -13838,7 +14884,6 @@ packages: /react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - dev: false /react-is@17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} @@ -14183,6 +15228,19 @@ packages: engines: {node: '>=6'} dev: false + /reflect.getprototypeof@1.0.6: + resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + globalthis: 1.0.4 + which-builtin-type: 1.1.3 + dev: true + /regenerate-unicode-properties@10.1.1: resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==} engines: {node: '>=4'} @@ -14215,7 +15273,6 @@ packages: define-properties: 1.2.1 es-errors: 1.3.0 set-function-name: 2.0.2 - dev: false /regexpu-core@5.3.2: resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} @@ -14301,6 +15358,15 @@ packages: engines: {node: '>=4'} dev: true + /resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + dev: true + + /resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + dev: true + /resolve@1.1.7: resolution: {integrity: sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==} dev: false @@ -14318,6 +15384,15 @@ packages: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + /resolve@2.0.0-next.5: + resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + hasBin: true + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + /restore-cursor@3.1.0: resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} engines: {node: '>=8'} @@ -14326,6 +15401,14 @@ packages: signal-exit: 3.0.7 dev: false + /restore-cursor@4.0.0: + resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + dev: true + /retry@0.13.1: resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} engines: {node: '>= 4'} @@ -14340,6 +15423,10 @@ packages: engines: {node: '>= 0.4.0'} dev: false + /rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + dev: true + /rimraf@2.6.3: resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} deprecated: Rimraf versions prior to v4 are no longer supported @@ -14356,6 +15443,7 @@ packages: /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true dependencies: glob: 7.2.3 @@ -14437,7 +15525,6 @@ packages: get-intrinsic: 1.2.4 has-symbols: 1.0.3 isarray: 2.0.5 - dev: false /safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} @@ -14453,7 +15540,6 @@ packages: call-bind: 1.0.7 es-errors: 1.3.0 is-regex: 1.1.4 - dev: false /safe-stable-stringify@2.4.3: resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==} @@ -14606,7 +15692,6 @@ packages: get-intrinsic: 1.2.4 gopd: 1.0.1 has-property-descriptors: 1.0.2 - dev: false /set-function-name@2.0.2: resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} @@ -14616,7 +15701,6 @@ packages: es-errors: 1.3.0 functions-have-names: 1.2.3 has-property-descriptors: 1.0.2 - dev: false /set-harmonic-interval@1.0.1: resolution: {integrity: sha512-AhICkFV84tBP1aWqPwLZqFvAwqEoVA9kxNMniGEUvzOlm4vLmOFLiTT3UZ6bziJTy4bOVpzWGTfSCbmaayGx8g==} @@ -14682,7 +15766,6 @@ packages: es-errors: 1.3.0 get-intrinsic: 1.2.4 object-inspect: 1.13.1 - dev: false /siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} @@ -14690,7 +15773,6 @@ packages: /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: false /signal-exit@4.1.0: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} @@ -14734,6 +15816,22 @@ packages: is-fullwidth-code-point: 3.0.0 dev: false + /slice-ansi@5.0.0: + resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} + engines: {node: '>=12'} + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 4.0.0 + dev: true + + /slice-ansi@7.1.0: + resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} + engines: {node: '>=18'} + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 5.0.0 + dev: true + /snarkjs@0.5.0: resolution: {integrity: sha512-KWz8mZ2Y+6wvn6GGkQo6/ZlKwETdAGohd40Lzpwp5TUZCn6N6O4Az1SuX1rw/qREGL6Im+ycb19suCFE8/xaKA==} hasBin: true @@ -14918,7 +16016,6 @@ packages: /split2@4.2.0: resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} engines: {node: '>= 10.x'} - dev: false /sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} @@ -15025,6 +16122,11 @@ packages: engines: {node: '>=4'} dev: false + /string-argv@0.3.2: + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} + engines: {node: '>=0.6.19'} + dev: true + /string-format@2.0.0: resolution: {integrity: sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==} dev: false @@ -15053,6 +16155,33 @@ packages: emoji-regex: 9.2.2 strip-ansi: 7.1.0 + /string-width@7.1.0: + resolution: {integrity: sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==} + engines: {node: '>=18'} + dependencies: + emoji-regex: 10.3.0 + get-east-asian-width: 1.2.0 + strip-ansi: 7.1.0 + dev: true + + /string.prototype.matchall@4.0.11: + resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-symbols: 1.0.3 + internal-slot: 1.0.7 + regexp.prototype.flags: 1.5.2 + set-function-name: 2.0.2 + side-channel: 1.0.6 + dev: true + /string.prototype.trim@1.2.9: resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} engines: {node: '>= 0.4'} @@ -15061,7 +16190,6 @@ packages: define-properties: 1.2.1 es-abstract: 1.23.3 es-object-atoms: 1.0.0 - dev: false /string.prototype.trimend@1.0.8: resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} @@ -15069,7 +16197,6 @@ packages: call-bind: 1.0.7 define-properties: 1.2.1 es-object-atoms: 1.0.0 - dev: false /string.prototype.trimstart@1.0.8: resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} @@ -15078,7 +16205,6 @@ packages: call-bind: 1.0.7 define-properties: 1.2.1 es-object-atoms: 1.0.0 - dev: false /string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} @@ -15124,6 +16250,11 @@ packages: dependencies: ansi-regex: 6.0.1 + /strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + dev: true + /strip-final-newline@2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} @@ -15263,6 +16394,14 @@ packages: get-port: 3.2.0 dev: false + /synckit@0.8.8: + resolution: {integrity: sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==} + engines: {node: ^14.18.0 || >=16.0.0} + dependencies: + '@pkgr/core': 0.1.1 + tslib: 2.6.2 + dev: true + /system-architecture@0.1.0: resolution: {integrity: sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA==} engines: {node: '>=18'} @@ -15339,6 +16478,11 @@ packages: transitivePeerDependencies: - ts-node + /tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + dev: true + /tar@6.2.1: resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} engines: {node: '>=10'} @@ -15369,11 +16513,16 @@ packages: hasBin: true dependencies: '@jridgewell/source-map': 0.3.6 - acorn: 8.11.3 + acorn: 8.12.0 commander: 2.20.3 source-map-support: 0.5.21 dev: false + /text-extensions@2.4.0: + resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==} + engines: {node: '>=8'} + dev: true + /text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: true @@ -15434,6 +16583,10 @@ packages: readable-stream: 3.6.2 dev: false + /through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + dev: true + /tinybench@2.8.0: resolution: {integrity: sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw==} dev: true @@ -15589,7 +16742,7 @@ packages: '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 '@types/node': 20.12.11 - acorn: 8.11.3 + acorn: 8.12.0 acorn-walk: 8.3.2 arg: 4.1.3 create-require: 1.1.1 @@ -15612,6 +16765,15 @@ packages: typescript: 5.4.5 dev: true + /tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + 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==} @@ -15694,7 +16856,6 @@ packages: call-bind: 1.0.7 es-errors: 1.3.0 is-typed-array: 1.1.13 - dev: false /typed-array-byte-length@1.0.1: resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} @@ -15705,7 +16866,6 @@ packages: gopd: 1.0.1 has-proto: 1.0.3 is-typed-array: 1.1.13 - dev: false /typed-array-byte-offset@1.0.2: resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} @@ -15717,7 +16877,6 @@ packages: gopd: 1.0.1 has-proto: 1.0.3 is-typed-array: 1.1.13 - dev: false /typed-array-length@1.0.6: resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} @@ -15729,7 +16888,6 @@ packages: has-proto: 1.0.3 is-typed-array: 1.1.13 possible-typed-array-names: 1.0.0 - dev: false /typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} @@ -15778,7 +16936,6 @@ packages: has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 - dev: false /uncrypto@0.1.3: resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} @@ -15841,6 +16998,11 @@ packages: engines: {node: '>=4'} dev: false + /unicorn-magic@0.1.0: + resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} + engines: {node: '>=18'} + dev: true + /unified@11.0.4: resolution: {integrity: sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==} dependencies: @@ -16350,6 +17512,32 @@ packages: engines: {node: '>=0.10.0'} dev: false + /vscode-json-languageservice@4.2.1: + resolution: {integrity: sha512-xGmv9QIWs2H8obGbWg+sIPI/3/pFgj/5OWBhNzs00BkYQ9UaB2F6JJaGB/2/YOZJ3BvLXQTC4Q7muqU25QgAhA==} + dependencies: + jsonc-parser: 3.2.1 + vscode-languageserver-textdocument: 1.0.11 + vscode-languageserver-types: 3.17.5 + vscode-nls: 5.2.0 + vscode-uri: 3.0.8 + dev: true + + /vscode-languageserver-textdocument@1.0.11: + resolution: {integrity: sha512-X+8T3GoiwTVlJbicx/sIAF+yuJAqz8VvwJyoMVhwEMoEKE/fkDmrqUgDMyBECcM2A2frVZIUj5HI/ErRXCfOeA==} + dev: true + + /vscode-languageserver-types@3.17.5: + resolution: {integrity: sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==} + dev: true + + /vscode-nls@5.2.0: + resolution: {integrity: sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==} + dev: true + + /vscode-uri@3.0.8: + resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==} + dev: true + /w3c-xmlserializer@5.0.0: resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} engines: {node: '>=18'} @@ -16511,7 +17699,24 @@ packages: is-number-object: 1.0.7 is-string: 1.0.7 is-symbol: 1.0.4 - dev: false + + /which-builtin-type@1.1.3: + resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} + engines: {node: '>= 0.4'} + dependencies: + function.prototype.name: 1.1.6 + has-tostringtag: 1.0.2 + is-async-function: 2.0.0 + is-date-object: 1.0.5 + is-finalizationregistry: 1.0.2 + is-generator-function: 1.0.10 + is-regex: 1.1.4 + is-weakref: 1.0.2 + isarray: 2.0.5 + which-boxed-primitive: 1.0.2 + which-collection: 1.0.2 + which-typed-array: 1.1.15 + dev: true /which-collection@1.0.2: resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} @@ -16521,7 +17726,6 @@ packages: is-set: 2.0.3 is-weakmap: 2.0.2 is-weakset: 2.0.3 - dev: false /which-module@2.0.1: resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} @@ -16536,7 +17740,6 @@ packages: for-each: 0.3.3 gopd: 1.0.1 has-tostringtag: 1.0.2 - dev: false /which@1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} @@ -16622,6 +17825,15 @@ packages: string-width: 5.1.2 strip-ansi: 7.1.0 + /wrap-ansi@9.0.0: + resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} + engines: {node: '>=18'} + dependencies: + ansi-styles: 6.2.1 + string-width: 7.1.0 + strip-ansi: 7.1.0 + dev: true + /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} diff --git a/prettier.config.js b/prettier.config.js deleted file mode 100644 index b2d59b46..00000000 --- a/prettier.config.js +++ /dev/null @@ -1,6 +0,0 @@ -/** @type {import('prettier').Config & import('prettier-plugin-tailwindcss').PluginOptions} */ -const config = { - plugins: ["prettier-plugin-tailwindcss"], -}; - -export default config; diff --git a/public/mockServiceWorker.js b/public/mockServiceWorker.js index 56ea6074..9aae6221 100644 --- a/public/mockServiceWorker.js +++ b/public/mockServiceWorker.js @@ -1,6 +1,3 @@ -/* eslint-disable */ -/* tslint:disable */ - /** * Mock Service Worker. * @see https://github.com/mswjs/msw @@ -257,10 +254,7 @@ function sendToClient(client, message, transferrables = []) { resolve(event.data); }; - client.postMessage( - message, - [channel.port2].concat(transferrables.filter(Boolean)), - ); + client.postMessage(message, [channel.port2].concat(transferrables.filter(Boolean))); }); } diff --git a/src/components/ConnectButton.tsx b/src/components/ConnectButton.tsx index f435cde5..e905397d 100644 --- a/src/components/ConnectButton.tsx +++ b/src/components/ConnectButton.tsx @@ -1,92 +1,61 @@ +import { ConnectButton as RainbowConnectButton } from "@rainbow-me/rainbowkit"; import Image from "next/image"; import Link from "next/link"; import { type ComponentPropsWithRef, useCallback } from "react"; -import { useEnsAvatar, useEnsName } from "wagmi"; import { FaListCheck } from "react-icons/fa6"; - -import { ConnectButton as RainbowConnectButton } from "@rainbow-me/rainbowkit"; import { createBreakpoint } from "react-use"; import { toast } from "sonner"; +import { useEnsAvatar, useEnsName } from "wagmi"; -import { Button } from "./ui/Button"; -import { Chip } from "./ui/Chip"; -import { useLayoutOptions } from "~/layouts/BaseLayout"; -import { useMaci } from "~/contexts/Maci"; +import { config } from "~/config"; import { useBallot } from "~/contexts/Ballot"; +import { useMaci } from "~/contexts/Maci"; +import { useLayoutOptions } from "~/layouts/BaseLayout"; + import type { Address } from "viem"; -import { config } from "~/config"; + +import { Button } from "./ui/Button"; +import { Chip } from "./ui/Chip"; const useBreakpoint = createBreakpoint({ XL: 1280, L: 768, S: 350 }); -export const ConnectButton = () => { - const breakpoint = useBreakpoint(); - const isMobile = breakpoint === "S"; +const UserInfo = ({ address, children, ...props }: { address: Address } & ComponentPropsWithRef) => { + const ens = useEnsName({ + address, + chainId: 1, + query: { enabled: Boolean(address) }, + }); + const name = ens.data ?? undefined; + const avatar = useEnsAvatar({ + name, + chainId: 1, + query: { enabled: Boolean(name) }, + }); return ( - - {({ - account, - chain, - openAccountModal, - openChainModal, - openConnectModal, - mounted, - authenticationStatus, - }) => { - const ready = mounted && authenticationStatus !== "loading"; - const connected = - ready && - account && - chain && - (!authenticationStatus || authenticationStatus === "authenticated"); - - return ( -

- {(() => { - if (!connected) { - return ( - - ); - } - - if ( - chain.unsupported ?? - ![Number(config.network.id)].includes(chain.id) - ) { - return Wrong network; - } + +
+ {avatar.data ? ( + {name!} + ) : ( +
+ )} +
- return ( - - ); - })()} -
- ); - }} - + {children} +
); }; +const SignupButton = ({ + loading, + ...props +}: ComponentPropsWithRef & { loading: boolean }): JSX.Element => ( + + {loading ? "Loading..." : "Sign up"} + +); + const ConnectedDetails = ({ openAccountModal, account, @@ -103,10 +72,7 @@ const ConnectedDetails = ({ const { showBallot } = useLayoutOptions(); const onError = useCallback(() => toast.error("Signup error"), []); - const handleSignup = useCallback( - () => onSignup(onError), - [onSignup, onError], - ); + const handleSignup = useCallback(() => onSignup(onError), [onSignup, onError]); return (
@@ -114,26 +80,22 @@ const ConnectedDetails = ({ {!isEligibleToVote && You are not allowed to vote} {isEligibleToVote && !isRegistered && ( - - )} - {isRegistered && showBallot && ballot?.published && ( - Already submitted + )} + + {isRegistered && showBallot && ballot?.published && Already submitted} + {isRegistered && showBallot && !ballot?.published && ( - + {isMobile ? : `View Ballot`} +
{ballotSize}
)} - + + {isMobile ? null : account.displayName}
@@ -141,44 +103,51 @@ const ConnectedDetails = ({ ); }; -const UserInfo = ({ - address, - children, - ...props -}: { address: Address } & ComponentPropsWithRef) => { - const ens = useEnsName({ - address, - chainId: 1, - query: { enabled: Boolean(address) }, - }); - const name = ens.data ?? undefined; - const avatar = useEnsAvatar({ - name, - chainId: 1, - query: { enabled: Boolean(name) }, - }); +export const ConnectButton = (): JSX.Element => { + const breakpoint = useBreakpoint(); + const isMobile = breakpoint === "S"; return ( - -
- {avatar.data ? ( - {name!} - ) : ( -
- )} -
- {children} - - ); -}; + + {({ account, chain, openAccountModal, openChainModal, openConnectModal, mounted, authenticationStatus }) => { + const ready = mounted && authenticationStatus !== "loading"; + const connected = + ready && account && chain && (!authenticationStatus || authenticationStatus === "authenticated"); -const SignupButton = ({ - loading, - ...props -}: ComponentPropsWithRef & { loading: boolean }): JSX.Element => { - return ( - - {loading ? "Loading..." : "Sign up"} - + return ( +
+ {(() => { + if (!connected) { + return ( + + ); + } + + if (chain.unsupported ?? ![Number(config.network.id)].includes(chain.id)) { + return Wrong network; + } + + return ; + })()} +
+ ); + }} +
); }; diff --git a/src/components/ENS.tsx b/src/components/ENS.tsx index 49dbd4de..6714c2e1 100644 --- a/src/components/ENS.tsx +++ b/src/components/ENS.tsx @@ -1,9 +1,11 @@ -import { Avatar } from "~/components/ui/Avatar"; import { useEnsAvatar, useEnsName } from "wagmi"; + +import { Avatar } from "~/components/ui/Avatar"; import { truncate } from "~/utils/truncate"; + import type { Address } from "viem"; -export function AvatarENS({ address }: { address: Address }) { +export const AvatarENS = ({ address }: { address: Address }): JSX.Element => { const { data: name } = useEnsName({ address, chainId: 1, @@ -18,13 +20,14 @@ export function AvatarENS({ address }: { address: Address }) { }); return (
- + +
{name ?? truncate(address)}
); -} +}; -export function NameENS({ address }: { address?: string }) { +export const NameENS = ({ address = "" }: { address?: string }): JSX.Element => { const { data: name } = useEnsName({ address: address as Address, chainId: 1, @@ -34,4 +37,4 @@ export function NameENS({ address }: { address?: string }) { }); return
{name ?? truncate(address)}
; -} +}; diff --git a/src/components/EligibilityDialog.tsx b/src/components/EligibilityDialog.tsx index 3363a84f..774427bf 100644 --- a/src/components/EligibilityDialog.tsx +++ b/src/components/EligibilityDialog.tsx @@ -1,35 +1,34 @@ -import Link from "next/link"; import { useAccount, useDisconnect } from "wagmi"; import { metadata } from "~/config"; -import { Dialog } from "./ui/Dialog"; import { useApprovedVoter } from "~/features/voters/hooks/useApprovedVoter"; -export const EligibilityDialog = () => { +import { Dialog } from "./ui/Dialog"; + +export const EligibilityDialog = (): JSX.Element | null => { const { address } = useAccount(); const { disconnect } = useDisconnect(); const { data, isLoading, error } = useApprovedVoter(address!); - if (isLoading || !address || error) return null; + if (isLoading || !address || error) { + return null; + } return ( disconnect()} + size="sm" title={ <> You are not eligible to vote 😔 } + onOpenChange={() => { + disconnect(); + }} >
- Only badgeholders are able to vote in {metadata.title}. You can find out - more about how badgeholders are selected{" "} - - here - - . +

Only badgeholders are able to vote in {metadata.title}

); diff --git a/src/components/EmptyState.tsx b/src/components/EmptyState.tsx index 1460db16..427f009d 100644 --- a/src/components/EmptyState.tsx +++ b/src/components/EmptyState.tsx @@ -1,16 +1,13 @@ import { type PropsWithChildren } from "react"; + import { Heading } from "./ui/Heading"; -export function EmptyState({ - title, - children, -}: PropsWithChildren<{ title: string }>) { - return ( -
- - {title} - -
{children}
-
- ); -} +export const EmptyState = ({ title, children = null }: PropsWithChildren<{ title: string }>): JSX.Element => ( +
+ + {title} + + +
{children}
+
+); diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx index 6d88d47f..b46b8fb5 100644 --- a/src/components/Footer.tsx +++ b/src/components/Footer.tsx @@ -1,26 +1,29 @@ import { GithubIcon } from "lucide-react"; -export function Footer() { - return ( - - ); -} +export const Footer = (): JSX.Element => ( + +); diff --git a/src/components/Header.tsx b/src/components/Header.tsx index d9014f86..bea1e7f1 100644 --- a/src/components/Header.tsx +++ b/src/components/Header.tsx @@ -1,14 +1,15 @@ +import clsx from "clsx"; +import { Menu, X } from "lucide-react"; +import dynamic from "next/dynamic"; +import Image from "next/image"; import Link from "next/link"; import { useRouter } from "next/router"; import { type ComponentPropsWithRef, useState } from "react"; -import clsx from "clsx"; + +import { config, metadata } from "~/config"; import { ConnectButton } from "./ConnectButton"; import { IconButton } from "./ui/Button"; -import { config, metadata } from "~/config"; -import { Menu, X } from "lucide-react"; -import dynamic from "next/dynamic"; -import Image from "next/image"; const Logo = () => (
@@ -22,23 +23,39 @@ const Logo = () => (
); -const NavLink = ({ - isActive, - ...props -}: { isActive: boolean } & ComponentPropsWithRef) => ( +const NavLink = ({ isActive, ...props }: { isActive: boolean } & ComponentPropsWithRef) => ( ); -type NavLink = { href: string; children: string }; -export const Header = ({ navLinks }: { navLinks: NavLink[] }) => { +const MobileMenu = ({ isOpen = false, navLinks }: { isOpen?: boolean; navLinks: INavLink[] }) => ( +
+ {navLinks.map((link) => ( + + ))} +
+); + +interface INavLink { + href: string; + children: string; +} + +const Header = ({ navLinks }: { navLinks: INavLink[] }) => { const { asPath } = useRouter(); const [isOpen, setOpen] = useState(false); @@ -47,59 +64,37 @@ export const Header = ({ navLinks }: { navLinks: NavLink[] }) => {
setOpen(!isOpen)} + onClick={() => { + setOpen(!isOpen); + }} /> - + +
+
- {navLinks?.map((link) => ( - + {navLinks.map((link) => ( + {link.children} ))}
-
+ +
+
+
); }; -const MobileMenu = ({ - isOpen, - navLinks, -}: { - isOpen?: boolean; - navLinks: NavLink[]; -}) => ( -
- {navLinks.map((link) => ( - - ))} -
-); - -export default dynamic(async () => Header, { ssr: false }); +export default dynamic(async () => Promise.resolve(Header), { ssr: false }); diff --git a/src/components/ImageUpload.tsx b/src/components/ImageUpload.tsx index cf014b24..d632cc91 100644 --- a/src/components/ImageUpload.tsx +++ b/src/components/ImageUpload.tsx @@ -4,92 +4,88 @@ import { ImageIcon } from "lucide-react"; import { type ComponentProps, useRef } from "react"; import { Controller, useFormContext } from "react-hook-form"; import { toast } from "sonner"; + import { IconButton } from "~/components/ui/Button"; import { Spinner } from "~/components/ui/Spinner"; import { useUploadMetadata } from "~/hooks/useMetadata"; -type Props = { name?: string; maxSize?: number } & ComponentProps<"img">; +export interface IImageUploadProps extends ComponentProps<"img"> { + name?: string; + maxSize?: number; +} -export function ImageUpload({ - name, +export const ImageUpload = ({ + name = "", maxSize = 1024 * 1024, // 1 MB className, -}: Props) { +}: IImageUploadProps): JSX.Element => { const ref = useRef(null); const { control } = useFormContext(); const upload = useUploadMetadata(); const select = useMutation({ mutationFn: async (file: File) => { - if (file?.size >= maxSize) { + if (file.size >= maxSize) { toast.error("Image too large", { - description: `The image to selected is: ${(file.size / 1024).toFixed( - 2, - )} / ${(maxSize / 1024).toFixed(2)} kb`, + description: `The image to selected is: ${(file.size / 1024).toFixed(2)} / ${(maxSize / 1024).toFixed(2)} kb`, }); throw new Error("IMAGE_TOO_LARGE"); } - return URL.createObjectURL(file); + return Promise.resolve(URL.createObjectURL(file)); }, }); return ( { - return ( + name={name} + render={({ field: { value, onChange, ...field } }) => ( + // eslint-disable-next-line jsx-a11y/no-static-element-interactions, jsx-a11y/click-events-have-key-events +
ref.current?.click()} + > + +
ref.current?.click()} - className={clsx( - "relative cursor-pointer overflow-hidden", - className, - )} - > - + className={clsx("h-full rounded-xl bg-gray-200 bg-cover bg-center bg-no-repeat dark:bg-gray-800", { + "animate-pulse opacity-50": upload.isPending, + })} + style={{ + backgroundImage: `url("${select.data ?? value}")`, + }} + /> -
- { - const [file] = event.target.files ?? []; - if (file) { - select.mutate(file, { - onSuccess: () => { - upload.mutate(file, { - onSuccess: (data) => { - onChange(data.url); - }, - }); - }, - }); - } - }} - type="file" - /> -
- ); - }} + { + const [file] = event.target.files ?? []; + if (file) { + select.mutate(file, { + onSuccess: () => { + upload.mutate(file, { + onSuccess: (data) => { + onChange(data.url); + }, + }); + }, + }); + } + }} + /> +
+ )} + rules={{ required: "Recipe picture is required" }} /> ); -} +}; diff --git a/src/components/InfiniteLoading.tsx b/src/components/InfiniteLoading.tsx index f5129aeb..a214a277 100644 --- a/src/components/InfiniteLoading.tsx +++ b/src/components/InfiniteLoading.tsx @@ -1,10 +1,11 @@ -import { useMemo, type ReactNode, useRef, useEffect } from "react"; import { type UseTRPCInfiniteQueryResult } from "@trpc/react-query/shared"; +import { useMemo, type ReactNode, useRef, useEffect } from "react"; +import { useIntersection } from "react-use"; import { config } from "~/config"; -import { useIntersection } from "react-use"; -import { Spinner } from "./ui/Spinner"; + import { EmptyState } from "./EmptyState"; +import { Spinner } from "./ui/Spinner"; const columnMap = { 2: "grid-cols-1 md:grid-cols-2", @@ -16,14 +17,44 @@ type Props = UseTRPCInfiniteQueryResult & { columns?: keyof typeof columnMap; }; -export function InfiniteLoading({ +const FetchInView = ({ + hasMore = false, + isFetchingNextPage, + fetchNextPage, +}: { + hasMore?: boolean; + isFetchingNextPage: boolean; + fetchNextPage: () => Promise; +}) => { + const ref = useRef(null); + const intersection = useIntersection(ref, { + root: null, + rootMargin: "0px", + threshold: 0.5, + }); + + useEffect(() => { + if (intersection?.isIntersecting && !isFetchingNextPage && hasMore) { + // eslint-disable-next-line no-console + fetchNextPage().catch(console.error); + } + }, [intersection?.isIntersecting, isFetchingNextPage, hasMore, fetchNextPage]); + + return ( +
+ {isFetchingNextPage && } +
+ ); +}; + +export const InfiniteLoading = ({ data, columns = 3, isFetchingNextPage, isLoading, renderItem, fetchNextPage, -}: Props) { +}: Props): JSX.Element => { const loadingItems = useMemo( () => Array.from({ length: config.pageSize }).map((_, id) => ({ @@ -31,62 +62,27 @@ export function InfiniteLoading({ })) as T[], [], ); - const pages = data?.pages ?? []; - const items = useMemo( - () => pages.reduce((acc, x) => acc.concat(x), []) ?? [], - [pages], - ); + const pages = useMemo(() => data?.pages ?? [], [data?.pages]); + const items = useMemo(() => pages.reduce((acc, x) => acc.concat(x), []), [pages]); const hasMore = useMemo(() => { - if (!pages.length) return false; + if (!pages.length) { + return false; + } return (pages[pages.length - 1]?.length ?? 0) === config.pageSize; }, [pages]); return (
- {!isLoading && !items?.length ? ( - - ) : null} + {!isLoading && !items.length ? : null} +
{items.map((item) => renderItem(item, { isLoading }))} - {(isLoading || isFetchingNextPage) && - loadingItems.map((item) => renderItem(item, { isLoading }))} -
- - -
- ); -} -function FetchInView({ - hasMore, - isFetchingNextPage, - fetchNextPage, -}: { - hasMore?: boolean; - isFetchingNextPage: boolean; - fetchNextPage: () => Promise; -}) { - const ref = useRef(null); - const intersection = useIntersection(ref, { - root: null, - rootMargin: "0px", - threshold: 0.5, - }); - - useEffect(() => { - if (intersection?.isIntersecting) { - !isFetchingNextPage && hasMore && fetchNextPage().catch(console.log); - } - }, [intersection?.isIntersecting]); + {(isLoading || isFetchingNextPage) && loadingItems.map((item) => renderItem(item, { isLoading }))} +
- return ( -
- {isFetchingNextPage && } +
); -} +}; diff --git a/src/components/SortByDropdown.tsx b/src/components/SortByDropdown.tsx index a0cef16e..ee5a7e5c 100644 --- a/src/components/SortByDropdown.tsx +++ b/src/components/SortByDropdown.tsx @@ -1,51 +1,22 @@ import * as DropdownMenu from "@radix-ui/react-dropdown-menu"; -import { IconButton } from "./ui/Button"; import { ArrowUpDown, Check } from "lucide-react"; + import { type SortType, sortLabels } from "~/features/filter/hooks/useFilter"; -type Props = { +import { IconButton } from "./ui/Button"; + +interface ISortByDropdownProps { value: SortType; onChange: (value: string) => void; options: SortType[]; -}; - -export const SortByDropdown = ({ value, onChange, options = [] }: Props) => { - return ( - - - - Sort by: {value && sortLabels[value]} - - - - - - - Sort By - - onChange(v)} - > - {options.map((value) => ( - - ))} - - - - - ); -}; - -const RadioItem = ({ value = "", label = "" }) => ( +} + +interface IRadioItemProps { + label?: string; + value?: string; +} + +const RadioItem = ({ value = "", label = "" }: IRadioItemProps): JSX.Element => ( ( + {label} ); + +export const SortByDropdown = ({ value, onChange, options = [] }: ISortByDropdownProps): JSX.Element => ( + + + + Sort by: {sortLabels[value]} + + + + + + + Sort By + + + { + onChange(v); + }} + > + {options.map((option) => ( + + ))} + + + + +); diff --git a/src/components/SortFilter.tsx b/src/components/SortFilter.tsx index 3e802228..46cf4919 100644 --- a/src/components/SortFilter.tsx +++ b/src/components/SortFilter.tsx @@ -1,31 +1,42 @@ +import { ChangeEvent, useCallback, useState } from "react"; +import { useDebounce } from "react-use"; + +import { useFilter } from "~/features/filter/hooks/useFilter"; + import type { OrderBy, SortOrder } from "~/features/filter/types"; + import { SortByDropdown } from "./SortByDropdown"; -import { useFilter } from "~/features/filter/hooks/useFilter"; import { SearchInput } from "./ui/Form"; -import { useDebounce } from "react-use"; -import { useState } from "react"; -export const SortFilter = () => { +export const SortFilter = (): JSX.Element => { const { orderBy, sortOrder, setFilter } = useFilter(); const [search, setSearch] = useState(""); useDebounce(() => setFilter({ search }), 500, [search]); + const onChange = useCallback( + (e: ChangeEvent) => { + setSearch(e.target.value); + }, + [setSearch], + ); + return (
setSearch(e.target.value)} + onChange={onChange} /> + { - const [orderBy, sortOrder] = sort.split("_") as [OrderBy, SortOrder]; + const [order, sorting] = sort.split("_") as [OrderBy, SortOrder]; - await setFilter({ orderBy, sortOrder }).catch(); + await setFilter({ orderBy: order, sortOrder: sorting }).catch(); }} />
diff --git a/src/components/Toaster.tsx b/src/components/Toaster.tsx index 23894302..918a87cc 100644 --- a/src/components/Toaster.tsx +++ b/src/components/Toaster.tsx @@ -1,17 +1,16 @@ import { useTheme } from "next-themes"; import { Toaster as Sonner } from "sonner"; -export function Toaster() { +export const Toaster = (): JSX.Element => { const { theme } = useTheme(); return ( ); -} +}; diff --git a/src/components/ui/Alert.tsx b/src/components/ui/Alert.tsx index db581deb..18e1c4d9 100644 --- a/src/components/ui/Alert.tsx +++ b/src/components/ui/Alert.tsx @@ -1,7 +1,8 @@ +import { type LucideIcon } from "lucide-react"; +import { type ComponentProps, createElement } from "react"; import { tv } from "tailwind-variants"; + import { createComponent } from "."; -import { type ComponentProps, createElement } from "react"; -import { type LucideIcon } from "lucide-react"; const alert = tv({ base: "rounded-xl p-4", @@ -16,19 +17,18 @@ const alert = tv({ export const AlertComponent = createComponent("div", alert); -export const Alert = ({ - icon, - title, - children, - ...props -}: { icon?: LucideIcon } & ComponentProps) => { - return ( - -
- {icon ? createElement(icon, { className: "w-4 h-4" }) : null} -
{title}
-
- {children} -
- ); -}; +export interface IAlertProps extends ComponentProps { + icon?: LucideIcon; +} + +export const Alert = ({ icon = undefined, title, children, ...props }: IAlertProps): JSX.Element => ( + +
+ {icon ? createElement(icon, { className: "w-4 h-4" }) : null} + +
{title}
+
+ + {children} +
+); diff --git a/src/components/ui/Avatar.tsx b/src/components/ui/Avatar.tsx index e2de4afe..b6a42f90 100644 --- a/src/components/ui/Avatar.tsx +++ b/src/components/ui/Avatar.tsx @@ -1,7 +1,9 @@ import { tv } from "tailwind-variants"; -import { createComponent } from "."; + import { BackgroundImage } from "./BackgroundImage"; +import { createComponent } from "."; + export const Avatar = createComponent( BackgroundImage, tv({ diff --git a/src/components/ui/BackgroundImage.tsx b/src/components/ui/BackgroundImage.tsx index 9e4ed677..9dfc37fa 100644 --- a/src/components/ui/BackgroundImage.tsx +++ b/src/components/ui/BackgroundImage.tsx @@ -1,23 +1,26 @@ import clsx from "clsx"; + import type { ComponentPropsWithRef } from "react"; -export const BackgroundImage = ({ - src, - fallbackSrc, - isLoading, - className, - ...props -}: { +export interface IBackgroundImageProps extends ComponentPropsWithRef<"div"> { src?: string; fallbackSrc?: string; isLoading?: boolean; -} & ComponentPropsWithRef<"div">) => ( +} + +export const BackgroundImage = ({ + src = "", + fallbackSrc = "", + isLoading = false, + className, + ...props +}: IBackgroundImageProps): JSX.Element => (
); diff --git a/src/components/ui/Badge.tsx b/src/components/ui/Badge.tsx index e5f75696..eb09e883 100644 --- a/src/components/ui/Badge.tsx +++ b/src/components/ui/Badge.tsx @@ -1,4 +1,5 @@ import { tv } from "tailwind-variants"; + import { createComponent } from "."; export const Badge = createComponent( diff --git a/src/components/ui/Banner.tsx b/src/components/ui/Banner.tsx index 1e9860f0..20f7bd83 100644 --- a/src/components/ui/Banner.tsx +++ b/src/components/ui/Banner.tsx @@ -1,5 +1,7 @@ import { tv } from "tailwind-variants"; + import { createComponent } from "~/components/ui"; + import { BackgroundImage } from "./BackgroundImage"; export const Banner = createComponent( diff --git a/src/components/ui/Button.tsx b/src/components/ui/Button.tsx index 2f938166..cd17c494 100644 --- a/src/components/ui/Button.tsx +++ b/src/components/ui/Button.tsx @@ -1,6 +1,8 @@ +import { LucideIcon } from "lucide-react"; +import { type ComponentPropsWithRef, createElement, forwardRef, ReactNode } from "react"; import { tv } from "tailwind-variants"; + import { createComponent } from "."; -import { type ComponentPropsWithRef, createElement, forwardRef } from "react"; const button = tv({ base: "inline-flex items-center justify-center font-semibold text-center transition-colors rounded-full duration-150 whitespace-nowrap transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 dark:ring-offset-gray-800", @@ -9,15 +11,14 @@ const button = tv({ primary: "bg-primary-600 hover:bg-primary-700 dark:bg-white dark:hover:bg-primary-500 dark:text-gray-900 text-white dark:disabled:bg-gray-500", ghost: "hover:bg-gray-100 dark:hover:bg-gray-800", - default: - "bg-gray-100 dark:bg-gray-900 hover:bg-gray-200 dark:hover:bg-gray-700", + default: "bg-gray-100 dark:bg-gray-900 hover:bg-gray-200 dark:hover:bg-gray-700", inverted: "bg-white text-black hover:bg-white/90", link: "bg-none hover:underline", outline: "border-2 hover:bg-white/5", }, size: { sm: "px-3 py-2 h-10 min-w-[40px]", - deafult: "px-4 py-2 h-12", + default: "px-4 py-2 h-12", icon: "h-12 w-12", }, disabled: { @@ -26,30 +27,30 @@ const button = tv({ }, defaultVariants: { variant: "default", - size: "deafult", + size: "default", }, }); export const Button = createComponent("button", button); -export const IconButton = forwardRef(function IconButton( - { - children, - icon, - size, - ...props - }: // eslint-disable-next-line - { icon: any; size?: string } & ComponentPropsWithRef, - ref, -) { - return ( - - ); -}); + ), +); + +IconButton.displayName = "IconButton"; diff --git a/src/components/ui/Card.tsx b/src/components/ui/Card.tsx index e0fdd90f..2bc300d2 100644 --- a/src/components/ui/Card.tsx +++ b/src/components/ui/Card.tsx @@ -1,4 +1,5 @@ import { tv } from "tailwind-variants"; + import { createComponent } from "."; export const Card = createComponent( diff --git a/src/components/ui/Chip.tsx b/src/components/ui/Chip.tsx index e701e651..5e83c2e3 100644 --- a/src/components/ui/Chip.tsx +++ b/src/components/ui/Chip.tsx @@ -1,4 +1,5 @@ import { tv } from "tailwind-variants"; + import { createComponent } from "."; const chip = tv({ diff --git a/src/components/ui/Dialog.tsx b/src/components/ui/Dialog.tsx index d857fb07..0b14943f 100644 --- a/src/components/ui/Dialog.tsx +++ b/src/components/ui/Dialog.tsx @@ -1,49 +1,22 @@ import * as RadixDialog from "@radix-ui/react-dialog"; +import { X } from "lucide-react"; +import { tv } from "tailwind-variants"; + +import { theme } from "~/config"; + import type { ReactNode, PropsWithChildren, ComponentProps } from "react"; + import { IconButton } from "./Button"; + import { createComponent } from "."; -import { tv } from "tailwind-variants"; -import { X } from "lucide-react"; -import { theme } from "~/config"; -export const Dialog = ({ - title, - size, - isOpen, - children, - onOpenChange, -}: { +export interface IDialogProps extends PropsWithChildren { title?: string | ReactNode; isOpen?: boolean; size?: "sm" | "md"; onOpenChange?: ComponentProps["onOpenChange"]; -} & PropsWithChildren) => { - return ( - - - - {/* Because of Portal we need to set the theme here */} -
- - - {title} - - {children} - {onOpenChange ? ( - - - - ) : null} - -
-
-
- ); -}; +} + const Content = createComponent( RadixDialog.Content, tv({ @@ -59,3 +32,32 @@ const Content = createComponent( }, }), ); + +export const Dialog = ({ + title = 0, + size = undefined, + isOpen = false, + children, + onOpenChange = undefined, +}: IDialogProps): JSX.Element => ( + + + + + {/* Because of Portal we need to set the theme here */} +
+ + {title} + + {children} + + {onOpenChange ? ( + + + + ) : null} + +
+
+
+); diff --git a/src/components/ui/Divider.tsx b/src/components/ui/Divider.tsx deleted file mode 100644 index 60124468..00000000 --- a/src/components/ui/Divider.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import { tv } from "tailwind-variants"; -import { createComponent } from "."; -import { createElement, type ComponentPropsWithoutRef } from "react"; - -export const Divider = createComponent( - "div", - tv({ - base: "bg-gray-200", - variants: { - orientation: { - vertical: "h-full w-[1px]", - horizontal: "w-full h-[1px]", - }, - }, - defaultVariants: { - orientation: "horizontal", - }, - }), -); - -export const DividerIcon = ({ - icon, - ...props -}: // eslint-disable-next-line -{ icon?: any } & ComponentPropsWithoutRef) => ( -
- - {icon ? ( -
- {createElement(icon)} -
- ) : null} -
-); diff --git a/src/components/ui/Form.tsx b/src/components/ui/Form.tsx index be94d541..4969aa07 100644 --- a/src/components/ui/Form.tsx +++ b/src/components/ui/Form.tsx @@ -1,5 +1,5 @@ -import { type z } from "zod"; -import { tv } from "tailwind-variants"; +import { zodResolver } from "@hookform/resolvers/zod"; +import { PlusIcon, Search, Trash } from "lucide-react"; import { type ComponentPropsWithRef, type PropsWithChildren, @@ -18,12 +18,14 @@ import { type UseFormProps, useFieldArray, } from "react-hook-form"; -import { zodResolver } from "@hookform/resolvers/zod"; +import { tv } from "tailwind-variants"; +import { type z } from "zod"; -import { createComponent } from "."; import { cn } from "~/utils/classNames"; + import { IconButton } from "./Button"; -import { PlusIcon, Search, Trash } from "lucide-react"; + +import { createComponent } from "."; const inputBase = [ "dark:bg-gray-900", @@ -33,6 +35,7 @@ const inputBase = [ "disabled:opacity-30", "checked:bg-gray-800", ]; + export const Input = createComponent( "input", tv({ @@ -44,6 +47,7 @@ export const Input = createComponent( }, }), ); + export const InputWrapper = createComponent( "div", tv({ @@ -51,6 +55,7 @@ export const InputWrapper = createComponent( variants: {}, }), ); + export const InputAddon = createComponent( "div", tv({ @@ -85,10 +90,7 @@ export const Select = createComponent( export const Checkbox = createComponent( "input", tv({ - base: [ - ...inputBase, - "checked:focus:dark:bg-gray-700 checked:hover:dark:bg-gray-700", - ], + base: [...inputBase, "checked:focus:dark:bg-gray-700 checked:hover:dark:bg-gray-700"], }), ); @@ -99,89 +101,77 @@ export const Label = createComponent( variants: { required: { true: "after:content-['*']" } }, }), ); -export const Textarea = createComponent( - "textarea", - tv({ base: [...inputBase, "w-full"] }), -); -export const SearchInput = forwardRef(function SearchInput( - { ...props }: ComponentPropsWithRef, - ref, -) { - return ( - - - - - - - ); -}); +export const ErrorMessage = createComponent("div", tv({ base: "pt-1 text-xs text-red-500" })); -export const FormControl = ({ - name, - label, - hint, - required, - children, - valueAsNumber, - className, -}: { +export const Textarea = createComponent("textarea", tv({ base: [...inputBase, "w-full"] })); + +export const SearchInput = forwardRef(({ ...props }: ComponentPropsWithRef, ref) => ( + + + + + + + +)); + +SearchInput.displayName = "SearchInput"; + +export interface IFormControlProps extends ComponentPropsWithoutRef<"fieldset"> { name: string; label?: string; required?: boolean; valueAsNumber?: boolean; hint?: string; -} & ComponentPropsWithoutRef<"fieldset">) => { +} + +export const FormControl = ({ + name, + label = "", + hint = "", + required = false, + children = null, + valueAsNumber = false, + className = "", +}: IFormControlProps): JSX.Element => { const { register, formState: { errors }, } = useFormContext(); // Get error for name - handles field arrays (field.index.prop) - const error = name.split(".").reduce( - /* eslint-disable-next-line */ - (err, key) => (err as any)?.[key], - errors, - ) as unknown as { message: string }; + const [index] = name.split("."); + const error = index && errors[index]; return (
{label && ( -
); }; -export const ErrorMessage = createComponent( - "div", - tv({ base: "pt-1 text-xs text-red-500" }), -); - -export function FieldArray({ +export const FieldArray = ({ name, renderField, }: { name: string; renderField: (field: z.infer, index: number) => ReactNode; -}) { +}): JSX.Element => { const form = useFormContext(); const { fields, append, remove } = useFieldArray({ control: form.control, @@ -192,55 +182,55 @@ export function FieldArray({ return (
- {error && ( -
- {String(error)} -
- )} + {error &&
{String(error)}
} + {fields.map((field, i) => (
{renderField(field, i)}
remove(i)} + onClick={() => { + remove(i); + }} />
))} +
append({})} + size="sm" + type="button" + onClick={() => { + append({}); + }} > Add row
); -} +}; -export function FormSection({ +export const FormSection = ({ title, description, children, -}: { title: string; description: string } & ComponentProps<"section">) { - return ( -
-

{title}

-

- {description} -

- {children} -
- ); -} +}: { title: string; description: string } & ComponentProps<"section">): JSX.Element => ( +
+

{title}

+ +

{description}

+ + {children} +
+); export interface FormProps extends PropsWithChildren { defaultValues?: UseFormProps>["defaultValues"]; @@ -249,13 +239,13 @@ export interface FormProps extends PropsWithChildren { onSubmit: (values: z.infer, form: UseFormReturn>) => void; } -export function Form({ +export const Form = ({ schema, children, - values, - defaultValues, + values = undefined, + defaultValues = undefined, onSubmit, -}: FormProps) { +}: FormProps): JSX.Element => { // Initialize the form with defaultValues and schema for validation const form = useForm({ defaultValues, @@ -267,9 +257,13 @@ export function Form({ // Pass the form methods to a FormProvider. This lets us access the form from components with useFormContext return ( -
onSubmit(values, form))}> + { + onSubmit(data, form); + })} + > {children}
); -} +}; diff --git a/src/components/ui/Heading.tsx b/src/components/ui/Heading.tsx index adfb2508..97f77d93 100644 --- a/src/components/ui/Heading.tsx +++ b/src/components/ui/Heading.tsx @@ -1,4 +1,5 @@ import { tv } from "tailwind-variants"; + import { createComponent } from "."; export const Heading = createComponent( diff --git a/src/components/ui/Link.tsx b/src/components/ui/Link.tsx index f5bcb651..aef90b5b 100644 --- a/src/components/ui/Link.tsx +++ b/src/components/ui/Link.tsx @@ -1,10 +1,10 @@ +import clsx from "clsx"; +import { ExternalLinkIcon } from "lucide-react"; import NextLink from "next/link"; import { type ComponentProps } from "react"; import { tv } from "tailwind-variants"; import { createComponent } from "."; -import clsx from "clsx"; -import { ExternalLinkIcon } from "lucide-react"; export const Link = createComponent( NextLink, @@ -13,14 +13,10 @@ export const Link = createComponent( }), ); -export const ExternalLink = ({ - children, - ...props -}: ComponentProps) => ( - - {children} +export const ExternalLink = ({ children, ...props }: ComponentProps): JSX.Element => ( + + {children} + + ); diff --git a/src/components/ui/Markdown.tsx b/src/components/ui/Markdown.tsx index 567ff10e..278e2cc8 100644 --- a/src/components/ui/Markdown.tsx +++ b/src/components/ui/Markdown.tsx @@ -2,18 +2,16 @@ import clsx from "clsx"; import { type ComponentProps } from "react"; import ReactMarkdown from "react-markdown"; -export function Markdown({ - isLoading, - ...props -}: { isLoading?: boolean } & ComponentProps) { - return ( -
- -
- ); +export interface IMarkdownProps extends ComponentProps { + isLoading?: boolean; } + +export const Markdown = ({ isLoading = false, ...props }: IMarkdownProps): JSX.Element => ( +
+ +
+); diff --git a/src/components/ui/Progress.tsx b/src/components/ui/Progress.tsx index e130249d..0cb75f9c 100644 --- a/src/components/ui/Progress.tsx +++ b/src/components/ui/Progress.tsx @@ -1,4 +1,5 @@ import { tv } from "tailwind-variants"; + import { createComponent } from "."; const ProgressWrapper = createComponent( @@ -8,7 +9,12 @@ const ProgressWrapper = createComponent( }), ); -export const Progress = ({ value = 0, max = 100 }) => ( +export interface IProgressProps { + value?: number; + max?: number; +} + +export const Progress = ({ value = 0, max = 100 }: IProgressProps): JSX.Element => (
& { isLoading?: boolean }) => +}: ComponentProps<"span"> & { isLoading?: boolean }): JSX.Element => isLoading ? ( ) : ( - <>{children} +
{children}
); diff --git a/src/components/ui/Spinner.tsx b/src/components/ui/Spinner.tsx index a2a12544..128ddc8e 100644 --- a/src/components/ui/Spinner.tsx +++ b/src/components/ui/Spinner.tsx @@ -1,24 +1,26 @@ import clsx from "clsx"; import { type ComponentProps } from "react"; -export const Spinner = (props: ComponentProps<"div">) => ( +export const Spinner = (props: ComponentProps<"div">): JSX.Element => (
+ Loading...
); diff --git a/src/components/ui/Table.tsx b/src/components/ui/Table.tsx index 3e7bf096..ad263ccb 100644 --- a/src/components/ui/Table.tsx +++ b/src/components/ui/Table.tsx @@ -1,4 +1,5 @@ import { tv } from "tailwind-variants"; + import { createComponent } from "."; export const Table = createComponent( diff --git a/src/components/ui/Tag.tsx b/src/components/ui/Tag.tsx index 52ab96d5..ead931dd 100644 --- a/src/components/ui/Tag.tsx +++ b/src/components/ui/Tag.tsx @@ -1,4 +1,5 @@ import { tv } from "tailwind-variants"; + import { createComponent } from "."; export const Tag = createComponent( diff --git a/src/components/ui/index.tsx b/src/components/ui/index.tsx index e92b2dab..da9b7ec6 100644 --- a/src/components/ui/index.tsx +++ b/src/components/ui/index.tsx @@ -1,30 +1,33 @@ -import type { ComponentPropsWithRef, ReactNode, ElementType } from "react"; import { forwardRef } from "react"; +import { tv } from "tailwind-variants"; -export type PolymorphicRef = - React.ComponentPropsWithRef["ref"]; +import type { ComponentPropsWithRef, ReactNode, ElementType, ForwardRefExoticComponent, RefAttributes } from "react"; + +export type PolymorphicRef = React.ComponentPropsWithRef["ref"]; export type ComponentProps = { as?: C; children?: ReactNode; } & ComponentPropsWithRef; -export function createComponent( +export function createComponent( tag: T, - variant: TV, -) { - return forwardRef(function UIComponent( - props: ComponentPropsWithRef, - ref?: PolymorphicRef, - ) { - const { as: Component = tag, className, ...rest } = props; - return ( + variant: V, +): ForwardRefExoticComponent, "ref"> & RefAttributes> { + const ComponentElement = forwardRef( + ( + { as: Component = tag, className, ...rest }: ComponentPropsWithRef, + ref?: PolymorphicRef, + ) => ( )({ class: className as string | undefined, ...rest })} {...rest} /> - ); - }); + ), + ); + + ComponentElement.displayName = tag.toString(); + + return ComponentElement; } diff --git a/src/config.ts b/src/config.ts index f1a9284d..53a02528 100644 --- a/src/config.ts +++ b/src/config.ts @@ -17,14 +17,11 @@ export const config = { registrationEndsAt: new Date(process.env.NEXT_PUBLIC_REGISTRATION_END_DATE!), reviewEndsAt: new Date(process.env.NEXT_PUBLIC_REVIEW_END_DATE!), resultsAt: new Date(process.env.NEXT_PUBLIC_RESULTS_DATE!), - skipApprovedVoterCheck: ["true", "1"].includes( - process.env.NEXT_PUBLIC_SKIP_APPROVED_VOTER_CHECK!, - ), + skipApprovedVoterCheck: ["true", "1"].includes(process.env.NEXT_PUBLIC_SKIP_APPROVED_VOTER_CHECK!), tokenName: process.env.NEXT_PUBLIC_TOKEN_NAME!, roundId: process.env.NEXT_PUBLIC_ROUND_ID!, admin: (process.env.NEXT_PUBLIC_ADMIN_ADDRESS ?? "") as `0x${string}`, - network: - wagmiChains[process.env.NEXT_PUBLIC_CHAIN_NAME as keyof typeof wagmiChains], + network: wagmiChains[process.env.NEXT_PUBLIC_CHAIN_NAME as keyof typeof wagmiChains], maciAddress: process.env.NEXT_PUBLIC_MACI_ADDRESS, maciStartBlock: Number(process.env.NEXT_PUBLIC_MACI_START_BLOCK ?? 0), maciSubgraphUrl: process.env.NEXT_PUBLIC_MACI_SUBGRAPH_URL ?? "", @@ -40,12 +37,8 @@ export const eas = { attesterAddress: process.env.NEXT_PUBLIC_APPROVED_APPLICATIONS_ATTESTER ?? "", contracts: { - eas: - process.env.NEXT_PUBLIC_EAS_CONTRACT_ADDRESS ?? - "0x4200000000000000000000000000000000000021", - schemaRegistry: - process.env.NEXT_PUBLIC_EAS_SCHEMA_REGISTRY_ADDRESS ?? - "0x4200000000000000000000000000000000000020", + eas: process.env.NEXT_PUBLIC_EAS_CONTRACT_ADDRESS ?? "0x4200000000000000000000000000000000000021", + schemaRegistry: process.env.NEXT_PUBLIC_EAS_SCHEMA_REGISTRY_ADDRESS ?? "0x4200000000000000000000000000000000000020", }, schemas: { metadata: process.env.NEXT_PUBLIC_METADATA_SCHEMA!, diff --git a/src/contexts/Ballot.tsx b/src/contexts/Ballot.tsx index 1b024b0f..ef1a5464 100644 --- a/src/contexts/Ballot.tsx +++ b/src/contexts/Ballot.tsx @@ -1,115 +1,117 @@ -import React, { createContext, useContext, useState, useEffect } from "react"; +import React, { createContext, useContext, useState, useEffect, useMemo, useCallback } from "react"; +import { useAccount } from "wagmi"; import type { BallotContextType, BallotProviderProps } from "./types"; import type { Ballot, Vote } from "~/features/ballot/types"; -import { useAccount } from "wagmi"; -export const BallotContext = createContext( - undefined, -); +export const BallotContext = createContext(undefined); const defaultBallot = { votes: [], published: false }; -export const BallotProvider: React.FC = ({ children }) => { +export const BallotProvider: React.FC = ({ children }: BallotProviderProps) => { const [ballot, setBallot] = useState(defaultBallot); const { isDisconnected } = useAccount(); - const sumBallot = (votes?: Vote[]) => - (votes ?? []).reduce( - (sum, x) => sum + (!isNaN(Number(x?.amount)) ? Number(x.amount) : 0), - 0, - ); - - const ballotContains = (id: string) => { - return ballot.votes.find((v) => v.projectId === id); - }; - - const toObject = (arr: object[] = [], key: string) => { - return arr.reduce( - (acc, x) => ({ ...acc, [x[key as keyof typeof acc]]: x }), - {}, - ); - }; - - const mergeBallot = (addedVotes: Vote[], pollId: string) => { - return { + const sumBallot = useCallback( + (votes?: Vote[]) => + (votes ?? []).reduce((sum, x) => sum + (!Number.isNaN(Number(x.amount)) ? Number(x.amount) : 0), 0), + [], + ); + + const ballotContains = useCallback((id: string) => ballot.votes.find((v) => v.projectId === id), [ballot]); + + const toObject = useCallback( + (key: string, arr: object[] = []) => arr.reduce((acc, x) => ({ ...acc, [x[key as keyof typeof acc]]: x }), {}), + [], + ); + + const mergeBallot = useCallback( + (addedVotes: Vote[], pollId: string) => ({ ...ballot, pollId, votes: Object.values({ - ...toObject(ballot.votes, "projectId"), - ...toObject(addedVotes, "projectId"), + ...toObject("projectId", ballot.votes), + ...toObject("projectId", addedVotes), }), - }; - }; + }), + [ballot, toObject], + ); // save the ballot to localstorage - const saveBallot = () => { + const saveBallot = useCallback(() => { localStorage.setItem("ballot", JSON.stringify(ballot)); - }; + }, [ballot]); // remove certain project from the ballot - const removeFromBallot = (projectId: string) => { - const votes = (ballot?.votes ?? []).filter( - (v) => v.projectId !== projectId, - ); + const removeFromBallot = useCallback( + (projectId: string) => { + const votes = ballot.votes.filter((v) => v.projectId !== projectId); - setBallot({ ...ballot, votes, published: false }); - }; + setBallot({ ...ballot, votes, published: false }); + }, + [ballot, setBallot], + ); // add to the ballot - const addToBallot = (votes: Vote[], pollId?: string) => { - if (!pollId) throw new Error("PollId is not provided."); - - setBallot(mergeBallot(votes, pollId)); - }; + const addToBallot = useCallback( + (votes: Vote[], pollId?: string) => { + if (!pollId) { + throw new Error("PollId is not provided."); + } + + setBallot(mergeBallot(votes, pollId)); + }, + [setBallot, mergeBallot], + ); // remove the ballot from localstorage - const deleteBallot = () => { + const deleteBallot = useCallback(() => { setBallot(defaultBallot); localStorage.removeItem("ballot"); - }; + }, [setBallot]); // set published to tru - const publishBallot = () => { + const publishBallot = useCallback(() => { setBallot({ ...ballot, published: true }); - }; + }, [ballot, setBallot]); /// Read existing ballot in localStorage useEffect(() => { - setBallot( - JSON.parse( - localStorage.getItem("ballot") ?? JSON.stringify(defaultBallot), - ) ?? defaultBallot, - ); - }, []); + const savedBallot = JSON.parse( + localStorage.getItem("ballot") ?? JSON.stringify(defaultBallot), + ) as typeof defaultBallot; + + setBallot(savedBallot); + }, [setBallot]); /// store ballot to localStorage once it changes useEffect(() => { if (ballot !== defaultBallot) { saveBallot(); } - }, [ballot, ballot.votes, ballot.published]); + }, [ballot, ballot.votes, ballot.published, saveBallot]); useEffect(() => { if (isDisconnected) { deleteBallot(); } - }, [isDisconnected]); - - const value: BallotContextType = { - ballot, - addToBallot, - removeFromBallot, - deleteBallot, - ballotContains, - sumBallot, - publishBallot, - }; - - return ( - {children} + }, [isDisconnected, deleteBallot]); + + const value = useMemo( + () => ({ + ballot, + addToBallot, + removeFromBallot, + deleteBallot, + ballotContains, + sumBallot, + publishBallot, + }), + [ballot, addToBallot, removeFromBallot, deleteBallot, ballotContains, sumBallot, publishBallot], ); + + return {children}; }; export const useBallot = (): BallotContextType => { diff --git a/src/contexts/Maci.tsx b/src/contexts/Maci.tsx index 6ddcb70c..b3b3151b 100644 --- a/src/contexts/Maci.tsx +++ b/src/contexts/Maci.tsx @@ -1,12 +1,4 @@ -import React, { - createContext, - useContext, - useCallback, - useEffect, - useMemo, - useState, -} from "react"; -import { useAccount, useSignMessage } from "wagmi"; +/* eslint-disable no-console */ import { isAfter } from "date-fns"; import { signup, @@ -17,18 +9,19 @@ import { getPoll, genKeyPair, } from "maci-cli/sdk"; +import React, { createContext, useContext, useCallback, useEffect, useMemo, useState } from "react"; +import { useAccount, useSignMessage } from "wagmi"; -import type { Attestation } from "~/utils/fetchAttestations"; import { config } from "~/config"; -import { api } from "~/utils/api"; import { useEthersSigner } from "~/hooks/useEthersSigner"; +import { api } from "~/utils/api"; + import type { IVoteArgs, MaciContextType, MaciProviderProps } from "./types"; +import type { Attestation } from "~/utils/fetchAttestations"; -export const MaciContext = createContext( - undefined, -); +export const MaciContext = createContext(undefined); -export const MaciProvider: React.FC = ({ children }) => { +export const MaciProvider: React.FC = ({ children }: MaciProviderProps) => { const signer = useEthersSigner(); const { address, isConnected, isDisconnected } = useAccount(); @@ -58,17 +51,12 @@ export const MaciProvider: React.FC = ({ children }) => { const attestationId = useMemo(() => { const values = attestations.data?.valueOf() as Attestation[] | undefined; - const attestation = values?.find( - (attestation) => config.admin === attestation.attester, - ); + const attestation = values?.find(({ attester }) => config.admin === attester); return attestation?.id; }, [attestations]); - const isEligibleToVote = useMemo( - () => Boolean(attestationId) && Boolean(address), - [attestationId, address], - ); + const isEligibleToVote = useMemo(() => Boolean(attestationId) && Boolean(address), [attestationId, address]); // on load get the key pair from local storage and set the signature message useEffect(() => { @@ -94,17 +82,11 @@ export const MaciProvider: React.FC = ({ children }) => { localStorage.setItem("maciPubKey", userKeyPair.publicKey); setMaciPrivKey(userKeyPair.privateKey); setMaciPubKey(userKeyPair.publicKey); - }, [address, signMessageAsync, setMaciPrivKey, setMaciPubKey]); + }, [address, signatureMessage, signMessageAsync, setMaciPrivKey, setMaciPubKey]); const votingEndsAt = useMemo( - () => - pollData - ? new Date( - Number(pollData.deployTime) * 1000 + - Number(pollData.duration) * 1000, - ) - : new Date(), - [pollData?.deployTime, pollData?.duration], + () => (pollData ? new Date(Number(pollData.deployTime) * 1000 + Number(pollData.duration) * 1000) : new Date()), + [pollData], ); const onSignup = useCallback( @@ -136,23 +118,11 @@ export const MaciProvider: React.FC = ({ children }) => { setIsLoading(false); } }, - [ - attestationId, - maciPubKey, - address, - signer, - setIsRegistered, - setStateIndex, - setIsLoading, - ], + [attestationId, maciPubKey, signer, setIsRegistered, setStateIndex, setIsLoading], ); const onVote = useCallback( - async ( - votes: IVoteArgs[], - onError: () => Promise, - onSuccess: () => Promise, - ) => { + async (votes: IVoteArgs[], onError: () => Promise, onSuccess: () => Promise) => { if (!signer || !stateIndex || !pollData) { return; } @@ -163,15 +133,13 @@ export const MaciProvider: React.FC = ({ children }) => { return; } - const messages = votes.map( - ({ newVoteWeight, voteOptionIndex }, index) => ({ - newVoteWeight, - voteOptionIndex, - stateIndex: BigInt(stateIndex), - maciContractAddress: config.maciAddress!, - nonce: BigInt(index + 1), - }), - ); + const messages = votes.map(({ newVoteWeight, voteOptionIndex }, index) => ({ + newVoteWeight, + voteOptionIndex, + stateIndex: BigInt(stateIndex), + maciContractAddress: config.maciAddress!, + nonce: BigInt(index + 1), + })); setIsLoading(true); @@ -184,23 +152,15 @@ export const MaciProvider: React.FC = ({ children }) => { signer, }) .then(() => onSuccess()) - .catch((error: Error) => { - setError(error.message); + .catch((err: Error) => { + setError(err.message); return onError(); }) .finally(() => { setIsLoading(false); }); }, - [ - stateIndex, - pollData?.id, - maciPubKey, - maciPrivKey, - signer, - setIsLoading, - setError, - ], + [stateIndex, pollData, maciPubKey, maciPrivKey, signer, setIsLoading, setError], ); useEffect(() => { @@ -239,13 +199,11 @@ export const MaciProvider: React.FC = ({ children }) => { startBlock: config.maciStartBlock, signer, }) - .then( - ({ isRegistered: registered, voiceCredits, stateIndex: index }) => { - setIsRegistered(registered); - setStateIndex(index); - setInitialVoiceCredits(Number(voiceCredits)); - }, - ) + .then(({ isRegistered: registered, voiceCredits, stateIndex: index }) => { + setIsRegistered(registered); + setStateIndex(index); + setInitialVoiceCredits(Number(voiceCredits)); + }) .catch(console.error); } else if (account) { const { id, voiceCreditBalance } = account; @@ -288,7 +246,7 @@ export const MaciProvider: React.FC = ({ children }) => { }) .then(async (data) => { if (!data.isStateAqMerged || isAfter(votingEndsAt, new Date())) { - return; + return undefined; } return fetch(`${config.tallyUrl}/tally-${data.id}.json`) @@ -303,25 +261,41 @@ export const MaciProvider: React.FC = ({ children }) => { .finally(() => { setIsLoading(false); }); - }, [Boolean(signer), setIsLoading, setTallyData, setPollData]); - - const value: MaciContextType = { - isLoading, - isEligibleToVote, - initialVoiceCredits, - votingEndsAt, - stateIndex, - isRegistered: isRegistered ?? false, - pollId: pollData?.id.toString(), - error, - pollData, - tallyData, - maciPubKey, - onSignup, - onVote, - }; + }, [signer, votingEndsAt, setIsLoading, setTallyData, setPollData]); + + const value = useMemo( + () => ({ + isLoading, + isEligibleToVote, + initialVoiceCredits, + votingEndsAt, + stateIndex, + isRegistered: isRegistered ?? false, + pollId: pollData?.id.toString(), + error, + pollData, + tallyData, + maciPubKey, + onSignup, + onVote, + }), + [ + isLoading, + isEligibleToVote, + initialVoiceCredits, + votingEndsAt, + stateIndex, + isRegistered, + pollData, + tallyData, + error, + maciPubKey, + onSignup, + onVote, + ], + ); - return {children}; + return {children}; }; export const useMaci = (): MaciContextType => { diff --git a/src/contexts/types.ts b/src/contexts/types.ts index e7c097cc..02a8f8c5 100644 --- a/src/contexts/types.ts +++ b/src/contexts/types.ts @@ -1,5 +1,6 @@ -import { type ReactNode } from "react"; import { type TallyData, type IGetPollData } from "maci-cli/sdk"; +import { type ReactNode } from "react"; + import type { Ballot, Vote } from "~/features/ballot/types"; export interface IVoteArgs { @@ -22,8 +23,8 @@ export interface MaciContextType { onSignup: (onError: () => void) => Promise; onVote: ( args: IVoteArgs[], - onError: () => Promise, - onSuccess: () => Promise, + onError: () => void | Promise, + onSuccess: () => void | Promise, ) => Promise; } diff --git a/src/env.js b/src/env.js index f094fd45..03d445fc 100644 --- a/src/env.js +++ b/src/env.js @@ -7,20 +7,7 @@ export const env = createEnv({ * isn't built with invalid env vars. */ server: { - NODE_ENV: z - .enum(["development", "test", "production"]) - .default("development"), - NEXTAUTH_SECRET: - process.env.NODE_ENV === "production" - ? z.string() - : z.string().optional(), - NEXTAUTH_URL: z.preprocess( - // This makes Vercel deployments not fail if you don't set NEXTAUTH_URL - // Since NextAuth.js automatically uses the VERCEL_URL if present. - (str) => process.env.VERCEL_URL ?? str, - // VERCEL_URL doesn't include `https` so it cant be validated as a URL - process.env.VERCEL_URL ? z.string() : z.string().url(), - ), + NODE_ENV: z.enum(["development", "test", "production"]).default("development"), }, /** @@ -52,38 +39,22 @@ export const env = createEnv({ // EAS Schemas NEXT_PUBLIC_APPROVED_APPLICATIONS_SCHEMA: z .string() - .default( - "0xebbf697d5d3ca4b53579917ffc3597fb8d1a85b8c6ca10ec10039709903b9277", - ), - NEXT_PUBLIC_APPROVED_APPLICATIONS_ATTESTER: z - .string() - .default("0x621477dBA416E12df7FF0d48E14c4D20DC85D7D9"), + .default("0xebbf697d5d3ca4b53579917ffc3597fb8d1a85b8c6ca10ec10039709903b9277"), + NEXT_PUBLIC_APPROVED_APPLICATIONS_ATTESTER: z.string().default("0x621477dBA416E12df7FF0d48E14c4D20DC85D7D9"), NEXT_PUBLIC_APPLICATIONS_SCHEMA: z .string() - .default( - "0x76e98cce95f3ba992c2ee25cef25f756495147608a3da3aa2e5ca43109fe77cc", - ), + .default("0x76e98cce95f3ba992c2ee25cef25f756495147608a3da3aa2e5ca43109fe77cc"), NEXT_PUBLIC_BADGEHOLDER_SCHEMA: z .string() - .default( - "0xfdcfdad2dbe7489e0ce56b260348b7f14e8365a8a325aef9834818c00d46b31b", - ), - NEXT_PUBLIC_BADGEHOLDER_ATTESTER: z - .string() - .default("0x621477dBA416E12df7FF0d48E14c4D20DC85D7D9"), + .default("0xfdcfdad2dbe7489e0ce56b260348b7f14e8365a8a325aef9834818c00d46b31b"), + NEXT_PUBLIC_BADGEHOLDER_ATTESTER: z.string().default("0x621477dBA416E12df7FF0d48E14c4D20DC85D7D9"), NEXT_PUBLIC_PROFILE_SCHEMA: z .string() - .default( - "0xac4c92fc5c7babed88f78a917cdbcdc1c496a8f4ab2d5b2ec29402736b2cf929", - ), + .default("0xac4c92fc5c7babed88f78a917cdbcdc1c496a8f4ab2d5b2ec29402736b2cf929"), - NEXT_PUBLIC_EAS_CONTRACT_ADDRESS: z - .string() - .default("0x4200000000000000000000000000000000000021"), + NEXT_PUBLIC_EAS_CONTRACT_ADDRESS: z.string().default("0x4200000000000000000000000000000000000021"), - NEXT_PUBLIC_EASSCAN_URL: z - .string() - .default("https://optimism.easscan.org/graphql"), + NEXT_PUBLIC_EASSCAN_URL: z.string().default("https://optimism.easscan.org/graphql"), NEXT_PUBLIC_ADMIN_ADDRESS: z.string().startsWith("0x"), NEXT_PUBLIC_APPROVAL_SCHEMA: z.string().startsWith("0x"), @@ -108,8 +79,6 @@ export const env = createEnv({ */ runtimeEnv: { NODE_ENV: process.env.NODE_ENV, - NEXTAUTH_SECRET: process.env.NEXTAUTH_SECRET, - NEXTAUTH_URL: process.env.NEXTAUTH_URL, NEXT_PUBLIC_CHAIN_NAME: process.env.NEXT_PUBLIC_CHAIN_NAME, NEXT_PUBLIC_SIGN_STATEMENT: process.env.NEXT_PUBLIC_SIGN_STATEMENT, @@ -118,24 +87,18 @@ export const env = createEnv({ NEXT_PUBLIC_MAX_VOTES_PROJECT: process.env.NEXT_PUBLIC_MAX_VOTES_PROJECT, NEXT_PUBLIC_FEEDBACK_URL: process.env.NEXT_PUBLIC_FEEDBACK_URL, - NEXT_PUBLIC_APPROVED_APPLICATIONS_SCHEMA: - process.env.NEXT_PUBLIC_APPROVED_APPLICATIONS_SCHEMA, - NEXT_PUBLIC_APPROVED_APPLICATIONS_ATTESTER: - process.env.NEXT_PUBLIC_APPROVED_APPLICATIONS_ATTESTER, - NEXT_PUBLIC_APPLICATIONS_SCHEMA: - process.env.NEXT_PUBLIC_APPLICATIONS_SCHEMA, + NEXT_PUBLIC_APPROVED_APPLICATIONS_SCHEMA: process.env.NEXT_PUBLIC_APPROVED_APPLICATIONS_SCHEMA, + NEXT_PUBLIC_APPROVED_APPLICATIONS_ATTESTER: process.env.NEXT_PUBLIC_APPROVED_APPLICATIONS_ATTESTER, + NEXT_PUBLIC_APPLICATIONS_SCHEMA: process.env.NEXT_PUBLIC_APPLICATIONS_SCHEMA, NEXT_PUBLIC_BADGEHOLDER_SCHEMA: process.env.NEXT_PUBLIC_BADGEHOLDER_SCHEMA, - NEXT_PUBLIC_BADGEHOLDER_ATTESTER: - process.env.NEXT_PUBLIC_BADGEHOLDER_ATTESTER, + NEXT_PUBLIC_BADGEHOLDER_ATTESTER: process.env.NEXT_PUBLIC_BADGEHOLDER_ATTESTER, NEXT_PUBLIC_PROFILE_SCHEMA: process.env.NEXT_PUBLIC_PROFILE_SCHEMA, - NEXT_PUBLIC_EAS_CONTRACT_ADDRESS: - process.env.NEXT_PUBLIC_EAS_CONTRACT_ADDRESS, + NEXT_PUBLIC_EAS_CONTRACT_ADDRESS: process.env.NEXT_PUBLIC_EAS_CONTRACT_ADDRESS, NEXT_PUBLIC_EASSCAN_URL: process.env.NEXT_PUBLIC_EASSCAN_URL, NEXT_PUBLIC_WALLETCONNECT_ID: process.env.NEXT_PUBLIC_WALLETCONNECT_ID, NEXT_PUBLIC_ALCHEMY_ID: process.env.NEXT_PUBLIC_ALCHEMY_ID, - NEXT_PUBLIC_SKIP_APPROVED_VOTER_CHECK: - process.env.NEXT_PUBLIC_SKIP_APPROVED_VOTER_CHECK, + NEXT_PUBLIC_SKIP_APPROVED_VOTER_CHECK: process.env.NEXT_PUBLIC_SKIP_APPROVED_VOTER_CHECK, NEXT_PUBLIC_ADMIN_ADDRESS: process.env.NEXT_PUBLIC_ADMIN_ADDRESS, NEXT_PUBLIC_APPROVAL_SCHEMA: process.env.NEXT_PUBLIC_APPROVAL_SCHEMA, diff --git a/src/features/admin/components/InvalidAdmin.tsx b/src/features/admin/components/InvalidAdmin.tsx index 7ee2ed78..903103c9 100644 --- a/src/features/admin/components/InvalidAdmin.tsx +++ b/src/features/admin/components/InvalidAdmin.tsx @@ -1,12 +1,11 @@ import { Heading } from "~/components/ui/Heading"; -export function InvalidAdmin() { - return ( -
- - Invalid Admin Account - -

Only admins can access this page.

-
- ); -} +export const InvalidAdmin = (): JSX.Element => ( +
+ + Invalid Admin Account + + +

Only admins can access this page.

+
+); diff --git a/src/features/applications/components/ApplicationForm.tsx b/src/features/applications/components/ApplicationForm.tsx index 1b0f1d66..2573d372 100644 --- a/src/features/applications/components/ApplicationForm.tsx +++ b/src/features/applications/components/ApplicationForm.tsx @@ -1,6 +1,11 @@ +import { useController, useFormContext } from "react-hook-form"; +import { useLocalStorage } from "react-use"; +import { toast } from "sonner"; +import { useAccount } from "wagmi"; import { z } from "zod"; import { ImageUpload } from "~/components/ImageUpload"; +import { Alert } from "~/components/ui/Alert"; import { IconButton } from "~/components/ui/Button"; import { ErrorMessage, @@ -14,28 +19,92 @@ import { Textarea, } from "~/components/ui/Form"; import { Spinner } from "~/components/ui/Spinner"; -import { impactCategories } from "~/config"; -import { - ApplicationSchema, - ProfileSchema, - contributionTypes, - fundingSourceTypes, -} from "../types"; -import { useCreateApplication } from "../hooks/useCreateApplication"; -import { toast } from "sonner"; -import { useController, useFormContext } from "react-hook-form"; import { Tag } from "~/components/ui/Tag"; +import { impactCategories } from "~/config"; import { useIsCorrectNetwork } from "~/hooks/useIsCorrectNetwork"; -import { useLocalStorage } from "react-use"; -import { Alert } from "~/components/ui/Alert"; -import { useAccount } from "wagmi"; + +import { useCreateApplication } from "../hooks/useCreateApplication"; +import { ApplicationSchema, ProfileSchema, contributionTypes, fundingSourceTypes } from "../types"; const ApplicationCreateSchema = z.object({ profile: ProfileSchema, application: ApplicationSchema, }); -export function ApplicationForm({ address = "" }) { +export interface IApplicationFormProps { + address?: string; +} + +const ImpactTags = (): JSX.Element => { + const { control, watch, formState } = useFormContext>(); + const { field } = useController({ + name: "application.impactCategory", + control, + }); + + const selected = watch("application.impactCategory"); + + const error = formState.errors.application?.impactCategory; + return ( +
+ + +
+ {Object.entries(impactCategories).map(([value, { label }]) => { + const isSelected = selected.includes(value); + return ( + { + const currentlySelected = isSelected ? selected.filter((s) => s !== value) : selected.concat(value); + + field.onChange(currentlySelected); + }} + > + {label} + + ); + })} +
+ + {error && {error.message}} +
+ ); +}; + +const CreateApplicationButton = ({ isLoading, buttonText }: { isLoading: boolean; buttonText: string }) => { + const { isCorrectNetwork, correctNetwork } = useIsCorrectNetwork(); + + const { address } = useAccount(); + + return ( +
+
+ {!address &&
You must connect wallet to create a list
} + + {!isCorrectNetwork && ( +
You must be connected to {correctNetwork.name}
+ )} +
+ + + {buttonText} + +
+ ); +}; + +export const ApplicationForm = ({ address = "" }: IApplicationFormProps): JSX.Element => { const clearDraft = useLocalStorage("application-draft")[2]; const create = useCreateApplication({ @@ -50,12 +119,15 @@ export function ApplicationForm({ address = "" }) { }); if (create.isSuccess) { return ( - + It will now be reviewed by our admins. ); } - const error = create.error; + const { error } = create; + + const text = create.isAttesting ? "Creating attestation" : "Create application"; + return (
{ - console.log(application, profile); + onSubmit={({ profile, application }) => { create.mutate({ application, profile }); }} > - + +
- + - + +
+ - + - -