From 583ebc90b72e0b54d66c5ce9cb700219ca1094cc Mon Sep 17 00:00:00 2001 From: Hrithik kumar Date: Wed, 7 Aug 2024 16:43:39 +0530 Subject: [PATCH] first commit --- .eslintrc.cjs | 51 + .github/ISSUE_TEMPLATE/bug_report.yml | 35 + .github/ISSUE_TEMPLATE/config.yml | 8 + .github/ISSUE_TEMPLATE/feature_request.yml | 43 + .github/workflows/code-check.yml | 124 + .gitignore | 42 + README.md | 49 + components.json | 17 + next.config.js | 22 + package.json | 73 + pnpm-lock.yaml | 4559 ++++++++++++++++++ postcss.config.cjs | 7 + prettier.config.js | 39 + public/favicon.ico | Bin 0 -> 23600 bytes public/images/screenshot.png | Bin 0 -> 79764 bytes public/site.webmanifest | 14 + renovate.json | 5 + reset.d.ts | 1 + src/app/_components/basic-uploader-demo.tsx | 26 + src/app/_components/dialog-uploader-demo.tsx | 41 + src/app/_components/react-hook-form-demo.tsx | 99 + src/app/_components/uploaded-files-card.tsx | 54 + src/app/_components/variant-tabs.tsx | 26 + src/app/api/uploadthing/core.ts | 49 + src/app/api/uploadthing/route.ts | 11 + src/app/icon.tsx | 35 + src/app/layout.tsx | 94 + src/app/page.tsx | 11 + src/app/robots.ts | 13 + src/app/sitemap.ts | 12 + src/components/empty-card.tsx | 39 + src/components/file-uploader-primitive.tsx | 396 ++ src/components/file-uploader.tsx | 334 ++ src/components/layouts/mode-toggle.tsx | 42 + src/components/layouts/site-header.tsx | 44 + src/components/loading-button.tsx | 48 + src/components/providers.tsx | 14 + src/components/shell.tsx | 37 + src/components/tailwind-indicator.tsx | 18 + src/components/ui/button.tsx | 57 + src/components/ui/card.tsx | 76 + src/components/ui/dialog.tsx | 122 + src/components/ui/dropdown-menu.tsx | 205 + src/components/ui/form.tsx | 176 + src/components/ui/input.tsx | 25 + src/components/ui/label.tsx | 26 + src/components/ui/progress.tsx | 28 + src/components/ui/scroll-area.tsx | 48 + src/components/ui/sonner.tsx | 32 + src/components/ui/tabs.tsx | 55 + src/components/ui/tooltip.tsx | 30 + src/config/site.ts | 13 + src/env.js | 48 + src/hooks/use-callback-ref.ts | 27 + src/hooks/use-controllable-state.ts | 67 + src/hooks/use-upload-file.ts | 58 + src/hooks/use-upload-thingy.ts | 27 + src/lib/actions.ts | 9 + src/lib/handle-error.ts | 25 + src/lib/rate-limit.ts | 15 + src/lib/uploadthing.ts | 6 + src/lib/utils.ts | 50 + src/styles/globals.css | 82 + src/types/index.ts | 3 + tailwind.config.ts | 75 + tsconfig.json | 42 + 66 files changed, 7959 insertions(+) create mode 100644 .eslintrc.cjs create mode 100644 .github/ISSUE_TEMPLATE/bug_report.yml create mode 100644 .github/ISSUE_TEMPLATE/config.yml create mode 100644 .github/ISSUE_TEMPLATE/feature_request.yml create mode 100644 .github/workflows/code-check.yml create mode 100644 .gitignore create mode 100644 README.md create mode 100644 components.json create mode 100644 next.config.js create mode 100644 package.json create mode 100644 pnpm-lock.yaml create mode 100644 postcss.config.cjs create mode 100644 prettier.config.js create mode 100644 public/favicon.ico create mode 100644 public/images/screenshot.png create mode 100644 public/site.webmanifest create mode 100644 renovate.json create mode 100644 reset.d.ts create mode 100644 src/app/_components/basic-uploader-demo.tsx create mode 100644 src/app/_components/dialog-uploader-demo.tsx create mode 100644 src/app/_components/react-hook-form-demo.tsx create mode 100644 src/app/_components/uploaded-files-card.tsx create mode 100644 src/app/_components/variant-tabs.tsx create mode 100644 src/app/api/uploadthing/core.ts create mode 100644 src/app/api/uploadthing/route.ts create mode 100644 src/app/icon.tsx create mode 100644 src/app/layout.tsx create mode 100644 src/app/page.tsx create mode 100644 src/app/robots.ts create mode 100644 src/app/sitemap.ts create mode 100644 src/components/empty-card.tsx create mode 100644 src/components/file-uploader-primitive.tsx create mode 100644 src/components/file-uploader.tsx create mode 100644 src/components/layouts/mode-toggle.tsx create mode 100644 src/components/layouts/site-header.tsx create mode 100644 src/components/loading-button.tsx create mode 100644 src/components/providers.tsx create mode 100644 src/components/shell.tsx create mode 100644 src/components/tailwind-indicator.tsx create mode 100644 src/components/ui/button.tsx create mode 100644 src/components/ui/card.tsx create mode 100644 src/components/ui/dialog.tsx create mode 100644 src/components/ui/dropdown-menu.tsx create mode 100644 src/components/ui/form.tsx create mode 100644 src/components/ui/input.tsx create mode 100644 src/components/ui/label.tsx create mode 100644 src/components/ui/progress.tsx create mode 100644 src/components/ui/scroll-area.tsx create mode 100644 src/components/ui/sonner.tsx create mode 100644 src/components/ui/tabs.tsx create mode 100644 src/components/ui/tooltip.tsx create mode 100644 src/config/site.ts create mode 100644 src/env.js create mode 100644 src/hooks/use-callback-ref.ts create mode 100644 src/hooks/use-controllable-state.ts create mode 100644 src/hooks/use-upload-file.ts create mode 100644 src/hooks/use-upload-thingy.ts create mode 100644 src/lib/actions.ts create mode 100644 src/lib/handle-error.ts create mode 100644 src/lib/rate-limit.ts create mode 100644 src/lib/uploadthing.ts create mode 100644 src/lib/utils.ts create mode 100644 src/styles/globals.css create mode 100644 src/types/index.ts create mode 100644 tailwind.config.ts create mode 100644 tsconfig.json diff --git a/.eslintrc.cjs b/.eslintrc.cjs new file mode 100644 index 0000000..32329f8 --- /dev/null +++ b/.eslintrc.cjs @@ -0,0 +1,51 @@ +/** @type {import("eslint").Linter.Config} */ +const config = { + parser: "@typescript-eslint/parser", + parserOptions: { + project: true, + }, + plugins: ["@typescript-eslint", "tailwindcss"], + extends: [ + "next/core-web-vitals", + "plugin:@typescript-eslint/recommended-type-checked", + "prettier", + "plugin:tailwindcss/recommended", + ], + rules: { + "@typescript-eslint/array-type": "off", + "@typescript-eslint/consistent-type-definitions": "off", + "@typescript-eslint/consistent-type-imports": [ + "warn", + { + prefer: "type-imports", + fixStyle: "inline-type-imports", + }, + ], + "@typescript-eslint/no-unused-vars": [ + "warn", + { + argsIgnorePattern: "^_", + }, + ], + "@typescript-eslint/require-await": "off", + "@typescript-eslint/no-misused-promises": [ + "error", + { + checksVoidReturn: { + attributes: false, + }, + }, + ], + }, + settings: { + tailwindcss: { + callees: ["cn", "cva"], + config: "./tailwind.config.ts", + classRegex: "^(class(Name)?|tw)$", + }, + next: { + rootDir: ["./"], + }, + }, +} +module.exports = config diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 0000000..a2c9e57 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,35 @@ +# This template is heavily inspired by the acme-corp and shadcn-ui/ui repositories. +# See: https://github.com/juliusmarminge/acme-corp/blob/main/.github/ISSUE_TEMPLATE/bug_report.yml +# See: https://github.com/shadcn-ui/ui/blob/main/.github/ISSUE_TEMPLATE/feature_request.yml + +name: Bug report +description: Create a bug report to help us improve +title: "[bug]: " +labels: ["🐞❔ unconfirmed bug"] +body: + - type: textarea + attributes: + label: Describe the bug + description: A clear and concise description of the bug, as well as what you expected to happen when encountering it. + validations: + required: true + - type: textarea + attributes: + label: How to reproduce + description: A step-by-step description of how to reproduce the bug. + placeholder: | + 1. Go to '...' + 2. Click on '....' + 3. See error + validations: + required: true + - type: input + attributes: + label: Link to reproduction + description: A link to a CodeSandbox or StackBlitz that includes a minimal reproduction of the problem. In rare cases when not applicable, you can link to a GitHub repository that we can easily run to recreate the issue. If a report is vague and does not have a reproduction, it will be closed without warning. + validations: + required: true + - type: textarea + attributes: + label: Additional information + description: Add any other information related to the bug here, screenshots if applicable. diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..c5f829c --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,8 @@ +# This template is heavily inspired by the shadcn-ui/ui repository. +# See: https://github.com/shadcn-ui/ui/blob/main/.github/ISSUE_TEMPLATE/config.yml + +blank_issues_enabled: false +contact_links: + - name: General questions + url: https://github.com/sadmann7/file-uploader/discussions?category=general + about: Please ask and answer questions here diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 0000000..55572ba --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,43 @@ +# This template is heavily inspired by the shadcn-ui/ui repository. +# See: https://github.com/shadcn-ui/ui/blob/main/.github/ISSUE_TEMPLATE/feature_request.yml + +name: "Feature request" +description: Create a feature request for file-uploader +title: "[feat]: " +labels: ["✨ enhancement"] +body: + - type: markdown + attributes: + value: | + ### Thanks for suggesting a feature request! Make sure to see if your feature request has already been suggested by searching through the existing issues. If you find a similar request, give it a thumbs up and add any additional context you have in the comments. + + - type: textarea + id: feature-description + attributes: + label: Feature description + description: Tell us about your feature request. + placeholder: "I think this feature would be great because..." + value: "Describe your feature request..." + validations: + required: true + + - type: textarea + id: context + attributes: + label: Additional Context + description: Add any other context about the feature here. + placeholder: ex. screenshots, Stack Overflow links, forum links, etc. + value: "Additional details here..." + validations: + required: false + + - type: checkboxes + id: terms + attributes: + label: Before submitting + description: Please ensure the following steps have been taken before submitting your feature request. + options: + - label: I've made research efforts and searched the documentation + required: true + - label: I've searched for existing issues and PRs + required: true diff --git a/.github/workflows/code-check.yml b/.github/workflows/code-check.yml new file mode 100644 index 0000000..38a6d7c --- /dev/null +++ b/.github/workflows/code-check.yml @@ -0,0 +1,124 @@ +name: Code check + +on: + pull_request: + branches: ["*"] + push: + branches: ["main"] + +jobs: + lint: + runs-on: ubuntu-latest + name: Lint + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Install Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + + - uses: pnpm/action-setup@v3.0.0 + name: Install pnpm + id: pnpm-install + with: + version: 8.6.1 + run_install: false + + - name: Get pnpm store directory + id: pnpm-cache + run: | + echo "pnpm_cache_dir=$(pnpm store path)" >> $GITHUB_OUTPUT + - uses: actions/cache@v4 + name: Setup pnpm cache + with: + path: ${{ steps.pnpm-cache.outputs.pnpm_cache_dir }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-pnpm-store- + - name: Install dependencies + run: pnpm install + + - run: cp .env.example .env.local + + - run: pnpm lint + + format: + runs-on: ubuntu-latest + name: Format + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Install Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + + - uses: pnpm/action-setup@v3.0.0 + name: Install pnpm + id: pnpm-install + with: + version: 8.6.1 + run_install: false + + - name: Get pnpm store directory + id: pnpm-cache + run: | + echo "pnpm_cache_dir=$(pnpm store path)" >> $GITHUB_OUTPUT + + - uses: actions/cache@v4 + name: Setup pnpm cache + with: + path: ${{ steps.pnpm-cache.outputs.pnpm_cache_dir }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-pnpm-store- + + - name: Install dependencies + run: pnpm install + + - run: cp .env.example .env.local + + - run: pnpm format:check + + tsc: + runs-on: ubuntu-latest + name: Typecheck + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Install Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + + - uses: pnpm/action-setup@v3.0.0 + name: Install pnpm + id: pnpm-install + with: + version: 8.6.1 + run_install: false + + - name: Get pnpm store directory + id: pnpm-cache + run: | + echo "pnpm_cache_dir=$(pnpm store path)" >> $GITHUB_OUTPUT + - uses: actions/cache@v4 + name: Setup pnpm cache + with: + path: ${{ steps.pnpm-cache.outputs.pnpm_cache_dir }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-pnpm-store- + - name: Install dependencies + run: pnpm install + + - run: cp .env.example .env.local + + - run: pnpm typecheck diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2971a0b --- /dev/null +++ b/.gitignore @@ -0,0 +1,42 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# database +/prisma/db.sqlite +/prisma/db.sqlite-journal + +# next.js +/.next/ +/out/ +next-env.d.ts + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# local env files +# do not commit any .env files to git, except for the .env.example file. https://create.t3.gg/en/usage/env-variables#using-environment-variables +.env +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo diff --git a/README.md b/README.md new file mode 100644 index 0000000..4fc69e9 --- /dev/null +++ b/README.md @@ -0,0 +1,49 @@ +## File Uploader + +This is a file uploader built with `shadnc/ui`, and `react-dropzone`. It is bootstrapped with `create-t3-app`. + +## Tech Stack + +- **Framework:** [Next.js](https://nextjs.org) +- **Styling:** [Tailwind CSS](https://tailwindcss.com) +- **UI Components:** [shadcn/ui](https://ui.shadcn.com) +- **DND Uploader:** [react-dropzone](https://react-dropzone.js.org/) +- **Storage:** [uploadthing](https://uploadthing.com) +- **Validation:** [Zod](https://zod.dev) + +## Features + +- [x] Reusable `useFileUpload` hook for uploading files with `uploadthing` +- [x] Drag and drop file upload component with progress bar +- [x] React-hook-form integration with `shadnc/ui` form components +- [x] File dialog demo with adding and removing files from the scrollable list + +## Running Locally + +1. Clone the repository + + ```bash + git clone https://github.com/hritik-6918/file-uploader + ``` + +2. Install dependencies using pnpm + + ```bash + pnpm install + ``` + +3. Copy the `.env.example` to `.env` and update the variables. + + ```bash + cp .env.example .env + ``` + +4. Start the development server + + ```bash + pnpm run dev + ``` + +## How do I deploy this? + +Follow the deployment guides for [Vercel](https://create.t3.gg/en/deployment/vercel), [Netlify](https://create.t3.gg/en/deployment/netlify) and [Docker](https://create.t3.gg/en/deployment/docker) for more information. diff --git a/components.json b/components.json new file mode 100644 index 0000000..0891fe5 --- /dev/null +++ b/components.json @@ -0,0 +1,17 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "new-york", + "rsc": true, + "tsx": true, + "tailwind": { + "config": "tailwind.config.ts", + "css": "src/styles/globals.css", + "baseColor": "zinc", + "cssVariables": true, + "prefix": "" + }, + "aliases": { + "components": "@/components", + "utils": "@/lib/utils" + } +} \ No newline at end of file diff --git a/next.config.js b/next.config.js new file mode 100644 index 0000000..32d603e --- /dev/null +++ b/next.config.js @@ -0,0 +1,22 @@ +/** + * Run `build` or `dev` with `SKIP_ENV_VALIDATION` to skip env validation. This is especially useful + * for Docker builds. + */ + +/** @type {import("next").NextConfig} */ +const config = { + images: { + remotePatterns: [ + { + protocol: "https", + hostname: "utfs.io", + }, + ], + unoptimized: true, + }, + experimental: { + ppr: true, + }, +} + +export default config diff --git a/package.json b/package.json new file mode 100644 index 0000000..ad7a9fc --- /dev/null +++ b/package.json @@ -0,0 +1,73 @@ +{ + "name": "file-uploader", + "version": "0.1.0", + "private": true, + "type": "module", + "scripts": { + "clean": "rimraf --glob **/node_modules **/dist **/.next pnpm-lock.yaml **/.tsbuildinfo", + "build": "next build", + "dev": "next dev", + "start": "next start", + "lint": "next lint", + "lint:fix": "next lint --fix", + "typecheck": "tsc --noEmit", + "format:write": "prettier --write \"**/*.{ts,tsx,mdx}\" --cache", + "format:check": "prettier --check \"**/*.{ts,tsx,mdx}\" --cache", + "check": "pnpm lint && pnpm typecheck && pnpm format:check", + "shadcn:add": "pnpm dlx shadcn-ui@latest add" + }, + "dependencies": { + "@hookform/resolvers": "^3.3.4", + "@radix-ui/react-dialog": "^1.0.5", + "@radix-ui/react-dropdown-menu": "^2.0.6", + "@radix-ui/react-icons": "^1.3.0", + "@radix-ui/react-label": "^2.0.2", + "@radix-ui/react-progress": "^1.0.3", + "@radix-ui/react-scroll-area": "^1.0.5", + "@radix-ui/react-slot": "^1.0.2", + "@radix-ui/react-tabs": "^1.0.4", + "@radix-ui/react-tooltip": "^1.0.7", + "@t3-oss/env-nextjs": "^0.11.0", + "@uploadthing/react": "^6.4.1", + "@upstash/ratelimit": "^2.0.0", + "@upstash/redis": "^1.30.1", + "class-variance-authority": "^0.7.0", + "clsx": "^2.1.0", + "geist": "^1.3.0", + "next": "14.2.0-canary.65", + "next-themes": "^0.3.0", + "react": "18.3.1", + "react-dom": "18.3.1", + "react-dropzone": "^14.2.3", + "react-hook-form": "^7.51.2", + "sonner": "^1.4.41", + "tailwind-merge": "^2.2.2", + "tailwindcss-animate": "^1.0.7", + "uploadthing": "^6.7.0", + "zod": "^3.22.4" + }, + "devDependencies": { + "@ianvs/prettier-plugin-sort-imports": "^4.2.1", + "@total-typescript/ts-reset": "^0.5.1", + "@types/eslint": "^8.56.7", + "@types/node": "^20.12.5", + "@types/react": "^18.2.74", + "@types/react-dom": "^18.2.24", + "@typescript-eslint/eslint-plugin": "^7.5.0", + "@typescript-eslint/parser": "^7.5.0", + "eslint": "^8.57.0", + "eslint-config-next": "^14.1.4", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-tailwindcss": "^3.15.1", + "postcss": "^8.4.38", + "prettier": "^3.2.5", + "prettier-plugin-tailwindcss": "^0.5.13", + "rimraf": "^6.0.0", + "tailwindcss": "^3.4.3", + "typescript": "^5.4.4" + }, + "ct3aMetadata": { + "initVersion": "7.30.0" + }, + "packageManager": "pnpm@8.15.9" +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..cb02af5 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,4559 @@ +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +dependencies: + '@hookform/resolvers': + specifier: ^3.3.4 + version: 3.9.0(react-hook-form@7.52.2) + '@radix-ui/react-dialog': + specifier: ^1.0.5 + version: 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-dropdown-menu': + specifier: ^2.0.6 + version: 2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-icons': + specifier: ^1.3.0 + version: 1.3.0(react@18.3.1) + '@radix-ui/react-label': + specifier: ^2.0.2 + version: 2.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-progress': + specifier: ^1.0.3 + version: 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-scroll-area': + specifier: ^1.0.5 + version: 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-slot': + specifier: ^1.0.2 + version: 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-tabs': + specifier: ^1.0.4 + version: 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-tooltip': + specifier: ^1.0.7 + version: 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@t3-oss/env-nextjs': + specifier: ^0.11.0 + version: 0.11.0(typescript@5.5.4)(zod@3.23.8) + '@uploadthing/react': + specifier: ^6.4.1 + version: 6.7.2(next@14.2.0-canary.65)(react@18.3.1)(uploadthing@6.13.2) + '@upstash/ratelimit': + specifier: ^2.0.0 + version: 2.0.1 + '@upstash/redis': + specifier: ^1.30.1 + version: 1.34.0 + class-variance-authority: + specifier: ^0.7.0 + version: 0.7.0 + clsx: + specifier: ^2.1.0 + version: 2.1.1 + geist: + specifier: ^1.3.0 + version: 1.3.1(next@14.2.0-canary.65) + next: + specifier: 14.2.0-canary.65 + version: 14.2.0-canary.65(@babel/core@7.24.8)(react-dom@18.3.1)(react@18.3.1) + next-themes: + specifier: ^0.3.0 + version: 0.3.0(react-dom@18.3.1)(react@18.3.1) + react: + specifier: 18.3.1 + version: 18.3.1 + react-dom: + specifier: 18.3.1 + version: 18.3.1(react@18.3.1) + react-dropzone: + specifier: ^14.2.3 + version: 14.2.3(react@18.3.1) + react-hook-form: + specifier: ^7.51.2 + version: 7.52.2(react@18.3.1) + sonner: + specifier: ^1.4.41 + version: 1.5.0(react-dom@18.3.1)(react@18.3.1) + tailwind-merge: + specifier: ^2.2.2 + version: 2.4.0 + tailwindcss-animate: + specifier: ^1.0.7 + version: 1.0.7(tailwindcss@3.4.7) + uploadthing: + specifier: ^6.7.0 + version: 6.13.2(next@14.2.0-canary.65)(tailwindcss@3.4.7) + zod: + specifier: ^3.22.4 + version: 3.23.8 + +devDependencies: + '@ianvs/prettier-plugin-sort-imports': + specifier: ^4.2.1 + version: 4.3.1(prettier@3.3.2) + '@total-typescript/ts-reset': + specifier: ^0.5.1 + version: 0.5.1 + '@types/eslint': + specifier: ^8.56.7 + version: 8.56.11 + '@types/node': + specifier: ^20.12.5 + version: 20.14.14 + '@types/react': + specifier: ^18.2.74 + version: 18.3.3 + '@types/react-dom': + specifier: ^18.2.24 + version: 18.3.0 + '@typescript-eslint/eslint-plugin': + specifier: ^7.5.0 + version: 7.18.0(@typescript-eslint/parser@7.18.0)(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/parser': + specifier: ^7.5.0 + version: 7.18.0(eslint@8.57.0)(typescript@5.5.4) + eslint: + specifier: ^8.57.0 + version: 8.57.0 + eslint-config-next: + specifier: ^14.1.4 + version: 14.2.5(eslint@8.57.0)(typescript@5.5.4) + eslint-config-prettier: + specifier: ^9.1.0 + version: 9.1.0(eslint@8.57.0) + eslint-plugin-tailwindcss: + specifier: ^3.15.1 + version: 3.17.4(tailwindcss@3.4.7) + postcss: + specifier: ^8.4.38 + version: 8.4.41 + prettier: + specifier: ^3.2.5 + version: 3.3.2 + prettier-plugin-tailwindcss: + specifier: ^0.5.13 + version: 0.5.14(@ianvs/prettier-plugin-sort-imports@4.3.1)(prettier@3.3.2) + rimraf: + specifier: ^6.0.0 + version: 6.0.1 + tailwindcss: + specifier: ^3.4.3 + version: 3.4.7 + typescript: + specifier: ^5.4.4 + version: 5.5.4 + +packages: + + /@aashutoshrathi/word-wrap@1.2.6: + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} + dev: true + + /@alloc/quick-lru@5.2.0: + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + + /@ampproject/remapping@2.3.0: + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + + /@babel/code-frame@7.24.7: + resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.24.7 + picocolors: 1.0.1 + + /@babel/compat-data@7.24.8: + resolution: {integrity: sha512-c4IM7OTg6k1Q+AJ153e2mc2QVTezTwnb4VzquwcyiEzGnW0Kedv4do/TrkU98qPeC5LNiMt/QXwIjzYXLBpyZg==} + engines: {node: '>=6.9.0'} + + /@babel/core@7.24.8: + resolution: {integrity: sha512-6AWcmZC/MZCO0yKys4uhg5NlxL0ESF3K6IAaoQ+xSXvPyPyxNWRafP+GDbI88Oh68O7QkJgmEtedWPM9U0pZNg==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.24.8 + '@babel/helper-compilation-targets': 7.24.8 + '@babel/helper-module-transforms': 7.24.8(@babel/core@7.24.8) + '@babel/helpers': 7.24.8 + '@babel/parser': 7.24.8 + '@babel/template': 7.24.7 + '@babel/traverse': 7.24.8 + '@babel/types': 7.24.8 + convert-source-map: 2.0.0 + debug: 4.3.6 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + /@babel/generator@7.24.8: + resolution: {integrity: sha512-47DG+6F5SzOi0uEvK4wMShmn5yY0mVjVJoWTphdY2B4Rx9wHgjK7Yhtr0ru6nE+sn0v38mzrWOlah0p/YlHHOQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.8 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 2.5.2 + + /@babel/helper-compilation-targets@7.24.8: + resolution: {integrity: sha512-oU+UoqCHdp+nWVDkpldqIQL/i/bvAv53tRqLG/s+cOXxe66zOYLU7ar/Xs3LdmBihrUMEUhwu6dMZwbNOYDwvw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/compat-data': 7.24.8 + '@babel/helper-validator-option': 7.24.8 + browserslist: 4.23.2 + lru-cache: 5.1.1 + semver: 6.3.1 + + /@babel/helper-environment-visitor@7.24.7: + resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.8 + + /@babel/helper-function-name@7.24.7: + resolution: {integrity: sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.24.7 + '@babel/types': 7.24.8 + + /@babel/helper-hoist-variables@7.24.7: + resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.8 + + /@babel/helper-module-imports@7.24.7: + resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/traverse': 7.24.8 + '@babel/types': 7.24.8 + transitivePeerDependencies: + - supports-color + + /@babel/helper-module-transforms@7.24.8(@babel/core@7.24.8): + resolution: {integrity: sha512-m4vWKVqvkVAWLXfHCCfff2luJj86U+J0/x+0N3ArG/tP0Fq7zky2dYwMbtPmkc/oulkkbjdL3uWzuoBwQ8R00Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.24.8 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-module-imports': 7.24.7 + '@babel/helper-simple-access': 7.24.7 + '@babel/helper-split-export-declaration': 7.24.7 + '@babel/helper-validator-identifier': 7.24.7 + transitivePeerDependencies: + - supports-color + + /@babel/helper-simple-access@7.24.7: + resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/traverse': 7.24.8 + '@babel/types': 7.24.8 + transitivePeerDependencies: + - supports-color + + /@babel/helper-split-export-declaration@7.24.7: + resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.8 + + /@babel/helper-string-parser@7.24.8: + resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} + engines: {node: '>=6.9.0'} + + /@babel/helper-validator-identifier@7.24.7: + resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} + engines: {node: '>=6.9.0'} + + /@babel/helper-validator-option@7.24.8: + resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} + engines: {node: '>=6.9.0'} + + /@babel/helpers@7.24.8: + resolution: {integrity: sha512-gV2265Nkcz7weJJfvDoAEVzC1e2OTDpkGbEsebse8koXUJUXPsCMi7sRo/+SPMuMZ9MtUPnGwITTnQnU5YjyaQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.24.7 + '@babel/types': 7.24.8 + + /@babel/highlight@7.24.7: + resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.24.7 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.0.1 + + /@babel/parser@7.24.8: + resolution: {integrity: sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.24.8 + + /@babel/template@7.24.7: + resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/parser': 7.24.8 + '@babel/types': 7.24.8 + + /@babel/traverse@7.24.8: + resolution: {integrity: sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.24.8 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-function-name': 7.24.7 + '@babel/helper-hoist-variables': 7.24.7 + '@babel/helper-split-export-declaration': 7.24.7 + '@babel/parser': 7.24.8 + '@babel/types': 7.24.8 + debug: 4.3.6 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + /@babel/types@7.24.8: + resolution: {integrity: sha512-SkSBEHwwJRU52QEVZBmMBnE5Ux2/6WU1grdYyOhpbCNxbmJrDuDCphBzKZSO3taf0zztp+qkWlymE5tVL5l0TA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.24.8 + '@babel/helper-validator-identifier': 7.24.7 + to-fast-properties: 2.0.0 + + /@effect/schema@0.68.12(effect@3.4.5): + resolution: {integrity: sha512-UWJsFXzeYTBQYnftwI1KR2uaxIZ8fk+kffDS7BnJwnGjPPgODq3/AzeoBDSu1MAlnwBKOz+QRdMuSMxrT/pHig==} + peerDependencies: + effect: ^3.4.5 + dependencies: + effect: 3.4.5 + fast-check: 3.19.0 + dev: false + + /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.57.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@eslint-community/regexpp@4.10.0: + resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dev: true + + /@eslint-community/regexpp@4.11.0: + resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dev: true + + /@eslint/eslintrc@2.1.4: + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@eslint/js@8.57.0: + resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@floating-ui/core@1.6.3: + resolution: {integrity: sha512-1ZpCvYf788/ZXOhRQGFxnYQOVgeU+pi0i+d0Ow34La7qjIXETi6RNswGVKkA6KcDO8/+Ysu2E/CeUmmeEBDvTg==} + dependencies: + '@floating-ui/utils': 0.2.3 + dev: false + + /@floating-ui/dom@1.6.6: + resolution: {integrity: sha512-qiTYajAnh3P+38kECeffMSQgbvXty2VB6rS+42iWR4FPIlZjLK84E9qtLnMTLIpPz2znD/TaFqaiavMUrS+Hcw==} + dependencies: + '@floating-ui/core': 1.6.3 + '@floating-ui/utils': 0.2.3 + dev: false + + /@floating-ui/react-dom@2.1.1(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + dependencies: + '@floating-ui/dom': 1.6.6 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + dev: false + + /@floating-ui/utils@0.2.3: + resolution: {integrity: sha512-XGndio0l5/Gvd6CLIABvsav9HHezgDFFhDfHk1bvLfr9ni8dojqLSvBbotJEjmIwNHL7vK4QzBJTdBRoB+c1ww==} + dev: false + + /@hookform/resolvers@3.9.0(react-hook-form@7.52.2): + resolution: {integrity: sha512-bU0Gr4EepJ/EQsH/IwEzYLsT/PEj5C0ynLQ4m+GSHS+xKH4TfSelhluTgOaoc4kA5s7eCsQbM4wvZLzELmWzUg==} + peerDependencies: + react-hook-form: ^7.0.0 + dependencies: + react-hook-form: 7.52.2(react@18.3.1) + dev: false + + /@humanwhocodes/config-array@0.11.14: + resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 2.0.3 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@humanwhocodes/module-importer@1.0.1: + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + dev: true + + /@humanwhocodes/object-schema@2.0.3: + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + dev: true + + /@ianvs/prettier-plugin-sort-imports@4.3.1(prettier@3.3.2): + resolution: {integrity: sha512-ZHwbyjkANZOjaBm3ZosADD2OUYGFzQGxfy67HmGZU94mHqe7g1LCMA7YYKB1Cq+UTPCBqlAYapY0KXAjKEw8Sg==} + peerDependencies: + '@vue/compiler-sfc': 2.7.x || 3.x + prettier: 2 || 3 + peerDependenciesMeta: + '@vue/compiler-sfc': + optional: true + dependencies: + '@babel/core': 7.24.8 + '@babel/generator': 7.24.8 + '@babel/parser': 7.24.8 + '@babel/traverse': 7.24.8 + '@babel/types': 7.24.8 + prettier: 3.3.2 + semver: 7.6.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@isaacs/cliui@8.0.2: + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + dependencies: + string-width: 5.1.2 + string-width-cjs: /string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: /strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: /wrap-ansi@7.0.0 + + /@jridgewell/gen-mapping@0.3.5: + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + /@jridgewell/resolve-uri@3.1.2: + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + /@jridgewell/set-array@1.2.1: + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + /@jridgewell/sourcemap-codec@1.5.0: + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + /@jridgewell/trace-mapping@0.3.25: + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + /@next/env@14.2.0-canary.65: + resolution: {integrity: sha512-rV3RAowh7nxYHG1LvhUk9VBIGpdu9nJ55GSX/cZOP2+qR/4U0qhGLFaGtIv3iFigiZED7YuIAdCS9+5UKWSf0w==} + dev: false + + /@next/eslint-plugin-next@14.2.5: + resolution: {integrity: sha512-LY3btOpPh+OTIpviNojDpUdIbHW9j0JBYBjsIp8IxtDFfYFyORvw3yNq6N231FVqQA7n7lwaf7xHbVJlA1ED7g==} + dependencies: + glob: 10.3.10 + dev: true + + /@next/swc-darwin-arm64@14.2.0-canary.65: + resolution: {integrity: sha512-AXB/+LyWjYDIZW6ejxDbsBZo6bfC/gA7257lcqtcZgGFwW0v65FwcQzpYid0sxWi2wfAOFBGvfqSODVAblyMRg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@next/swc-darwin-x64@14.2.0-canary.65: + resolution: {integrity: sha512-OabDpl+uwe0mQYDNw5vbsu1ZyDEnK6w3yo09SS1Kyo8d8yDeWFKAZEZ4AZY2aumcWCXSPPZ2iDAo/l0zIKFIkQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-arm64-gnu@14.2.0-canary.65: + resolution: {integrity: sha512-1dZvO6vlLobtfdtd3xlh7Jt4/dzU+FjdBpSIlTZl4z0R4RIO/UTOowSuRGP7Eruxu8GbJwlLn7yOhBIRFKaxlQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-arm64-musl@14.2.0-canary.65: + resolution: {integrity: sha512-l8lgH66NBglvJ6ONDtfoYWZDwm6VpGTBwiJuWHmFUEIEPl5AarCwR3KGgl7cALBCj5sasXfcYPKb0CTrwShVMw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-x64-gnu@14.2.0-canary.65: + resolution: {integrity: sha512-V1g3XD6ecxHUtUG38xnS1Iyv9MMapD/ixWa+ujpH+vJT7mduLVSZX+yzzxJ4gP4CaIXlfzS35HCzfA8S/VFeTA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-x64-musl@14.2.0-canary.65: + resolution: {integrity: sha512-8QEny7bJ0PqBKlkdnM5VEJoL81iiC7vJd4z43iPoUAPJ+kWuaWxKtnPKC3QEPP1TyNmr5xc2EQ/AeJePJDeJFg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-win32-arm64-msvc@14.2.0-canary.65: + resolution: {integrity: sha512-TlZNesjSfKr8VAWbX/QhzuuvKSBm2wRKutSeGX4/yAb1svGuIVmvKHlLg+f1MXcrJ/c1ioWZBuJ97aVL2vYKFQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@next/swc-win32-ia32-msvc@14.2.0-canary.65: + resolution: {integrity: sha512-wIhPgGpobT0t68bVZhscwqgx+fmzlJmeLbQ1f0lK4O3oVnaa/MkPv/K6Jq/hEMzgivztupKqAS9bC09IEqSYkA==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@next/swc-win32-x64-msvc@14.2.0-canary.65: + resolution: {integrity: sha512-eZwJHdSMrfvkWHD1VFP0lMWWHQ971E+V2HHr8zW3nyV3XRmmA3zChB+w4sA+aFH+ypaknPI6IdEkNtjQ7ezFtQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@nodelib/fs.scandir@2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + /@nodelib/fs.stat@2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + /@nodelib/fs.walk@1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + + /@pkgjs/parseargs@0.11.0: + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + requiresBuild: true + optional: true + + /@radix-ui/number@1.1.0: + resolution: {integrity: sha512-V3gRzhVNU1ldS5XhAPTom1fOIo4ccrjjJgmE+LI2h/WaFpHmx0MQApT+KZHnx8abG6Avtfcz4WoEciMnpFT3HQ==} + dev: false + + /@radix-ui/primitive@1.1.0: + resolution: {integrity: sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==} + dev: false + + /@radix-ui/react-arrow@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-FmlW1rCg7hBpEBwFbjHwCW6AmWLQM6g/v0Sn8XbP9NvmSZ2San1FpQeyPtufzOMSIx7Y4dzjlHoifhp+7NkZhw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + dev: false + + /@radix-ui/react-collection@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + dev: false + + /@radix-ui/react-compose-refs@1.1.0(@types/react@18.3.3)(react@18.3.1): + resolution: {integrity: sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.3.3 + react: 18.3.1 + dev: false + + /@radix-ui/react-context@1.1.0(@types/react@18.3.3)(react@18.3.1): + resolution: {integrity: sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.3.3 + react: 18.3.1 + dev: false + + /@radix-ui/react-dialog@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-zysS+iU4YP3STKNS6USvFVqI4qqx8EpiwmT5TuCApVEBca+eRCbONi4EgzfNSuVnOXvC5UPHHMjs8RXO6DH9Bg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-focus-guards': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-portal': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 + aria-hidden: 1.2.4 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-remove-scroll: 2.5.7(@types/react@18.3.3)(react@18.3.1) + dev: false + + /@radix-ui/react-direction@1.1.0(@types/react@18.3.3)(react@18.3.1): + resolution: {integrity: sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.3.3 + react: 18.3.1 + dev: false + + /@radix-ui/react-dismissable-layer@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-/UovfmmXGptwGcBQawLzvn2jOfM0t4z3/uKffoBlj724+n3FvBbZ7M0aaBOmkp6pqFYpO4yx8tSVJjx3Fl2jig==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + dev: false + + /@radix-ui/react-dropdown-menu@2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-y8E+x9fBq9qvteD2Zwa4397pUVhYsh9iq44b5RD5qu1GMJWBCBuVg1hMyItbc6+zH00TxGRqd9Iot4wzf3OoBQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-menu': 2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + dev: false + + /@radix-ui/react-focus-guards@1.1.0(@types/react@18.3.3)(react@18.3.1): + resolution: {integrity: sha512-w6XZNUPVv6xCpZUqb/yN9DL6auvpGX3C/ee6Hdi16v2UUy25HV2Q5bcflsiDyT/g5RwbPQ/GIT1vLkeRb+ITBw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.3.3 + react: 18.3.1 + dev: false + + /@radix-ui/react-focus-scope@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + dev: false + + /@radix-ui/react-icons@1.3.0(react@18.3.1): + resolution: {integrity: sha512-jQxj/0LKgp+j9BiTXz3O3sgs26RNet2iLWmsPyRz2SIcR4q/4SbazXfnYwbAr+vLYKSfc7qxzyGQA1HLlYiuNw==} + peerDependencies: + react: ^16.x || ^17.x || ^18.x + dependencies: + react: 18.3.1 + dev: false + + /@radix-ui/react-id@1.1.0(@types/react@18.3.3)(react@18.3.1): + resolution: {integrity: sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@types/react': 18.3.3 + react: 18.3.1 + dev: false + + /@radix-ui/react-label@2.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-peLblDlFw/ngk3UWq0VnYaOLy6agTZZ+MUO/WhVfm14vJGML+xH4FAl2XQGLqdefjNb7ApRg6Yn7U42ZhmYXdw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + dev: false + + /@radix-ui/react-menu@2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-oa3mXRRVjHi6DZu/ghuzdylyjaMXLymx83irM7hTxutQbD+7IhPKdMdRHD26Rm+kHRrWcrUkkRPv5pd47a2xFQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-focus-guards': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-portal': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-roving-focus': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 + aria-hidden: 1.2.4 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-remove-scroll: 2.5.7(@types/react@18.3.3)(react@18.3.1) + dev: false + + /@radix-ui/react-popper@1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@floating-ui/react-dom': 2.1.1(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-arrow': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-rect': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-size': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/rect': 1.1.0 + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + dev: false + + /@radix-ui/react-portal@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-A3UtLk85UtqhzFqtoC8Q0KvR2GbXF3mtPgACSazajqq6A41mEQgo53iPzY4i6BwDxlIFqWIhiQ2G729n+2aw/g==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + dev: false + + /@radix-ui/react-presence@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-Gq6wuRN/asf9H/E/VzdKoUtT8GC9PQc9z40/vEr0VCJ4u5XvvhWIrSsCB6vD2/cH7ugTdSfYq9fLJCcM00acrQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + dev: false + + /@radix-ui/react-primitive@2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + dev: false + + /@radix-ui/react-progress@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-aSzvnYpP725CROcxAOEBVZZSIQVQdHgBr2QQFKySsaD14u8dNT0batuXI+AAGDdAHfXH8rbnHmjYFqVJ21KkRg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/react-context': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + dev: false + + /@radix-ui/react-roving-focus@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-EA6AMGeq9AEeQDeSH0aZgG198qkfHSbvWTf1HvoDmOB5bBG/qTxjYMWUKMnYiV6J/iP/J8MEFSuB2zRU2n7ODA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + dev: false + + /@radix-ui/react-scroll-area@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-9ArIZ9HWhsrfqS765h+GZuLoxaRHD/j0ZWOWilsCvYTpYJp8XwCqNG7Dt9Nu/TItKOdgLGkOPCodQvDc+UMwYg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/number': 1.1.0 + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + dev: false + + /@radix-ui/react-slot@1.1.0(@types/react@18.3.3)(react@18.3.1): + resolution: {integrity: sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@types/react': 18.3.3 + react: 18.3.1 + dev: false + + /@radix-ui/react-tabs@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-bZgOKB/LtZIij75FSuPzyEti/XBhJH52ExgtdVqjCIh+Nx/FW+LhnbXtbCzIi34ccyMsyOja8T0thCzoHFXNKA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-context': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-roving-focus': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + dev: false + + /@radix-ui/react-tooltip@1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-9XRsLwe6Yb9B/tlnYCPVUd/TFS4J7HuOZW345DCeC6vKIxQGMZdx21RK4VoZauPD5frgkXTYVS5y90L+3YBn4w==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-portal': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-visually-hidden': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + dev: false + + /@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.3.3)(react@18.3.1): + resolution: {integrity: sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.3.3 + react: 18.3.1 + dev: false + + /@radix-ui/react-use-controllable-state@1.1.0(@types/react@18.3.3)(react@18.3.1): + resolution: {integrity: sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@types/react': 18.3.3 + react: 18.3.1 + dev: false + + /@radix-ui/react-use-escape-keydown@1.1.0(@types/react@18.3.3)(react@18.3.1): + resolution: {integrity: sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@types/react': 18.3.3 + react: 18.3.1 + dev: false + + /@radix-ui/react-use-layout-effect@1.1.0(@types/react@18.3.3)(react@18.3.1): + resolution: {integrity: sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.3.3 + react: 18.3.1 + dev: false + + /@radix-ui/react-use-rect@1.1.0(@types/react@18.3.3)(react@18.3.1): + resolution: {integrity: sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@radix-ui/rect': 1.1.0 + '@types/react': 18.3.3 + react: 18.3.1 + dev: false + + /@radix-ui/react-use-size@1.1.0(@types/react@18.3.3)(react@18.3.1): + resolution: {integrity: sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.3)(react@18.3.1) + '@types/react': 18.3.3 + react: 18.3.1 + dev: false + + /@radix-ui/react-visually-hidden@1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-N8MDZqtgCgG5S3aV60INAB475osJousYpZ4cTJ2cFbMpdHS5Y6loLTH8LPtkj2QN0x93J30HT/M3qJXM0+lyeQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) + '@types/react': 18.3.3 + '@types/react-dom': 18.3.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + dev: false + + /@radix-ui/rect@1.1.0: + resolution: {integrity: sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==} + dev: false + + /@rushstack/eslint-patch@1.10.3: + resolution: {integrity: sha512-qC/xYId4NMebE6w/V33Fh9gWxLgURiNYgVNObbJl2LZv0GUUItCcCqC5axQSwRaAgaxl2mELq1rMzlswaQ0Zxg==} + dev: true + + /@swc/counter@0.1.3: + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + dev: false + + /@swc/helpers@0.5.5: + resolution: {integrity: sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==} + dependencies: + '@swc/counter': 0.1.3 + tslib: 2.6.2 + dev: false + + /@t3-oss/env-core@0.11.0(typescript@5.5.4)(zod@3.23.8): + resolution: {integrity: sha512-PSalC5bG0a7XbyoLydiQdAnx3gICX6IQNctvh+TyLrdFxsxgocdj9Ui7sd061UlBzi+z4aIGjnem1kZx9QtUgQ==} + peerDependencies: + typescript: '>=5.0.0' + zod: ^3.0.0 + peerDependenciesMeta: + typescript: + optional: true + dependencies: + typescript: 5.5.4 + zod: 3.23.8 + dev: false + + /@t3-oss/env-nextjs@0.11.0(typescript@5.5.4)(zod@3.23.8): + resolution: {integrity: sha512-gcRrY2CzSMSrxDf5+fKCUfzbBK125IxOcJHcoMVdjcTmYxEgIZFZ5qPPtngOY3UmTeXSqRZOGuNiosqWTFTkMw==} + peerDependencies: + typescript: '>=5.0.0' + zod: ^3.0.0 + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@t3-oss/env-core': 0.11.0(typescript@5.5.4)(zod@3.23.8) + typescript: 5.5.4 + zod: 3.23.8 + dev: false + + /@total-typescript/ts-reset@0.5.1: + resolution: {integrity: sha512-AqlrT8YA1o7Ff5wPfMOL0pvL+1X+sw60NN6CcOCqs658emD6RfiXhF7Gu9QcfKBH7ELY2nInLhKSCWVoNL70MQ==} + dev: true + + /@types/eslint@8.56.11: + resolution: {integrity: sha512-sVBpJMf7UPo/wGecYOpk2aQya2VUGeHhe38WG7/mN5FufNSubf5VT9Uh9Uyp8/eLJpu1/tuhJ/qTo4mhSB4V4Q==} + dependencies: + '@types/estree': 1.0.5 + '@types/json-schema': 7.0.15 + dev: true + + /@types/estree@1.0.5: + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + dev: true + + /@types/json-schema@7.0.15: + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + dev: true + + /@types/json5@0.0.29: + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + dev: true + + /@types/node@20.14.14: + resolution: {integrity: sha512-d64f00982fS9YoOgJkAMolK7MN8Iq3TDdVjchbYHdEmjth/DHowx82GnoA+tVUAN+7vxfYUgAzi+JXbKNd2SDQ==} + dependencies: + undici-types: 5.26.5 + dev: true + + /@types/prop-types@15.7.12: + resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} + + /@types/react-dom@18.3.0: + resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==} + dependencies: + '@types/react': 18.3.3 + + /@types/react@18.3.3: + resolution: {integrity: sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==} + dependencies: + '@types/prop-types': 15.7.12 + csstype: 3.1.3 + + /@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0)(eslint@8.57.0)(typescript@5.5.4): + resolution: {integrity: sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + '@typescript-eslint/parser': ^7.0.0 + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.11.0 + '@typescript-eslint/parser': 7.18.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/scope-manager': 7.18.0 + '@typescript-eslint/type-utils': 7.18.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/utils': 7.18.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/visitor-keys': 7.18.0 + eslint: 8.57.0 + graphemer: 1.4.0 + ignore: 5.3.1 + natural-compare: 1.4.0 + ts-api-utils: 1.3.0(typescript@5.5.4) + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4): + resolution: {integrity: sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 7.18.0 + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4) + '@typescript-eslint/visitor-keys': 7.18.0 + debug: 4.3.6 + eslint: 8.57.0 + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.4): + resolution: {integrity: sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 7.2.0 + '@typescript-eslint/types': 7.2.0 + '@typescript-eslint/typescript-estree': 7.2.0(typescript@5.5.4) + '@typescript-eslint/visitor-keys': 7.2.0 + debug: 4.3.6 + eslint: 8.57.0 + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/scope-manager@7.18.0: + resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==} + engines: {node: ^18.18.0 || >=20.0.0} + dependencies: + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/visitor-keys': 7.18.0 + dev: true + + /@typescript-eslint/scope-manager@7.2.0: + resolution: {integrity: sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 7.2.0 + '@typescript-eslint/visitor-keys': 7.2.0 + dev: true + + /@typescript-eslint/type-utils@7.18.0(eslint@8.57.0)(typescript@5.5.4): + resolution: {integrity: sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4) + '@typescript-eslint/utils': 7.18.0(eslint@8.57.0)(typescript@5.5.4) + debug: 4.3.6 + eslint: 8.57.0 + ts-api-utils: 1.3.0(typescript@5.5.4) + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/types@7.18.0: + resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==} + engines: {node: ^18.18.0 || >=20.0.0} + dev: true + + /@typescript-eslint/types@7.2.0: + resolution: {integrity: sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==} + engines: {node: ^16.0.0 || >=18.0.0} + dev: true + + /@typescript-eslint/typescript-estree@7.18.0(typescript@5.5.4): + resolution: {integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/visitor-keys': 7.18.0 + debug: 4.3.6 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.6.3 + ts-api-utils: 1.3.0(typescript@5.5.4) + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/typescript-estree@7.2.0(typescript@5.5.4): + resolution: {integrity: sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 7.2.0 + '@typescript-eslint/visitor-keys': 7.2.0 + debug: 4.3.6 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.3 + semver: 7.6.3 + ts-api-utils: 1.3.0(typescript@5.5.4) + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/utils@7.18.0(eslint@8.57.0)(typescript@5.5.4): + resolution: {integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@typescript-eslint/scope-manager': 7.18.0 + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4) + eslint: 8.57.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/visitor-keys@7.18.0: + resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==} + engines: {node: ^18.18.0 || >=20.0.0} + dependencies: + '@typescript-eslint/types': 7.18.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@typescript-eslint/visitor-keys@7.2.0: + resolution: {integrity: sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 7.2.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@ungap/structured-clone@1.2.0: + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + dev: true + + /@uploadthing/dropzone@0.4.1(react@18.3.1): + resolution: {integrity: sha512-RHSpo/2kg/mrRSYQA4EKlyvkOCYWOeE2+QQYW9YiUvWCuawnTfD7DQvk8RN/nYXi1Sw7/v0NegmQpiVELVGtnA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + solid-js: ^1.7.11 + svelte: ^4.2.12 + vue: ^3.4.0 + peerDependenciesMeta: + react: + optional: true + solid-js: + optional: true + svelte: + optional: true + vue: + optional: true + dependencies: + file-selector: 0.6.0 + react: 18.3.1 + dev: false + + /@uploadthing/mime-types@0.2.10: + resolution: {integrity: sha512-kz3F0oEgAyts25NAGXlUBCWh3mXonbSOQJFGFMawHuIgbUbnzXbe4w5WI+0XdneCbjNmikfWrdWrs8m/7HATfQ==} + dev: false + + /@uploadthing/react@6.7.2(next@14.2.0-canary.65)(react@18.3.1)(uploadthing@6.13.2): + resolution: {integrity: sha512-9Mdslj1S24qbISA/LE3In5OFQ/U7OxdMbBlTPkJxKPkh+UW7BqZS0XuRTfkZYPkdBGDoXw5aH7VG3D/vGgpmxg==} + peerDependencies: + next: '*' + react: ^17.0.2 || ^18.0.0 + uploadthing: 6.13.2 + peerDependenciesMeta: + next: + optional: true + dependencies: + '@uploadthing/dropzone': 0.4.1(react@18.3.1) + '@uploadthing/shared': 6.7.8 + file-selector: 0.6.0 + next: 14.2.0-canary.65(@babel/core@7.24.8)(react-dom@18.3.1)(react@18.3.1) + react: 18.3.1 + tailwind-merge: 2.4.0 + uploadthing: 6.13.2(next@14.2.0-canary.65)(tailwindcss@3.4.7) + transitivePeerDependencies: + - solid-js + - svelte + - vue + dev: false + + /@uploadthing/shared@6.7.8: + resolution: {integrity: sha512-dLNa9GpdeiCHc/Nd0+BfaJ3wXvWIztBAaWIsNNPoaKiU3qhHoQd+5jDVx4oYKYVANqnv9s2CJW7di8Th5xy7Cw==} + dependencies: + '@uploadthing/mime-types': 0.2.10 + effect: 3.4.5 + std-env: 3.7.0 + dev: false + + /@upstash/core-analytics@0.0.10: + resolution: {integrity: sha512-7qJHGxpQgQr9/vmeS1PktEwvNAF7TI4iJDi8Pu2CFZ9YUGHZH4fOP5TfYlZ4aVxfopnELiE4BS4FBjyK7V1/xQ==} + engines: {node: '>=16.0.0'} + dependencies: + '@upstash/redis': 1.34.0 + dev: false + + /@upstash/ratelimit@2.0.1: + resolution: {integrity: sha512-J+0hlkvWUjlVrjcBQhWx7gbaUGsvFF59i+GAx7YQk8L0E0MQ93xzCPu02uaXhGDJGkxiar7nRRPqj3hs+CdAJg==} + dependencies: + '@upstash/core-analytics': 0.0.10 + dev: false + + /@upstash/redis@1.34.0: + resolution: {integrity: sha512-TrXNoJLkysIl8SBc4u9bNnyoFYoILpCcFJcLyWCccb/QSUmaVKdvY0m5diZqc3btExsapcMbaw/s/wh9Sf1pJw==} + dependencies: + crypto-js: 4.2.0 + dev: false + + /acorn-jsx@5.3.2(acorn@8.11.3): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.11.3 + dev: true + + /acorn@8.11.3: + resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + dev: true + + /ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + /ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + + /ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + dependencies: + color-convert: 1.9.3 + + /ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + + /ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + /any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + + /anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + /arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + + /argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: true + + /aria-hidden@1.2.4: + resolution: {integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==} + engines: {node: '>=10'} + dependencies: + tslib: 2.6.3 + dev: false + + /aria-query@5.1.3: + resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==} + dependencies: + deep-equal: 2.2.3 + dev: true + + /array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + is-array-buffer: 3.0.4 + 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==} + engines: {node: '>=8'} + dev: true + + /array.prototype.findlast@1.2.5: + resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} + 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.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.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==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.1 + 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 + is-array-buffer: 3.0.4 + is-shared-array-buffer: 1.0.3 + dev: true + + /ast-types-flow@0.0.8: + resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} + dev: true + + /attr-accept@2.2.2: + resolution: {integrity: sha512-7prDjvt9HmqiZ0cl5CRjtS84sEyhsHP2coDkaZKRKVfCDo9s7iw7ChVmar78Gu9pC4SoR/28wFu/G5JJhTnqEg==} + engines: {node: '>=4'} + dev: false + + /available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + dependencies: + possible-typed-array-names: 1.0.0 + dev: true + + /axe-core@4.9.1: + resolution: {integrity: sha512-QbUdXJVTpvUTHU7871ppZkdOLBeGUKBQWHkHrvN2V9IQWGMt61zf3B45BtzjxEJzYuj0JBjBZP/hmYS/R9pmAw==} + engines: {node: '>=4'} + dev: true + + /axobject-query@3.1.1: + resolution: {integrity: sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==} + dependencies: + deep-equal: 2.2.3 + dev: true + + /balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + /binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + /brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + dev: true + + /brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + dependencies: + balanced-match: 1.0.2 + + /braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.1.1 + + /browserslist@4.23.2: + resolution: {integrity: sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001641 + electron-to-chromium: 1.4.827 + node-releases: 2.0.14 + update-browserslist-db: 1.1.0(browserslist@4.23.2) + + /busboy@1.6.0: + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} + engines: {node: '>=10.16.0'} + dependencies: + streamsearch: 1.1.0 + dev: false + + /call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + dev: true + + /callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + dev: true + + /camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + + /caniuse-lite@1.0.30001611: + resolution: {integrity: sha512-19NuN1/3PjA3QI8Eki55N8my4LzfkMCRLgCVfrl/slbSAchQfV0+GwjPrK3rq37As4UCLlM/DHajbKkAqbv92Q==} + dev: false + + /caniuse-lite@1.0.30001641: + resolution: {integrity: sha512-Phv5thgl67bHYo1TtMY/MurjkHhV4EDaCosezRXgZ8jzA/Ub+wjxAvbGvjoFENStinwi5kCyOYV3mi5tOGykwA==} + + /chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + /chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: true + + /chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + /class-variance-authority@0.7.0: + resolution: {integrity: sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==} + dependencies: + clsx: 2.0.0 + dev: false + + /client-only@0.0.1: + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + dev: false + + /clsx@2.0.0: + resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==} + engines: {node: '>=6'} + dev: false + + /clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + dev: false + + /color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + dependencies: + color-name: 1.1.3 + + /color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + + /color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + /color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + /commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + + /concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + dev: true + + /consola@3.2.3: + resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} + engines: {node: ^14.18.0 || >=16.10.0} + dev: false + + /convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + /cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + /crypto-js@4.2.0: + resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} + dev: false + + /cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + /csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + /damerau-levenshtein@1.0.8: + resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + dev: true + + /data-view-buffer@1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + + /data-view-byte-length@1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + + /data-view-byte-offset@1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + + /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: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + dev: true + + /debug@4.3.6: + resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + + /deep-equal@2.2.3: + resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.1 + call-bind: 1.0.7 + es-get-iterator: 1.1.3 + get-intrinsic: 1.2.4 + is-arguments: 1.1.1 + is-array-buffer: 3.0.4 + is-date-object: 1.0.5 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.3 + isarray: 2.0.5 + object-is: 1.1.6 + object-keys: 1.1.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.2 + side-channel: 1.0.6 + which-boxed-primitive: 1.0.2 + which-collection: 1.0.2 + which-typed-array: 1.1.15 + dev: true + + /deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + dev: true + + /define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + dev: true + + /define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + dev: true + + /detect-node-es@1.1.0: + resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + dev: false + + /didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + + /dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + dependencies: + path-type: 4.0.0 + dev: true + + /dlv@1.1.3: + 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'} + dependencies: + esutils: 2.0.3 + dev: true + + /eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + /effect@3.4.5: + resolution: {integrity: sha512-aTonOH68tUttSdYwMkiuky3hjgn3pu7yInNaE8rU2EDKQ8zr9Me78WcvWBQKe4u1gvbBH77y9dAKqn98lNIfNQ==} + dev: false + + /electron-to-chromium@1.4.827: + resolution: {integrity: sha512-VY+J0e4SFcNfQy19MEoMdaIcZLmDCprqvBtkii1WTCTQHpRvf5N8+3kTYCgL/PcntvwQvmMJWTuDPsq+IlhWKQ==} + + /emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + /emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + /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 + + /es-abstract@1.23.3: + resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.1 + arraybuffer.prototype.slice: 1.0.3 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + data-view-buffer: 1.0.1 + data-view-byte-length: 1.0.1 + data-view-byte-offset: 1.0.0 + es-define-property: 1.0.0 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-set-tostringtag: 2.0.3 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.4 + get-symbol-description: 1.0.2 + globalthis: 1.0.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + internal-slot: 1.0.7 + is-array-buffer: 3.0.4 + is-callable: 1.2.7 + is-data-view: 1.0.1 + is-negative-zero: 2.0.3 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.3 + is-string: 1.0.7 + is-typed-array: 1.1.13 + is-weakref: 1.0.2 + object-inspect: 1.13.2 + object-keys: 1.1.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.2 + safe-array-concat: 1.1.2 + safe-regex-test: 1.0.3 + string.prototype.trim: 1.2.9 + string.prototype.trimend: 1.0.8 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.2 + typed-array-byte-length: 1.0.1 + typed-array-byte-offset: 1.0.2 + typed-array-length: 1.0.6 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.15 + dev: true + + /es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.4 + dev: true + + /es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + dev: true + + /es-get-iterator@1.1.3: + resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + has-symbols: 1.0.3 + is-arguments: 1.1.1 + is-map: 2.0.3 + is-set: 2.0.3 + is-string: 1.0.7 + isarray: 2.0.5 + stop-iteration-iterator: 1.0.0 + dev: true + + /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: true + + /es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.4 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + dev: true + + /es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + dependencies: + hasown: 2.0.2 + dev: true + + /es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + dev: true + + /escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + engines: {node: '>=6'} + + /escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + /escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + dev: true + + /eslint-config-next@14.2.5(eslint@8.57.0)(typescript@5.5.4): + resolution: {integrity: sha512-zogs9zlOiZ7ka+wgUnmcM0KBEDjo4Jis7kxN1jvC0N4wynQ2MIx/KBkg4mVF63J5EK4W0QMCn7xO3vNisjaAoA==} + peerDependencies: + eslint: ^7.23.0 || ^8.0.0 + typescript: '>=3.3.1' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@next/eslint-plugin-next': 14.2.5 + '@rushstack/eslint-patch': 1.10.3 + '@typescript-eslint/parser': 7.2.0(eslint@8.57.0)(typescript@5.5.4) + eslint: 8.57.0 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.2.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@7.18.0)(eslint@8.57.0) + eslint-plugin-jsx-a11y: 6.9.0(eslint@8.57.0) + eslint-plugin-react: 7.35.0(eslint@8.57.0) + eslint-plugin-react-hooks: 4.6.2(eslint@8.57.0) + typescript: 5.5.4 + 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.15.0 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.2.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.6 + enhanced-resolve: 5.17.0 + eslint: 8.57.0 + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.2.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@7.18.0)(eslint@8.57.0) + fast-glob: 3.3.2 + get-tsconfig: 4.7.6 + is-core-module: 2.15.0 + 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@7.18.0)(eslint-import-resolver-node@0.3.9)(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': 7.18.0(eslint@8.57.0)(typescript@5.5.4) + debug: 3.2.7 + eslint: 8.57.0 + eslint-import-resolver-node: 0.3.9 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-module-utils@2.8.1(@typescript-eslint/parser@7.2.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': 7.2.0(eslint@8.57.0)(typescript@5.5.4) + 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@7.2.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@7.18.0)(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': 7.18.0(eslint@8.57.0)(typescript@5.5.4) + 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@7.18.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) + hasown: 2.0.2 + is-core-module: 2.15.0 + 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-jsx-a11y@6.9.0(eslint@8.57.0): + resolution: {integrity: sha512-nOFOCaJG2pYqORjK19lqPqxMO/JpvdCZdPtNdxY3kvom3jTvkAbOvQvD8wuD0G8BYR0IGAGYDlzqWJOh/ybn2g==} + engines: {node: '>=4.0'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + aria-query: 5.1.3 + array-includes: 3.1.8 + array.prototype.flatmap: 1.3.2 + ast-types-flow: 0.0.8 + axe-core: 4.9.1 + axobject-query: 3.1.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.fromentries: 2.0.8 + safe-regex-test: 1.0.3 + string.prototype.includes: 2.0.0 + 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.35.0(eslint@8.57.0): + resolution: {integrity: sha512-v501SSMOWv8gerHkk+IIQBkcGRGrO2nfybfj5pLxuJNFTPxxA3PSryhXTK+9pNbtkggheDdsC0E9Q8CuPk6JKA==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 + dependencies: + array-includes: 3.1.8 + array.prototype.findlast: 1.2.5 + array.prototype.flatmap: 1.3.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 + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.2 + object.entries: 1.1.8 + object.fromentries: 2.0.8 + 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 + string.prototype.repeat: 1.0.0 + dev: true + + /eslint-plugin-tailwindcss@3.17.4(tailwindcss@3.4.7): + resolution: {integrity: sha512-gJAEHmCq2XFfUP/+vwEfEJ9igrPeZFg+skeMtsxquSQdxba9XRk5bn0Bp9jxG1VV9/wwPKi1g3ZjItu6MIjhNg==} + engines: {node: '>=18.12.0'} + peerDependencies: + tailwindcss: ^3.4.0 + dependencies: + fast-glob: 3.3.2 + postcss: 8.4.41 + tailwindcss: 3.4.7 + 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} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + dev: true + + /eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /eslint@8.57.0: + resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/regexpp': 4.10.0 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.57.0 + '@humanwhocodes/config-array': 0.11.14 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.24.0 + graphemer: 1.4.0 + ignore: 5.3.1 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.3 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + dev: true + + /espree@9.6.1: + 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) + eslint-visitor-keys: 3.4.3 + dev: true + + /esquery@1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} + dependencies: + estraverse: 5.3.0 + dev: true + + /esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + dependencies: + estraverse: 5.3.0 + dev: true + + /estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + dev: true + + /esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + dev: true + + /fast-check@3.19.0: + resolution: {integrity: sha512-CO2JX/8/PT9bDGO1iXa5h5ey1skaKI1dvecERyhH4pp3PGjwd3KIjMAXEg79Ps9nclsdt4oPbfqiAnLU0EwrAQ==} + engines: {node: '>=8.0.0'} + dependencies: + pure-rand: 6.1.0 + dev: false + + /fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + dev: true + + /fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.7 + + /fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + dev: true + + /fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + dev: true + + /fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + dependencies: + reusify: 1.0.4 + + /file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flat-cache: 3.2.0 + dev: true + + /file-selector@0.6.0: + resolution: {integrity: sha512-QlZ5yJC0VxHxQQsQhXvBaC7VRJ2uaxTf+Tfpu4Z/OcVQJVpZO+DGU0rkoVW5ce2SccxugvpBJoMvUs59iILYdw==} + engines: {node: '>= 12'} + dependencies: + tslib: 2.6.3 + dev: false + + /fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + + /find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + dev: true + + /flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flatted: 3.3.1 + keyv: 4.5.4 + rimraf: 3.0.2 + dev: true + + /flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + dev: true + + /for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + dependencies: + is-callable: 1.2.7 + dev: true + + /foreground-child@3.2.1: + resolution: {integrity: sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==} + engines: {node: '>=14'} + dependencies: + cross-spawn: 7.0.3 + signal-exit: 4.1.0 + + /fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + dev: true + + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + optional: true + + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + /function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + functions-have-names: 1.2.3 + dev: true + + /functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + dev: true + + /geist@1.3.1(next@14.2.0-canary.65): + resolution: {integrity: sha512-Q4gC1pBVPN+D579pBaz0TRRnGA4p9UK6elDY/xizXdFk/g4EKR5g0I+4p/Kj6gM0SajDBZ/0FvDV9ey9ud7BWw==} + peerDependencies: + next: '>=13.2.0' + dependencies: + next: 14.2.0-canary.65(@babel/core@7.24.8)(react-dom@18.3.1)(react@18.3.1) + dev: false + + /gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + /get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + dev: true + + /get-nonce@1.0.1: + resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} + engines: {node: '>=6'} + dev: false + + /get-symbol-description@1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + dev: true + + /get-tsconfig@4.7.6: + resolution: {integrity: sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA==} + dependencies: + resolve-pkg-maps: 1.0.0 + dev: true + + /glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + + /glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.3 + + /glob@10.3.10: + resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + dependencies: + foreground-child: 3.2.1 + jackspeak: 2.3.6 + minimatch: 9.0.5 + minipass: 7.1.2 + path-scurry: 1.11.1 + dev: true + + /glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + dependencies: + foreground-child: 3.2.1 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.0 + path-scurry: 1.11.1 + + /glob@11.0.0: + resolution: {integrity: sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==} + engines: {node: 20 || >=22} + hasBin: true + dependencies: + foreground-child: 3.2.1 + jackspeak: 4.0.1 + minimatch: 10.0.1 + minipass: 7.1.2 + package-json-from-dist: 1.0.0 + path-scurry: 2.0.0 + dev: true + + /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 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + /globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.20.2 + dev: true + + /globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + dependencies: + define-properties: 1.2.1 + gopd: 1.0.1 + dev: true + + /globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.1 + merge2: 1.4.1 + slash: 3.0.0 + dev: true + + /gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + dependencies: + get-intrinsic: 1.2.4 + dev: true + + /graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + /graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + dev: true + + /has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + dev: true + + /has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + /has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + dev: true + + /has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + dependencies: + es-define-property: 1.0.0 + dev: true + + /has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + dev: true + + /has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + dev: true + + /has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + + /hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + + /ignore@5.3.1: + resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} + engines: {node: '>= 4'} + dev: true + + /import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + dev: true + + /imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + dev: true + + /inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: true + + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: true + + /internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.0.6 + dev: true + + /invariant@2.2.4: + resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + dependencies: + loose-envify: 1.4.0 + dev: false + + /is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + dev: true + + /is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + dev: true + + /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: true + + /is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.3.0 + + /is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + dev: true + + /is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + dev: true + + /is-core-module@2.15.0: + resolution: {integrity: sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==} + engines: {node: '>= 0.4'} + dependencies: + hasown: 2.0.2 + + /is-data-view@1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} + dependencies: + is-typed-array: 1.1.13 + dev: true + + /is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.2 + dev: true + + /is-extglob@2.1.1: + 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@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + /is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.2 + dev: true + + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + + /is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + dev: true + + /is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + dev: true + + /is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.2 + dev: true + + /is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + /is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + dev: true + + /is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + dev: true + + /is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + dev: true + + /is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + dev: true + + /is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.2 + dev: true + + /is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + + /is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} + dependencies: + which-typed-array: 1.1.15 + dev: true + + /is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + dev: true + + /is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + dependencies: + call-bind: 1.0.7 + dev: true + + /is-weakset@2.0.3: + resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + dev: true + + /isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + dev: true + + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + /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'} + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + dev: true + + /jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + /jackspeak@4.0.1: + resolution: {integrity: sha512-cub8rahkh0Q/bw1+GxP7aeSe29hHHn2V4m29nnDlvCdlgU+3UGxkZp7Z53jLUdpX3jdTO0nJZUDl3xvbWc2Xog==} + engines: {node: 20 || >=22} + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + dev: true + + /jiti@1.21.6: + resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} + hasBin: true + + /js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + /js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 + dev: true + + /jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + + /json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + dev: true + + /json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + dev: true + + /json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + dev: true + + /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 + + /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 + + /keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + dependencies: + json-buffer: 3.0.1 + 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 + + /levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + + /lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + + /lilconfig@3.1.2: + resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} + engines: {node: '>=14'} + + /lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + /locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + dependencies: + p-locate: 5.0.0 + dev: true + + /lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + dev: true + + /loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + dependencies: + js-tokens: 4.0.0 + + /lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + /lru-cache@11.0.0: + resolution: {integrity: sha512-Qv32eSV1RSCfhY3fpPE2GNZ8jgM9X7rdAfemLWqTUxwiyIC4jJ6Sy0fZ8H+oLWevO6i4/bizg7c8d8i6bxrzbA==} + engines: {node: 20 || >=22} + dev: true + + /lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + dependencies: + yallist: 3.1.1 + + /merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + /micromatch@4.0.7: + resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + /minimatch@10.0.1: + resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} + engines: {node: 20 || >=22} + dependencies: + brace-expansion: 2.0.1 + dev: true + + /minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + dev: true + + /minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + dev: true + + /minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + + /minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + dev: true + + /minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + /ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + /ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + dev: true + + /mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + + /nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + /natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + dev: true + + /next-themes@0.3.0(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-/QHIrsYpd6Kfk7xakK4svpDI5mmXP0gfvCoJdGpZQ2TOrQZmsW0QxjaiLn8wbIKjtm4BTSqLoix4lxYYOnLJ/w==} + peerDependencies: + react: ^16.8 || ^17 || ^18 + react-dom: ^16.8 || ^17 || ^18 + dependencies: + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + dev: false + + /next@14.2.0-canary.65(@babel/core@7.24.8)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-cB0/5sZEKMLU2IzyONSkrY8pQqFlQfTlvvLdcgT80c86E2672nz0RBnGoAydxVw7U8Lk/NKbbQ6gZ4OrAK8blA==} + engines: {node: '>=18.17.0'} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + '@playwright/test': ^1.41.2 + react: ^18.2.0 + react-dom: ^18.2.0 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@playwright/test': + optional: true + sass: + optional: true + dependencies: + '@next/env': 14.2.0-canary.65 + '@swc/helpers': 0.5.5 + busboy: 1.6.0 + caniuse-lite: 1.0.30001611 + graceful-fs: 4.2.11 + postcss: 8.4.31 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + styled-jsx: 5.1.1(@babel/core@7.24.8)(react@18.3.1) + optionalDependencies: + '@next/swc-darwin-arm64': 14.2.0-canary.65 + '@next/swc-darwin-x64': 14.2.0-canary.65 + '@next/swc-linux-arm64-gnu': 14.2.0-canary.65 + '@next/swc-linux-arm64-musl': 14.2.0-canary.65 + '@next/swc-linux-x64-gnu': 14.2.0-canary.65 + '@next/swc-linux-x64-musl': 14.2.0-canary.65 + '@next/swc-win32-arm64-msvc': 14.2.0-canary.65 + '@next/swc-win32-ia32-msvc': 14.2.0-canary.65 + '@next/swc-win32-x64-msvc': 14.2.0-canary.65 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + dev: false + + /node-releases@2.0.14: + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + + /normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + /object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + /object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + + /object-inspect@1.13.2: + resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + engines: {node: '>= 0.4'} + dev: true + + /object-is@1.1.6: + resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + dev: true + + /object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + dev: true + + /object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 + dev: true + + /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.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 + + /once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + dev: true + + /optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + engines: {node: '>= 0.8.0'} + dependencies: + '@aashutoshrathi/word-wrap': 1.2.6 + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + + /p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + dependencies: + yocto-queue: 0.1.0 + dev: true + + /p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + dependencies: + p-limit: 3.1.0 + dev: true + + /package-json-from-dist@1.0.0: + resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} + + /parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + dependencies: + callsites: 3.1.0 + dev: true + + /path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + dev: true + + /path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + dev: true + + /path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + /path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + /path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + + /path-scurry@2.0.0: + resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} + engines: {node: 20 || >=22} + dependencies: + lru-cache: 11.0.0 + minipass: 7.1.2 + dev: true + + /path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + dev: true + + /picocolors@1.0.1: + resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + /pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + + /pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + + /possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + dev: true + + /postcss-import@15.1.0(postcss@8.4.41): + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + dependencies: + postcss: 8.4.41 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.8 + + /postcss-js@4.0.1(postcss@8.4.41): + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + dependencies: + camelcase-css: 2.0.1 + postcss: 8.4.41 + + /postcss-load-config@4.0.2(postcss@8.4.41): + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + dependencies: + lilconfig: 3.1.2 + postcss: 8.4.41 + yaml: 2.5.0 + + /postcss-nested@6.2.0(postcss@8.4.41): + resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + dependencies: + postcss: 8.4.41 + postcss-selector-parser: 6.1.1 + + /postcss-selector-parser@6.1.1: + resolution: {integrity: sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + /postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + /postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.1 + source-map-js: 1.2.0 + dev: false + + /postcss@8.4.41: + resolution: {integrity: sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.1 + source-map-js: 1.2.0 + + /prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + dev: true + + /prettier-plugin-tailwindcss@0.5.14(@ianvs/prettier-plugin-sort-imports@4.3.1)(prettier@3.3.2): + resolution: {integrity: sha512-Puaz+wPUAhFp8Lo9HuciYKM2Y2XExESjeT+9NQoVFXZsPPnc9VYss2SpxdQ6vbatmt8/4+SN0oe0I1cPDABg9Q==} + engines: {node: '>=14.21.3'} + peerDependencies: + '@ianvs/prettier-plugin-sort-imports': '*' + '@prettier/plugin-pug': '*' + '@shopify/prettier-plugin-liquid': '*' + '@trivago/prettier-plugin-sort-imports': '*' + '@zackad/prettier-plugin-twig-melody': '*' + prettier: ^3.0 + prettier-plugin-astro: '*' + prettier-plugin-css-order: '*' + prettier-plugin-import-sort: '*' + prettier-plugin-jsdoc: '*' + prettier-plugin-marko: '*' + prettier-plugin-organize-attributes: '*' + prettier-plugin-organize-imports: '*' + prettier-plugin-sort-imports: '*' + prettier-plugin-style-order: '*' + prettier-plugin-svelte: '*' + peerDependenciesMeta: + '@ianvs/prettier-plugin-sort-imports': + optional: true + '@prettier/plugin-pug': + optional: true + '@shopify/prettier-plugin-liquid': + optional: true + '@trivago/prettier-plugin-sort-imports': + optional: true + '@zackad/prettier-plugin-twig-melody': + optional: true + prettier-plugin-astro: + optional: true + prettier-plugin-css-order: + optional: true + prettier-plugin-import-sort: + optional: true + prettier-plugin-jsdoc: + optional: true + prettier-plugin-marko: + optional: true + prettier-plugin-organize-attributes: + optional: true + prettier-plugin-organize-imports: + optional: true + prettier-plugin-sort-imports: + optional: true + prettier-plugin-style-order: + optional: true + prettier-plugin-svelte: + optional: true + dependencies: + '@ianvs/prettier-plugin-sort-imports': 4.3.1(prettier@3.3.2) + prettier: 3.3.2 + dev: true + + /prettier@3.3.2: + resolution: {integrity: sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==} + engines: {node: '>=14'} + hasBin: true + dev: true + + /prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + + /punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + dev: true + + /pure-rand@6.1.0: + resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} + dev: false + + /queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + /react-dom@18.3.1(react@18.3.1): + resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} + peerDependencies: + react: ^18.3.1 + dependencies: + loose-envify: 1.4.0 + react: 18.3.1 + scheduler: 0.23.2 + dev: false + + /react-dropzone@14.2.3(react@18.3.1): + resolution: {integrity: sha512-O3om8I+PkFKbxCukfIR3QAGftYXDZfOE2N1mr/7qebQJHs7U+/RSL/9xomJNpRg9kM5h9soQSdf0Gc7OHF5Fug==} + engines: {node: '>= 10.13'} + peerDependencies: + react: '>= 16.8 || 18.0.0' + dependencies: + attr-accept: 2.2.2 + file-selector: 0.6.0 + prop-types: 15.8.1 + react: 18.3.1 + dev: false + + /react-hook-form@7.52.2(react@18.3.1): + resolution: {integrity: sha512-pqfPEbERnxxiNMPd0bzmt1tuaPcVccywFDpyk2uV5xCIBphHV5T8SVnX9/o3kplPE1zzKt77+YIoq+EMwJp56A==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^16.8.0 || ^17 || ^18 || ^19 + dependencies: + react: 18.3.1 + dev: false + + /react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + /react-remove-scroll-bar@2.3.6(@types/react@18.3.3)(react@18.3.1): + resolution: {integrity: sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.3.3 + react: 18.3.1 + react-style-singleton: 2.2.1(@types/react@18.3.3)(react@18.3.1) + tslib: 2.6.3 + dev: false + + /react-remove-scroll@2.5.7(@types/react@18.3.3)(react@18.3.1): + resolution: {integrity: sha512-FnrTWO4L7/Bhhf3CYBNArEG/yROV0tKmTv7/3h9QCFvH6sndeFf1wPqOcbFVu5VAulS5dV1wGT3GZZ/1GawqiA==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.3.3 + react: 18.3.1 + react-remove-scroll-bar: 2.3.6(@types/react@18.3.3)(react@18.3.1) + react-style-singleton: 2.2.1(@types/react@18.3.3)(react@18.3.1) + tslib: 2.6.3 + use-callback-ref: 1.3.2(@types/react@18.3.3)(react@18.3.1) + use-sidecar: 1.1.2(@types/react@18.3.3)(react@18.3.1) + dev: false + + /react-style-singleton@2.2.1(@types/react@18.3.3)(react@18.3.1): + resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.3.3 + get-nonce: 1.0.1 + invariant: 2.2.4 + react: 18.3.1 + tslib: 2.6.3 + dev: false + + /react@18.3.1: + resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} + engines: {node: '>=0.10.0'} + dependencies: + loose-envify: 1.4.0 + dev: false + + /read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + dependencies: + pify: 2.3.0 + + /readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + + /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 + + /regexp.prototype.flags@1.5.2: + resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-errors: 1.3.0 + set-function-name: 2.0.2 + dev: true + + /resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + dev: true + + /resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + dev: true + + /resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + dependencies: + is-core-module: 2.15.0 + 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.15.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + /rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + dependencies: + glob: 7.2.3 + dev: true + + /rimraf@6.0.1: + resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==} + engines: {node: 20 || >=22} + hasBin: true + dependencies: + glob: 11.0.0 + package-json-from-dist: 1.0.0 + dev: true + + /run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + + /safe-array-concat@1.1.2: + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} + engines: {node: '>=0.4'} + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + has-symbols: 1.0.3 + isarray: 2.0.5 + dev: true + + /safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-regex: 1.1.4 + dev: true + + /scheduler@0.23.2: + resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + dependencies: + loose-envify: 1.4.0 + dev: false + + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + /semver@7.6.2: + resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} + engines: {node: '>=10'} + hasBin: true + dev: true + + /semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + dev: true + + /set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + dev: true + + /set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + dev: true + + /shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + dependencies: + shebang-regex: 3.0.0 + + /shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + /side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.2 + dev: true + + /signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + /slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + dev: true + + /sonner@1.5.0(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-FBjhG/gnnbN6FY0jaNnqZOMmB73R+5IiyYAw8yBj7L54ER7HB3fOSE5OFiQiE2iXWxeXKvg6fIP4LtVppHEdJA==} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + dependencies: + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + dev: false + + /source-map-js@1.2.0: + resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} + engines: {node: '>=0.10.0'} + + /std-env@3.7.0: + resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} + dev: false + + /stop-iteration-iterator@1.0.0: + resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} + engines: {node: '>= 0.4'} + dependencies: + internal-slot: 1.0.7 + dev: true + + /streamsearch@1.1.0: + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} + dev: false + + /string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + /string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + + /string.prototype.includes@2.0.0: + resolution: {integrity: sha512-E34CkBgyeqNDcrbU76cDjL5JLcVrtSdYq0MEh/B10r17pRP4ciHLwTgnuLV8Ay6cgEMLkcBkFCKyFZ43YldYzg==} + dependencies: + define-properties: 1.2.1 + es-abstract: 1.23.3 + 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.repeat@1.0.0: + resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} + dependencies: + define-properties: 1.2.1 + es-abstract: 1.23.3 + dev: true + + /string.prototype.trim@1.2.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} + 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 + + /string.prototype.trimend@1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + dev: true + + /string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + dev: true + + /strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + + /strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + dependencies: + ansi-regex: 6.0.1 + + /strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + dev: true + + /strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + dev: true + + /styled-jsx@5.1.1(@babel/core@7.24.8)(react@18.3.1): + resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true + dependencies: + '@babel/core': 7.24.8 + client-only: 0.0.1 + react: 18.3.1 + dev: false + + /sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + commander: 4.1.1 + glob: 10.4.5 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.6 + ts-interface-checker: 0.1.13 + + /supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + dependencies: + has-flag: 3.0.0 + + /supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + dev: true + + /supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + /tailwind-merge@2.4.0: + resolution: {integrity: sha512-49AwoOQNKdqKPd9CViyH5wJoSKsCDjUlzL8DxuGp3P1FsGY36NJDAa18jLZcaHAUUuTj+JB8IAo8zWgBNvBF7A==} + dev: false + + /tailwindcss-animate@1.0.7(tailwindcss@3.4.7): + resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} + peerDependencies: + tailwindcss: '>=3.0.0 || insiders' + dependencies: + tailwindcss: 3.4.7 + dev: false + + /tailwindcss@3.4.7: + resolution: {integrity: sha512-rxWZbe87YJb4OcSopb7up2Ba4U82BoiSGUdoDr3Ydrg9ckxFS/YWsvhN323GMcddgU65QRy7JndC7ahhInhvlQ==} + engines: {node: '>=14.0.0'} + hasBin: true + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.6.0 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.2 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.21.6 + lilconfig: 2.1.0 + micromatch: 4.0.7 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.0.1 + postcss: 8.4.41 + postcss-import: 15.1.0(postcss@8.4.41) + postcss-js: 4.0.1(postcss@8.4.41) + postcss-load-config: 4.0.2(postcss@8.4.41) + postcss-nested: 6.2.0(postcss@8.4.41) + postcss-selector-parser: 6.1.1 + resolve: 1.22.8 + sucrase: 3.35.0 + transitivePeerDependencies: + - ts-node + + /tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + dev: true + + /text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + dev: true + + /thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + dependencies: + thenify: 3.3.1 + + /thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + dependencies: + any-promise: 1.3.0 + + /to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + + /to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + + /ts-api-utils@1.3.0(typescript@5.5.4): + resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.0' + dependencies: + typescript: 5.5.4 + dev: true + + /ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + + /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@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + dev: false + + /tslib@2.6.3: + resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} + dev: false + + /type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + dev: true + + /type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + dev: true + + /typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-typed-array: 1.1.13 + dev: true + + /typed-array-byte-length@1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + dev: true + + /typed-array-byte-offset@1.0.2: + resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + dev: true + + /typed-array-length@1.0.6: + resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + possible-typed-array-names: 1.0.0 + dev: true + + /typescript@5.5.4: + resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} + engines: {node: '>=14.17'} + hasBin: true + + /unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + dependencies: + call-bind: 1.0.7 + has-bigints: 1.0.2 + has-symbols: 1.0.3 + which-boxed-primitive: 1.0.2 + dev: true + + /undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + dev: true + + /update-browserslist-db@1.1.0(browserslist@4.23.2): + resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.23.2 + escalade: 3.1.2 + picocolors: 1.0.1 + + /uploadthing@6.13.2(next@14.2.0-canary.65)(tailwindcss@3.4.7): + resolution: {integrity: sha512-hrxwOgqKs8siczPloop72drRBiUYaFDHMp45OR/sSAaAbOPyGBmBL88Bi4UWCvgC+aBWCLRxtMEGeoqrfu+OMg==} + engines: {node: '>=18.13.0'} + peerDependencies: + '@effect/platform': '*' + express: '*' + fastify: '*' + h3: '*' + next: '*' + tailwindcss: '*' + peerDependenciesMeta: + '@effect/platform': + optional: true + express: + optional: true + fastify: + optional: true + h3: + optional: true + next: + optional: true + tailwindcss: + optional: true + dependencies: + '@effect/schema': 0.68.12(effect@3.4.5) + '@uploadthing/mime-types': 0.2.10 + '@uploadthing/shared': 6.7.8 + consola: 3.2.3 + effect: 3.4.5 + next: 14.2.0-canary.65(@babel/core@7.24.8)(react-dom@18.3.1)(react@18.3.1) + std-env: 3.7.0 + tailwindcss: 3.4.7 + dev: false + + /uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + dependencies: + punycode: 2.3.1 + dev: true + + /use-callback-ref@1.3.2(@types/react@18.3.3)(react@18.3.1): + resolution: {integrity: sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.3.3 + react: 18.3.1 + tslib: 2.6.3 + dev: false + + /use-sidecar@1.1.2(@types/react@18.3.3)(react@18.3.1): + resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.9.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.3.3 + detect-node-es: 1.1.0 + react: 18.3.1 + tslib: 2.6.3 + dev: false + + /util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + /which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + dependencies: + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.7 + is-string: 1.0.7 + is-symbol: 1.0.4 + dev: true + + /which-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==} + engines: {node: '>= 0.4'} + dependencies: + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.3 + dev: true + + /which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.2 + dev: true + + /which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + + /wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + /wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + + /wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + dev: true + + /yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + /yaml@2.5.0: + resolution: {integrity: sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==} + engines: {node: '>= 14'} + hasBin: true + + /yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + dev: true + + /zod@3.23.8: + resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} + dev: false diff --git a/postcss.config.cjs b/postcss.config.cjs new file mode 100644 index 0000000..4cdb2f4 --- /dev/null +++ b/postcss.config.cjs @@ -0,0 +1,7 @@ +const config = { + plugins: { + tailwindcss: {}, + }, +}; + +module.exports = config; diff --git a/prettier.config.js b/prettier.config.js new file mode 100644 index 0000000..16b2221 --- /dev/null +++ b/prettier.config.js @@ -0,0 +1,39 @@ +/** @type {import('prettier').Config & import('prettier-plugin-tailwindcss').PluginOptions} */ +const config = { + endOfLine: "lf", + semi: false, + singleQuote: false, + tabWidth: 2, + trailingComma: "es5", + importOrder: [ + "^(react/(.*)$)|^(react$)", + "^(next/(.*)$)|^(next$)", + "", + "", + "^types$", + "^@/types/(.*)$", + "^@/config/(.*)$", + "^@/lib/(.*)$", + "^@/hooks/(.*)$", + "^@/components/ui/(.*)$", + "^@/components/(.*)$", + "^@/styles/(.*)$", + "^@/app/(.*)$", + "", + "^[./]", + ], + importOrderSeparation: false, + importOrderSortSpecifiers: true, + importOrderBuiltinModulesToTop: true, + importOrderParserPlugins: ["typescript", "jsx", "decorators-legacy"], + importOrderMergeDuplicateImports: true, + importOrderCombineTypeAndValueImports: true, + tailwindAttributes: ["tw"], + tailwindFunctions: ["cva"], + plugins: [ + "@ianvs/prettier-plugin-sort-imports", + "prettier-plugin-tailwindcss", + ], +}; + +export default config; diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..b5336a48e6e7341e6e866c5f477d1a006dc6bf9e GIT binary patch literal 23600 zcmeI4YmXFF5QckMt_#9~A|eR0un<@-0Td&mM&yGDL5La*i5i4>L8E>%(V+2{5q^?? z!ER>HQ`Oydy3aY?Jv$3Mf%G$Vs@|$o)6>(}&9a4TF zKg<4m_B6L%y0q?b`nly`mYvD{@~}K=I+8Co#VeoB^xtjhhAtfID%1d1b*N@D#yK!} z14@QRPE;>VwZegct&j;zCFe!c2jiPMbtw>+9Gnxjf1rHjk{8xxNJDMDdJq=5I^ksZ z;MZyd{u-)I`aOORAPrZvZ^3#H)=n5j@O~-q8$2{<3CDUIR)hJM8M6srVBHJ-2IZTI z`ioHw+6{ZligsHERT+^(&}&{F`=clDQx}Nk4%9n*j$%ty&$m-J--U*Qw~*cj{S5&- zUAs2xviLEZqF~D$OqSbISAMd4F{)u zRru`TrQEV42tNjG6x_Ay^V!0StWBHHeNZyUY9)Is$zmV*CR??KXYfxxTqE~9>#bl< zln%~2s)E*gyj!6(O}y=WYKALt!YZM#;n%XmhTjw(`1G{B64UUuG{sU`Ps}Kt#bSa! zgnVFyS8cx7y1h1$LJBvTjQ42Mr6y(z)BrB3Y1t5788Ro)BwZb==$UV;G1hxC&@^@` z8AUk`!c+&V(5kH-<+Jot_|HCh?9~db_c*sga@8oGfMSUxiEK-Y9C zta5mL4_gRmu_g}Dn)-O>gT$AR57;8%um;7#-ll2kv2bB?ii8JkB=H6=yIQck2br+X z1%xb31=DCwu1JCRE+`7lyE=(VI@ln(6}&Sk&1R`p$8;!;?UP@oqG@cLLy@1T#QnoO zel>L-B0_X15cPD<&2#>FANi z4!n#VC^k98W$N$p|Kk;+yb0rL?7-N8u> zC0*N2##f+QjdY#SpvyF_KB6YjPtZUh7m#Vb8pd&yW@f| z4R>_=d`y6x62cS<+)nFD=ChM%sBWGmLoEDBK=8UkM0!>vw)k4sWGA}kb{09&{tF6$ zNmISnScqt|PyPr?{0qq;TPIgIpODXlh1dz8lD?5_y})VJMBV|~R^&rpS|{t@4XdIy z8;WuuizyI-ZgZ>Ff%ZV1a{0&;y$;nBkP3t!oI=bJ?ScCeQ*uD&J3THQCFK@GAj4JoyXP%bdp#m@4(F?j~pc4#O4FJd9k!dfV-R`$J7@b zk8Py(r-)fKRUQ~8bs&_Uqaa4kamy|%g9#uXWYWQ*>n)iF>?=81o_NJC9EuZh#U=Xn z7lHBsE2cnLb6Q=NvajO*~BQ$s(JFmBR@A3 z(FIDEjS!M=!S<#$#EzjqaNAs66I4ppIUETR%fu5b8r^2cYj8NvIIGsRd8Rr z%u>!K$irt0c7fvWJ9%FS%kwPOMbH)eUS5(*XzZ63ZKX5mTU8`9cps$0=^iw~KpiOk zO{>zUEyroSq<+KthNAos8eujaIHErfQpz@39=v0)3+&P9O6%G9(Xaodzb@@fj;(zy zQMv~80=xAJfZ}~3F~N?M&PZ@bGy_OwQ5DPS#1LJ<_wM%{`dVtJ*!&j4VJq eAi2Y^nY=fz>F@5yV+Y0#j2##|Fm_;GJMceGE{$0L literal 0 HcmV?d00001 diff --git a/public/images/screenshot.png b/public/images/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..40db38cc8c2f1662a7b369336b248a796d849e96 GIT binary patch literal 79764 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

s({&Ree@m?S3B5Pk8n#omCd;%_&V(M{K*=J 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 U%yWlX=hin}w6eD>wYVPlUloE)jsO4v literal 0 HcmV?d00001 diff --git a/public/site.webmanifest b/public/site.webmanifest new file mode 100644 index 0000000..2a02300 --- /dev/null +++ b/public/site.webmanifest @@ -0,0 +1,14 @@ +{ + "name": "File Uploader", + "short_name": "File Uploader", + "icons": [ + { + "src": "/icon.png", + "sizes": "32x32", + "type": "image/png" + } + ], + "theme_color": "#ffffff", + "background_color": "#ffffff", + "display": "standalone" +} diff --git a/renovate.json b/renovate.json new file mode 100644 index 0000000..c5c1d0d --- /dev/null +++ b/renovate.json @@ -0,0 +1,5 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "extends": ["config:base"], + "automerge": true +} diff --git a/reset.d.ts b/reset.d.ts new file mode 100644 index 0000000..e547e84 --- /dev/null +++ b/reset.d.ts @@ -0,0 +1 @@ +import "@total-typescript/ts-reset" diff --git a/src/app/_components/basic-uploader-demo.tsx b/src/app/_components/basic-uploader-demo.tsx new file mode 100644 index 0000000..86600ec --- /dev/null +++ b/src/app/_components/basic-uploader-demo.tsx @@ -0,0 +1,26 @@ +"use client" + +import { useUploadFile } from "@/hooks/use-upload-file" +import { FileUploader } from "@/components/file-uploader" + +import { UploadedFilesCard } from "./uploaded-files-card" + +export function BasicUploaderDemo() { + const { onUpload, progresses, uploadedFiles, isUploading } = useUploadFile( + "imageUploader", + { defaultUploadedFiles: [] } + ) + + return ( +

+ ) +} diff --git a/src/app/_components/dialog-uploader-demo.tsx b/src/app/_components/dialog-uploader-demo.tsx new file mode 100644 index 0000000..fe93881 --- /dev/null +++ b/src/app/_components/dialog-uploader-demo.tsx @@ -0,0 +1,41 @@ +"use client" + +import * as React from "react" + +import { Button } from "@/components/ui/button" +import { + Dialog, + DialogContent, + DialogDescription, + DialogHeader, + DialogTitle, + DialogTrigger, +} from "@/components/ui/dialog" +import { FileUploader } from "@/components/file-uploader" + +export function DialogUploaderDemo() { + const [files, setFiles] = React.useState([]) + + return ( + + + + + + + Upload files + + Drag and drop your files here or click to browse. + + + + + + ) +} diff --git a/src/app/_components/react-hook-form-demo.tsx b/src/app/_components/react-hook-form-demo.tsx new file mode 100644 index 0000000..edd537f --- /dev/null +++ b/src/app/_components/react-hook-form-demo.tsx @@ -0,0 +1,99 @@ +"use client" + +import * as React from "react" +import { zodResolver } from "@hookform/resolvers/zod" +import { useForm } from "react-hook-form" +import { toast } from "sonner" +import { z } from "zod" + +import { getErrorMessage } from "@/lib/handle-error" +import { useUploadFile } from "@/hooks/use-upload-file" +import { Button } from "@/components/ui/button" +import { + Form, + FormControl, + FormField, + FormItem, + FormLabel, + FormMessage, +} from "@/components/ui/form" +import { FileUploader } from "@/components/file-uploader" + +import { UploadedFilesCard } from "./uploaded-files-card" + +const schema = z.object({ + images: z.array(z.instanceof(File)), +}) + +type Schema = z.infer + +export function ReactHookFormDemo() { + const [loading, setLoading] = React.useState(false) + const { onUpload, progresses, uploadedFiles, isUploading } = useUploadFile( + "imageUploader", + { defaultUploadedFiles: [] } + ) + const form = useForm({ + resolver: zodResolver(schema), + defaultValues: { + images: [], + }, + }) + + function onSubmit(input: Schema) { + setLoading(true) + + toast.promise(onUpload(input.images), { + loading: "Uploading images...", + success: () => { + form.reset() + setLoading(false) + return "Images uploaded" + }, + error: (err) => { + setLoading(false) + return getErrorMessage(err) + }, + }) + } + + return ( +
+ + ( +
+ + Images + + + + + + {uploadedFiles.length > 0 ? ( + + ) : null} +
+ )} + /> + + + + ) +} diff --git a/src/app/_components/uploaded-files-card.tsx b/src/app/_components/uploaded-files-card.tsx new file mode 100644 index 0000000..ae0974e --- /dev/null +++ b/src/app/_components/uploaded-files-card.tsx @@ -0,0 +1,54 @@ +import Image from "next/image" +import type { UploadedFile } from "@/types" + +import { + Card, + CardContent, + CardDescription, + CardHeader, + CardTitle, +} from "@/components/ui/card" +import { ScrollArea, ScrollBar } from "@/components/ui/scroll-area" +import { EmptyCard } from "@/components/empty-card" + +interface UploadedFilesCardProps { + uploadedFiles: UploadedFile[] +} + +export function UploadedFilesCard({ uploadedFiles }: UploadedFilesCardProps) { + return ( + + + Uploaded files + View the uploaded files here + + + {uploadedFiles.length > 0 ? ( + +
+ {uploadedFiles.map((file) => ( +
+ {file.name} +
+ ))} +
+ +
+ ) : ( + + )} +
+
+ ) +} diff --git a/src/app/_components/variant-tabs.tsx b/src/app/_components/variant-tabs.tsx new file mode 100644 index 0000000..12ce031 --- /dev/null +++ b/src/app/_components/variant-tabs.tsx @@ -0,0 +1,26 @@ +import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs" + +import { BasicUploaderDemo } from "./basic-uploader-demo" +import { DialogUploaderDemo } from "./dialog-uploader-demo" +import { ReactHookFormDemo } from "./react-hook-form-demo" + +export function VariantTabs() { + return ( + + + Basic + React hook form + Dialog + + + + + + + + + + + + ) +} diff --git a/src/app/api/uploadthing/core.ts b/src/app/api/uploadthing/core.ts new file mode 100644 index 0000000..e799de9 --- /dev/null +++ b/src/app/api/uploadthing/core.ts @@ -0,0 +1,49 @@ +import { createUploadthing, type FileRouter } from "uploadthing/next" +import { UploadThingError } from "uploadthing/server" + +import { ratelimit } from "@/lib/rate-limit" + +const f = createUploadthing() + +// Fake auth function +async function auth(req: Request) { + await new Promise((resolve) => setTimeout(resolve, 100)) + return { id: "fakeId" } +} + +// FileRouter for your app, can contain multiple FileRoutes +export const ourFileRouter = { + // Define as many FileRoutes as you like, each with a unique routeSlug + imageUploader: f({ image: { maxFileSize: "4MB", maxFileCount: 8 } }) + // Set permissions and file types for this FileRoute + .middleware(async ({ req }) => { + // Rate limit the upload + const ip = req.ip ?? "127.0.0.1" + + const { success } = await ratelimit.limit(ip) + + if (!success) { + throw new UploadThingError("Rate limit exceeded") + } + + // This code runs on your server before upload + const user = await auth(req) + + // If you throw, the user will not be able to upload + if (!user) throw new UploadThingError("Unauthorized") + + // Whatever is returned here is accessible in onUploadComplete as `metadata` + return { userId: user.id } + }) + .onUploadComplete(async ({ metadata, file }) => { + // This code RUNS ON YOUR SERVER after upload + console.log("Upload complete for userId:", metadata.userId) + + console.log("file url", file.url) + + // !!! Whatever is returned here is sent to the clientside `onClientUploadComplete` callback + return { uploadedBy: metadata.userId } + }), +} satisfies FileRouter + +export type OurFileRouter = typeof ourFileRouter diff --git a/src/app/api/uploadthing/route.ts b/src/app/api/uploadthing/route.ts new file mode 100644 index 0000000..ac1cd1a --- /dev/null +++ b/src/app/api/uploadthing/route.ts @@ -0,0 +1,11 @@ +import { createRouteHandler } from "uploadthing/next" + +import { ourFileRouter } from "./core" + +// Export routes for Next App Router +export const { GET, POST } = createRouteHandler({ + router: ourFileRouter, + + // Apply an (optional) custom config: + // config: { ... }, +}) diff --git a/src/app/icon.tsx b/src/app/icon.tsx new file mode 100644 index 0000000..3211926 --- /dev/null +++ b/src/app/icon.tsx @@ -0,0 +1,35 @@ +import { ImageResponse } from "next/og" + +// Route segment config +export const runtime = "edge" + +// Image metadata +export const size = { + width: 32, + height: 32, +} +export const contentType = "image/png" + +// Image generation +export default function Icon() { + return new ImageResponse( + ( + // ImageResponse JSX element +
+ F +
+ ), + // ImageResponse options + { + // For convenience, we can re-use the exported icons size metadata + // config to also set the ImageResponse's width and height. + ...size, + } + ) +} diff --git a/src/app/layout.tsx b/src/app/layout.tsx new file mode 100644 index 0000000..2295941 --- /dev/null +++ b/src/app/layout.tsx @@ -0,0 +1,94 @@ +import { siteConfig } from "@/config/site" +import { cn } from "@/lib/utils" +import { SiteHeader } from "@/components/layouts/site-header" +import { ThemeProvider } from "@/components/providers" +import { TailwindIndicator } from "@/components/tailwind-indicator" + +import "@/styles/globals.css" + +import type { Metadata, Viewport } from "next" +import { GeistMono } from "geist/font/mono" +import { GeistSans } from "geist/font/sans" + +import { Toaster } from "@/components/ui/sonner" + +export const metadata: Metadata = { + metadataBase: new URL(siteConfig.url), + title: { + default: siteConfig.name, + template: `%s - ${siteConfig.name}`, + }, + description: siteConfig.description, + keywords: [ + "nextjs", + "react", + "uploader", + "file-uploader", + "file-input", + "shadcn-file-uploader", + "uploadthing", + ], + authors: [ + { + name: "Hritik-Kumar", + url: "https://www.linkedin.com/in/hritik-kumar6918/", + }, + ], + creator: "Hritik-Kumar", + openGraph: { + type: "website", + locale: "en_IN", + url: siteConfig.url, + title: siteConfig.name, + description: siteConfig.description, + siteName: siteConfig.name, + }, + twitter: { + card: "summary_large_image", + title: siteConfig.name, + description: siteConfig.description, + images: [`${siteConfig.url}/og.jpg`], + creator: "@hritik6918", + }, + icons: { + icon: "/icon.png", + }, + manifest: `${siteConfig.url}/site.webmanifest`, +} + +export const viewport: Viewport = { + colorScheme: "dark light", + themeColor: [ + { media: "(prefers-color-scheme: light)", color: "white" }, + { media: "(prefers-color-scheme: dark)", color: "black" }, + ], +} + +export default function RootLayout({ children }: React.PropsWithChildren) { + return ( + + + + +
+ +
{children}
+
+ +
+ + + + ) +} diff --git a/src/app/page.tsx b/src/app/page.tsx new file mode 100644 index 0000000..4904dff --- /dev/null +++ b/src/app/page.tsx @@ -0,0 +1,11 @@ +import { Shell } from "@/components/shell" + +import { VariantTabs } from "./_components/variant-tabs" + +export default function IndexPage() { + return ( + + + + ) +} diff --git a/src/app/robots.ts b/src/app/robots.ts new file mode 100644 index 0000000..12f59ca --- /dev/null +++ b/src/app/robots.ts @@ -0,0 +1,13 @@ +import { type MetadataRoute } from "next" + +import { siteConfig } from "@/config/site" + +export default function robots(): MetadataRoute.Robots { + return { + rules: { + userAgent: "*", + allow: "/", + }, + sitemap: `${siteConfig.url}/sitemap.xml`, + } +} diff --git a/src/app/sitemap.ts b/src/app/sitemap.ts new file mode 100644 index 0000000..09a3de7 --- /dev/null +++ b/src/app/sitemap.ts @@ -0,0 +1,12 @@ +import { type MetadataRoute } from "next" + +import { absoluteUrl } from "@/lib/utils" + +export default function sitemap(): MetadataRoute.Sitemap { + const routes = [""].map((route) => ({ + url: absoluteUrl(route), + lastModified: new Date().toISOString(), + })) + + return [...routes] +} diff --git a/src/components/empty-card.tsx b/src/components/empty-card.tsx new file mode 100644 index 0000000..9e4086a --- /dev/null +++ b/src/components/empty-card.tsx @@ -0,0 +1,39 @@ +import { ImageIcon } from "@radix-ui/react-icons" + +import { cn } from "@/lib/utils" +import { Card, CardDescription, CardTitle } from "@/components/ui/card" + +interface EmptyCardProps extends React.ComponentPropsWithoutRef { + title: string + description?: string + action?: React.ReactNode + icon?: React.ComponentType<{ className?: string }> +} + +export function EmptyCard({ + title, + description, + icon: Icon = ImageIcon, + action, + className, + ...props +}: EmptyCardProps) { + return ( + +
+
+
+ {title} + {description ? {description} : null} +
+ {action ? action : null} +
+ ) +} diff --git a/src/components/file-uploader-primitive.tsx b/src/components/file-uploader-primitive.tsx new file mode 100644 index 0000000..7d6451f --- /dev/null +++ b/src/components/file-uploader-primitive.tsx @@ -0,0 +1,396 @@ +"use client" + +import * as React from "react" +import Image from "next/image" +import { Cross2Icon, UploadIcon } from "@radix-ui/react-icons" +import { cva, type VariantProps } from "class-variance-authority" +import { + useDropzone, + type DropzoneOptions, + type DropzoneState, + type FileRejection, +} from "react-dropzone" +import { toast } from "sonner" + +import { cn, formatBytes } from "@/lib/utils" +import { useControllableState } from "@/hooks/use-controllable-state" +import { Button } from "@/components/ui/button" +import { Input } from "@/components/ui/input" +import { Progress } from "@/components/ui/progress" + +interface FileUploaderProps extends React.HTMLAttributes { + /** + * Value of the uploader. + * @type File[] + * @default undefined + * @example value={files} + */ + value?: File[] + + /** + * Function to be called when the value changes. + * @type React.Dispatch> + * @default undefined + * @example onValueChange={(files) => setFiles(files)} + */ + onValueChange?: React.Dispatch> + + /** + * Function to be called when files are uploaded. + * @type (files: File[]) => Promise + * @default undefined + * @example onUpload={(files) => uploadFiles(files)} + */ + onUpload?: (files: File[]) => Promise + + /** + * Progress of the uploaded files. + * @type Record | undefined + * @default undefined + * @example progresses={{ "file1.png": 50 }} + */ + progresses?: Record + + /** + * Options for the dropzone. + * @type DropzoneOptions | undefined + * @default undefined + * @example opts={{ maxFiles: 3, multiple: true }} + */ + opts?: DropzoneOptions +} + +interface FileUploaderContextProps extends DropzoneState { + files: File[] + maxFiles: number + maxSize: number + setFiles: (files: File[]) => void + onRemove: (index: number) => void + progresses?: Record + disabled: boolean +} + +const FileUploaderContext = + React.createContext(null) + +function useFileUploader() { + const context = React.useContext(FileUploaderContext) + + if (!context) { + throw new Error("useFileUploader must be used within a ") + } + + return context +} + +function isFileWithPreview(file: File): file is File & { preview: string } { + return "preview" in file && typeof file.preview === "string" +} + +const FileUploader = React.forwardRef( + ( + { + value: valueProp, + onValueChange, + onUpload, + progresses, + opts, + children, + className, + ...props + }, + ref + ) => { + const { + accept = { "image/*": [] }, + maxSize = 1024 * 1024 * 4, + maxFiles = 1, + multiple = false, + disabled = false, + ...dropzoneProps + } = opts ?? {} + + const [files, setFiles] = useControllableState({ + prop: valueProp, + onChange: onValueChange, + }) + + const onDrop = React.useCallback( + (acceptedFiles: File[], rejectedFiles: FileRejection[]) => { + if (!multiple && maxFiles === 1 && acceptedFiles.length > 1) { + toast.error("Cannot upload more than 1 file at a time") + return + } + + if ((files?.length ?? 0) + acceptedFiles.length > maxFiles) { + toast.error(`Cannot upload more than ${maxFiles} files`) + return + } + + const newFiles = acceptedFiles.map((file) => + Object.assign(file, { + preview: URL.createObjectURL(file), + }) + ) + + const updatedFiles = files ? [...files, ...newFiles] : newFiles + + setFiles(updatedFiles) + + if (rejectedFiles.length > 0) { + rejectedFiles.forEach(({ file }) => { + toast.error(`File ${file.name} was rejected`) + }) + } + + if ( + onUpload && + updatedFiles.length > 0 && + updatedFiles.length <= maxFiles + ) { + const target = + updatedFiles.length > 0 ? `${updatedFiles.length} files` : `file` + + toast.promise(onUpload(updatedFiles), { + loading: `Uploading ${target}...`, + success: () => { + setFiles([]) + return `${target} uploaded` + }, + error: `Failed to upload ${target}`, + }) + } + }, + + [files, maxFiles, multiple, onUpload, setFiles] + ) + + function onRemove(index: number) { + if (!files) return + const newFiles = files.filter((_, i) => i !== index) + setFiles(newFiles) + onValueChange?.(newFiles) + } + + // Revoke preview url when component unmounts + React.useEffect(() => { + return () => { + if (!files) return + files.forEach((file) => { + if (isFileWithPreview(file)) { + URL.revokeObjectURL(file.preview) + } + }) + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []) + + const isDisabled = disabled || (files?.length ?? 0) >= maxFiles + + const dropzone = useDropzone({ + onDrop, + accept, + maxSize, + maxFiles, + multiple, + disabled: isDisabled, + ...dropzoneProps, + }) + + return ( + +
+ {children} +
+
+ ) + } +) +FileUploader.displayName = "FileUploader" + +const FileUploaderContent = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ children, className, ...props }, ref) => { + return ( +
+ {children} +
+ ) +}) +FileUploaderContent.displayName = "FileUploaderContent" + +const fileUploaderInputVariants = cva( + "group relative cursor-pointer focus-visible:outline-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50", + { + variants: { + variant: { + default: + "grid h-52 w-full place-items-center rounded-lg border-2 border-dashed border-muted-foreground/25 px-5 py-2.5 text-center ring-offset-background transition hover:bg-muted/25 focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 data-[state=active]:border-muted-foreground/50", + button: + "inline-flex h-9 items-center justify-center gap-2 rounded-md bg-primary px-4 text-sm font-medium text-primary-foreground shadow hover:bg-primary/90", + headless: "", + }, + }, + defaultVariants: { + variant: "default", + }, + } +) + +const FileUploaderTrigger = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes & + VariantProps +>(({ children, className, variant, ...props }, ref) => { + const { + getRootProps, + getInputProps, + isDragActive, + isDragAccept, + isDragReject, + maxFiles, + maxSize, + disabled, + } = useFileUploader() + + return ( +
+ + {isDragActive ? ( +
+
+
+

+ Drop the files here +

+
+ ) : ( +
+
+
+
+

+ Drag {`'n'`} drop files here, or click to select files +

+

+ You can upload + {maxFiles > 1 + ? ` ${maxFiles === Infinity ? "multiple" : maxFiles} + files (up to ${formatBytes(maxSize)} each)` + : ` a file with ${formatBytes(maxSize)}`} +

+
+
+ )} + {children} +
+ ) +}) +FileUploaderTrigger.displayName = "FileUploaderTrigger" + +interface FileUploaderItemProps extends React.HTMLAttributes { + file: File + index: number + progress?: number +} + +const FileUploaderItem = React.forwardRef< + HTMLDivElement, + FileUploaderItemProps +>(({ file, index, progress, className, ...props }, ref) => { + const { onRemove } = useFileUploader() + + return ( +
+
+ {isFileWithPreview(file) ? ( + {file.name} + ) : null} +
+
+

+ {file.name} +

+

+ {formatBytes(file.size)} +

+
+ {progress ? : null} +
+
+
+ +
+
+ ) +}) +FileUploaderItem.displayName = "FileUploaderItem" + +export { + FileUploader, + FileUploaderContent, + FileUploaderItem, + FileUploaderTrigger, +} diff --git a/src/components/file-uploader.tsx b/src/components/file-uploader.tsx new file mode 100644 index 0000000..9757b6b --- /dev/null +++ b/src/components/file-uploader.tsx @@ -0,0 +1,334 @@ +"use client" + +import * as React from "react" +import Image from "next/image" +import { Cross2Icon, FileTextIcon, UploadIcon } from "@radix-ui/react-icons" +import Dropzone, { + type DropzoneProps, + type FileRejection, +} from "react-dropzone" +import { toast } from "sonner" + +import { cn, formatBytes } from "@/lib/utils" +import { useControllableState } from "@/hooks/use-controllable-state" +import { Button } from "@/components/ui/button" +import { Progress } from "@/components/ui/progress" +import { ScrollArea } from "@/components/ui/scroll-area" + +interface FileUploaderProps extends React.HTMLAttributes { + /** + * Value of the uploader. + * @type File[] + * @default undefined + * @example value={files} + */ + value?: File[] + + /** + * Function to be called when the value changes. + * @type (files: File[]) => void + * @default undefined + * @example onValueChange={(files) => setFiles(files)} + */ + onValueChange?: (files: File[]) => void + + /** + * Function to be called when files are uploaded. + * @type (files: File[]) => Promise + * @default undefined + * @example onUpload={(files) => uploadFiles(files)} + */ + onUpload?: (files: File[]) => Promise + + /** + * Progress of the uploaded files. + * @type Record | undefined + * @default undefined + * @example progresses={{ "file1.png": 50 }} + */ + progresses?: Record + + /** + * Accepted file types for the uploader. + * @type { [key: string]: string[]} + * @default + * ```ts + * { "image/*": [] } + * ``` + * @example accept={["image/png", "image/jpeg"]} + */ + accept?: DropzoneProps["accept"] + + /** + * Maximum file size for the uploader. + * @type number | undefined + * @default 1024 * 1024 * 2 // 2MB + * @example maxSize={1024 * 1024 * 2} // 2MB + */ + maxSize?: DropzoneProps["maxSize"] + + /** + * Maximum number of files for the uploader. + * @type number | undefined + * @default 1 + * @example maxFileCount={4} + */ + maxFileCount?: DropzoneProps["maxFiles"] + + /** + * Whether the uploader should accept multiple files. + * @type boolean + * @default false + * @example multiple + */ + multiple?: boolean + + /** + * Whether the uploader is disabled. + * @type boolean + * @default false + * @example disabled + */ + disabled?: boolean +} + +export function FileUploader(props: FileUploaderProps) { + const { + value: valueProp, + onValueChange, + onUpload, + progresses, + accept = { + "image/*": [], + }, + maxSize = 1024 * 1024 * 2, + maxFileCount = 1, + multiple = false, + disabled = false, + className, + ...dropzoneProps + } = props + + const [files, setFiles] = useControllableState({ + prop: valueProp, + onChange: onValueChange, + }) + + const onDrop = React.useCallback( + (acceptedFiles: File[], rejectedFiles: FileRejection[]) => { + if (!multiple && maxFileCount === 1 && acceptedFiles.length > 1) { + toast.error("Cannot upload more than 1 file at a time") + return + } + + if ((files?.length ?? 0) + acceptedFiles.length > maxFileCount) { + toast.error(`Cannot upload more than ${maxFileCount} files`) + return + } + + const newFiles = acceptedFiles.map((file) => + Object.assign(file, { + preview: URL.createObjectURL(file), + }) + ) + + const updatedFiles = files ? [...files, ...newFiles] : newFiles + + setFiles(updatedFiles) + + if (rejectedFiles.length > 0) { + rejectedFiles.forEach(({ file }) => { + toast.error(`File ${file.name} was rejected`) + }) + } + + if ( + onUpload && + updatedFiles.length > 0 && + updatedFiles.length <= maxFileCount + ) { + const target = + updatedFiles.length > 0 ? `${updatedFiles.length} files` : `file` + + toast.promise(onUpload(updatedFiles), { + loading: `Uploading ${target}...`, + success: () => { + setFiles([]) + return `${target} uploaded` + }, + error: `Failed to upload ${target}`, + }) + } + }, + + [files, maxFileCount, multiple, onUpload, setFiles] + ) + + function onRemove(index: number) { + if (!files) return + const newFiles = files.filter((_, i) => i !== index) + setFiles(newFiles) + onValueChange?.(newFiles) + } + + // Revoke preview url when component unmounts + React.useEffect(() => { + return () => { + if (!files) return + files.forEach((file) => { + if (isFileWithPreview(file)) { + URL.revokeObjectURL(file.preview) + } + }) + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []) + + const isDisabled = disabled || (files?.length ?? 0) >= maxFileCount + + return ( +
+ 1 || multiple} + disabled={isDisabled} + > + {({ getRootProps, getInputProps, isDragActive }) => ( +
+ + {isDragActive ? ( +
+
+
+

+ Drop the files here +

+
+ ) : ( +
+
+
+
+

+ Drag {`'n'`} drop files here, or click to select files +

+

+ You can upload + {maxFileCount > 1 + ? ` ${maxFileCount === Infinity ? "multiple" : maxFileCount} + files (up to ${formatBytes(maxSize)} each)` + : ` a file with ${formatBytes(maxSize)}`} +

+
+
+ )} +
+ )} +
+ {files?.length ? ( + +
+ {files?.map((file, index) => ( + onRemove(index)} + progress={progresses?.[file.name]} + /> + ))} +
+
+ ) : null} +
+ ) +} + +interface FileCardProps { + file: File + onRemove: () => void + progress?: number +} + +function FileCard({ file, progress, onRemove }: FileCardProps) { + return ( +
+
+ {isFileWithPreview(file) ? : null} +
+
+

+ {file.name} +

+

+ {formatBytes(file.size)} +

+
+ {progress ? : null} +
+
+
+ +
+
+ ) +} + +function isFileWithPreview(file: File): file is File & { preview: string } { + return "preview" in file && typeof file.preview === "string" +} + +interface FilePreviewProps { + file: File & { preview: string } +} + +function FilePreview({ file }: FilePreviewProps) { + if (file.type.startsWith("image/")) { + return ( + {file.name} + ) + } + + return ( +